0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

告訴你真正的verilog執(zhí)行順序,糾正你的思路偏差

電子工程師 ? 來源:未知 ? 作者:李倩 ? 2018-08-31 16:45 ? 次閱讀

· 程序執(zhí)行順序 ·

和C/C++一類編程語言不同,HDL用于電路描述,代表著門電路和觸發(fā)器的組合。任何時(shí)刻,只要上電后,FPGA就等價(jià)于一堆數(shù)字電路,每個(gè)電路按照自己的條件執(zhí)行,不會(huì)因?yàn)槟硞€(gè)模塊放在代碼前面,就會(huì)先工作。這就需要設(shè)計(jì)人員,按照每個(gè)模塊并行工作的思路來調(diào)整設(shè)計(jì)。這給軟件開發(fā)人員入門帶來了難度,但是同時(shí)也是FPGA的價(jià)值所在,正因?yàn)镕PGA能夠并行執(zhí)行,所以很多算法和設(shè)計(jì)可以在低頻時(shí)鐘下高實(shí)時(shí)性,快速出結(jié)果。這是FPGA的優(yōu)勢,也是火起來的一個(gè)重要原因,所以希望大家好好去理解。

同時(shí)大家要明白verilog不是不能實(shí)現(xiàn)順序執(zhí)行,而是實(shí)現(xiàn)順序執(zhí)行并不像語法那么直觀,最簡單的順序執(zhí)行方法就是用狀態(tài)機(jī)去控制每一個(gè)寄存器的跳變,C/C++編程也可以認(rèn)為本質(zhì)上就是大型的一個(gè)狀態(tài)機(jī),verilog要做到那樣也只是做成狀態(tài)機(jī)去模擬他的工作。只要是數(shù)字電路能夠?qū)崿F(xiàn)的,F(xiàn)PGA都可以做到。

模塊內(nèi)部的執(zhí)行順序比較復(fù)雜,優(yōu)秀的設(shè)計(jì)中,模塊內(nèi)部是并行工作的,即使是begin end語句內(nèi)部,這里很多讀者會(huì)問,begin end不是串行語句塊嗎?下面詳細(xì)解釋這個(gè)問題。

begin end之間存在阻塞賦值和非阻塞賦值2種賦值方法,如果使用不當(dāng)不僅僅會(huì)出現(xiàn)競爭冒險(xiǎn),還會(huì)導(dǎo)致你的理解和編譯器理解不一樣,最終生成的電路和自己想的天差地別,導(dǎo)致一些難修正的錯(cuò)誤。所以必須按照以下兩條執(zhí)行準(zhǔn)則使用賦值語句:

描述組合邏輯的always塊里面用阻塞式賦值

描述時(shí)序邏輯的always塊里面用非阻塞賦值

在組合邏輯中,阻塞賦值只和電平有關(guān),往往和觸發(fā)邊沿沒有關(guān)系,可以看成是并行運(yùn)行的組合邏輯電路。而時(shí)序邏輯中,非阻塞賦值是本身就是并行執(zhí)行的。因此,優(yōu)秀的設(shè)計(jì),其begin end內(nèi)部也是并行執(zhí)行的。大家為了加深理解,可以去看看實(shí)例說明里面的例子。

· 實(shí)例說明 ·

modulepara_demo(clk,reset,a,b);

inputclk;

inputreset;

input[3:0]a;

output[3:0]b;

reg[3:0]tempa1,tempa2,b;

always@(posedgeclk)

begin

if(!reset)begin

tempa1<=?0;??

tempa2<=?0;??

b<=?0;??

end

elsebegin

tempa1<=?a?+?1;??

tempa2<=?tempa1?+?1;??

b<=?tempa2?+?1;??????

end

end

endmodule

上述代碼的RTL級(jí)圖如下,可以看出代碼最終實(shí)現(xiàn)是一個(gè)3級(jí)累加結(jié)構(gòu),每級(jí)累加結(jié)構(gòu)中間有一個(gè)觸發(fā)器打拍。也就是說這是典型的流水線結(jié)構(gòu)。每一級(jí)都在一直工作,運(yùn)行順序沒有先后,但是數(shù)據(jù)到達(dá)時(shí)間有先后,處理順序有先后。

