![]() |
|
|
|
#1 |
|
WARNING
by a combinatorial pin. This is not good design practice. Use the CE pin to control the loading of data into the flip-flop. What does it mean in practise? What should I do? Wojtek zlotawy |
|
|
|
|
#2 |
|
Posts: n/a
|
"zlotawy" <> wrote in message news:1152776824.174243@pdp... > WARNING > by a > combinatorial pin. This is not good design practice. Use the CE pin to > control the loading of data into the flip-flop. > > What does it mean in practise? What it means is that you have a net called "nx64089z1" which is the output of some combinatorial logic (i.e. not a flip flop) and that "nx64089z1" is then used somewhere to clock some flip flop..Something like nx64089z1 <= a and b; where 'a' and 'b' are some other signals. By the looks of the name, it would appear that "nx64089z1" is some internal net that the synthesizer created enroute to implementing your logic. In an FPGA environment gated clocks are not good design practice because they can not be implemented glitch free because of the way FPGAs implement logic by using look up table memories. Those glitches then get propogated to the clock input of whatever it is that you have being clocked by this signal and having a glitchy clock is never a good idea. > What should I do? > 1. Find out where net "nx64089z1" goes (i.e. what are the signals that have "nx64089z1" as a clock). 2. Presumably you should recognize the signal name(s) of at least some of the places where "nx64089z1" goes and relate that back to your VHDL/Verilog design source files. 3. Now that you know where in the source code you have stuff that is generating the gated clock logic you have to rewrite it to fix. How this needs to get rewritten depends completely on your design so there are no specific recommendations however usually one of the following two approaches will work. In both cases I'm assuming that "nx64089z1" is as written above (i.e. nx64089z1 <= a and b). Even if that's not the case, the two approaches should give you enough clues to go on. Fix 1: If 'a' is a free running clock and 'b' is some signal that you'd like to use to disable the clock then replace all instances where a flip flop is using a gated clock with something of the form.... process(a) if rising_edge(a) then if (b = '1') then Put your clocked stuff here end if; end if; end process; Fix 2: If neither 'a' nor 'b' are free running, and you simply want to clock some flip flop when 'a' and 'b' are both true then replace the thing that is generating "nx64089z1" with the following process. Again, based on the net name I'm guessing that you'll not find a signal called "nx64089z1" explicitly in your design so this approach probably doesn't apply, but just in case. process(Clock) -- You'll need to have 'some' free running clock of some sort if rising_edge(Clock) then nx64089z1 <= a and b; end if; end prcoess; There are other scenarios but like I said which solution (or other solutions) are appropriate depends on what exactly your design is trying to accomplish. KJ |
|