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

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

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

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

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

OpenFPGA ? 來(lái)源:OpenFPGA ? 作者:OpenFPGA ? 2022-10-27 08:57 ? 次閱讀

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

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

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

36d86312-5591-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。

介紹

case語(yǔ)句提供了一種簡(jiǎn)潔的方式來(lái)表示一系列決策選擇。例如:

36f4db8c-5591-11ed-a3b6-dac502259ad0.png

SystemVerilog case語(yǔ)句與C switch語(yǔ)句類(lèi)似,但有重要區(qū)別。SystemVerilog不能使用break語(yǔ)句(C使用break從switch語(yǔ)句的分支退出)。case語(yǔ)句在執(zhí)行分支后自動(dòng)退出(使用break退出case語(yǔ)句是非法的。),不能執(zhí)行break語(yǔ)句。

SystemVerilog有4種不同的case語(yǔ)句,關(guān)鍵字為case、case…inside casex和casez。這些不同case語(yǔ)句的一般語(yǔ)法和用法是相同的。這些區(qū)別將在本文后面介紹。

case、casex或casez關(guān)鍵字后面跟一個(gè)用括號(hào)括起來(lái)的case表達(dá)式。case表達(dá)式可以是網(wǎng)絡(luò)、變量、用戶(hù)定義類(lèi)型、參數(shù)常量、文字值或運(yùn)算結(jié)果。case表達(dá)式后面跟一個(gè)冒號(hào),如果case表達(dá)式與case項(xiàng)匹配,后續(xù)執(zhí)行是可以是一條語(yǔ)句或者begin-end包含的系列語(yǔ)句。

默認(rèn)case項(xiàng)。可以使用default關(guān)鍵字指定可選的默認(rèn)case項(xiàng)。如果case表達(dá)式與任何case項(xiàng)不匹配,將執(zhí)行默認(rèn)case項(xiàng)。在上面的例子中,case項(xiàng)覆蓋了2位操作碼的所有可能的2-state值。但是,如果操作碼是4-state類(lèi)型,則會(huì)有額外的X和Z值未被case項(xiàng)覆蓋。如果操作碼的任何位都是X或Z,則將執(zhí)行默認(rèn)case項(xiàng),在前面的示例中,該分支將把X值傳播到結(jié)果變量上。默認(rèn)情況下的case項(xiàng)不需要是最后一個(gè)case項(xiàng)。語(yǔ)法上,默認(rèn)case項(xiàng)可以是第一個(gè)case項(xiàng),或者在case項(xiàng)中的任何地方,代碼可讀性的最佳實(shí)踐編碼風(fēng)格是默認(rèn)case項(xiàng)為最后一個(gè)case項(xiàng)。

以逗號(hào)分隔的case項(xiàng)列表。case項(xiàng)可以是逗號(hào)分隔的列表,如以下代碼段所示:

370b0c2c-5591-11ed-a3b6-dac502259ad0.png

如果操作碼的值為2’b00或2’b01,則執(zhí)行case語(yǔ)句的第一個(gè)分支,如果值為2’b10或2’b11,則執(zhí)行第二個(gè)分支。

case與case…inside

當(dāng)只使用case關(guān)鍵字時(shí), case表達(dá)式將與case項(xiàng)進(jìn)行比較,比較的運(yùn)算符為(===)。(===)運(yùn)算符將比較表達(dá)式的每一位,這將獲得4-state值的精確匹配。在下面的代碼段中,如果select的值為1’bz,則執(zhí)行第三個(gè)分支,如果select的值為1’bx,則執(zhí)行第四個(gè)分支(此示例不可綜合;綜合不允許比較X和Z值)

37423d32-5591-11ed-a3b6-dac502259ad0.png

在case…inside語(yǔ)句中,使用(==?)通配符case相等運(yùn)算符的行為將case表達(dá)式與case項(xiàng)進(jìn)行比較(case使用===運(yùn)算符)。(==?)運(yùn)算符允許從比較中屏蔽某一位(即不進(jìn)行某一位的比較)。case項(xiàng)中的任何位被設(shè)置為x或z或?當(dāng)case表達(dá)式與case項(xiàng)進(jìn)行比較時(shí),該位位置將被忽略。

