Electronics 板


LINE

※ 引述《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)
1F:推 n052111089:感謝^^ 04/12 01:19
2F:→ n052111089:所以 <= 是concurrent然後 =是sequential? 04/12 01:22
3F:推 zxvc:我想這還是習慣的問題。我大學的時候的專題就是blocking一路 04/12 01:37
4F:→ zxvc:用到底,最後還不是做出來了。 04/12 01:38
5F:→ zxvc:(blocking assignment一路用到底) 04/12 01:39
6F:推 zxvc:其中包括複雜的有限狀態機、sequential circuits。 04/12 01:41
7F:→ zxvc:你舉的a=a+1...的例子。在我看來結果不一樣本來就是很正常的 04/12 01:43
8F:→ sasako:nonono..只有在某些情況才會不一樣 04/12 01:55
9F:→ sasako:你正常寫在always(*)底下 應該是會一樣的 這是verilog和 04/12 01:56
10F:→ sasako:C語言最大的不同點 04/12 01:56
11F:→ sasako:另外 你的習慣我不與置評 只是到了業界 習慣終究是會被學長 04/12 01:58
12F:→ sasako:糾正的 04/12 01:58
14F:→ sasako:verilog_blocking_nonblocking.html 04/12 02:17
15F:→ sasako:1F自己連起來吧 google搜尋這種資訊很多啦... 04/12 02:18
16F:推 zxvc:我說的不一樣就是指在某些sequential circuits下的情況。 04/12 03:26
17F:→ zxvc:如果你的coding style就是跟業界一樣,我也許會follow。(不過 04/12 03:30
18F:→ zxvc:我不一定會去業界) 04/12 03:31
19F:推 zxvc:我老師是比較開明loop generate跟for loop只要你寫得出來她都 04/12 03:41
20F:→ zxvc:接受。 04/12 03:42
21F:→ zxvc:另外你給的連結第三點觀念錯誤。continuous assignment跟 04/12 03:44
22F:→ zxvc:non-blocking、blocking assignments一點關係都沒有。 04/12 03:45
23F:→ zxvc:它是另外一種assignment。non-blocking與blocking assignment 04/12 03:46
24F:→ zxvc:是procedure assignment (IEEE 1364-2005 Sec 6)。 04/12 03:48
25F:→ zxvc:procedure assignment是用在reg、integer等data types。 04/12 03:49
26F:→ zxvc:continouse assignment是用在wire之類的data types上。 04/12 03:50
27F:→ zxvc:它們update values的方式也不太一樣(IEEE 1364-2005 Sec. 9.2 04/12 03:51
28F:→ zxvc:)。 04/12 03:51
29F:推 zxvc:continuous assignment是等號右邊出現的inputs一變,就 04/12 04:14
30F:→ zxvc:evaluate與update,這通常用在model combinational circuits 04/12 04:16
31F:→ zxvc:。procedure assignment的evaluation/update則往往受到 04/12 04:18
32F:→ zxvc:sensitivity list的影響,它不總是等號右邊的inputs一有變化 04/12 04:19
33F:→ zxvc:就evaluation/update。但always(*)就可以達到跟continuous 04/12 04:21
34F:→ zxvc:assignment一樣的效果,所以它也可以用來model combinational 04/12 04:22
35F:→ zxvc:circuits。 04/12 04:22
36F:推 zxvc:另外我老師也是待過業界的。她建議(沒有強制)只要用 04/12 04:42
37F:→ zxvc:non-blocking assignment就好,包括用always model 04/12 04:43
38F:→ zxvc:combinational circuits。 04/12 04:43
39F:→ zxvc:其實我覺得non-blocking assignment一個好用的地方在於用 04/12 04:45
40F:→ zxvc:always model shift registers。 04/12 04:45
41F:推 zxvc:其實用non-blocking或blocking assignment與always model 04/12 04:51
42F:→ zxvc:combinational circuits的結果似乎是一樣的(我沒證明過)。 04/12 04:51
43F:→ zxvc:不過用blocking可以做到non-blocking做不到的事,例如我之前 04/12 04:53
44F:→ zxvc:在板上po的priority encoder就是利用blocking update的特性。 04/12 04:54
45F:推 zxvc:抱欺我上兩句話有錯。我把那個priority encoder改成 04/12 05:02
46F:→ zxvc:non-blocking assignment,結果也合出一樣的priority encoder 04/12 05:03
47F:→ zxvc:可能non-blocking與blocking在always(*)情況下是等價的。 04/12 05:04
48F:→ zxvc:(我指的是合出來的電路是等價的) 04/12 05:05
49F:→ sneak: 用到底,最後還不是做出 https://noxiv.com 11/11 15:04
50F:→ sneak: procedure a https://daxiv.com 01/04 21:55







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:e-shopping 或 站內搜尋

TOP