大家再看仿真圖,tempa2 并不是等到a+1的結(jié)果給到tempa1后才執(zhí)行的tempa1+1,而是執(zhí)行a+1的同時(shí)也在執(zhí)行tempa1+1。三句累加都是同時(shí)進(jìn)行,看下圖就知道都是對(duì)前一個(gè)數(shù)值基礎(chǔ)上加1。所以tempa1和tempa2相等,而不是相差1。

看此文之前請(qǐng)千萬很熟悉verilog語法,能區(qū)分可綜合,不可綜合語句。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 寄存器
    +關(guān)注

    關(guān)注

    31

    文章

    5271

    瀏覽量

    119650
  • Verilog
    +關(guān)注

    關(guān)注

    28

    文章

    1335

    瀏覽量

    109857
  • 編譯器
    +關(guān)注

    關(guān)注

    1

    文章

    1608

    瀏覽量

    48978

原文標(biāo)題:面向硬件的設(shè)計(jì)思維——程序執(zhí)行順序

文章出處:【微信號(hào):HaveFunFPGA,微信公眾號(hào):玩兒轉(zhuǎn)FPGA】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    UBI告訴如何走向智能汽車

    UBI告訴如何走向智能汽車,UBI將會(huì)引爆整個(gè)車聯(lián)網(wǎng)市場,帶來車聯(lián)網(wǎng)大規(guī)模普及。
    發(fā)表于 10-21 08:13 ?1337次閱讀

    [公告]誰是真正的朋友?

    ,急忙奔上坡來,從草叢魚鱗病中閃出,一下咬住了狼的脖子,狼疼得直叫喚,趁狗換氣時(shí),愴惶逃走了。  回到家,朋友牛皮癬醫(yī)院都來了,  牛說:怎么不告訴我?我的硬皮病角可以剜出狼的腸子。  馬說:怎么不
    發(fā)表于 11-15 08:39

    【LabVIEW我來告訴】 Webbrowser調(diào)用的隱患

    【LabVIEW我來告訴】 Webbrowser調(diào)用的隱患 LabVIEW為我們提供了豐富的程序接口,ActiveX,.net等等,但在調(diào)用它們的時(shí)候,是否注意過他們存在的一些問題呢?在
    發(fā)表于 10-31 10:48

    【labview我來告訴】labview編程可以很簡單

    功能,有各種各樣的引用規(guī)則,還有文本語言所不會(huì)涉及到的各種節(jié)點(diǎn)……”“學(xué)起來用起來其實(shí)很難……”“G語言也有G語言的缺點(diǎn),真正做程序并不快”,等等我告訴他們,其實(shí)LabVIEW的各個(gè)功能不要太多的去
    發(fā)表于 11-11 14:17

    【labview我來告訴】用好控件的小技巧

    地使用 Picture控件的 Erase First屬性,將“1”連于此,這樣就可以擦除內(nèi)容一次,而不需要去改變真正的“Erase First”設(shè)定項(xiàng)。 ?在我的項(xiàng)目中,我在Picture控件中使用了很多拖拽的效果。有
    發(fā)表于 12-20 10:15

    【labview我來告訴】如何方便的知道事件運(yùn)行順序

    ”選項(xiàng)設(shè)為不選……通過這樣,每當(dāng)創(chuàng)建一個(gè)新的 Event 條件時(shí),VI 就會(huì)破線,仍而提醒大家需要將線連在新的Case上。 好,現(xiàn)在我告訴大家為什么我要這么做,因?yàn)檫@樣做可以在我調(diào)試亊件結(jié)構(gòu)的亊件順序
    發(fā)表于 01-04 10:05

    labview心得體會(huì)之我來告訴匯總(持續(xù)更新)

    ://bbs.elecfans.com/jishu_215000_1_1.html【labview我來告訴】如何方便的知道事件運(yùn)行順序https://bbs.elecfans.com/jishu_213347_1_1.html
    發(fā)表于 02-01 11:19

    告訴什么叫高逼格的LED

    仔細(xì)想想自己對(duì)運(yùn)動(dòng)LED最重要的需求是什么!若對(duì)來說,是用來跑步、集訓(xùn)、可穿戴,那么富思科技的LED將成為的首先。富思科技是第一個(gè)提供真正時(shí)尚型可穿戴的LED,內(nèi)嵌超高清亮度LED布料,可以通過
    發(fā)表于 03-23 16:34

    FPGA的幾點(diǎn)總結(jié),同意嗎?

    時(shí)鐘管理芯片。因此,要想學(xué)好FPGA,得用硬件的思維方式來編寫代碼,注重FPGA的系統(tǒng)結(jié)構(gòu)設(shè)計(jì),好的系統(tǒng)結(jié)構(gòu)設(shè)計(jì)會(huì)帶來質(zhì)的飛躍,這就告訴我們RTL Coding其實(shí)是硬件結(jié)構(gòu)設(shè)計(jì),而非基于處理器架構(gòu)
    發(fā)表于 11-22 14:35

    十個(gè)練習(xí)讓學(xué)會(huì)Verilog語言

    10個(gè) Verilog 練習(xí),進(jìn)階級(jí)教程 完整的pdf格式文檔電子發(fā)燒友下載地址(共26頁): 十個(gè)練習(xí)讓學(xué)會(huì)Verilog語言.pdf
    發(fā)表于 07-03 02:04

    怎樣架構(gòu)的單片機(jī)程序

    對(duì)于單片機(jī)程序來說,大家都不陌生,但是真正使用架構(gòu),考慮架構(gòu)的恐怕并不多,隨著程序開發(fā)的不斷增多,本人覺得架構(gòu)是非常必要的。前不就發(fā)帖與大家一起討論了一下怎樣架構(gòu)的單片機(jī)程序,發(fā)現(xiàn)真正使用架構(gòu)
    發(fā)表于 12-07 09:25

    基于Verilog順序狀態(tài)邏輯FSM的設(shè)計(jì)與仿真

    基于Verilog順序狀態(tài)邏輯FSM的設(shè)計(jì)與仿真  硬件描述語言Verilog為數(shù)字系統(tǒng)設(shè)計(jì)人員提供了一種在廣泛抽象層次上描述數(shù)字系統(tǒng)的方式,同時(shí),為計(jì)算機(jī)輔助設(shè)計(jì)工具
    發(fā)表于 02-04 09:32 ?1837次閱讀
    基于<b class='flag-5'>Verilog</b>的<b class='flag-5'>順序</b>狀態(tài)邏輯FSM的設(shè)計(jì)與仿真

    5款手機(jī)告訴什么是真正的旗艦

    誰說安卓不如ios?這5部手機(jī)告訴什么是真正的旗艦。
    的頭像 發(fā)表于 08-16 16:27 ?3163次閱讀

    sql where條件的執(zhí)行順序

    SQL語句中的WHERE條件是用來篩選數(shù)據(jù)的,它決定了哪些數(shù)據(jù)會(huì)被返回給用戶。WHERE條件的執(zhí)行順序是影響SQL語句性能的一個(gè)重要因素,正確地理解和優(yōu)化WHERE條件的執(zhí)行順序可以提
    的頭像 發(fā)表于 11-23 11:31 ?2015次閱讀

    verilog中for循環(huán)是串行執(zhí)行還是并行執(zhí)行

    Verilog中,for循環(huán)是并行執(zhí)行的。Verilog是一種硬件描述語言,用于描述和設(shè)計(jì)數(shù)字電路和系統(tǒng)。在硬件系統(tǒng)中,各個(gè)電路模塊是同時(shí)運(yùn)行的,并且可以并行執(zhí)行多個(gè)操作。因此,在
    的頭像 發(fā)表于 02-22 16:06 ?2421次閱讀