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

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

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

3天內不再提示

FPGA代碼經驗 case,casez,casex語句

454398 ? 來源:FPGA技術聯盟 ? 作者:FPGA技術聯盟 ? 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將會產生更易讀的代碼,更好的邏輯利用率和更高的性能。

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條件,在大多數情況下不會觸發任何仿真或綜合警告。這是一種危險且難以調試的情況.。建議開發人員完全避免使用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指定了總是可以出現在塊中的兩種賦值類型:阻塞和非阻塞。阻塞和非阻塞賦值分別用于描述組合邏輯和時序邏輯。永遠不要在同一個塊中混合使用阻塞和非阻塞賦值。這樣做可能會導致不可預知的綜合和仿真結果。在許多情況下,綜合工具不會產生任何警告,但綜合結果將是不正確的。以下兩個代碼示例說明了阻塞和非阻塞賦值的混合使用。

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塊中的阻塞賦值按其順序執行。 盡管這樣做通常很方便,但是建議開發者限制使用多個阻塞賦值來賦值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分配的順序將會破壞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的最后一個賦值優先,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

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

    關注

    1635

    文章

    21841

    瀏覽量

    608438
收藏 人收藏

    評論

    相關推薦

    Verilog HDL語言編程的誤區與經驗

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

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

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

    在SpinalHDL中關于casez的使用

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

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

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

    FPGA學習系列:if-else與case

    設計背景:不管是在什么軟件和硬件語言,我們在我們的代碼中都或多或少的用到這兩條語句,if..else與case語句,今天我們將學習verilog中的這兩條
    的頭像 發表于 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開關語句是一種多分支選擇語句,用來實現多方向條件分支。雖然采用if-else條件判斷語句也可以實現多方向條件分支,但是當分支較多時,使用if-else條件
    發表于 07-12 17:39 ?1次下載
    C語言的switch <b class='flag-5'>case</b>多分支選擇<b class='flag-5'>語句</b>的詳細資料說明

    數字設計FPGA應用:case語句

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

    CASE語句的執行規則是什么?

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

    一文淺析casecasexcasez區別

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

    RTL表達式和運算符

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

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

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

    Verilog中的If語句case語句介紹

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

    case后邊可以跟多個語句

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

    java switch case的語法規則

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

    java中的switch語句 case的取值

    Java中的switch語句是一種用于多重條件判斷的語句,用于根據不同的條件執行不同的代碼塊。在switch語句中,case關鍵字用來指定不
    的頭像 發表于 11-30 16:05 ?1325次閱讀
    主站蜘蛛池模板: 乳女教师欲乱动漫无修版动画 | 亚洲视频在线看 | 成年人在线免费观看视频网站 | 九九99亚洲精品久久久久 | 国产不卡视频在线观看 | 久久综合九色综合国产 | 超碰97人在线视频 | 久久AV喷吹AV高潮欧美 | 亚洲中文字幕乱倫在线 | 色综合久久88色综合天天提莫 | 美女内射少妇三区五区 | 97人人超碰国产精品最新蜜芽 | 日韩欧美三区 | 九九久久国产精品免费热6 九九久久国产精品大片 | 精品久久久无码21P发布 | 成年视频国产免费观看 | 亚洲福利精品电影在线观看 | 飘雪在线观看免费完整版 | 538prom精品视频我们不只是 | 亚洲大爷操 | 性xxx免费视频 | 亚洲一区二区三区91 | 暖暖 免费 高清 日本视频大全 | 国产精品网红女主播久久久 | 97无码人妻精品1国产精东影业 | 在线观看国产小视频 | 伊人天天躁夜夜躁狠狠 | 無码一区中文字幕少妇熟女网站 | 久久国产免费 | 国产99久久 | 黄色三级在线观看 | 亚洲最大日夜无码中文字幕 | 国产在线播放精品视频 | 国产亚洲欧美在线中文BT天堂网 | 99精品视频在线观看 | 日本高清不卡码无码v亚洲 日本福利片午夜免费观着 日本粉嫩学生毛绒绒 | 少妇高潮久久久久7777 | 99精品国产免费观看视频 | 久久免费看少妇高潮A片特爽 | 洗濯屋H纯肉动漫在线观看 羲义嫁密着中出交尾gvg794 | 伊人久久综在合线亚洲 |