作者ballstick (球棍)
看板Electronics
标题Re: [问题] 一些verilog的问题...
时间Sun Jan 3 22:58:41 2010
※ 引述《karyuuissen ()》之铭言:
: 我想先问关於blocking和nonblocking assignment的问题
: 1. 像以下这种2个if的是同时做吗?
: always@(posedge clk) begin
: if(condition1)
: A <= B;
: if(condition2)
: C <= D;
: end
Register 的 output 都是同时变化
: 2. 两个一样的always分开写是谁先谁後?举例如下:
: always@(posedge clk) begin
: A <= B;
: end
: always@(posedge clk) begin
: C <= D;
: end
不重要
Register 的 output 就是同时变化
: 3. 同上一个问题,若分别在不同的.v档下,但clk是连起来的,如:
: //test1.v
: always@(posedge clk1) begin
: A <= B;
: end
: ---------------------------
: //test2.v
: always@(posedge clk2) begin
: C <= D;
: end
: 这样的话又是谁快?
: 如果always里面同时有blocking又有nonblocking的情况我就更搞不清楚了...
同一个 clk domain
Register 的 output 就是同时变化
A 和 C 就是 Register 的 output
B 和 D 是 Register 的 input
: 4. wire的assign和always@(*)分别是等号右边和判断式变了就变的
: 那谁会比较先做?
: 像是:
: assign A= (B==C)? D:E;
: 和
: always@(*)begin
: B = F;
: end
A 的值既然跟 B 有关
A 的值稳定所需要的 delay 就会比 B 长
没有什麽谁先做谁後做的问题
你写出来的 code 会 mapping 成相对应的逻辑电路
critical path 上串的逻辑闸就会决定你的 timing
如果你看不懂这段话
那我想要让你明白不是件简单的事
请去修门课再来
: 最後想问有关FPGA合成电路critical path warning的问题...
: 要怎样才能减少这些warning?
: 明明一个posedge触发间if..else和case的层数以及运算都很少了
: 它还是会产生critical path或setup和hold time不够的情形
: 难道只能一直去改code的写法直到没有warning为止吗?
: 抱歉问了这麽多问题XD
: 因为project的架构太大,时序搞混会让bug很难找出来....
: Thx
critical path warning??
critical path 应该是看 slack 是不是正的
你的 warning 到底是指什麽??
improve timing 的方法有好几种
用比较好的 tool 有可能有帮助
例如 synplify premier 比 synplify pro 好
tool 的选项设定也可能会有影响
这个我只会 Try and Error ....
当然最快的方法是分析你的 critical path 上有哪些逻辑闸存在
--
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 123.192.112.2
1F:→ karyuuissen:感谢... 我warning已经debug完了^^ 01/04 02:20
2F:→ CompileUltra:大哥 premier只比pro多可以和routing tool结合做 01/06 00:35
3F:→ CompileUltra:physical synthesis亚 就好像你会说dc topo比dc还会 01/06 00:36
4F:→ CompileUltra:压 timing 麻 不见得把 01/06 00:36
5F:推 zxvc:针对楼上两句:DC Topo要用到DC Ultra,所以会比DC压得好 XD 01/06 05:21
6F:→ zxvc:但DC Topo跟DC Ultra+WLM比起来,只差在DC Topo估的timing 01/06 05:24
7F:→ zxvc:比较准、...。但timing optimization的能力应该是大同小异。 01/06 05:25