《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 其他 > 業(yè)界動(dòng)態(tài) > Verilog HDL阻塞屬性探究及其應(yīng)用

Verilog HDL阻塞屬性探究及其應(yīng)用

2009-08-04
作者:郭寶增,汪祥春

??? 摘 要:阻塞賦值與非阻塞賦值語(yǔ)句作為verilog HDL語(yǔ)言的最大難點(diǎn)之一,一直困擾著FPGA設(shè)計(jì)者,而其中的錯(cuò)誤又隱晦莫測(cè),理解不透徹會(huì)直接導(dǎo)致運(yùn)用不當(dāng),使設(shè)計(jì)工程達(dá)不到預(yù)期效果,而排錯(cuò)又相當(dāng)麻煩。阻塞賦值與非阻塞賦值語(yǔ)句既血脈相連,又有本質(zhì)的區(qū)別。透過(guò)原理和實(shí)際應(yīng)用,從不同側(cè)面對(duì)阻塞賦值與非阻塞賦值進(jìn)行剖析,并闡述了阻塞賦值與非阻塞賦值的各自特點(diǎn)及其應(yīng)用。
??? 關(guān)鍵詞:Verilog HDL;阻塞賦值;非阻塞賦值;層積事件列

?

??? Verilog HDL中,有兩種過(guò)程賦值方式,即阻塞賦值(blocking)和非阻塞賦值(nonblocking)。阻塞賦值執(zhí)行時(shí),RHS(right hand statement)估值與更新LHS(left hand statement)值一次執(zhí)行完成,計(jì)算完畢,立即更新。在執(zhí)行時(shí)阻塞同塊中的其他語(yǔ)句的執(zhí)行。阻塞式(blocking)的操作符為 “ = ”。它的執(zhí)行很像傳統(tǒng)程序設(shè)計(jì)語(yǔ)言。非阻塞賦值RHS估值與更新LHS值分兩步執(zhí)行。在單位仿真周期開(kāi)始時(shí)RHS估值,在同一單位仿真周期末更新LHS值,不阻塞同塊中其他語(yǔ)句的執(zhí)行。非阻塞式(non-blocking)的操作符為 “ <= ”,它的執(zhí)行更像并行電路,使描述電路更自然。阻塞賦值與非阻塞賦值是Verilog HDL程序設(shè)計(jì)的難點(diǎn),它們既有共同點(diǎn),也有差異,深入剖析其異同,對(duì)于硬件程序的開(kāi)發(fā)具有重大意義。
1 Verilog 事件處理機(jī)制
??? 層積事件列(The Stratified Event Queue)是一個(gè)事件管理概念模型,而非硬件邏輯。模型內(nèi)事件的具體實(shí)現(xiàn)與EDA軟件生產(chǎn)商的算法策略有關(guān)。在IEEE-2001中,Verilog把事件分為5個(gè)不同部分,按照時(shí)間順序如圖1所示。

?


