在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

systemverilog的決策語句if…else語句介紹

OpenFPGA ? 來源:OpenFPGA ? 作者:碎碎思 ? 2022-10-21 08:58 ? 次閱讀

數字硬件建模SystemVerilog-決策語句-if-else語句

經過幾周的更新,SV核心部分用戶自定義類型和包內容已更新完畢,接下來就是RTL表達式和運算符。

馬上HDLBits-SystemVerilog版本也開始準備了,基本這一部分完成后就開始更新~

c29ed34c-50da-11ed-a3b6-dac502259ad0.png


決策語句(Decision statements)允許程序塊的執行流程根據設計中信號的當前值分支到特定語句。SystemVerilog有兩個主要的決策語句:if…else語句和case語句,使用關鍵字case、case…inside,casex和casez。

介紹

if-else語句對表達式求值并執行兩個可能的分支之一,即true分支或false分支。

c2ccbd84-50da-11ed-a3b6-dac502259ad0.png


if-else表達式可以是任何向量大小的網絡或變量,也可以是運算的返回值,如果表達式的一個或多個位設置為l,則向量表達式的計算結果為true。如果表達式的所有位均為0,則表達式的計算結果為false。例如:

c2e2ea5a-50da-11ed-a3b6-dac502259ad0.png


a和b的按位AND運算的結果是8位向量(因為a和b都是8位向量)。如果AND操作導致任何位置1,那么將執行true分支。如果邏輯AND的結果為零,則將執行false分支,

最佳實踐指南6-1
對于if-else條件表達式,盡量只使用1位值或返回true/false操作。不要將向量用作if-else表達式。

之前的文章也詳細介紹了返回true/false結果的運算符。

不要對向量進行true/false測試。評估向量為true/false可能會導致設計錯誤。在前面的示例中,編寫代碼的工程師打算測試(a & b)的true/false,但是它是8位向量值,它并不是true/false邏輯運算的1位結果。對于a和b的某些值,if-else決策執行的哪個分支可能不同,通過遵循僅使用標量(1位)值或返回具有true/false結果的操作的指南,可以避免這種模糊性和可能的編碼錯誤。

對于4狀態值,表達式可能既不是真的也不是假的,如值8’b0000000z。一個既不正確也不錯誤的表達被認為是未知的。當if-else決策的表達式計算為未知時,將執行false分支。這可能會導致RTL模型的仿真方式以及綜合后門級模型的實際行為不匹配。后面我們會討論關于SystemVerilog模型中的X-optimism 和 X-pessimism對這種情況進行了討論。

if-else決策的每個分支可以是一條語句,也可以是一組包含在begin和end之間的語句,如下面的代碼段所示,

c2ee8b9e-50da-11ed-a3b6-dac502259ad0.png


沒有else分支的if語句。if-else決策的else(false)分支是可選的。如果沒有else分支,且表達式的計算結果為false(或unknown),則不執行任何語句。在下面的代碼段中,如果enable為0,則out不會更改。由于out是一個變量,它保留了以前的值,仿真時會產生鎖存器行為。

c30b2d9e-50da-11ed-a3b6-dac502259ad0.png


If-else-if。多個判斷語句可以由一系列if-else語句組成,如下面的代碼片段所示。

c3203982-50da-11ed-a3b6-dac502259ad0.png


請注意,SystemVerilog不像某些編程語言那樣具有elsif關鍵字。決策鏈由包含嵌套if-else語句的每個else分支組成。當上面的代碼段使用不同的縮進編碼時,這種嵌套更為明顯,如下所示。

c32daa54-50da-11ed-a3b6-dac502259ad0.png


一系列if-else-if決策按照語句的列出時序進行評估。這將優先考慮首先列出的判斷條件。下面的示例演示了一個可以set和reset的觸發器。如果set和reset同時激活,reset具有優先級,因為它是在一系列決策中首先進行判斷的。本例中的set和reset為低電平有效信號。

c35c3112-50da-11ed-a3b6-dac502259ad0.png


(該set和reset觸發器示例存在潛在的仿真故障,后面我們再對此進行討論。)

