看板 Electronics 關於我們 聯絡資訊
※ 引述《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
colinshih:1. simulation-synthesis mismatch: 你們說的都對, 一個 04/15 23:32
colinshih:以simulation 角度, 一個以synthesis角度 04/15 23:33
colinshih:2. seq. 電路 block 包含 combination 電路, 基本上就是 04/15 23:34
colinshih:一個 bad coding style, 基本的linting rule通常都是出 04/15 23:34
colinshih:error,而非warning, 最好避免. 另外coding完跑linting 04/15 23:35
colinshih:是qualified designer 基本要求, 建議慢慢養成習慣 04/15 23:37
zxvc:真的一定要把combinational circuits從sequential circuits 04/16 04:50
zxvc:分開嗎?這是我第一次跑nLint的結果,似乎是過的: 04/16 04:50
zxvc:這個也過了: 04/16 05:02
ksmrt0123:那牌的linter說 a<=a+1; 是error的? 真是太超過 04/16 13:11
ksmrt0123:而且... linter會出error喔? nLint 好像只有warning 04/16 13:14
zxvc:nLint有error,不過是compile還是lint有error我沒注意。 04/16 21:09
colinshih:linting rule 由 rule specification (setting) 決定 04/16 23:29
colinshih:和tools 有何關係? nLint 怎麼沒有error setting? 04/16 23:30
colinshih:k兄少見多怪了, 另外我在工作前均使用 IPQ 定義 rule 04/16 23:31
colinshih:setting, 由IPQ聯盟制定, 為IP競賽基本rule setting fil 04/16 23:32
colinshih:所以,以SIP deliverable,此類coding style是被IPQ禁止 04/16 23:38
colinshih:當然以a<=a+1'b1而言, 不考量IP設計, 當然不必特別限制 04/16 23:40
ksmrt0123:linter都有 pre-defined rules吧, 這些rule也是每家 04/17 01:35
ksmrt0123:linter都一樣? 剛特地翻了nLint的文件, pre-defined 04/17 01:36
ksmrt0123:rules都是warning沒錯啊 會出error可能是user-defined 04/17 01:38
ksmrt0123:rules吧 04/17 01:38
ksmrt0123:nLint的warning/error跟severity設定有關 是我搞錯了 04/17 01:51
zxvc:剛才測試nLint也有IPQ rules。但我用該rule,lint的結果仍沒 04/17 08:06
zxvc:沒有要分離出combinational circuits的警告或錯誤。(或許是 04/17 08:07
zxvc:nLint的IPQ rules不完整!?) 04/17 08:08
zxvc:(我已經把severity調成最高的level 10) 04/17 08:09
zxvc:我想不是每家公司都在做IP,沒有必要都用這麼嚴格的rules吧。 04/17 08:15
zxvc:像IPQ rules中,註解沒寫也算errors。 04/17 08:16
zxvc:那請問一般業界都用哪個rules?nLint、RMM、IPQ? 04/17 08:18
pierreqq:col應該是指 IPQ 的 SIM.2 那條 04/17 11:58
pierreqq:你們之前把com定為a+1,seq定會a<=1,所以討論起來很亂 04/17 12:02
pierreqq:不自覺的一直鑽牛角尖下去 04/17 12:03
pierreqq:com always-> block? seq always-> nonblocking? 04/17 12:09
pierreqq:感覺像是表達上的失準 04/17 12:13
pierreqq:大家都有經驗,應該不會卡在這種基本問題上才是 04/17 12:14
zxvc:我覺得我應該沒有誤解co、Acme大的意思。 04/17 17:35
zxvc:我們現在討論的問題不是哪裡該用blocking、non-blocking, 04/17 17:35
zxvc:而是寫sequential circuits要不要把combinational circuits 04/17 17:36
zxvc:分離出來。 04/17 17:36
zxvc:我是覺得討論這麼detail的問題感覺有點"鑽牛角尖",但從討論 04/17 17:39
zxvc:的過程我覺得學到不少東西。 04/17 17:40
Acme:其實,我的重點是:d是DFF,不是combinational ckt... 04/17 20:50
Acme:我也說了,分開不一定會比較好閱讀..... 04/17 20:51
Acme:而且,tst<=tst+1; 其實不是分開...而是test<=test_pre才是 04/17 20:52
Acme:我說對新人很好,是只對完全空白的新人,還沒有seq. com.的概念 04/17 20:58
Acme:當然...各位早就遠遠超過了新人許久了... 04/17 21:01
sneak: col應該是指 IPQ https://noxiv.com 11/11 15:04
sneak: nLint的IPQ r https://muxiv.com 01/04 21:55