→ hadbeen:為什麼只會且可以合出一個多工器?兩個if不是同時進行嗎? 08/14 23:06
推 deathcustom:因為由上讀到下, if s = 1, 一開始先給定a,可是接下 08/14 23:42
→ deathcustom:改成給b,if s = 0的話也是同一個邏輯 08/14 23:42
→ zxvc:h大,所以不要用gate-level的"同時進行"去看待always+ 08/15 07:56
→ zxvc:sequential block這種behavioral-level描述方式。 08/15 07:58
→ zxvc:sequential block裡的敘述是一行一行執行的。合成器在合它的 08/15 08:03
→ zxvc:時候是不會管在一次此block的執行中,訊號o被assign幾次、只 08/15 08:07
→ zxvc:會管此block每次結束後最終的值來決定它合成的邏輯閘。 08/15 08:09
→ zxvc:就如前面l大所提到的,Verilog是個可用不同抽象(abstraction) 08/15 08:13
→ zxvc:層(level)描述的語言,不是只有gate-level。用不同level的方 08/15 08:14
→ zxvc:式去解讀另一level,有時是不太洽當的、甚至完全無法解釋。 08/15 08:17
→ lovepy:Verilog behavioral-level去寫gate-level應該完全不是問題 08/15 10:43
推 Pash77:基本上,腦筋還算清楚的人不會寫出這樣的 always block 08/15 11:39
→ Pash77:再來就是搞清楚 blocking/non-blocking assignment 的運作 08/15 11:40
→ Pash77:一個像 C 另一個不像 C 08/15 11:41
推 deathcustom:要是相信Verilog可以用C寫的初學者寫成這樣我也不意外 08/15 11:57
→ zxvc:我舉這範例只是想明顯的指出不該用gate-level的角度去解釋 08/15 12:06
→ zxvc:always+sequential block的modelling方式。 08/15 12:07
→ zxvc:我之所以說sequential block像C是因為它是一行一行執行的。 08/15 12:14
→ zxvc:l大,你那句話我個人持保留態度...個人是覺得滿大膽的說法。 08/15 12:23
→ zxvc:至於我說不要用gate-level看待"一些"behavioral-level,這篇 08/15 12:25
→ zxvc:就給了一個例子。 08/15 12:25
→ colinshih:multi driven, 只有頭腦有問題才寫這樣的code 08/22 18:53
→ colinshih:另外沒有任何 gate 描述,這是RTL 08/22 18:58
→ colinshih:同不同意只是程度問題 08/22 19:02
→ colinshih:只有 a=b; a=c; 卻扯一堆只是讓人好笑 08/22 19:07
→ zxvc:不知道c大在說誰好笑,這只是個方便講解的特殊例子。有人真 08/22 21:58
→ zxvc:的就理解錯誤。 08/22 21:59
→ zxvc:電路合成也不會有multi driven,不信去合合看,哪家合出 08/22 22:01
→ zxvc:multi driven請告訴我,謝謝。 08/22 22:01
→ zxvc:再來把上述blocking assignment,全改成nonblocking 08/22 22:03
→ zxvc:assignment,仍然會合出一個"s為1選b, 0選a"多工器。 08/22 22:04
→ zxvc:合不出來請告訴我用哪家合成器,謝謝。 08/22 22:04
→ zxvc:這種sequential block執行一次,同一變數被assign兩次有個實 08/22 22:16
→ zxvc:用的例子,就是給預設值防止合出latch。 08/22 22:16
→ zxvc:補充:不管nonblocking/blocking assignments,在always+ 08/22 22:19
→ zxvc:sequential block中,每次迭代都會有較後面的assignment複寫 08/22 22:22
→ zxvc:前面assignments的情形。 08/22 22:23
→ zxvc:blocking是比較立即的、nonblocking是在迭代結束後。 08/22 22:25
→ zxvc:所以若要以"同時執行"的字眼形容blocking assignment,有時是 08/22 22:26
→ zxvc:行不太通的。 08/22 22:26
→ zxvc:抱歉,打錯了,上上樓應該是要說"...形容nonblocking..."。 08/22 22:28
→ zxvc:講了這樣多,再提一下重點,我認為要能理解較高階、方便的HDL 08/22 22:41
→ zxvc:甚至能掌控它,必需對它要有正確的理解。用似是而非的理解只 08/22 22:43
→ zxvc:能解釋一部分,但有些好用、實用的語法,就不見得能夠解釋。 08/22 22:44
→ zxvc:另外我承認我上面有個"迭代結束"是個"似是而非"的方便說法, 08/22 22:47
→ zxvc:它不能解釋所有情況。正確來講要用SystemVerilog的scheduling 08/22 22:48
→ zxvc:的nonblocking assignment (NBA) region來解釋。 08/22 22:49
→ sneak: m 08/13 19:30