help - multi-driven \\ clocked by two different clocks

Guest #7222584
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.
Guest #7222601
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.
Moderator (Company: Titel) #7222604
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.

Reply

Please log in before posting.

or

Log in with Google account

Registration is free and takes only a minute.

Register now