在以下示例中,如果selector的最高有效位置1,將執(zhí)行第一個(gè)分支,忽略case項(xiàng)的所有剩余位,如果selector的上兩位的值為01,將執(zhí)行第二個(gè)分支,并忽略剩余位,依此類(lèi)推:

376460a6-5591-11ed-a3b6-dac502259ad0.png

過(guò)時(shí)的casex和casez語(yǔ)句

在SystemVerilog于2005年擴(kuò)展Verilog語(yǔ)言之前,最初的Verilog語(yǔ)言使用casex和casez關(guān)鍵字來(lái)屏蔽比較中的位。SystemVerilog將casex和casez替換為case…inside關(guān)鍵字。casex和casez語(yǔ)句屏蔽了設(shè)置為x、z或?的任何位。Casez語(yǔ)句僅屏蔽設(shè)置為z或?的位

最佳實(shí)踐指南6-2
用case…inside在決策語(yǔ)句中忽略case項(xiàng)中的特定位。不要使用過(guò)時(shí)的casex和casez語(yǔ)句。

SystemVerilog取代casex和casez的原因是,它們?cè)?a target="_blank">仿真時(shí)存在嚴(yán)重缺陷,在綜合邏輯門(mén)后,其行為與RTL仿真非常不同。簡(jiǎn)而言之,casex和casez不僅允許在case項(xiàng)中屏蔽位,還允許在case表達(dá)式中屏蔽位,這種雙重掩蔽可能會(huì)導(dǎo)致執(zhí)行一個(gè)非預(yù)期的分支,而這可能不是由綜合創(chuàng)建的門(mén)級(jí)電路實(shí)現(xiàn)時(shí)采用的同一個(gè)分支。casex和casez的缺點(diǎn)在本系列文章中沒(méi)有詳細(xì)討論,因?yàn)闆](méi)有必要使用這些過(guò)時(shí)的語(yǔ)句。

case項(xiàng)優(yōu)先級(jí)和綜合優(yōu)化

case項(xiàng)按其列出的順序進(jìn)行評(píng)估。因此,第一個(gè)case項(xiàng)的優(yōu)先級(jí)高于所有后續(xù)case項(xiàng)。在評(píng)估case語(yǔ)句時(shí),仿真將始終遵循此優(yōu)先級(jí)。

這種推斷出的優(yōu)先級(jí)編碼在ASICFPGA實(shí)現(xiàn)中通常是不可取的。與并行計(jì)算相比,優(yōu)先級(jí)編碼邏輯需要更多的邏輯門(mén)和更長(zhǎng)的傳播路徑。在將case語(yǔ)句轉(zhuǎn)換為邏輯門(mén)之前,綜合編譯器將分析case項(xiàng)的值。如果兩個(gè)case項(xiàng)不可能同時(shí)為真,則綜合編譯器將自動(dòng)優(yōu)化門(mén)級(jí)實(shí)現(xiàn),以并行評(píng)估case項(xiàng),而不是作為優(yōu)先級(jí)編碼功能。

然而,如果兩個(gè)或多個(gè)case項(xiàng)可能同時(shí)為真,那么綜合將實(shí)現(xiàn)case語(yǔ)句仿真中固有的優(yōu)先級(jí)編碼邏輯。通過(guò)實(shí)施優(yōu)先級(jí)編碼,綜合時(shí)將確保ASIC或FPGA的門(mén)級(jí)行為與RTL仿真行為匹配。

例6-5顯示了一個(gè)4選1的多路復(fù)用器。在本例中,四個(gè)case表達(dá)式具有唯一的、不重疊的值。綜合器將識(shí)別到兩個(gè)case表達(dá)式不可能同時(shí)為真,并自動(dòng)刪除case項(xiàng)的優(yōu)先級(jí)編碼。圖6-5顯示了綜合器如何實(shí)現(xiàn)case語(yǔ)句。

示例6-5:使用case語(yǔ)句對(duì)4選1多路復(fù)用器建模

