色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

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

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

systemverilog的決策語(yǔ)句if…else語(yǔ)句介紹

OpenFPGA ? 來(lái)源:OpenFPGA ? 作者:碎碎思 ? 2022-10-21 08:58 ? 次閱讀

數(shù)字硬件建模SystemVerilog-決策語(yǔ)句-if-else語(yǔ)句

經(jīng)過(guò)幾周的更新,SV核心部分用戶(hù)自定義類(lèi)型和包內(nèi)容已更新完畢,接下來(lái)就是RTL表達(dá)式和運(yùn)算符。

馬上HDLBits-SystemVerilog版本也開(kāi)始準(zhǔn)備了,基本這一部分完成后就開(kāi)始更新~

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


決策語(yǔ)句(Decision statements)允許程序塊的執(zhí)行流程根據(jù)設(shè)計(jì)中信號(hào)的當(dāng)前值分支到特定語(yǔ)句。SystemVerilog有兩個(gè)主要的決策語(yǔ)句:if…else語(yǔ)句和case語(yǔ)句,使用關(guān)鍵字case、case…inside,casex和casez。

介紹

if-else語(yǔ)句對(duì)表達(dá)式求值并執(zhí)行兩個(gè)可能的分支之一,即true分支或false分支。

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


if-else表達(dá)式可以是任何向量大小的網(wǎng)絡(luò)或變量,也可以是運(yùn)算的返回值,如果表達(dá)式的一個(gè)或多個(gè)位設(shè)置為l,則向量表達(dá)式的計(jì)算結(jié)果為true。如果表達(dá)式的所有位均為0,則表達(dá)式的計(jì)算結(jié)果為false。例如:

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


a和b的按位AND運(yùn)算的結(jié)果是8位向量(因?yàn)閍和b都是8位向量)。如果AND操作導(dǎo)致任何位置1,那么將執(zhí)行true分支。如果邏輯AND的結(jié)果為零,則將執(zhí)行false分支,

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

之前的文章也詳細(xì)介紹了返回true/false結(jié)果的運(yùn)算符。

不要對(duì)向量進(jìn)行true/false測(cè)試。評(píng)估向量為true/false可能會(huì)導(dǎo)致設(shè)計(jì)錯(cuò)誤。在前面的示例中,編寫(xiě)代碼的工程師打算測(cè)試(a & b)的true/false,但是它是8位向量值,它并不是true/false邏輯運(yùn)算的1位結(jié)果。對(duì)于a和b的某些值,if-else決策執(zhí)行的哪個(gè)分支可能不同,通過(guò)遵循僅使用標(biāo)量(1位)值或返回具有true/false結(jié)果的操作的指南,可以避免這種模糊性和可能的編碼錯(cuò)誤。

對(duì)于4狀態(tài)值,表達(dá)式可能既不是真的也不是假的,如值8’b0000000z。一個(gè)既不正確也不錯(cuò)誤的表達(dá)被認(rèn)為是未知的。當(dāng)if-else決策的表達(dá)式計(jì)算為未知時(shí),將執(zhí)行false分支。這可能會(huì)導(dǎo)致RTL模型的仿真方式以及綜合后門(mén)級(jí)模型的實(shí)際行為不匹配。后面我們會(huì)討論關(guān)于SystemVerilog模型中的X-optimism 和 X-pessimism對(duì)這種情況進(jìn)行了討論。

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

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


沒(méi)有else分支的if語(yǔ)句。if-else決策的else(false)分支是可選的。如果沒(méi)有else分支,且表達(dá)式的計(jì)算結(jié)果為false(或unknown),則不執(zhí)行任何語(yǔ)句。在下面的代碼段中,如果enable為0,則out不會(huì)更改。由于out是一個(gè)變量,它保留了以前的值,仿真時(shí)會(huì)產(chǎn)生鎖存器行為。

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


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

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