??? 觸發(fā)的任何事件可以加入到這5個(gè)事件列中的任何事件列中,但只能從活躍事件列中移出。即上面的5個(gè)事件列中的事件最后都將被激活而放入活躍事件列中。層積事件列是層次模型,層積事件列的執(zhí)行順序是按優(yōu)先級(jí)排列的。任何EDA軟件都只能執(zhí)行活躍事件。其他事件列都按優(yōu)先級(jí)級(jí)別依次激活本列事件以供執(zhí)行。
1.1 活躍事件列
??? 由圖1可見(jiàn),大部分事件都被放入活躍事件列。活躍事件列里包括非阻塞賦值RHS估值。但是,非阻塞賦值的更新不是在活躍事件列,它被列成獨(dú)立的非阻塞更新事件列。活躍事件列是仿真的執(zhí)行源,從一開(kāi)始執(zhí)行活躍事件列到活躍事件列執(zhí)行完畢稱為一個(gè)仿真周期。活躍事件列中的事件可以觸發(fā)活躍或非活躍等其他事件。當(dāng)活躍事件列中的所有事件執(zhí)行完后,EDA軟件會(huì)按優(yōu)先級(jí)依次觸發(fā)其余事件列以供仿真執(zhí)行。但在當(dāng)前活躍事件列中的事件執(zhí)行順序是不確定的。
1.2 非活躍事件列
??? 發(fā)生在當(dāng)前仿真時(shí)間里并且在活躍事件列執(zhí)行完后執(zhí)行的事件列,即非活躍事件列執(zhí)行優(yōu)先級(jí)僅次于活躍事件列。如帶PLI例程的回調(diào)過(guò)程(tf_synchronize()、vpi_register_cb(cb_readwrite))。非活躍事件列中的事件亦可以觸發(fā)其他事件。如果觸發(fā)了優(yōu)先級(jí)更高的活躍事件,非活躍事件列中的其余事件執(zhí)行后移。
1.3 非阻塞賦值更新事件列
??? 活躍事件列中的每個(gè)非阻塞賦值RHS估值,都會(huì)觸發(fā)一個(gè)與之對(duì)應(yīng)的非阻塞賦值更新事件,這些事件被放在非阻塞賦值更新事件列中,執(zhí)行優(yōu)先級(jí)次于活躍與非活躍事件列。非阻塞賦值更新事件亦可以觸發(fā)其他事件。若在非阻塞賦值更新事件列中,存在多個(gè)對(duì)同一變量的先后賦值,只有最后一個(gè)有效,其余值將被覆蓋。
1.4 監(jiān)控事件列
??? 監(jiān)控事件列被放在非阻塞賦值更新事件列后。由此可見(jiàn),用監(jiān)控事件列中的監(jiān)控命令監(jiān)控得到的值都是賦值后的值,活躍事件列$display系統(tǒng)命令則可以查看非阻塞更新前的值。
1.5 未來(lái)事件列
??? 在執(zhí)行事件時(shí),如果事件含有延時(shí),為不阻礙仿真的繼續(xù)執(zhí)行,該事件將被掛起而放入未來(lái)事件列。未來(lái)事件包含未來(lái)非活躍事件和未來(lái)非阻塞賦值更新事件。
??? 理解阻塞與非阻塞賦值就需要深入理解層積事件列,層積事件列反應(yīng)了Verilog事件處理機(jī)制。
2 應(yīng)用及分析
??? 通常非阻塞賦值產(chǎn)生寄存器等存儲(chǔ)元件,對(duì)應(yīng)的物理器件是帶存貯功能的元件,如寄存器、觸發(fā)器等。阻塞賦值則對(duì)應(yīng)網(wǎng)線(wire)類型,通常與物理連線對(duì)應(yīng)。這是兩種賦值方式的最明顯的差異,也是時(shí)序邏輯用非阻塞、組合邏輯用阻塞的重要原因。但這并不是絕對(duì)的,事實(shí)上阻塞賦值對(duì)應(yīng)網(wǎng)線(wire)型,亦可對(duì)應(yīng)寄存器(reg)型;阻塞賦值也能生成存貯元件,因此不能片面理解。在組合邏輯里,鎖存器可能引發(fā)測(cè)試問(wèn)題,帶來(lái)隱患。說(shuō)明在建模時(shí),首先要從硬件出發(fā)來(lái)考慮問(wèn)題,應(yīng)先在頭腦中形成電路結(jié)構(gòu),由于賦值方式的不同,綜合結(jié)果差異甚大,運(yùn)用不當(dāng)很可能會(huì)導(dǎo)致建模失敗。阻塞賦值在時(shí)序邏輯中亦有著重要應(yīng)用,在需要實(shí)時(shí)更新的組合邏輯中只有阻塞賦值能滿足要求。
??? 以下示例代碼的功能是計(jì)算傳送過(guò)來(lái)的data中1和0的個(gè)數(shù)。
??? reg [5:0]count0,count1;
??? always @(posedge clk,negedge Rst_n)
??? ?? begin
??? ????? if(!Rst_n)
?????????? ...
??? ????? else
?????????? begin
? ?????????? count0 = 0;???????????????????????? //語(yǔ)句1
? ?????????? count1 = 0;???????????????????????? //語(yǔ)句2
? ?????????? for(i = 0;i <= 11;i = i+1)
? ????????????? begin
? ???????????????? if(data[i] == 1)
? ??????????????????? count1 = count1 + 1;??????? //語(yǔ)句3
? ???????????????? else if(data[i] == 0)
?????????????????????????? count0 = count0 - 1;?????? //語(yǔ)句4
?????????????????????????? else
???????????????????????????????? count0 = count0 + 0;???? //防止生成鎖存器
? ?????????? end
?? ??????? end
??? end
??? 在這段代碼里,count0、count1的值必須在每次計(jì)數(shù)之前被清零,count0、count1必須實(shí)時(shí)更新。顯然,只有阻塞賦值能滿足要求。非阻塞賦值分兩步完成,所有的更新事件在單位仿真周期末同時(shí)執(zhí)行,只有最后一個(gè)值有效,所以非阻塞賦值無(wú)法完成計(jì)數(shù)任務(wù)。阻塞賦值卻能很好地勝任,因?yàn)樽枞x值估值和更新一次性完成。
??? 事件上,在時(shí)序邏輯中經(jīng)常碰到上述實(shí)時(shí)更新問(wèn)題,非阻塞賦值往往無(wú)法實(shí)現(xiàn),如用阻塞賦值則可很好地解決問(wèn)題。
??? 正如阻塞賦值在時(shí)序邏輯中有重要應(yīng)用一樣,非阻塞賦值在組合邏輯中亦有不可替代的應(yīng)用。在組合邏輯中用非阻塞賦值可以把組合邏輯改造成流水線。可執(zhí)行如下所示純組合邏輯代碼,將生成純組合邏輯,綜合結(jié)果如圖2所示。

