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

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

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

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

FPGA代碼經(jīng)驗(yàn) case,casez,casex語(yǔ)句

454398 ? 來(lái)源:FPGA技術(shù)聯(lián)盟 ? 作者:FPGA技術(shù)聯(lián)盟 ? 2020-12-11 10:42 ? 次閱讀

10. case,casez,casex語(yǔ)句

Verilog定義了case,casez和casex語(yǔ)句,用于做多種情況下的選擇語(yǔ)句。

reg [1:0] sel;

reg [2:0] result;

always @(*)

case(sel)

2’b00: result = 3’d0;

2’b01: result = 3’d1;

2’b10: result = 3’d2;

endcase

使用case語(yǔ)句代替嵌套的if-else將會(huì)產(chǎn)生更易讀的代碼,更好的邏輯利用率和更高的性能。

casez和casex語(yǔ)句在比較中允許“don't care”條件。 casez將“z“”值視為"don't care",casex將“z”和“x”值都視為“don't care”。如果casez或casex表達(dá)式中的任何位都是"don't care value",那么該位將被忽略。以下是casez和casex的例子。

reg [1:0] sel;

reg [2:0] result;

// using casez

always @(*)

casez(sel)

2’b0?: result = 3’d0;

2’b10: result = 3’d1;

2’b11: result = 3’d2;

endcase

// using casex

always @(*)

casex(sel)

2’b0x: result = 3’d0;

2’b10: result = 3’d1;

2’b11: result = 3’d2;

Endcase

case的表達(dá)式可以是一個(gè)常量,如下例所示。

reg [1:0] sel;

reg [2:0] result;

always @(*)

case(1

~sel[1]: result = 3’d0;

sel[1] & ~sel[0]: result = 3’d1;

sel[1] & sel[0]: result = 3’d2;

Endcase

在案例中使用don't care條件很容易導(dǎo)致case 條件重疊或重復(fù)。而且,使用這些語(yǔ)句會(huì)導(dǎo)致綜合和仿真不匹配。以下是案例case條件重疊的一個(gè)例子。

// casez statement contains overlapped case items

reg [1:0] sel;

reg [2:0] result;

always @(*)

casez(sel)

2’b0z: result = 3’d0;

2’b10: result = 3’d2;

2’b11: result = 3’d3;

2’b01: result = 3’d1; // overlap with 2’b0z

Endcase

允許重疊或重復(fù)的case條件,在大多數(shù)情況下不會(huì)觸發(fā)任何仿真或綜合警告。這是一種危險(xiǎn)且難以調(diào)試的情況.。建議開(kāi)發(fā)人員完全避免使用casex和casez語(yǔ)句。

在case語(yǔ)句中添加一個(gè)默認(rèn)的條件是避免一系列問(wèn)題的簡(jiǎn)單方法。 有兩種方法可以達(dá)到相同的效果,如以下示例所示。

reg [1:0] sel;

reg [2:0] result;

// using default clause

always @(*)

case(sel)

2’b00: result = 3’d0;

2’b01: result = 3’d1;

2’b10: result = 3’d2;

default: result = 3’d3;

endcase

// 在case語(yǔ)句之前進(jìn)行默認(rèn)賦值

always @(*)

result = 3’d3;

case(sel)

2’b00: result = 3’d0;

2’b01: result = 3’d1;

2’b10: result = 3’d2;

Endcase

11. 在always塊中混合阻塞和非阻塞賦值

Verilog指定了總是可以出現(xiàn)在塊中的兩種賦值類(lèi)型:阻塞和非阻塞。阻塞和非阻塞賦值分別用于描述組合邏輯和時(shí)序邏輯。永遠(yuǎn)不要在同一個(gè)塊中混合使用阻塞和非阻塞賦值。這樣做可能會(huì)導(dǎo)致不可預(yù)知的綜合和仿真結(jié)果。在許多情況下,綜合工具不會(huì)產(chǎn)生任何警告,但綜合結(jié)果將是不正確的。以下兩個(gè)代碼示例說(shuō)明了阻塞和非阻塞賦值的混合使用。

reg blocking, non_blocking;

always @(posedge clk) begin

if(reset) begin

blocking = 0;

non_blocking

end

else begin

blocking = ^data;

non_blocking

end

end

always @(*) begin

blocking = ^data;

non_blocking

end

正確的方法是:

reg blocking, non_blocking;

always @(posedge clk) begin

if(reset) begin

non_blocking

end

else begin

non_blocking

end

end

always @(*) begin

blocking = ^data;

End

12. 多個(gè)阻塞賦值

always塊中的阻塞賦值按其順序執(zhí)行。 盡管這樣做通常很方便,但是建議開(kāi)發(fā)者限制使用多個(gè)阻塞賦值來(lái)賦值always塊中的相同變量。下面的兩個(gè)代碼示例顯示了使用多個(gè)阻塞分配的潛在問(wèn)題。

reg signal_a, signal_b, signal_c, signal_d;

always (*) begin

signal_a = signal_b & signal_c;

// …

// additional code

signal_d = signal_a & signal_e;

end

無(wú)意中改變signal_a和signal_d分配的順序?qū)?huì)破壞signal_d的功能。