請(qǐng)注意,SystemVerilog不像某些編程語(yǔ)言那樣具有elsif關(guān)鍵字。決策鏈由包含嵌套if-else語(yǔ)句的每個(gè)else分支組成。當(dāng)上面的代碼段使用不同的縮進(jìn)編碼時(shí),這種嵌套更為明顯,如下所示。

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


一系列if-else-if決策按照語(yǔ)句的列出時(shí)序進(jìn)行評(píng)估。這將優(yōu)先考慮首先列出的判斷條件。下面的示例演示了一個(gè)可以set和reset的觸發(fā)器。如果set和reset同時(shí)激活,reset具有優(yōu)先級(jí),因?yàn)樗窃谝幌盗袥Q策中首先進(jìn)行判斷的。本例中的set和reset為低電平有效信號(hào)。

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


(該set和reset觸發(fā)器示例存在潛在的仿真故障,后面我們?cè)賹?duì)此進(jìn)行討論。)

綜合if-else語(yǔ)句。綜合編譯器實(shí)現(xiàn)if-else語(yǔ)句的方式取決于決策語(yǔ)句的上下文以及目標(biāo)ASICFPGA中可用的組件類(lèi)型。一般規(guī)則是:

組合邏輯中的if-else語(yǔ)句表現(xiàn)為多路復(fù)用器,通常在門(mén)級(jí)實(shí)現(xiàn)中實(shí)現(xiàn)為多路復(fù)用器。

如果沒(méi)有其他語(yǔ)句分配給同一個(gè)變量,則組合邏輯中沒(méi)有else的if將充當(dāng)鎖存器,這是因?yàn)榉峙涞淖兞勘A羝湎惹暗闹怠>C合器通常將這種存儲(chǔ)效果作為鎖存器來(lái)實(shí)現(xiàn),

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

時(shí)鐘邊沿評(píng)估的if-else語(yǔ)句表現(xiàn)為觸發(fā)器,并將在門(mén)級(jí)實(shí)現(xiàn)中綜合為某種類(lèi)型的寄存器

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

示例6-1:使用if-else對(duì)多路復(fù)用器功能進(jìn)行建模

`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的綜合結(jié)果:作為MUX的if-else

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

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

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

`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的綜合結(jié)果:if-else作為鎖存器

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

用于生成圖6-2的綜合編譯器將RTL功能轉(zhuǎn)換為具有未使用的set和reset輸入的通用鎖存器。最終實(shí)現(xiàn)中使用的鎖存器的具體類(lèi)型將取決于目標(biāo)ASIC或FPGA中可用的鎖存器類(lèi)型。

使用if-else作為優(yōu)先級(jí)編碼器。示例6-3說(shuō)明了4對(duì)2優(yōu)先級(jí)編碼器中的if-else-if。

示例6-3:使用if else if系列對(duì)優(yōu)先級(jí)編碼器建模

