Re: [問題] 關於verilog signal&varieble問題
※ 引述《zxvc (修行)》之銘言:
: ※ 引述《sasako (只想把你留在心中)》之銘言:
: : 一個用法是用在sequential circuit的always中...
: : ex:always(posedge clk or negedge n_rst)
: : 另一個是用在combinational circuit的always中...
: : ex:always(*)
: 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底下,的確還是可以合成,只是當在寫大電路時,
這就會造成debug上的困擾,至少我在初學者的時候,我曾經也是這樣
,後來當程式寫得越多越大時,就會發現這樣的style實在是不好的...
或許剛開始大家可能為了交作業,只想function對就行了,但往後
程式開始複雜時,學長、老師的要求就會是整齊,把每個訊號分清楚,
加上註解,這樣以後再回頭看,自己還記得當初在寫什麼,交接學弟
時,至少不會讓人閱讀起來很痛苦...
而回到原作者一開始的問題,我覺得可以去參考一下CIC design compiler
那本教科書,他甚至舉完例子,還畫出了合成的示意圖,非常容易瞭解..
而坊間的書多半都是解釋"<=" 就是在同時間一起動作,"="則是有次序的
動作,雖然是有次序,但在Wave上是看不出來,不過我的經驗是有時候寫
a=a+1; 與 b=a+1; 結果會是不一樣的...
b=a+1; a=a+1;
我相信這每個人都會遲早會碰到..一開始會覺得很奇怪,不過等遇到時就
會開始注意,只能說debug真的是在累積錯誤的經驗...呵呵
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.135.103.42
※ 編輯: sasako 來自: 220.135.103.42 (04/12 00:27)
推
04/12 01:19, , 1F
04/12 01:19, 1F
→
04/12 01:22, , 2F
04/12 01:22, 2F
推
04/12 01:37, , 3F
04/12 01:37, 3F
→
04/12 01:38, , 4F
04/12 01:38, 4F
→
04/12 01:39, , 5F
04/12 01:39, 5F
推
04/12 01:41, , 6F
04/12 01:41, 6F
→
04/12 01:43, , 7F
04/12 01:43, 7F
→
04/12 01:55, , 8F
04/12 01:55, 8F
→
04/12 01:56, , 9F
04/12 01:56, 9F
→
04/12 01:56, , 10F
04/12 01:56, 10F
→
04/12 01:58, , 11F
04/12 01:58, 11F
→
04/12 01:58, , 12F
04/12 01:58, 12F
→
04/12 02:17, , 13F
04/12 02:17, 13F
→
04/12 02:17, , 14F
04/12 02:17, 14F
→
04/12 02:18, , 15F
04/12 02:18, 15F
推
04/12 03:26, , 16F
04/12 03:26, 16F
→
04/12 03:30, , 17F
04/12 03:30, 17F
→
04/12 03:31, , 18F
04/12 03:31, 18F
推
04/12 03:41, , 19F
04/12 03:41, 19F
→
04/12 03:42, , 20F
04/12 03:42, 20F
→
04/12 03:44, , 21F
04/12 03:44, 21F
→
04/12 03:45, , 22F
04/12 03:45, 22F
→
04/12 03:46, , 23F
04/12 03:46, 23F
→
04/12 03:48, , 24F
04/12 03:48, 24F
→
04/12 03:49, , 25F
04/12 03:49, 25F
→
04/12 03:50, , 26F
04/12 03:50, 26F
→
04/12 03:51, , 27F
04/12 03:51, 27F
→
04/12 03:51, , 28F
04/12 03:51, 28F
推
04/12 04:14, , 29F
04/12 04:14, 29F
→
04/12 04:16, , 30F
04/12 04:16, 30F
→
04/12 04:18, , 31F
04/12 04:18, 31F
→
04/12 04:19, , 32F
04/12 04:19, 32F
→
04/12 04:21, , 33F
04/12 04:21, 33F
→
04/12 04:22, , 34F
04/12 04:22, 34F
→
04/12 04:22, , 35F
04/12 04:22, 35F
推
04/12 04:42, , 36F
04/12 04:42, 36F
→
04/12 04:43, , 37F
04/12 04:43, 37F
→
04/12 04:43, , 38F
04/12 04:43, 38F
→
04/12 04:45, , 39F
04/12 04:45, 39F
→
04/12 04:45, , 40F
04/12 04:45, 40F
推
04/12 04:51, , 41F
04/12 04:51, 41F
→
04/12 04:51, , 42F
04/12 04:51, 42F
→
04/12 04:53, , 43F
04/12 04:53, 43F
→
04/12 04:54, , 44F
04/12 04:54, 44F
推
04/12 05:02, , 45F
04/12 05:02, 45F
→
04/12 05:03, , 46F
04/12 05:03, 46F
→
04/12 05:04, , 47F
04/12 05:04, 47F
→
04/12 05:05, , 48F
04/12 05:05, 48F
→
11/11 15:04, , 49F
11/11 15:04, 49F
→
01/04 21:55,
7年前
, 50F
01/04 21:55, 50F
討論串 (同標題文章)