作者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
→ karyuuissen:感謝... 我warning已經debug完了^^ 01/04 02:20
→ CompileUltra:大哥 premier只比pro多可以和routing tool結合做 01/06 00:35
→ CompileUltra:physical synthesis亞 就好像你會說dc topo比dc還會 01/06 00:36
→ CompileUltra:壓 timing 麻 不見得把 01/06 00:36
推 zxvc:針對樓上兩句:DC Topo要用到DC Ultra,所以會比DC壓得好 XD 01/06 05:21
→ zxvc:但DC Topo跟DC Ultra+WLM比起來,只差在DC Topo估的timing 01/06 05:24
→ zxvc:比較準、...。但timing optimization的能力應該是大同小異。 01/06 05:25