Electronics 板


LINE

那個"除頻器的nonblocking assignment問題"的HDL code在這篇文章的後面。 (以下文章只有count[0]是Verilog bit-select,"[0]"不是citation XD) 然後來對於這個HDL的Scheduling分析如下。 首先module t有三個always,我們由上而下命名always0, always1, always2。 always0, always1對posedge clock敏感,always2對posedge count[0]敏感。 當一posedge clock出現時,always0, always1會產生evaluation events (這是屬於process的evaluation event,assignment也有evaluation event)[1], 也就是要計算它們的sequential blocks。這兩個evaluation events,執行順序 以SystemVerilog標準而言是任意的(arbitrary)。 但今天不管always0的"count <= count+1;",還是always1的"a <= i;"先執行, count與a都不會立即update,因為它們是NBA。 等到進入NBA events region時(嚴格講是NBA events region所有events都active, 被放到active events region執行[2]), 如果count先更新,它的更新會產生posedge count[0], 就會使得always2產生evaluation event。 但一個問題來了這evaluation event究竟會被放到哪個region, IEEE 1800-2009沒有講清。 依我用排除法: inactive events region放#0 statements,所以不合。 NBA events region放NBA updates,所以不合。 所以最適合的地方就是active events region。 那現在active events region有: "a <= i;" NBA update, always2 evaluation events。 又active events region有nondeterminism特性, 所以理論上誰先執行都是符合IEEE 1800-2009的標準,所以有race condition! 但實際上我用NC-Verilog, ModelSim, VCS都得到b會抓a新值(edge之後)。 所以我之前說"b訊號都應該會抓a的新值"嚴格來講不太正確, 這可能只是實際simulators是如此作,但理論、標準上沒有這麼說。 從上面所見NBA的特性我們可以得知,若是多個always都由同一clock edge觸發且 使用NBA,那麼應該不會有race condition的問題。 但跨clock domain,如always1與always2,理論上會有race的問題。 雖然跨clock domain的RTL simulation雖然會得到與實際電路 timing不同的結果,但實際拿去作synthesis、修hold time, 就會得到一般數位電路的行為,也就是變成"b會去抓a舊值", 這也是horsehead大所提到的問題。 這也是RTL and synthesis mismatch的問題。 這問題最好用"q <= #1 d;"就可以解決mismatch問題。 目前看來"q <= #1 d;"並沒有很嚴重的缺點, 又可以解決跨clock domain的RTL simulation問題, 它應該是比"q <= d;"更好的coding style。 至於ViewMoon大說曾經遇過同一clock group,不加#1, 不同simulator會有不同結果,不知可否提供範例讓大家研究是怎樣的情形。 [1] IEEE, "IEEE 1800-2009," p.p. 23, Dec 2009. ※ 引述《zxvc (眾生都是未來佛)》之銘言: : 標題: Re: [心得] Verilog使用nonblocking assignment解ꠠ… : 時間: Tue Aug 24 21:41:32 2010 : : [恕刪] : : : 推 ViewMoon:sunburst 上的 paper 是好物,在我初學時獲益良多深受啟發 08/24 20:48 : : → ViewMoon:q <= d 最好寫成 q <= #1 d; 一是為了 waveform 易 check 08/24 20:50 : : → ViewMoon:另外它也反映 gate level simulation 時, clock edge 的 08/24 20:51 : : → ViewMoon:相位超前 q transition point 的事實 08/24 20:52 : : → ViewMoon:還有一個原因是, 我遇過加或不加 #1, 導致 simulation 08/24 20:53 : : → ViewMoon:result 不同, 原因可能是 dff0/dff1 clock 不同, 但這兩 08/24 20:55 : : → ViewMoon:個 clock 是同一 clock group, 加 #1 比較不會遇到 08/24 20:56 : : → ViewMoon:simulator 牌子不同而不同的結果 08/24 20:57 : : ViewMoon大提到的"q <= #1 d;"這個問題我用SystemVerilog Scheduling去 : 推,真的會有race的問題(即使用了NBA)。至於詳細推導過程就懶得說了。 : : 一個可能發生這race的問題是"除頻器": : ~~~~~~~~~~~t.sv~~~~~~~~~~~~~~~~~~ : module t : ( : input i, : input nreset, : input clock : ); : logic a, b; : logic [0:0] count; : : always_ff@(posedge clock or negedge nreset) begin : if(!nreset) : count <= 0; : else : count <= count+1; : end : : always_ff@(posedge clock or negedge nreset) begin : if(!nreset) : a <= 0; : else : a <= i; : end : : always_ff@(posedge count[0] or negedge nreset) begin : if(!nreset) : b <= 0; : else : b <= a; : end : endmodule : : module tb; : logic i; : logic nreset; : logic clock; : : initial begin : clock = 0; : forever #50 clock = ~clock; : end : : t t1(.*); : : initial begin : nreset = 1; : i = 0; : : #5; : nreset = 0; : : #5; : nreset = 1; : : #30; : i = 1; : : #100; : i = 0; : : #100; : i = 1; : : #100; : $stop; : end : endmodule : ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ : : ModelSim SE 6.6b模擬結果: : http://pic.pimg.tw/zxvc/ccf4322240d5a015cf5b7a8c88ad616d.png?v=1282656775 : : 其中b在250 ps時沒有capture到a的0。 : 用"q <= #1 d;"應該可以解決這問題。 : : -- : 信佛的人要知道:佛絕不會說謊。但請把握時光。 : 法滅盡經: : http://www.cbeta.org/result/normal/T12/0396_001.htm : 共勉之。 : : -- :



※ 發信站: 批踢踢實業坊(ptt.cc)
: ◆ From: 140.115.221.79 : → zxvc:抱歉,剛才仔細想想這問題不是非決定性的問題,b應該不管 08/24 22:37 : → zxvc:用什麼simulator(假設符合Verilog標準)都應該會抓a的新值。 08/24 22:38 : → zxvc:理由改天有空再解釋,不信的人可以先用各種simulators模擬。 08/24 22:39 : → zxvc:但我並沒有否定如"q <= #1 d;可以用來解這除頻器問題"。 08/24 22:45 : → horsehead:這應該是因為他是RTL LEVEL 模擬的關係吧 不然正式設計 08/24 23:11 : → horsehead:上應該不可能讓信號跟時脈同時轉變 08/24 23:13 -- 信佛的人要知道:佛絕不會說謊。但請把握時光。 法滅盡經: http://www.cbeta.org/result/normal/T12/0396_001.htm 共勉之。 --



※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.115.73.168 ※ 編輯: zxvc 來自: 140.115.73.168 (08/25 11:46)
1F:→ zxvc:補充一點,那些simulators我沒原始碼,所以我所看到的模擬結 08/25 11:55
2F:→ zxvc:果充其量只是"實驗結果",我說"實際上b會抓新值"只是"假說"。 08/25 11:57
3F:→ zxvc:這篇文章最大的意義是"指出跨clock domain"有不確定性,最好 08/25 11:58
4F:→ zxvc:用"q <= #1 d;"解。 08/25 11:58







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燈, 水草

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

TOP