cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 
yasmineelqotni
Visitor
Visitor
518 Views
Registered: ‎05-26-2020

Xst:528 - Multi-source in Unit <registre1> on signal <dout<20>>; this signal is connected to multiple drivers.

Jump to solution

Hello,

I've seen some solutions  to a similar problem I'm facing, but since I'm a beginner I did not understand what to do.

my error is : Xst:528 - Multi-source in Unit <registre1> on signal <dout<20>>; this signal is connected to multiple drivers.

and in my RTL there are some outputs linked to GND.

Thank you.

library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.numeric_std.all;

entity registre1 is generic(taille_entree : integer:=16;
taille_sortie : integer:=21);
port(clk, raz, ld : in std_logic;
din: in std_logic_vector(taille_entree-1 downto 0);
dout: out std_logic_vector(taille_sortie-1 downto 0));
end registre1;

architecture arch_registre1 of registre1 is
signal sortie : std_logic_vector(taille_sortie-1 downto 0);
begin
process(clk)
begin
if rising_edge(clk) then
if raz='1' then dout <= (others => '0');
elsif ld='1' then
sortie(taille_entree-1 downto 0) <= din;
sortie(taille_sortie-1 downto taille_entree) <= (others => din(taille_entree-1));
end if;
end if;
end process;
dout <= sortie;
end arch_registre1;
--*********************************************************************************
-- REGISTRE(sum) GENERIQUE : taille de l'entrée et taille de la sortie paramétrables
--*********************************************************************************
library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.numeric_std.all;

entity registre2 is generic(taille_entree : integer:=21;
taille_sortie : integer:=21);
port(clk, raz, ld : in std_logic;
data_in: in std_logic_vector(taille_entree-1 downto 0);
data_out: out std_logic_vector(taille_sortie-1 downto 0));
end registre2;

architecture arch_registre2 of registre2 is
signal sortie2 : std_logic_vector(taille_sortie-1 downto 0);
begin
process(clk)
begin
if rising_edge(clk) then
if raz='1' then data_out <= (others => '0');
elsif ld='1' then
sortie2(taille_entree-1 downto 0) <= data_in;
sortie2(taille_sortie-1 downto taille_entree) <= (others => data_in(taille_entree-1));
end if;
end if;
end process;
data_out <= sortie2;
end arch_registre2;

Tags (1)
0 Kudos
1 Solution

Accepted Solutions
bruce_karaffa
Scholar
Scholar
508 Views
Registered: ‎06-21-2017

The problem is that you assign dout both inside your process and outside of the process.  If you move the line:

dout <= sortie;

into the process, the error will be resolved.

View solution in original post

2 Replies
bruce_karaffa
Scholar
Scholar
509 Views
Registered: ‎06-21-2017

The problem is that you assign dout both inside your process and outside of the process.  If you move the line:

dout <= sortie;

into the process, the error will be resolved.

View solution in original post

yasmineelqotni
Visitor
Visitor
499 Views
Registered: ‎05-26-2020
Thank you so much ! Problem solved ! Finally.
0 Kudos