reg [15:0] signal_a, signal_b;

always (*) begin

signal_a[15:12] = 4’b0;

// …

// additional code

signal_a = signal_b;

End

signal_a的最后一個(gè)賦值優(yōu)先,signal_a的位[15:12]永遠(yuǎn)不會(huì)被復(fù)位。

13. 使用命名的always塊

以下是always塊的例子。

reg reg_unnamed;

always @(posedge clk) begin : myname

// only visible in the “myname” block

reg reg_named;

// post-synthesis name : myname.reg_named

reg_named

// post-synthesis name : reg_unnamed

reg_unnamed

end // always

命名塊可以在幾種情況下有用。 因?yàn)閍lways塊是唯一標(biāo)識(shí)的,所以在仿真中更容易找到它。 而且,限制變量的范圍允許重復(fù)使用相同的變量名稱。

編輯:hfy

聲明:本文內(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)投訴
  • FPGA
    +關(guān)注

    關(guān)注

    1629

    文章

    21754

    瀏覽量

    604223
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    Verilog HDL語(yǔ)言編程的誤區(qū)與經(jīng)驗(yàn)

    中使用casex語(yǔ)句當(dāng)在可綜合代碼中使用casez語(yǔ)句時(shí) 要小心當(dāng)寫(xiě)case
    發(fā)表于 03-26 08:00

    如何解決vhdl代碼中的case語(yǔ)句問(wèn)題?

    大家好 ...我在使用case語(yǔ)句時(shí)遇到問(wèn)題....雖然我使用它如下::-------------------------------------------------- ---過(guò)程(CLK)開(kāi)始
    發(fā)表于 06-26 11:47

    在SpinalHDL中關(guān)于casez的使用

    為:沒(méi)什么大的問(wèn)題。但我們知道,在Verilog中,存在casecasezcasex三種語(yǔ)法(本篇不做三種語(yǔ)法的區(qū)分與討論,對(duì)此感興趣的小伙伴可以自行百度)。像下面的這種代碼:我們
    發(fā)表于 07-06 10:59

    verilog中if與case語(yǔ)句不完整產(chǎn)生鎖存器的原因分析

      在很多地方都能看到,verilog中if與case語(yǔ)句必須完整,即if要加上else,case后要加上default語(yǔ)句,以防止鎖存器的發(fā)生,下載內(nèi)容中就談到了其中原因。
    發(fā)表于 09-16 09:29 ?24次下載

    FPGA學(xué)習(xí)系列:if-else與case

    設(shè)計(jì)背景:不管是在什么軟件和硬件語(yǔ)言,我們?cè)谖覀兊?b class='flag-5'>代碼中都或多或少的用到這兩條語(yǔ)句,if..else與case語(yǔ)句,今天我們將學(xué)習(xí)verilog中的這兩條
    的頭像 發(fā)表于 06-01 16:59 ?1.2w次閱讀
    <b class='flag-5'>FPGA</b>學(xué)習(xí)系列:if-else與<b class='flag-5'>case</b>

    C語(yǔ)言的switch case多分支選擇語(yǔ)句的詳細(xì)資料說(shuō)明

    1、switch-case開(kāi)關(guān)語(yǔ)句是一種多分支選擇語(yǔ)句,用來(lái)實(shí)現(xiàn)多方向條件分支。雖然采用if-else條件判斷語(yǔ)句也可以實(shí)現(xiàn)多方向條件分支,但是當(dāng)分支較多時(shí),使用if-else條件
    發(fā)表于 07-12 17:39 ?1次下載
    C語(yǔ)言的switch <b class='flag-5'>case</b>多分支選擇<b class='flag-5'>語(yǔ)句</b>的詳細(xì)資料說(shuō)明

    數(shù)字設(shè)計(jì)FPGA應(yīng)用:case語(yǔ)句

    本課程以目前流行的Xilinx 7系列FPGA的開(kāi)發(fā)為主線,全面講解FPGA的原理及電路設(shè)計(jì)、Verilog HDL語(yǔ)言及VIVADO的應(yīng)用,并循序漸進(jìn)地從組合邏輯、時(shí)序邏輯的開(kāi)發(fā)開(kāi)始,深入到FPGA的基礎(chǔ)應(yīng)用、綜合應(yīng)用和進(jìn)階應(yīng)
    的頭像 發(fā)表于 12-03 07:02 ?5400次閱讀
    數(shù)字設(shè)計(jì)<b class='flag-5'>FPGA</b>應(yīng)用:<b class='flag-5'>case</b><b class='flag-5'>語(yǔ)句</b>

    CASE語(yǔ)句的執(zhí)行規(guī)則是什么?

    CASE語(yǔ)句用來(lái)選擇幾個(gè)分支程序部分之一。選擇是基于選擇表達(dá)式當(dāng)前值的。
    的頭像 發(fā)表于 10-09 09:26 ?5446次閱讀
    <b class='flag-5'>CASE</b><b class='flag-5'>語(yǔ)句</b>的執(zhí)行規(guī)則是什么?

    一文淺析casecasexcasez區(qū)別

    先,case的描述,匹配都是從上到下進(jìn)行的,如果使用了casez,看上面的casez的列表,只要輸入有z/?的話,就能和任意匹配。
    發(fā)表于 09-30 14:56 ?3837次閱讀

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

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

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

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

    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 ?4644次閱讀
    Verilog中的If<b class='flag-5'>語(yǔ)句</b>和<b class='flag-5'>case</b><b class='flag-5'>語(yǔ)句</b>介紹

    case后邊可以跟多個(gè)語(yǔ)句

    是的,"case" 后面可以跟多個(gè)語(yǔ)句。在編程語(yǔ)言中,"case" 通常被用于 switch 語(yǔ)句中,用于檢查一個(gè)變量或表達(dá)式是否匹配某個(gè)特定的值。當(dāng)匹配成功時(shí),可以執(zhí)行一個(gè)或多個(gè)
    的頭像 發(fā)表于 11-30 14:19 ?6901次閱讀

    java switch case的語(yǔ)法規(guī)則

    在Java中,switch case語(yǔ)句是一種用于多分支選擇的控制流語(yǔ)句。它允許根據(jù)某個(gè)表達(dá)式的值來(lái)執(zhí)行不同的代碼塊。下面是關(guān)于switch cas
    的頭像 發(fā)表于 11-30 14:40 ?2391次閱讀

    java中的switch語(yǔ)句 case的取值

    Java中的switch語(yǔ)句是一種用于多重條件判斷的語(yǔ)句,用于根據(jù)不同的條件執(zhí)行不同的代碼塊。在switch語(yǔ)句中,case關(guān)鍵字用來(lái)指定不
    的頭像 發(fā)表于 11-30 16:05 ?1195次閱讀
    主站蜘蛛池模板: 99精品国产第一福利网站| se综合| 一级特黄aaa大片在线观看视频| 国产日韩三级| 成人国产在线视频| 91成人在线播放| 天堂网在线.www天堂在线资源| 天堂在线天堂最新版在线www| 色就操| 欧美色穴| 久青草国产高清在线视频| 免费看 s色| 国产成人91青青草原精品| 在线播放免费视频| 人人天天夜夜| 在线视频永久在线视频| 男女一级大黄| 天天拍夜夜爽| 国产小视频免费| 女同国产| 视频在线免费看| 欧美xingai| 麻生希痴汉电车avop130| 亚洲图色视频| 日本妈妈4| 国产激情片| 国产黄色大片又色又爽| 亚洲aa| 99久久香蕉国产综合影院| 亚洲男人的天堂久久香蕉| 性xxxxbbbb免费播放视频| 欧美人与牲动交xxxxbbbb| 4hu44四虎在线观看| 久操视频免费观看| 丝袜美腿视频一区二区三区| 亚洲综合一二三区| 亚洲国产成人久久笫一页| 亚洲五月综合网色九月色| 女人被狂躁视频免费网站| 真实一级一级一片免费视频| 成人窝窝午夜看片|