?


??? input a,b,c,clk,sel;
? ? output out;
? ? reg out,temp;
??always @(posedge clk)
? ? begin
???? temp? = a & b;???? //語(yǔ)句1
???? if(sel)
?????? out? = temp | c;?? //語(yǔ)句2
???? else
?????? out? = c;?????? //語(yǔ)句3
??? end
??? 若把上面代碼中語(yǔ)句1、語(yǔ)句2、語(yǔ)句3阻塞賦值(" = ")改為非阻塞賦值(" <= "),則綜合結(jié)果如圖3所示。

?


??? 流水線設(shè)計(jì)方法在高性能、需經(jīng)常進(jìn)行大規(guī)模運(yùn)算的組合邏輯中可以到廣泛運(yùn)用。
??? 在組合邏輯中,如在begin、end塊中同時(shí)有許多非阻塞賦值,則它們的賦值順序是并發(fā)的。實(shí)際上它們賦予的都是上一個(gè)時(shí)鐘送入寄存器的值。這與使用同一時(shí)鐘沿觸發(fā)的許多在同一個(gè)使能控制信號(hào)下賦值完全一致,并且這種賦值因?yàn)閿?shù)據(jù)保存在寄存器中,當(dāng)時(shí)鐘沿到來(lái)時(shí)都已穩(wěn)定,所以存入的數(shù)值是可靠的。用這種方法可以避免由組合邏輯產(chǎn)生的競(jìng)爭(zhēng)冒險(xiǎn)[2]
??? 在相關(guān)應(yīng)用中,非阻塞賦值能較好地解決零時(shí)刻競(jìng)爭(zhēng)冒險(xiǎn)問(wèn)題。因?yàn)榉亲枞x值分兩步完成,非阻塞賦值更新事件是在所有活躍與非活躍事件執(zhí)行完之后執(zhí)行,能確保所有敏感變量值在零時(shí)刻都被觸發(fā)[3]
??? 在同一always塊混合使用阻塞賦值與非阻塞賦值,利弊共存,混合使用的結(jié)果可能事半功倍,亦可能功虧一簣。只有了解其處理機(jī)制,深刻理解阻塞與非阻塞賦值底層實(shí)現(xiàn)的異同,方可靈活運(yùn)用。
??? 本文通過(guò)Verilog事件處理機(jī)制,詳細(xì)討論了阻塞與非阻塞賦值的區(qū)別、聯(lián)系及其應(yīng)用示例。由本文可知,阻塞與非阻塞賦值靈活多變,底層實(shí)現(xiàn)也差異甚大。因而在數(shù)字電路設(shè)計(jì)時(shí),依據(jù)預(yù)期功能,從硬件實(shí)現(xiàn)出發(fā),斟酌差異,仔細(xì)選用阻塞與非阻塞賦值才能有效避免出錯(cuò),縮短開(kāi)發(fā)周期。
參考文獻(xiàn)
[1]? IEEE Standard verilog hardware description language based on the verilog hardware description language[R]. IEEE Computer Society. IEEE. New York. NY. IEEE Std 1364-2001.
[2]? 夏宇聞.Verilog 數(shù)字系統(tǒng)設(shè)計(jì)教程[M]. 北京:北京航空航天大學(xué)出版社,2003.
[3]? CLIKFFORD E.C. nonblocking assignment in verilog synthesis. coding styles that kill[J]. SNUG (Synopsys Users Group) 2000 User Papers,2000(3).

