EmbDev.net

Forum: FPGA, VHDL & Verilog help - multi-driven \\ clocked by two different clocks


von DANIEL (Guest)


Rate this post
useful
not useful
First I would like to thank everyone who always helping (=, even if I am 
not always clear.
I had a lot of trouble creating a system, I'm trying to make it start 
working once until she finish working. The system needs to wait for 
external signal ' ' in order to work one more tw

When I write two different independent if conditions, then an error 
message comes out (p1 code) : [Synth 8-6859] multi-driven net on pin 
U4/chek with 1st driver pin 'U4/chek_reg__0/Q' 
["C:/Users/danie/Desktop/FinalProject/FinalProject/FinalProject.srcs/sou 
rces_1/new/eieo.vhd":66]

(p1 code)
1
library IEEE;
2
use IEEE.STD_LOGIC_1164.ALL;
3
4
-- Uncomment the following library declaration if using
5
-- arithmetic functions with Signed or Unsigned values
6
--use IEEE.NUMERIC_STD.ALL;
7
8
-- Uncomment the following library declaration if instantiating
9
-- any Xilinx leaf cells in this code.
10
--library UNISIM;
11
--use UNISIM.VComponents.all;
12
13
entity eieo is
14
    Port ( 
15
           Tenb : in STD_LOGIC;
16
              clk : in std_logic;
17
             UPDOWN : in STD_LOGIC;
18
             startcountenb : in std_logic; 
19
           eo : out STD_LOGIC;
20
           ei : out STD_LOGIC);
21
end eieo;
22
23
architecture Behavioral of eieo is
24
signal chek : std_logic:='0';
25
signal counter : integer range 0 to 100000000:=0;
26
type state_type is(s1, s2, s3, s4);
27
signal state : state_type :=s1;
28
constant n1 : integer :=4001;
29
constant n2: integer :=3001;
30
constant n3 : integer :=4001;
31
constant n4 : integer  :=2557011;
32
signal tempoe : std_logic:='0';
33
signal tempie : std_logic:='0';
34
35
36
begin
37
38
39
40
41
process(clk,chek,Tenb,UPDOWN,state) begin
42
43
if( UPDOWN='1') then 
44
    if(falling_edge(Tenb)) then 
45
        chek<='1'; end if;
46
----------&&&&&&&&&&&&&&&&&&&&&(((((((----------
47
--else  
48
end if; 
49
----------&&&&&&&&&&&&&&&&&&&&&(((((((----------    
50
    
51
if(rising_edge(clk) ) then 
52
53
if(chek='1') then 
54
55
counter<=counter+1;
56
57
case state is 
58
59
    when s1 => if( counter=n1) then tempie<=not(tempie);
60
                                      tempoe<='0'; 
61
                                      counter<=0;
62
                                      state<=s2;
63
                                     
64
                                      end if;
65
                                      
66
    when s2 => if( counter=n2) then tempie<=not(tempie);
67
                                      tempoe<='0'; 
68
                                      counter<=0;
69
                                      state<=s3;
70
                                      end if;
71
                                      
72
    when s3 => if( counter=n3) then tempoe<=not(tempoe);
73
                                      tempie<='0';
74
                                      counter<=0;
75
                                      state<=s4; 
76
                                      end if;
77
                                      
78
    when s4 => if( counter=n4) then tempoe<=not(tempoe);
79
                                     tempie<='0'; 
80
                                     counter<=0;
81
82
----------&&&&&&&&&&&&&&&&&&&&&(((((((-----------
83
                                       chek<='0';  
84
----------&&&&&&&&&&&&&&&&&&&&&(((((((-----------  
85
                 
86
                                     state<=s1; 
87
                                      end if;
88
end case; 
89
else 
90
tempie<='0';
91
tempoe<='0'; 
92
end if;
93
end if; 
94
----------&&&&&&&&&&&&&&&&&&&&&(((((((-----------
95
--end if;
96
----------&&&&&&&&&&&&&&&&&&&&&(((((((----------
97
end process;
98
ei<=tempie;
99
eo<=tempoe;
100
end Behavioral;



 When I write the " if's" under the same condition,  I get another error 
message (p2 code) : [Synth 8-5787] Register chek_reg in module eieo is 
clocked by two different clocks in the same process. This may cause 
simulation mismatches and synthesis errors. Consider using different 
process statements 
["C:/Users/danie/Desktop/FinalProject/FinalProject/FinalProject.srcs/sou 
rces_1/new/eieo.vhd":66]

(p2 code)
1
library IEEE;
2
use IEEE.STD_LOGIC_1164.ALL;
3
4
5
6
entity eieo is
7
    Port ( 
8
           Tenb : in STD_LOGIC;
9
              clk : in std_logic;
10
             UPDOWN : in STD_LOGIC;
11
             startcountenb : in std_logic; 
12
           eo : out STD_LOGIC;
13
           ei : out STD_LOGIC);
14
end eieo;
15
16
architecture Behavioral of eieo is
17
signal chek : std_logic:='0';
18
signal counter : integer range 0 to 100000000:=0;
19
type state_type is(s1, s2, s3, s4);
20
signal state : state_type :=s1;
21
constant n1 : integer :=4001;
22
constant n2: integer :=3001;
23
constant n3 : integer :=4001;
24
constant n4 : integer  :=2557011;
25
signal tempoe : std_logic:='0';
26
signal tempie : std_logic:='0';
27
28
29
begin
30
31
32
33
34
process(clk,chek,Tenb,UPDOWN,state) begin
35
36
if( UPDOWN='1') then 
37
    if(falling_edge(Tenb)) then 
38
        chek<='1'; end if;
39
----------&&&&&&&&&&&&&&&&&&&&&(((((((----------
40
else  
41
--end if; 
42
----------&&&&&&&&&&&&&&&&&&&&&(((((((----------    
43
    
44
if(rising_edge(clk) ) then 
45
46
if(chek='1') then 
47
48
counter<=counter+1;
49
50
case state is 
51
52
    when s1 => if( counter=n1) then tempie<=not(tempie);
53
                                      tempoe<='0'; 
54
                                      counter<=0;
55
                                      state<=s2;
56
                                     
57
                                      end if;
58
                                      
59
    when s2 => if( counter=n2) then tempie<=not(tempie);
60
                                      tempoe<='0'; 
61
                                      counter<=0;
62
                                      state<=s3;
63
                                      end if;
64
                                      
65
    when s3 => if( counter=n3) then tempoe<=not(tempoe);
66
                                      tempie<='0';
67
                                      counter<=0;
68
                                      state<=s4; 
69
                                      end if;
70
                                      
71
    when s4 => if( counter=n4) then tempoe<=not(tempoe);
72
                                     tempie<='0'; 
73
                                     counter<=0;
74
----------&&&&&&&&&&&&&&&&&&&&&(((((((-----
75
                                       chek<='0';  
76
----------&&&&&&&&&&&&&&&&&&&&&(((((((-----------                   
77
                                     state<=s1; 
78
                                      end if;
79
end case; 
80
else 
81
tempie<='0';
82
tempoe<='0'; 
83
end if;
84
end if; 
85
----------&&&&&&&&&&&&&&&&&&&&&(((((((-----------
86
end if;
87
----------&&&&&&&&&&&&&&&&&&&&&(((((((----------
88
end process;
89
ei<=tempie;
90
eo<=tempoe;
91
end Behavioral;

What do you do in such cases, I didn't find any mention of it anywhere.

von Daniel C. (Company: NON) (r_daniel)



Rate this post
useful
not useful
Pictures of the system. I'm trying to get eieo to renew itself ) wtih 
chek<='0' and chek<='1';.

: Edited by User
von Dussel (Guest)


Rate this post
useful
not useful
You correctly used the vhdl formatting tags, but could you attach the 
code as vhdl file (correctly formatted)? The vhdl formatting is broken 
here, thus the code is difficult to read.

I suspect the problem might be the triggering on falling and rising 
edge. UPDOWN is a signal, so it might change during runtime and I don't 
know how and if this could be synthesised.

von Lothar M. (Company: Titel) (lkmiller) (Moderator)


Rate this post
useful
not useful
DANIEL wrote:
> What do you do in such cases
Write a clocked process as it is printed in any book. Or simply have a 
close look at the synthesizers user manual how a  synchronous has to be 
written.

To keep things simple: use only one clock and only one edge of it. In 
the whole design.

And one additional hint: check your sensitivity lists. When the 
sensitivity list is wrong, then the simulation will not match the real 
hardware.

von Daniel C. (Company: NON) (r_daniel)


Rate this post
useful
not useful
I'm aware of the problem, I understand why it's not right in a simple 
way, it's not possible to turn the action into code

von Daniel C. (Company: NON) (r_daniel)


Rate this post
useful
not useful
All other components depend on the signal eo ei that the system produces

Please log in before posting. Registration is free and takes only a minute.
Existing account
Do you have a Google/GoogleMail account? No registration required!
Log in with Google account
No account? Register here.