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

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

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

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

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

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

10. case,casez,casex語句

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

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語句代替嵌套的if-else將會產(chǎn)生更易讀的代碼,更好的邏輯利用率和更高的性能。

casez和casex語句在比較中允許“don't care”條件。 casez將“z“”值視為"don't care",casex將“z”和“x”值都視為“don't care”。如果casez或casex表達式中的任何位都是"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的表達式可以是一個常量,如下例所示。

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條件很容易導致case 條件重疊或重復。而且,使用這些語句會導致綜合和仿真不匹配。以下是案例case條件重疊的一個例子。

// 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

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

在case語句中添加一個默認的條件是避免一系列問題的簡單方法。 有兩種方法可以達到相同的效果,如以下示例所示。

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語句之前進行默認賦值

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)在塊中的兩種賦值類型:阻塞和非阻塞。阻塞和非阻塞賦值分別用于描述組合邏輯和時序邏輯。永遠不要在同一個塊中混合使用阻塞和非阻塞賦值。這樣做可能會導致不可預知的綜合和仿真結(jié)果。在許多情況下,綜合工具不會產(chǎn)生任何警告,但綜合結(jié)果將是不正確的。以下兩個代碼示例說明了阻塞和非阻塞賦值的混合使用。

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. 多個阻塞賦值

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

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

無意中改變signal_a和signal_d分配的順序?qū)茐膕ignal_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的最后一個賦值優(yōu)先,signal_a的位[15:12]永遠不會被復位。

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

命名塊可以在幾種情況下有用。 因為always塊是唯一標識的,所以在仿真中更容易找到它。 而且,限制變量的范圍允許重復使用相同的變量名稱。

編輯:hfy

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

    關注

    1643

    文章

    21982

    瀏覽量

    614557
收藏 人收藏

    評論

    相關推薦
    熱點推薦

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

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

    如何解決vhdl代碼中的case語句問題?

    大家好 ...我在使用case語句時遇到問題....雖然我使用它如下::-------------------------------------------------- ---過程(CLK)開始
    發(fā)表于 06-26 11:47

    在SpinalHDL中關于casez的使用

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

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

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

    FPGA學習系列:if-else與case

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

    C語言的switch case多分支選擇語句的詳細資料說明

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

    數(shù)字設計FPGA應用:case語句

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

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

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

    一文淺析casecasexcasez區(qū)別

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

    RTL表達式和運算符

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

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

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

    Verilog中的If語句case語句介紹

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

    case后邊可以跟多個語句

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

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

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

    java中的switch語句 case的取值

    Java中的switch語句是一種用于多重條件判斷的語句,用于根據(jù)不同的條件執(zhí)行不同的代碼塊。在switch語句中,case關鍵字用來指定不
    的頭像 發(fā)表于 11-30 16:05 ?1522次閱讀
    主站蜘蛛池模板: 亚洲1卡二卡3卡四卡不卡 | 日韩午夜| 成人性欧美丨区二区三区 | 波多野结衣在线观看一区二区 | 青草国内精品视频在线观看 | 五月天在线婷婷 | 夜夜狠狠操| 91在线免费视频 | 性精品 | 高清成年美女黄网站色大 | 久久国产乱子伦精品免费午夜 | 日日骑夜夜操 | 天堂网www在线资源 天堂网www在线资源链接 | 天天躁夜夜躁狠狠躁2021西西 | 黄色四虎影院 | 成人在线天堂 | 久久综合久久精品 | 九月丁香婷婷 | 99久久久精品免费观看国产 | 丁香花在线视频观看免费 | 欧美在线黄色 | 18女人毛片 | 美女视频黄a全部免费看小说 | 污视频18高清在线观看 | 欧美日韩一区二区不卡 | 欧美日韩a级a | av手机在线播放 | 天天摸天天操天天射 | 国产小视频免费观看 | 97视频人人 | 日日夜夜狠狠 | 日本中文字幕在线播放 | 欧美xxxx色视频在线观看 | 成人久久伊人精品伊人 | 日本最顶级丰满的aⅴ艳星 日本最好的免费影院 | 在线观看精品视频看看播放 | 求网址你懂的手机在线观看网站 | jiuma和我啪啪| 涩涩色中文综合亚洲 | 久久久久国产一级毛片高清版 | 男女交性视频播放 视频 视频 |