本站內(nèi)容除特別聲明的原創(chuàng)文章之外,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,并不代表本網(wǎng)站贊同其觀點(diǎn)。轉(zhuǎn)載的所有的文章、圖片、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無(wú)法一一聯(lián)系確認(rèn)版權(quán)者。如涉及作品內(nèi)容、版權(quán)和其它問(wèn)題,請(qǐng)及時(shí)通過(guò)電子郵件或電話通知我們,以便迅速采取適當(dāng)措施,避免給雙方造成不必要的經(jīng)濟(jì)損失。聯(lián)系電話:010-82306118;郵箱:aet@chinaaet.com。
亚洲一区二区欧美_亚洲丝袜一区_99re亚洲国产精品_日韩亚洲一区二区
午夜精品久久久久久久99水蜜桃| 久久―日本道色综合久久| 亚洲欧美电影在线观看| 亚洲免费观看在线观看| 亚洲电影毛片| 影音先锋久久| 极品尤物av久久免费看| 国产午夜精品美女视频明星a级| 国产精品久久久久久妇女6080| 欧美日韩国产在线| 欧美另类综合| 欧美日韩成人在线视频| 欧美乱妇高清无乱码| 欧美了一区在线观看| 欧美激情精品久久久久久| 欧美国产精品va在线观看| 狼人天天伊人久久| 玖玖玖免费嫩草在线影院一区| 久久精品欧美| 久久人人精品| 美日韩在线观看| 欧美成人在线免费视频| 欧美激情一区二区三级高清视频| 欧美福利一区二区| 欧美久久婷婷综合色| 欧美精品啪啪| 欧美日韩视频在线一区二区观看视频| 欧美精品一区在线发布| 欧美日韩天天操| 国产精品va在线播放我和闺蜜| 欧美日精品一区视频| 欧美日韩国产影片| 欧美视频中文在线看| 国产精品电影网站| 欧美日韩情趣电影| 国产精品v亚洲精品v日韩精品 | 亚洲欧洲精品一区二区三区波多野1战4| 亚洲电影免费观看高清| 久久精品国产一区二区三| 亚洲国产精品毛片| 99精品黄色片免费大全| 一区二区成人精品| 亚洲影院免费| 久久久精品久久久久| 久久在线观看视频| 欧美韩日亚洲| 国产精品成av人在线视午夜片| 国产精品日韩精品欧美精品| 国产一区深夜福利| 在线精品国精品国产尤物884a| 最近中文字幕日韩精品| 一区二区日韩伦理片| 亚洲网站在线观看| 欧美一区二区性| 亚洲看片免费| 亚洲欧美视频在线观看| 久久久久se| 欧美交受高潮1| 国产精品久久久久久av下载红粉 | 亚洲一品av免费观看| 午夜欧美精品| 亚洲乱码国产乱码精品精天堂 | 香蕉久久夜色精品| 久久夜色精品国产亚洲aⅴ| 欧美激情国产日韩| 国产欧美二区| 亚洲国产黄色片| 亚洲伊人久久综合| 91久久精品视频| 亚洲一二三四久久| 久久亚洲精品一区| 欧美日韩日本视频| 国产亚洲成年网址在线观看| 亚洲国产精品第一区二区| 一区二区三区四区蜜桃| 久久er精品视频| 正在播放亚洲一区| 久久精品免费播放| 欧美日韩国产一区二区三区地区| 国产欧美va欧美va香蕉在| 亚洲国产小视频| 亚洲尤物视频在线| 亚洲免费av片| 久久精品噜噜噜成人av农村| 欧美日韩国产欧| 极品av少妇一区二区| 亚洲亚洲精品在线观看 | 亚洲私人黄色宅男| 久久亚洲一区| 国产精品白丝jk黑袜喷水| 在线观看国产精品淫| 亚洲欧美999| 99re国产精品| 久热精品视频在线观看一区| 国产精品免费电影| 亚洲国产欧美一区二区三区久久| 午夜精品在线| 亚洲深夜福利网站| 欧美成人自拍视频| 欧美成人精品三级在线观看 | 最新热久久免费视频| 欧美在线一二三区| 香港久久久电影| 欧美激情女人20p| 尤物yw午夜国产精品视频| 亚洲欧美日韩视频一区| 亚洲一区二区三区四区中文| 欧美不卡视频| 韩国精品在线观看| 亚洲午夜久久久久久久久电影网| 日韩视频在线观看免费| 久久亚洲电影| 国产一区二区黄色| 亚洲午夜女主播在线直播| av成人手机在线| 欧美福利影院| 亚洲福利在线视频| 亚洲高清av在线| 久久亚洲国产精品日日av夜夜| 国产视频一区三区| 亚洲性图久久| 亚洲免费在线观看| 国产精品成人一区二区| 夜夜嗨av一区二区三区免费区| 亚洲精品欧美日韩| 欧美成年视频| 亚洲国产成人一区| 亚洲人成在线免费观看| 美女主播视频一区| 又紧又大又爽精品一区二区| 久久精品视频免费播放| 久久综合久久综合久久| 黄色成人在线网址| 亚洲高清一二三区| 乱人伦精品视频在线观看| 韩日精品视频| 亚洲国产小视频| 欧美ed2k| 亚洲精品国精品久久99热| 一本久道久久久| 欧美亚洲第一页| 亚洲一区二区三区精品动漫| 亚洲欧美在线观看| 国产欧美日韩亚洲精品| 性感少妇一区| 久久视频精品在线| 亚洲国产美女| 在线一区日本视频| 国产精品日韩在线播放| 亚洲欧美三级在线| 久久久久久久网| 影音先锋中文字幕一区| 亚洲理论在线| 国产精品国产三级国产专播品爱网 | 日韩视频一区二区| 欧美日韩不卡| 一区二区三区精品国产| 午夜欧美视频| 国内精品福利| 亚洲精品久久久久久久久久久久| 欧美精选一区| 亚洲在线免费| 久久久久久一区二区| 亚洲高清视频在线观看| 一区二区黄色| 国产精品入口福利| 午夜精品久久久| 蜜臀91精品一区二区三区| 亚洲成在人线av| 中文国产一区| 国产日韩av高清| 91久久精品国产91久久性色tv| 欧美日韩高清免费| 亚洲欧美另类在线| 久久在线免费观看视频| 亚洲精品一二| 午夜天堂精品久久久久| 狠狠色噜噜狠狠色综合久| 夜夜精品视频| 国产三区精品| 亚洲美洲欧洲综合国产一区| 国产精品男女猛烈高潮激情| 亚洲国产aⅴ天堂久久| 欧美日韩精品一区二区| 亚洲欧洲av一区二区三区久久| 欧美成人黄色小视频| 亚洲性图久久| 欧美成人首页| 午夜伦欧美伦电影理论片| 欧美激情视频免费观看| 亚洲欧美综合国产精品一区| 欧美精品一区二区三| 欧美中文在线免费| 国产精品乱码人人做人人爱| 亚洲人屁股眼子交8| 国产欧美一区二区三区国产幕精品 | 亚洲日本va午夜在线电影| 国产精品高潮呻吟久久av无限| 亚洲国产一区二区三区a毛片| 国产精品成人午夜|