作者ksmrt0123 (ksmrt)
看板Electronics
標題Re: [問題] 關於verilog signal&varieble問題
時間Sun Apr 12 22:17:34 2009
推 ksmrt0123:在sequential ckt用nonblocking (<=), 在combinational 04/11 23:47
→ ksmrt0123:ckt用blocking(=)是 coding style, 而且是很好的coding 04/11 23:47
→ ksmrt0123:style, 應該要 follow. 04/11 23:48
※ 引述《zxvc (修行)》之銘言:
: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
: 又如sequential circuit:
: module Test(c, d, Clock , Reset1);
: output reg [2:0] c;
: output reg d;
: input Clock, Reset1;
: always@(posedge Clock)
: if(Reset1)
: c = 0;
: else
: begin
: c = c+1;
: if(c == 3)
: d = 1;
: else
: d = 0;
: end
: endmodule
: 這個用blocking的寫法會造成c = 3的那個(clock) cycle,d = 1。
這樣的寫法, 合成出的硬體與verilog不能直接對應,
程式寫的是(c==3), 但合成出來的應該是 (c+1==3),
這讓寫code與讀code的人更不容易掌握硬體.
: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
: 如果改成non-blocking的寫法:
: module Test(c, d, Clock , Reset1);
: output reg [2:0] c;
: output reg d;
: input Clock, Reset1;
: always@(posedge Clock)
: if(Reset1)
: c <= 0;
: else
: begin
: c <= c+1;
: if(c == 3)
: d <= 1;
: else
: d <= 0;
: end
: endmodule
: 會造成c = 4的那個cycle,d = 1。
以C來想這可能很怪, 但以電路來想這很自然.
而且code寫(c==3)合成出來就是(c==3).
=========================================================
支持採納此coding style 最重要的理由,
如上面的例子所示, 採用此 coding style,
可讓 code 與電路更容易對照.
還有很多其它理由. 有篇paper可參考:
http://www.sunburst-design.com/papers/CummingsSNUG2000SJ_NBA.pdf
最後還有一個很實際的理由,
應徵 ic design 的 logic design engineer 時若有考 verilog,
不 follow 此 coding style 的上的機會應該不大...
不知zxvc實驗室是否有學長姐進 ic design 寫 verilog的,
可問問他們的意見.
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 219.68.71.218
→ acelp:說的好 04/12 23:32
推 zxvc:你那篇解釋的很好。combinational circuits用blocking 04/12 23:38
→ zxvc:assignment的理由跟我當初猜測的一樣,simulator模擬速度會 04/12 23:39
→ zxvc:比較快。用non-blocking assignment可以model一樣的 04/12 23:40
→ zxvc:combinational circuits,但有時候有sensitivy list要多觸發 04/12 23:42
→ zxvc:幾次結果才會跟用blocking assignment一樣。 04/12 23:42
→ zxvc:(Example 19) 04/12 23:44
→ zxvc:看來似乎較多人認為用non-blocking model sequential circuit 04/12 23:45
→ zxvc:較好,我又找不出一個用blocking assignment強大的好理由, 04/12 23:46
→ zxvc:我想以後會follow用non-blocking。而且用blocking assignment 04/12 23:47
→ zxvc:model sequential circuits有一個很大的缺點,我之前有提到 04/12 23:48
→ zxvc:,就是不能寫shift registers。 04/12 23:49
→ zxvc:這在你那篇paper有提到(Example 15)。 04/12 23:50
推 zxvc:多謝你的資訊。 04/13 00:05
→ ksmrt0123:感謝回應 :) 04/13 01:35
→ sneak: m 11/11 15:04