S
sdaau
Guest
Hi all,
I am trying to implement a custom counter (with clock and enable inputs)
synthesis and behavioral & post-translate simulation pass just fine (usin
ISE WebPack 13.2). On post-map simulation, I get this:
at 271179 ps(5), Instance /my_counter_test/UUT/c_0/ : Warning: /X_FF SETU
High VIOLATION ON CE WITH RESPECT TO CLK;
Expected := 0.428 ns; Observed := 0.144 ns; At : 271.179 ns
... as well as X values in my output. I am already aware that I can avoi
the X's by doing `INST "c_0" ASYNC_REG = TRUE;` in the constraints .uc
file; but that simply gets rid of the X's (in which case I do get correc
values) - however, I'd like to tackle the timing violation.
I was looking for a while into this, and I interpret it like so: th
variable c that I have in my counter code, has been converted by synthesi
process into (at least) one flipflop for each 'bit', c_0 being the F
corresponding to bit 0 (of variable c). After some searching, I found tha
this FF has its own clk and CE inputs - the relationship between the thes
signals, and the 'master' clock and enable is shown in the below screensho
from isim:
http://sdaaubckp.sf.net/post/img/cntr_timing_violation.png
So, I can see that:
* wclk and wenbl are the 'master' signals, and they are synchronous (the
both rise at exactly the same time)
* The delay between wclk(wenbl) and c_0.ce is some 1.035 ns
* The delay between wclk(wenbl) and c_0.clk is some 1.179 ns
* (Thus, the delay between is c_0.ce and c_0.clk is 0.144 ns)
... and so, I gather, the violation tells us that c_0.ce must be high fo
at least 0.428 ns before c_0.clk goes high (i.e. the setup time); howeve
that state lasted for only 0.144 ns in the simulation, so the simulato
complains.
Now, the most obvious thing would be to insert a delay of at leas
0.428-0.144= 0.284 ns between c_0.clk and c_0.ce (or between c_0.clk an
wclk), and I guess then the timing violation would be gone, is tha
correct?
However, the problem is that I would not want to move the first clk afte
enable in the next period using the state machine - and I have no idea ho
to otherwise implement such a delay of ~ 0.3 ns.
I was thinking that timing constraints in the .ucf file would help, and
was experimenting with some `OFFSET = IN 8 ns VALID 6 ns BEFORE "clk
RISING;` - and while this helps with Timing Analysis report errors, ther
is no change in the simulator. Then again, here I want to *increase* th
(minimum) delay - and as far as I can tell, timing constraints in the .uc
file serve to limit ("decrease") the (maximum) delay. If that is so, the
.ucf file constraints cannot help much with introducing delay, I guess...
So I was wandering - what would be the appropriate method to handle thes
timing violations? And have I understood the above situation correctly?
Thanks in advance for any answers,
Cheers!
---------------------------------------
Posted through http://www.FPGARelated.com
I am trying to implement a custom counter (with clock and enable inputs)
synthesis and behavioral & post-translate simulation pass just fine (usin
ISE WebPack 13.2). On post-map simulation, I get this:
at 271179 ps(5), Instance /my_counter_test/UUT/c_0/ : Warning: /X_FF SETU
High VIOLATION ON CE WITH RESPECT TO CLK;
Expected := 0.428 ns; Observed := 0.144 ns; At : 271.179 ns
... as well as X values in my output. I am already aware that I can avoi
the X's by doing `INST "c_0" ASYNC_REG = TRUE;` in the constraints .uc
file; but that simply gets rid of the X's (in which case I do get correc
values) - however, I'd like to tackle the timing violation.
I was looking for a while into this, and I interpret it like so: th
variable c that I have in my counter code, has been converted by synthesi
process into (at least) one flipflop for each 'bit', c_0 being the F
corresponding to bit 0 (of variable c). After some searching, I found tha
this FF has its own clk and CE inputs - the relationship between the thes
signals, and the 'master' clock and enable is shown in the below screensho
from isim:
http://sdaaubckp.sf.net/post/img/cntr_timing_violation.png
So, I can see that:
* wclk and wenbl are the 'master' signals, and they are synchronous (the
both rise at exactly the same time)
* The delay between wclk(wenbl) and c_0.ce is some 1.035 ns
* The delay between wclk(wenbl) and c_0.clk is some 1.179 ns
* (Thus, the delay between is c_0.ce and c_0.clk is 0.144 ns)
... and so, I gather, the violation tells us that c_0.ce must be high fo
at least 0.428 ns before c_0.clk goes high (i.e. the setup time); howeve
that state lasted for only 0.144 ns in the simulation, so the simulato
complains.
Now, the most obvious thing would be to insert a delay of at leas
0.428-0.144= 0.284 ns between c_0.clk and c_0.ce (or between c_0.clk an
wclk), and I guess then the timing violation would be gone, is tha
correct?
However, the problem is that I would not want to move the first clk afte
enable in the next period using the state machine - and I have no idea ho
to otherwise implement such a delay of ~ 0.3 ns.
I was thinking that timing constraints in the .ucf file would help, and
was experimenting with some `OFFSET = IN 8 ns VALID 6 ns BEFORE "clk
RISING;` - and while this helps with Timing Analysis report errors, ther
is no change in the simulator. Then again, here I want to *increase* th
(minimum) delay - and as far as I can tell, timing constraints in the .uc
file serve to limit ("decrease") the (maximum) delay. If that is so, the
.ucf file constraints cannot help much with introducing delay, I guess...
So I was wandering - what would be the appropriate method to handle thes
timing violations? And have I understood the above situation correctly?
Thanks in advance for any answers,
Cheers!
---------------------------------------
Posted through http://www.FPGARelated.com