綜合if-else語句。綜合編譯器實現if-else語句的方式取決于決策語句的上下文以及目標ASICFPGA中可用的組件類型。一般規則是:

組合邏輯中的if-else語句表現為多路復用器,通常在門級實現中實現為多路復用器。

如果沒有其他語句分配給同一個變量,則組合邏輯中沒有else的if將充當鎖存器,這是因為分配的變量保留其先前的值。綜合器通常將這種存儲效果作為鎖存器來實現,

組合邏輯中的if-else-if語句系列使用優先級編碼行為進行仿真,其中每個if語句優先于該系列中的任何后續if語句。如果所有決策表達式都是互斥的(兩個或多個表達式不可能同時為真),則綜合編譯器將刪除優先級編碼。

時鐘邊沿評估的if-else語句表現為觸發器,并將在門級實現中綜合為某種類型的寄存器

使用if-else作為多路復用器。圖6-1中的示例6-1及其附帶的綜合結果顯示了,綜合器會在多路復用器的上下文中判斷是否使用了else。

示例6-1:使用if-else對多路復用器功能進行建模

`begin_keywords"1800-2012"http://useSystemVerilog-2012keywords
modulemux2to1
#(parameterN=4)//bussize
(inputlogicsel,//1-bitinput
inputlogic[N-1:0]a,b,//scalableinputsize
outputlogic[N-1:0]y//scalableoutputsize
);
timeunit1ns;timeprecision1ns;

always_combbegin
if(sel)y=a;
elsey=b;
end

endmodule:mux2to1
`end_keywords

圖6-1:示例6-1的綜合結果:作為MUX的if-else

c378be86-50da-11ed-a3b6-dac502259ad0.png

使用if-else作為鎖存器。示例6-2顯示了表示鎖存器的if語句。

示例6-2:使用if不適用else來仿真鎖存器功能

`begin_keywords"1800-2012"http://useSystemVerilog-2012keywords
modulelatch
#(parameterN=4)//bussize
(inputlogicena,//1-bitinput
inputlogic[N-1:0]in,//scalableinputsize
outputlogic[N-1:0]out//scalableoutputsize
);
timeunit1ns;timeprecision1ns;

always_latchbegin
if(ena)out<=?in;?
??end

endmodule:?latch
`end_keywords
圖6-2:示例6-2的綜合結果:if-else作為鎖存器

c3d2566c-50da-11ed-a3b6-dac502259ad0.png

用于生成圖6-2的綜合編譯器將RTL功能轉換為具有未使用的set和reset輸入的通用鎖存器。最終實現中使用的鎖存器的具體類型將取決于目標ASIC或FPGA中可用的鎖存器類型。

使用if-else作為優先級編碼器。示例6-3說明了4對2優先級編碼器中的if-else-if。

示例6-3:使用if else if系列對優先級編碼器建模

`begin_keywords"1800-2012"http://useSystemVerilog-2012keywords
modulepriority_4to2_encoder(
inputlogic[3:0]d_in,
outputlogic[1:0]d_out,
outputlogicerror
);
timeunit1ns;timeprecision1ns;

always_combbegin
error='0;
if(d_in[3])d_out=2'h3;//bit3isset
elseif(d_in[2])d_out=2'h2;//bit2isset
elseif(d_in[1])d_out=2'h1;//bit1isset
elseif(d_in[0])d_out=2'h0;//bit0isset
elsebegin//nobitsset
d_out=2'b0;
error='1;
end
end
endmodule:priority_4to2_encoder
`end_keywords

c3fc9166-50da-11ed-a3b6-dac502259ad0.png

圖6-3;示例6-3的綜合結果:if-else作為優先編碼器

圖6-3中的“優先級編碼”被綜合為一系列邏輯門,其中一級的輸出成為“序列中下一級”的輸入,而不是并行編碼d_in的所有位。“該串行數據路徑”是“if-else-if”系列中計算d_in數據位的優先級的結果。

使用if-else作為觸發器。示例6-4顯示了帶有復位和芯片使能(也稱為負載使能或數據使能)輸入的時序邏輯觸發器中的if-else-if。因為復位輸入是首先評估的,所以它的優先級高于使能輸入,圖6-4顯示了綜合這個if-else-if決策序列的結果。

