· 程序執(zhí)行順序 ·
和C/C++一類編程語言不同,HDL用于電路描述,代表著門電路和觸發(fā)器的組合。任何時刻,只要上電后,FPGA就等價于一堆數(shù)字電路,每個電路按照自己的條件執(zhí)行,不會因為某個模塊放在代碼前面,就會先工作。這就需要設(shè)計人員,按照每個模塊并行工作的思路來調(diào)整設(shè)計。這給軟件開發(fā)人員入門帶來了難度,但是同時也是FPGA的價值所在,正因為FPGA能夠并行執(zhí)行,所以很多算法和設(shè)計可以在低頻時鐘下高實時性,快速出結(jié)果。這是FPGA的優(yōu)勢,也是火起來的一個重要原因,所以希望大家好好去理解。
同時大家要明白verilog不是不能實現(xiàn)順序執(zhí)行,而是實現(xiàn)順序執(zhí)行并不像語法那么直觀,最簡單的順序執(zhí)行方法就是用狀態(tài)機去控制每一個寄存器的跳變,C/C++編程也可以認為本質(zhì)上就是大型的一個狀態(tài)機,verilog要做到那樣也只是做成狀態(tài)機去模擬他的工作。只要是數(shù)字電路能夠?qū)崿F(xiàn)的,F(xiàn)PGA都可以做到。
模塊內(nèi)部的執(zhí)行順序比較復(fù)雜,優(yōu)秀的設(shè)計中,模塊內(nèi)部是并行工作的,即使是begin end語句內(nèi)部,這里很多讀者會問,begin end不是串行語句塊嗎?下面詳細解釋這個問題。
begin end之間存在阻塞賦值和非阻塞賦值2種賦值方法,如果使用不當不僅僅會出現(xiàn)競爭冒險,還會導(dǎo)致你的理解和編譯器理解不一樣,最終生成的電路和自己想的天差地別,導(dǎo)致一些難修正的錯誤。所以必須按照以下兩條執(zhí)行準則使用賦值語句:
描述組合邏輯的always塊里面用阻塞式賦值
描述時序邏輯的always塊里面用非阻塞賦值
在組合邏輯中,阻塞賦值只和電平有關(guān),往往和觸發(fā)邊沿沒有關(guān)系,可以看成是并行運行的組合邏輯電路。而時序邏輯中,非阻塞賦值是本身就是并行執(zhí)行的。因此,優(yōu)秀的設(shè)計,其begin end內(nèi)部也是并行執(zhí)行的。大家為了加深理解,可以去看看實例說明里面的例子。
· 實例說明 ·
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級圖如下,可以看出代碼最終實現(xiàn)是一個3級累加結(jié)構(gòu),每級累加結(jié)構(gòu)中間有一個觸發(fā)器打拍。也就是說這是典型的流水線結(jié)構(gòu)。每一級都在一直工作,運行順序沒有先后,但是數(shù)據(jù)到達時間有先后,處理順序有先后。
大家再看仿真圖,tempa2 并不是等到a+1的結(jié)果給到tempa1后才執(zhí)行的tempa1+1,而是執(zhí)行a+1的同時也在執(zhí)行tempa1+1。三句累加都是同時進行,看下圖就知道都是對前一個數(shù)值基礎(chǔ)上加1。所以tempa1和tempa2相等,而不是相差1。
看此文之前請千萬很熟悉verilog語法,能區(qū)分可綜合,不可綜合語句。
-
寄存器
+關(guān)注
關(guān)注
31文章
5424瀏覽量
123508 -
Verilog
+關(guān)注
關(guān)注
29文章
1366瀏覽量
111909 -
編譯器
+關(guān)注
關(guān)注
1文章
1657瀏覽量
49923
原文標題:面向硬件的設(shè)計思維——程序執(zhí)行順序
文章出處:【微信號:HaveFunFPGA,微信公眾號:玩兒轉(zhuǎn)FPGA】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
UBI告訴你如何走向智能汽車
[公告]誰是真正的朋友?
【LabVIEW我來告訴你】 Webbrowser調(diào)用的隱患
【labview我來告訴你】labview編程可以很簡單
【labview我來告訴你】用好控件的小技巧
【labview我來告訴你】如何方便的知道事件運行順序
labview心得體會之我來告訴你匯總(持續(xù)更新)
告訴你什么叫高逼格的LED
FPGA的幾點總結(jié),你同意嗎?
十個練習(xí)讓你學(xué)會Verilog語言
怎樣架構(gòu)你的單片機程序
基于Verilog的順序狀態(tài)邏輯FSM的設(shè)計與仿真

評論