`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的綜合結(jié)果:if-else作為優(yōu)先編碼器

圖6-3中的“優(yōu)先級(jí)編碼”被綜合為一系列邏輯門(mén),其中一級(jí)的輸出成為“序列中下一級(jí)”的輸入,而不是并行編碼d_in的所有位。“該串行數(shù)據(jù)路徑”是“if-else-if”系列中計(jì)算d_in數(shù)據(jù)位的優(yōu)先級(jí)的結(jié)果。

使用if-else作為觸發(fā)器。示例6-4顯示了帶有復(fù)位和芯片使能(也稱(chēng)為負(fù)載使能或數(shù)據(jù)使能)輸入的時(shí)序邏輯觸發(fā)器中的if-else-if。因?yàn)閺?fù)位輸入是首先評(píng)估的,所以它的優(yōu)先級(jí)高于使能輸入,圖6-4顯示了綜合這個(gè)if-else-if決策序列的結(jié)果。

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

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的綜合結(jié)果:if-else作為芯片啟用觸發(fā)器

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

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

SystemVerilog-程序塊 (procedural blocks)

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

SystemVerilog-歸約運(yùn)算符(Reduction operators)





審核編輯:劉清

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

    關(guān)注

    28

    文章

    1351

    瀏覽量

    110243
  • 鎖存器
    +關(guān)注

    關(guān)注

    8

    文章

    907

    瀏覽量

    41590
  • RTL
    RTL
    +關(guān)注

    關(guān)注

    1

    文章

    385

    瀏覽量

    59903
  • 多路復(fù)用器
    +關(guān)注

    關(guān)注

    9

    文章

    873

    瀏覽量

    65324
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    C語(yǔ)言中if語(yǔ)句、if-else語(yǔ)句和switch語(yǔ)句詳解

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

    Proteus之if-else語(yǔ)句的應(yīng)用

    Proteus之if-else語(yǔ)句的應(yīng)用,很好的Proteus資料,快來(lái)學(xué)習(xí)吧。
    發(fā)表于 04-18 14:49 ?0次下載

    python判斷語(yǔ)句的詳細(xì)說(shuō)明

    python判斷語(yǔ)句:if 1. 簡(jiǎn)單小例子 如果滿(mǎn)足條件 A,則執(zhí)行代碼塊 a,否則執(zhí)行代碼塊 b。類(lèi)似這樣的控制流程語(yǔ)句,稱(chēng)之為條件語(yǔ)句。 它的基本形式是 if 判斷條件: 執(zhí)行語(yǔ)句
    的頭像 發(fā)表于 02-25 16:22 ?2392次閱讀

    帶初始化的if和switch語(yǔ)句詳解

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

    RTL表達(dá)式和運(yùn)算符

    決策語(yǔ)句(Decision statements)允許程序塊的執(zhí)行流程根據(jù)設(shè)計(jì)中信號(hào)的當(dāng)前值分支到特定語(yǔ)句SystemVerilog有兩個(gè)主要的
    的頭像 發(fā)表于 10-21 09:04 ?1382次閱讀

    決策語(yǔ)句允許程序塊的執(zhí)行流程

    SystemVerilog case語(yǔ)句與C switch語(yǔ)句類(lèi)似,但有重要區(qū)別。SystemVerilog不能使用break語(yǔ)句(C使用b
    的頭像 發(fā)表于 10-27 08:57 ?944次閱讀

    continue和break跳轉(zhuǎn)語(yǔ)句介紹

    跳轉(zhuǎn)語(yǔ)句允許程序代碼跳過(guò)一個(gè)或多個(gè)編程語(yǔ)句SystemVerilog的jump語(yǔ)句是continue、break和disable。
    的頭像 發(fā)表于 11-09 09:23 ?1704次閱讀

    什么是SystemVerilog-決策語(yǔ)句-if-else語(yǔ)句

    決策語(yǔ)句(Decision statements)允許程序塊的執(zhí)行流程根據(jù)設(shè)計(jì)中信號(hào)的當(dāng)前值分支到特定語(yǔ)句SystemVerilog有兩個(gè)主要的
    的頭像 發(fā)表于 02-09 14:15 ?1225次閱讀
    什么是<b class='flag-5'>SystemVerilog</b>-<b class='flag-5'>決策</b><b class='flag-5'>語(yǔ)句</b>-if-<b class='flag-5'>else</b><b class='flag-5'>語(yǔ)句</b>?

    C語(yǔ)言if語(yǔ)句最常見(jiàn)的幾種形式

    語(yǔ)句1和語(yǔ)句2可以是一個(gè)簡(jiǎn)單的語(yǔ)句,也可以是一個(gè)復(fù)合語(yǔ)句,還可以是另一個(gè)if語(yǔ)句。 * 方括號(hào)內(nèi)的部分(即
    的頭像 發(fā)表于 03-09 11:05 ?2019次閱讀

    詳解Python條件語(yǔ)句

    在 Python 中,if...else 是一種條件語(yǔ)句,可以根據(jù)給定的條件執(zhí)行不同的操作。這個(gè)語(yǔ)句通常用于控制程序的流程。
    的頭像 發(fā)表于 04-19 15:39 ?846次閱讀

    在Python中的if...else條件語(yǔ)句介紹

    在 Python 中,if...else 是一種條件語(yǔ)句,可以根據(jù)給定的條件執(zhí)行不同的操作。這個(gè)語(yǔ)句通常用于控制程序的流程。
    的頭像 發(fā)表于 04-19 15:43 ?1211次閱讀

    Verilog中的If語(yǔ)句和case語(yǔ)句介紹

    我們?cè)谏弦黄恼轮幸呀?jīng)看到了如何使用程序塊(例如 always 塊來(lái)編寫(xiě)按順序執(zhí)行的 verilog 代碼。 我們還可以在程序塊中使用許多語(yǔ)句來(lái)控制在我們的verilog設(shè)計(jì)中信號(hào)賦值的方式
    的頭像 發(fā)表于 05-11 15:37 ?4712次閱讀
    Verilog中的If<b class='flag-5'>語(yǔ)句</b>和case<b class='flag-5'>語(yǔ)句</b><b class='flag-5'>介紹</b>

    Python條件和條件語(yǔ)句

    print ( 'your age is' , age) 5 print ( 'adult' ) else語(yǔ)句 else子句只是增加一種選擇(之所以叫做子句是因?yàn)樗皇仟?dú)立的語(yǔ)句,而
    的頭像 發(fā)表于 09-12 16:45 ?628次閱讀

    單片機(jī)if是什么語(yǔ)句

    具有如下的結(jié)構(gòu): if (條件) { // 如果條件為真,則執(zhí)行這里的代碼塊 } else { // 如果條件為假,則執(zhí)行這里的代碼塊 } 在這個(gè)結(jié)構(gòu)中,條件是一個(gè)邏輯表達(dá)式,它可以是一個(gè)比較運(yùn)算符(如==、!=、>、 =、 實(shí)際應(yīng)用中,if語(yǔ)句可以進(jìn)行多級(jí)嵌套,在
    的頭像 發(fā)表于 01-05 14:04 ?1901次閱讀

    assign語(yǔ)句和always語(yǔ)句的用法

    Assign語(yǔ)句和Always語(yǔ)句是在硬件描述語(yǔ)言(HDL)中常用的兩種語(yǔ)句,用于對(duì)數(shù)字電路建模和設(shè)計(jì)。Assign語(yǔ)句用于連續(xù)賦值,而Always
    的頭像 發(fā)表于 02-22 16:24 ?2736次閱讀
    主站蜘蛛池模板: 无限资源日本2019版免费| 97SE亚洲国产综合自在线不卡| 亚洲 欧美 日韩 精品 自拍 | 久久精品热老司机| 蜜柚视频在线观看全集免费观看| 青青久久精品| 亚洲高清毛片一区二区| 97超碰97资源在线观看| 国产69精品久久久熟女| 精品视频在线观看视频免费视频| 欧美精品一区二区三区视频| 午夜免费小视频| 最新无码国产在线视频| 公交车被CAO到合不拢腿| 久久久大香菇| 射死你天天日| 中国拍三a级的明星女| 国产爱豆剧果冻传媒在线 | 久久久精品3d动漫一区二区三区| 秋霞电影网午夜鲁丝片| 亚洲精品国产在线网站| chinese黑人第一次| 国产在线高清视频无码| 欧美性appstin孕妇| 亚洲欧洲日韩天堂无吗| 成人网络电视破解版| 久久亚洲AV无码精品午色夜麻豆| 色婷婷五月综合中文字幕| 中文字幕一区二区三区在线播放| 国产精品96久久久久久AV不卡| 麻豆一二三四区乱码| 欧美牲交A欧美牲交VDO| 亚洲精品久久久久69影院| 白百合在线观看| 久久有码中文字幕| 亚色九九九全国免费视频| 99久热这里精品免费| 精品一区二区三区高清免费观看| 少妇精品久久久一区二区三区| 4480YY无码午夜私人影院| 国产又湿又黄又硬又刺激视频|