//`begin_keywords"1800-2012"http://useSystemVerilog-2012keywords
modulemux4to1
#(parameterN=8)
(
inputlogic[N-1:0]a,b,c,d,
inputlogic[1:0]select,
outputlogic[N-1:0]y
);

always_combbegin
case(select)
2'b00:y=a;
2'b01:y=b;
2'b10:y=c;
2'b11:y=d;
endcase
end
endmodule:mux4to1
//`end_keywords
379301b8-5591-11ed-a3b6-dac502259ad0.png 圖6-5:示例6-5的綜合結(jié)果:綜合4選1多路復(fù)用器的case語(yǔ)句

例6-5中的case項(xiàng)是互斥的,這意味著其中兩個(gè)case項(xiàng)不可能同時(shí)成立。因此,綜合編譯器刪除了case語(yǔ)句的優(yōu)先級(jí)編碼行為,并以多路復(fù)用器的形式對(duì)case項(xiàng)實(shí)現(xiàn)了更高效的并行計(jì)算,

綜合編譯器自動(dòng)刪除優(yōu)先級(jí)邏輯,只要綜合可以確定所有case項(xiàng)都是互斥的(不會(huì)有兩個(gè)或多個(gè)case項(xiàng)同時(shí)計(jì)算結(jié)果為true)。如果綜合編譯器不能確定case項(xiàng)是互斥的,那么它將保留case項(xiàng)的優(yōu)先級(jí)方式。

示例6-6類(lèi)似于示例6-3中所示的4選2優(yōu)先級(jí)編碼器,但這次使用case…inside,只允許檢查4位d_in值中的特定位。由于忽略了其他位,因此可能存在不止一個(gè)位case項(xiàng)同時(shí)為true,仿真將執(zhí)行第一個(gè)匹配分支,綜合編譯器將通過(guò)“保留case語(yǔ)句固有的優(yōu)先級(jí)編碼”來(lái)匹配該行為。

示例6-6:使用內(nèi)部的case項(xiàng)來(lái)仿真優(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;
case(d_in)inside
4'b1???:d_out=2'h3;//bit3isset
4'b01??:d_out=2'h2;//bit2isset
4'b001?:d_out=2'h1;//bit1isset
4'b0001:d_out=2'h0;//bit0isset
4'b0000:begin//nobitsset
d_out=2'b0;
error='1;
end
endcase
end
endmodule:priority_4to2_encoder
//`end_keywords

37c3aea8-5591-11ed-a3b6-dac502259ad0.png 圖6-6:示例6-6的綜合結(jié)果:case…inside作為優(yōu)先編碼器

優(yōu)先級(jí)邏輯的效果可以在一系列門(mén)電路中看到,d_in的不同位通過(guò)這些門(mén)傳播。當(dāng)使用一系列if-else-if語(yǔ)句時(shí),綜合編譯器綜合出來(lái)的電路非常相似,如上一章節(jié)的例程。

唯一和優(yōu)先決策修飾符

SystemVerilog為case和if-else決策語(yǔ)句提供三個(gè)修飾符:unique、unique0和priority。后面章節(jié)將詳細(xì)討論RTL模型中使用的修飾符。

簡(jiǎn)而言之,unique、unigue0和priority修飾符有兩個(gè)功能:

它們影響綜合編譯器在門(mén)級(jí)電路實(shí)現(xiàn)case語(yǔ)句的方式。

他們?cè)诜抡嬷袑?huì)報(bào)告警告消息,幫助驗(yàn)證綜合效果是否會(huì)按預(yù)期工作。

這些決策修飾符的一個(gè)示例用法是:

37ef2cf4-5591-11ed-a3b6-dac502259ad0.png

對(duì)于綜合,本例中的unique修飾符通知綜合編譯器case語(yǔ)句可以被認(rèn)為是完整的,即使2位狀態(tài)變量的四個(gè)可能值中只有三個(gè)被解碼。同時(shí)還通知綜合編譯器,對(duì)case項(xiàng)并行評(píng)估是可以的。