例6-4;使用if-else-if系列為帶復位和芯片使能的觸發器建模

moduleenable_ff
#(parameterN=1)//bussize
(inputlogicclk,//posedgetriggeredclk
inputlogicrstN,//activelowasyncreset
inputlogicenable,//activehighchipenable
inputlogic[N-1:0]d,//scalableinputsize
outputlogic[N-1:0]q//scalableoutputsize
);
timeunit1ns;timeprecision1ns;

always_ff@(posedgeclkornegedgerstN)//asyncreset
if(!rstN)q<=?'0;??????????????//?active-low?reset
???else?if?(enable)?q?<=?d;???????????????//?store?if?enabled

endmodule:?enable_ff

c43629a8-50da-11ed-a3b6-dac502259ad0.png

圖6-4:示例6-4的綜合結果:if-else作為芯片啟用觸發器

圖6-4顯示了綜合如何將帶低電平復位和使能的芯片觸發器映射到通用組件。該過程的下一步是綜合編譯器將該通用組件映射到目標ASIC或FPGA設備中可用的特定類型的觸發器,如果該目標設備沒有芯片使能觸發器,則綜合將在觸發器之外添加多路復用器功能,以模擬芯片使能行為,如果觸發器使能,多路復用器將把新的數據值傳遞給D輸入,并將觸發器Q輸出反饋給D輸入。

如果觸發器未使能,則輸入。以類似的方式,如果目標設備沒有具有異步低電平有效的復位的觸發器,則綜合編譯器將在觸發器之外添加功能,以模擬這種行為,后面再討論具有各種復位類型的建模和綜合觸發器。

SystemVerilog-程序塊 (procedural blocks)

c47964b6-50da-11ed-a3b6-dac502259ad0.jpg

SystemVerilog-歸約運算符(Reduction operators)





審核編輯:劉清

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • Verilog
    +關注

    關注

    28

    文章

    1351

    瀏覽量

    110101
  • 鎖存器
    +關注

    關注

    8

    文章

    906

    瀏覽量

    41509
  • RTL
    RTL
    +關注

    關注

    1

    文章

    385

    瀏覽量

    59791
  • 多路復用器
    +關注

    關注

    9

    文章

    873

    瀏覽量

    65300
