Re: [問題] 關於verilog signal&varieble問題
※ 引述《sasako (只想把你留在心中)》之銘言:
: ※ 引述《zxvc (修行)》之銘言:
: : non-blocking與blocking不是這樣分的。
: : 都可以用來model sequential或combinational circuits。
: : 例如:
: : module Test(d, c, e, f, b, a);
: : output reg d, c;
: : input e, f, b, a;
: : always@(*)
: : if(a == 1 & b == 1)
: : c = 1;
: : else
: : c = 0;
: : always@(*)
: : if(e == 1 & f == 1)
: : d <= 1;
: : else
: : d <= 0;
: : endmodule
: : c跟d都會合出AND gates。
: : ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
: : 又如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。
: : ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
: 我這樣分,是希望在coding style大家能保持良好的習慣,
: 把sequential和combinational作分開,這樣在debug的時候
: 會比較容易..
: 至於你上面寫的這個例子,個人認為就是一個bad example,
: c可以知道會合出DFF,且會是一個簡單的conuter..
: 至於d他是一個combinational的電路,你將sequential和combinational
: 混在同一個always底下,的確還是可以合成,只是當在寫大電路時,
基本上 d 並不是 combinational 電路
而是一個 有 clk 的 DFF,因為有寫了 posedge clock
不信的話,您可以合成看看....一定會有 clk
combinational ckt 與 sequential ckt 分開,是很好的 coding style
但是,有時候,並不一定會比較好閱讀
下面這個電路,其實兩個還是合在一起
///////////
always @( posedge clk or negedge rst)
if(!rst) test <= 0 ;
else test <= test +1 ;
///////////
下面這個,才真的分開
///////////
always @(posedge clk or negedge rst)
if(!rst) test <= 0;
else test <= test_pre ;
assign test_pre = test +1 ;
////////////
強制分開的話,我覺得對新人很好
因為可以避免有人把他當成 c 語言來寫....
如果心中先有電路,再把他描述出來,(或是有先紙上作業)
基本上,會有多少DFF,心中早就知道了
而且,combitional ckt 該怎樣,其實也早就知道了...
所以這兩個分開的寫法,會比較像是 : 心中有電路 --> coding
: 這就會造成debug上的困擾,至少我在初學者的時候,我曾經也是這樣
: ,後來當程式寫得越多越大時,就會發現這樣的style實在是不好的...
: 或許剛開始大家可能為了交作業,只想function對就行了,但往後
: 程式開始複雜時,學長、老師的要求就會是整齊,把每個訊號分清楚,
: 加上註解,這樣以後再回頭看,自己還記得當初在寫什麼,交接學弟
: 時,至少不會讓人閱讀起來很痛苦...
: 而回到原作者一開始的問題,我覺得可以去參考一下CIC design compiler
: 那本教科書,他甚至舉完例子,還畫出了合成的示意圖,非常容易瞭解..
: 而坊間的書多半都是解釋"<=" 就是在同時間一起動作,"="則是有次序的
: 動作,雖然是有次序,但在Wave上是看不出來,不過我的經驗是有時候寫
: a=a+1; 與 b=a+1; 結果會是不一樣的...
: b=a+1; a=a+1;
: 我相信這每個人都會遲早會碰到..一開始會覺得很奇怪,不過等遇到時就
: 會開始注意,只能說debug真的是在累積錯誤的經驗...呵呵
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.44.230.4
推
04/15 23:32, , 1F
04/15 23:32, 1F
→
04/15 23:33, , 2F
04/15 23:33, 2F
→
04/15 23:34, , 3F
04/15 23:34, 3F
→
04/15 23:34, , 4F
04/15 23:34, 4F
→
04/15 23:35, , 5F
04/15 23:35, 5F
→
04/15 23:37, , 6F
04/15 23:37, 6F
推
04/16 04:50, , 7F
04/16 04:50, 7F
→
04/16 04:50, , 8F
04/16 04:50, 8F
→
04/16 04:51, , 9F
04/16 04:51, 9F
推
04/16 05:02, , 10F
04/16 05:02, 10F
→
04/16 05:02, , 11F
04/16 05:02, 11F
推
04/16 13:11, , 12F
04/16 13:11, 12F
→
04/16 13:14, , 13F
04/16 13:14, 13F
推
04/16 21:09, , 14F
04/16 21:09, 14F
→
04/16 23:29, , 15F
04/16 23:29, 15F
→
04/16 23:30, , 16F
04/16 23:30, 16F
→
04/16 23:31, , 17F
04/16 23:31, 17F
→
04/16 23:32, , 18F
04/16 23:32, 18F
→
04/16 23:38, , 19F
04/16 23:38, 19F
→
04/16 23:40, , 20F
04/16 23:40, 20F
推
04/17 01:35, , 21F
04/17 01:35, 21F
→
04/17 01:36, , 22F
04/17 01:36, 22F
→
04/17 01:38, , 23F
04/17 01:38, 23F
→
04/17 01:38, , 24F
04/17 01:38, 24F
推
04/17 01:51, , 25F
04/17 01:51, 25F
推
04/17 08:06, , 26F
04/17 08:06, 26F
→
04/17 08:07, , 27F
04/17 08:07, 27F
→
04/17 08:08, , 28F
04/17 08:08, 28F
→
04/17 08:09, , 29F
04/17 08:09, 29F
推
04/17 08:15, , 30F
04/17 08:15, 30F
→
04/17 08:16, , 31F
04/17 08:16, 31F
→
04/17 08:18, , 32F
04/17 08:18, 32F
推
04/17 11:58, , 33F
04/17 11:58, 33F
→
04/17 12:02, , 34F
04/17 12:02, 34F
→
04/17 12:03, , 35F
04/17 12:03, 35F
→
04/17 12:09, , 36F
04/17 12:09, 36F
→
04/17 12:13, , 37F
04/17 12:13, 37F
→
04/17 12:14, , 38F
04/17 12:14, 38F
推
04/17 17:35, , 39F
04/17 17:35, 39F
→
04/17 17:35, , 40F
04/17 17:35, 40F
→
04/17 17:36, , 41F
04/17 17:36, 41F
→
04/17 17:36, , 42F
04/17 17:36, 42F
→
04/17 17:39, , 43F
04/17 17:39, 43F
→
04/17 17:40, , 44F
04/17 17:40, 44F
→
04/17 20:50, , 45F
04/17 20:50, 45F
→
04/17 20:51, , 46F
04/17 20:51, 46F
→
04/17 20:52, , 47F
04/17 20:52, 47F
→
04/17 20:58, , 48F
04/17 20:58, 48F
→
04/17 21:01, , 49F
04/17 21:01, 49F
→
11/11 15:04, , 50F
11/11 15:04, 50F
→
01/04 21:55,
7年前
, 51F
01/04 21:55, 51F
討論串 (同標題文章)