對(duì)于仿真,unique關(guān)鍵字在仿真中啟用兩個(gè)檢查例程,如果對(duì)case語(yǔ)句進(jìn)行了評(píng)估,并且state的值與任何case項(xiàng)都不匹配,則將生成違規(guī)報(bào)告。此檢查有助于驗(yàn)證將case語(yǔ)句視為完整的綜合是否安全。如果state的值同時(shí)與多個(gè)案例項(xiàng)匹配,則還會(huì)生成違規(guī)報(bào)告。該檢查有助于驗(yàn)證對(duì)case項(xiàng)并行評(píng)估是安全的,而不是按照case項(xiàng)列出的順序,

審核編輯:彭靜
聲明:本文內(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)投訴
  • 硬件
    +關(guān)注

    關(guān)注

    11

    文章

    3466

    瀏覽量

    67284
  • HDL
    HDL
    +關(guān)注

    關(guān)注

    8

    文章

    330

    瀏覽量

    47885
  • 編碼
    +關(guān)注

    關(guān)注

    6

    文章

    967

    瀏覽量

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

    關(guān)注

    1

    文章

    388

    瀏覽量

    60779

原文標(biāo)題:SystemVerilog-決策語(yǔ)句-case語(yǔ)句

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

收藏 人收藏

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    Verilog中的always內(nèi)的語(yǔ)句執(zhí)行的速度?

    Verilog中的always內(nèi)的語(yǔ)句執(zhí)行的速度是什么樣的,如果always是時(shí)鐘上升沿觸發(fā)的,會(huì)不會(huì)內(nèi)
    發(fā)表于 10-29 22:30

    mfc程序執(zhí)行流程小結(jié),MFC程序執(zhí)行順序

     摘要:本文章主要以MFC程序執(zhí)行流程執(zhí)行順序等執(zhí)行過(guò)程的剖析做出的結(jié)論,下面一起來(lái)看看原文的具體介紹。
    發(fā)表于 12-08 15:48 ?9726次閱讀
    mfc<b class='flag-5'>程序</b><b class='flag-5'>執(zhí)行</b><b class='flag-5'>流程</b>小結(jié),MFC<b class='flag-5'>程序</b>的<b class='flag-5'>執(zhí)行</b>順序

    select語(yǔ)句和update語(yǔ)句分別是怎么執(zhí)行

    最近有粉絲面試互聯(lián)網(wǎng)公司被問(wèn)到:你知道select語(yǔ)句和update語(yǔ)句分別是怎么執(zhí)行的嗎?,要我寫(xiě)一篇這兩者執(zhí)行SQL語(yǔ)句的區(qū)別,這不就來(lái)
    的頭像 發(fā)表于 11-03 09:41 ?3800次閱讀
    select<b class='flag-5'>語(yǔ)句</b>和update<b class='flag-5'>語(yǔ)句</b>分別是怎么<b class='flag-5'>執(zhí)行</b>的

    Verilog的兩種語(yǔ)句解析

    1. 語(yǔ)句有兩種,一種是 begin-end 語(yǔ)句, 通常用來(lái)標(biāo)志()執(zhí)行語(yǔ)句;一種是 fork-join
    的頭像 發(fā)表于 06-18 15:16 ?3255次閱讀

    Verilog的語(yǔ)句

    begin_end順序,用于將多條語(yǔ)句組成順序語(yǔ)句按順序一條一條執(zhí)行(除了帶有內(nèi)嵌延遲控制的非阻塞賦值
    的頭像 發(fā)表于 05-18 10:29 ?1570次閱讀

    Verilog的語(yǔ)句fork...join 和 begin...end

    begin_end順序,用于將多條語(yǔ)句組成順序語(yǔ)句按順序一條一條執(zhí)行(除了帶有內(nèi)嵌延遲控制的非阻塞賦值
    的頭像 發(fā)表于 06-09 10:30 ?3600次閱讀

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

    決策語(yǔ)句(Decision statements)允許程序執(zhí)行
    的頭像 發(fā)表于 10-21 08:58 ?3792次閱讀

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

    決策語(yǔ)句(Decision statements)允許程序執(zhí)行
    的頭像 發(fā)表于 10-21 09:04 ?1636次閱讀

    SystemVerilog中的always語(yǔ)句

    “always”關(guān)鍵字意味著這個(gè)語(yǔ)句“總是”一直執(zhí)行。大多數(shù)時(shí)候“always”后面跟一個(gè)邊沿事件或者延遲。
    的頭像 發(fā)表于 12-06 09:47 ?2809次閱讀

    SCL用GOTO語(yǔ)句執(zhí)行程序跳轉(zhuǎn)

    用GOTO語(yǔ)句能夠執(zhí)行程序跳轉(zhuǎn)。此引起立即跳轉(zhuǎn)到指定標(biāo)號(hào),為此而到同中不同的語(yǔ)句
    的頭像 發(fā)表于 02-01 09:22 ?3066次閱讀

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

    決策語(yǔ)句(Decision statements)允許程序執(zhí)行
    的頭像 發(fā)表于 02-09 14:15 ?1539次閱讀
    什么是SystemVerilog-<b class='flag-5'>決策</b><b class='flag-5'>語(yǔ)句</b>-if-else<b class='flag-5'>語(yǔ)句</b>?

    什么是程序

    程序是編程語(yǔ)句的容器。程序的主要目的是控制何時(shí)應(yīng)執(zhí)行編程
    的頭像 發(fā)表于 02-09 16:04 ?2708次閱讀
    什么是<b class='flag-5'>程序</b><b class='flag-5'>塊</b>

    WHILE語(yǔ)句如何執(zhí)行

    令“FOR”、“WHILE”和“REPEAT-UNTIL”的運(yùn)行:由于系統(tǒng)不顯示這些指令中的變量值,因此可避免對(duì)循環(huán)時(shí)間造成影響。 WHILE允許執(zhí)行條件控制的循環(huán)地執(zhí)行語(yǔ)句序列。
    的頭像 發(fā)表于 09-10 09:48 ?1097次閱讀
    WHILE<b class='flag-5'>語(yǔ)句</b>如何<b class='flag-5'>執(zhí)行</b>

    Python中什么是語(yǔ)句

    條件判斷 語(yǔ)句 什么是語(yǔ)句呢? 語(yǔ)句是在條件為真(條件
    的頭像 發(fā)表于 09-12 16:41 ?1321次閱讀

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

    單片機(jī)中的if語(yǔ)句是一種條件語(yǔ)句,用于根據(jù)不同的條件執(zhí)行不同的代碼。在程序執(zhí)行過(guò)程中,條件
    的頭像 發(fā)表于 01-05 14:04 ?2478次閱讀
    主站蜘蛛池模板: 99久久综合精品免费 | 性欧洲女人18 | 我要看18毛片 | 伊人天伊人天天网综合视频 | 十三以下岁女子毛片免费播放 | 九九热在线精品 | 天天爽夜夜爽视频 | 美女免费视频是黄的 | 久久天天躁夜夜躁狠狠躁2015 | 午夜视频1000 | 韩国三级中文字幕hd | 日本理论在线观看被窝网 | 色香影视 | 午夜视频h | 又粗又长又爽又长黄免费视频 | 天天干2018| 色噜噜人体337p人体 | 亚洲人成网站在线观看妞妞网 | 精品国内一区二区三区免费视频 | 在线观看亚洲专3333 | 日韩成人在线影院 | 美女色黄一男一女 | 91av视频| 性日韩 | 26uuu另类欧美亚洲曰本 | 丁香亚洲综合五月天婷婷 | 欧美精品一二区 | 久久婷婷色一区二区三区 | 免费网站在线视频美女被 | 天堂社区在线观看 | 国产免费高清福利拍拍拍 | 中文字幕欧美日韩 | 99成人在线观看 | av手机在线播放 | 亚洲欧美日韩高清mmm777 | av72成人 | 欧美超级碰碰 | 91福利社在线观看 | 亚洲欧美圣爱天天综合 | 午夜免费片 | 好爽毛片一区二区三区四 |