收藏 人收藏

    評論

    相關推薦

    C語言中if語句、if-else語句和switch語句詳解

    在C語言中,有三種條件判斷結構:if語句、if-else語句和switch語句
    發表于 08-18 16:36 ?1.2w次閱讀
    C語言中if<b class='flag-5'>語句</b>、if-<b class='flag-5'>else</b><b class='flag-5'>語句</b>和switch<b class='flag-5'>語句</b>詳解

    Proteus之if-else語句的應用

    Proteus之if-else語句的應用,很好的Proteus資料,快來學習吧。
    發表于 04-18 14:49 ?0次下載

    python判斷語句的詳細說明

    python判斷語句:if 1. 簡單小例子 如果滿足條件 A,則執行代碼塊 a,否則執行代碼塊 b。類似這樣的控制流程語句,稱之為條件語句。 它的基本形式是 if 判斷條件: 執行語句
    的頭像 發表于 02-25 16:22 ?2370次閱讀

    帶初始化的if和switch語句詳解

    在上面的代碼中,初始化語句是int s = check()。s的生命周期是整個if語句,這里也包含else語句
    的頭像 發表于 10-14 10:50 ?1388次閱讀

    RTL表達式和運算符

    決策語句(Decision statements)允許程序塊的執行流程根據設計中信號的當前值分支到特定語句SystemVerilog有兩個主要的
    的頭像 發表于 10-21 09:04 ?1354次閱讀

    決策語句允許程序塊的執行流程

    SystemVerilog case語句與C switch語句類似,但有重要區別。SystemVerilog不能使用break語句(C使用b
    的頭像 發表于 10-27 08:57 ?913次閱讀

    continue和break跳轉語句介紹

    跳轉語句允許程序代碼跳過一個或多個編程語句,SystemVerilog的jump語句是continue、break和disable。
    的頭像 發表于 11-09 09:23 ?1638次閱讀

    什么是SystemVerilog-決策語句-if-else語句

    決策語句(Decision statements)允許程序塊的執行流程根據設計中信號的當前值分支到特定語句。SystemVerilog有兩個主要的
    的頭像 發表于 02-09 14:15 ?1175次閱讀
    什么是<b class='flag-5'>SystemVerilog</b>-<b class='flag-5'>決策</b><b class='flag-5'>語句</b>-if-<b class='flag-5'>else</b><b class='flag-5'>語句</b>?

    C語言if語句最常見的幾種形式

    語句1和語句2可以是一個簡單的語句,也可以是一個復合語句,還可以是另一個if語句。 * 方括號內的部分(即
    的頭像 發表于 03-09 11:05 ?1961次閱讀

    詳解Python條件語句

    在 Python 中,if...else 是一種條件語句,可以根據給定的條件執行不同的操作。這個語句通常用于控制程序的流程。
    的頭像 發表于 04-19 15:39 ?823次閱讀

    在Python中的if...else條件語句介紹

    在 Python 中,if...else 是一種條件語句,可以根據給定的條件執行不同的操作。這個語句通常用于控制程序的流程。
    的頭像 發表于 04-19 15:43 ?1177次閱讀

    Verilog中的If語句和case語句介紹

    我們在上一篇文章中已經看到了如何使用程序塊(例如 always 塊來編寫按順序執行的 verilog 代碼。 我們還可以在程序塊中使用許多語句來控制在我們的verilog設計中信號賦值的方式
    的頭像 發表于 05-11 15:37 ?4564次閱讀
    Verilog中的If<b class='flag-5'>語句</b>和case<b class='flag-5'>語句</b><b class='flag-5'>介紹</b>

    Python條件和條件語句

    print ( 'your age is' , age) 5 print ( 'adult' ) else語句 else子句只是增加一種選擇(之所以叫做子句是因為它不是獨立的語句,而
    的頭像 發表于 09-12 16:45 ?608次閱讀

    單片機if是什么語句

    具有如下的結構: if (條件) { // 如果條件為真,則執行這里的代碼塊 } else { // 如果條件為假,則執行這里的代碼塊 } 在這個結構中,條件是一個邏輯表達式,它可以是一個比較運算符(如==、!=、>、 =、 實際應用中,if語句可以進行多級嵌套,在
    的頭像 發表于 01-05 14:04 ?1811次閱讀

    assign語句和always語句的用法

    Assign語句和Always語句是在硬件描述語言(HDL)中常用的兩種語句,用于對數字電路建模和設計。Assign語句用于連續賦值,而Always
    的頭像 發表于 02-22 16:24 ?2565次閱讀
    主站蜘蛛池模板: 日本三级全黄| 激情丁香网| 亚洲91色| 四虎影院在线视频| 狠狠88综合久久久久综合网| 色综合综合色| 国产香蕉在线精彩视频| 高清一级| 糖心vlog麻豆精东影业传媒| 色综合视频在线| 欧美两性网| 国产三级一区| 东北美女野外bbwbbw免费| 伊人网亚洲| 日日噜噜爽爽狠狠视频| 国模精品| 草综合| 女同性大尺度床戏视频| 欧美一区二区三区高清视频| 国产1区2区三区不卡| 天天干夜夜操美女| 成人欧美另类人妖| 五月婷花| 自拍偷拍福利视频| 亚洲日本视频| 性欧美大胆高清视频| xxx亚洲日本| 欧美又黄又嫩大片a级| 91在线免费观看网站| 最新国产你懂的在线网址| 色老头影院| 国产成人精品视频一区二区不卡| 爱夜夜性夜夜夜夜夜夜爽| 四虎国产精品高清在线观看| 久久99久久精品免费思思6| 天天摸天天摸天天躁| 国产尤物在线视频| 免费看片aⅴ免费大片| 天天夜约| 亚洲码在线| 黄色超污网站|