multi source error using Xilinx

Status
Not open for further replies.

rhajj

Newbie level 3
Joined
Aug 6, 2015
Messages
3
Helped
0
Reputation
0
Reaction score
0
Trophy points
1
Activity points
46

Code VHDL - [expand]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
 
---- Uncomment the following library declaration if instantiating
---- any Xilinx primitives in this code.
--library UNISIM;
--use UNISIM.VComponents.all;
 
entity Encoder_eight is
    Port ( message : in  STD_LOGIC_VECTOR (7 downto 0);
           clk : in  STD_LOGIC;
           codeword : out  STD_LOGIC_VECTOR (11 downto 0));
end Encoder_eight;
 
architecture Behavioral of Encoder_eight is
 
 
 
component summation is 
    port ( p1_out : in std_logic_vector ( 11 downto 0);
             p2_out : in std_logic_vector ( 11 downto 0);
             p3_out : in std_logic_vector ( 11 downto 0);
             p4_out : in std_logic_vector ( 11 downto 0);
--           CLK    : in std_logic;
             p1_sum : out std_logic;
             p2_sum : out std_logic;
             p3_sum : out std_logic;
             p4_sum : out std_logic
          );
end component;
 
component Append is 
    port ( message: in std_logic_vector ( 7 downto 0);
             p1_sum : in std_logic;
             p2_sum : in std_logic;
             p3_sum : in std_logic;
             p4_sum : in std_logic;
             codeword:out std_logic_vector ( 11 downto 0)
          );
end component;
 
 
signal p1_out , p2_out , p3_out , p4_out:  std_logic_vector (11 downto 0):=(others =>'0');
signal p1_sum , p2_sum , p3_sum , p4_sum : std_logic;
signal tmp , tmp1 , tmp2 , tmp3 : std_logic := '0';
 
 
 
begin
 
L2 : summation port map ( p1_out , p2_out , p3_out , p4_out , p1_sum , p2_sum , p3_sum , p4_sum);
L3 : Append port map ( message, p1_sum , p2_sum, p3_sum , p4_sum  , codeword );   
 
 
   p1_out <= "010101010101";
   p2_out <= "001100110011";
   p3_out <= "000011110000"; 
    p4_out <= "000000001111"; 
    
process ( p1_out , p2_out , p3_out , p4_out) 
begin 
 
 
-- for the adddition of the vectors 
 
        tmp  <= p1_out(0) XOR p1_out(1) XOR p1_out(2) XOR p1_out(3) XOR p1_out(4) XOR p1_out(5) XOR p1_out(6) XOR p1_out(7) XOR p1_out(8) XOR p1_out(9) XOR    p1_out(10) XOR p1_out(11);
        tmp1 <= p2_out(0) XOR p2_out(1) XOR p2_out(2) XOR p2_out(3) XOR p2_out(4) XOR p2_out(5) XOR p2_out(6) XOR p2_out(7) XOR p2_out(8) XOR p2_out(9) XOR p2_out(10) XOR p2_out(11);
        tmp2 <= p3_out(0) XOR p3_out(1) XOR p3_out(2) XOR p3_out(3) XOR p3_out(4) XOR p3_out(5) XOR p3_out(6) XOR p3_out(7) XOR p3_out(8) XOR p3_out(9) XOR p3_out(10) XOR p3_out(11);
        tmp3 <= p4_out(0) XOR p4_out(1) XOR p4_out(2) XOR p4_out(3) XOR p4_out(4) XOR p4_out(5) XOR p4_out(6) XOR p4_out(7) XOR p4_out(8) XOR p4_out(9) XOR p4_out(10) XOR p4_out(11);
        
 
    
    p1_sum <= tmp;
    p2_sum <= tmp1;
    p3_sum <= tmp2;
    p4_sum <= tmp3;
 
end process;
    codeword(0) <= p1_sum;
    codeword(1) <= p2_sum;
    codeword(2) <= message(0);
    codeword(3) <= p3_sum;
    codeword(4) <= message(1);
    codeword(5) <= message(2);
    codeword(6) <= message(3);
    codeword(7) <= p4_sum;
    codeword(8) <= message(4);
    codeword(9) <= message(5);
    codeword(10) <= message(6);
    codeword(11) <= message(7); 
 
 
end Behavioral;



this is giving me the following error :
please help
Code:
ERROR:Xst:528 - Multi-source in Unit <Encoder_eight> on signal <p2_sum>
ERROR:Xst:528 - Multi-source in Unit <Encoder_eight> on signal <p3_sum>
ERROR:Xst:528 - Multi-source in Unit <Encoder_eight> on signal <p4_sum>
ERROR:Xst:528 - Multi-source in Unit <Encoder_eight> on signal <p1_sum>
 
Last edited by a moderator:

Your component summation has outputs pX_sum connected to signals pX_sum. Later, you are assigning the signals pX_sum with signals tempX. So, both the component's output and the nets tempX drive the signals pX_sum. Each signal must have an unique source.
 

okay so can u suggest the way to fix it ? should i rename or something ? i'm new at this
 

i tried removing the tmp signal but instead it still gave me multisource in codeword<0> , codeword<1>, codeword<3>, codeword<7>
 

Codeword is also the output from the append component.
You need to think like circuit boards - if components are chips, the signals are wires. In this case, you connected 2 wires together.
 

Removing a tmp signal can't resolve the issue. You need to reconsider the circuit. The p1_sum etc. signals can be only driven by one side, either as output of the summation block or in the process.
 

Just a side note..........if you do have multiple sources...you need to make sure only one is connected at any particular time. This is achieved through a mux
 

Status
Not open for further replies.
Cookies are required to use this site. You must accept them to continue using the site. Learn more…