国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Verilog基礎(chǔ)語法(13)之case語句

這篇具有很好參考價值的文章主要介紹了Verilog基礎(chǔ)語法(13)之case語句。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

case語句檢查給定的表達式是否與列表中的其他表達式之一相匹配,并據(jù)此進行分支。它通常用于實現(xiàn)一個多路復(fù)用器。

如果要檢查的條件很多,if-else結(jié)構(gòu)可能不合適,因為它會綜合成一個優(yōu)先編碼器而不是多路復(fù)用器。

語法

一個Verilog case語句以case關(guān)鍵字開始,以endcase關(guān)鍵字結(jié)束。在括弧內(nèi)的表達式將被精確地評估一次,并按其編寫順序與備選方案列表進行比較,與給定表達式匹配的備選方案的語句將被執(zhí)行。一塊多條語句必須分組,并在 begin 和 end 范圍內(nèi)。

case (<expression>)
	case_item1 : 	<single statement>
	case_item2,
	case_item3 : 	<single statement>
	case_item4 : 	begin
	          			<multiple statements>
	        			end
	default 	 : <statement>
endcase

如果所有的case項都不符合給定的表達式,則執(zhí)行缺省項內(nèi)的語句,缺省語句是可選的,在case語句中只能有一條缺省語句。case語句可以嵌套。

如果沒有符合表達式的項目,也沒有給出缺省語句,執(zhí)行將不做任何事情就退出case塊。Verilog HDL中的case語句有兩種變種,casex和casez:

case(表達式)  <case分支項> endcase
casez(表達式) <case分支項> endcase
casex(表達式) <case分支項> endcase
缺省項:default:語句

case、casez、casex真實表:
Verilog基礎(chǔ)語法(13)之case語句,# Verilog基礎(chǔ)語法,fpga開發(fā),軟件工程

實例

設(shè)計一個2位選擇信號,用于將其他三個3位輸入中的一個信號連接到被調(diào)用的輸出信號。根據(jù)sel的值,用case語句將正確的輸入分配到輸出。由于sel是一個2位信號,它可以有2^2種組合,從0到3。如果sel為3,默認語句有助于將輸出設(shè)置為0。

module my_mux (input       [2:0] 	a, b, c, 		
                           [1:0]	sel, 			  
               output reg  [2:0] 	out); 			
  always @ (a, b, c, sel) begin
    case(sel)
      2'b00    : out = a; 		// If sel=0, output is a
      2'b01    : out = b; 		// If sel=1, output is b
      2'b10    : out = c; 		// If sel=2, output is c
      default  : out = 0; 		// If sel is anything else, out is always 0
    endcase
  end
endmodule

綜合后的RTL原理圖;
Verilog基礎(chǔ)語法(13)之case語句,# Verilog基礎(chǔ)語法,fpga開發(fā),軟件工程

case語句與if_else_if語句的區(qū)別

主要區(qū)別:

  • 與case語句中的控制表達式和多分支表達式這種比較結(jié)構(gòu)相比,if_else_if結(jié)構(gòu)中的條 件表達式更為直觀一些。

  • 對于那些分支表達式中存在不定值x和高阻值z位時,case語句提供了處理這種情況的手 段。下面的兩個例子介紹了處理x,z值位的case語句。

Verilog HDL針對電路的特性提供了case語句的其它兩種形式用來處理case語句比較過程中的不必考慮的情況( don’t care condition )。
其中casez語句用來處理不考慮高阻值z的比較過程,casex語句則將高阻值z和不定值都視為不必關(guān)心的情況。
所謂不必關(guān)心的情況,即在表達式進行比較時,不將該位的狀態(tài)考慮在內(nèi)。這樣在case語句表達式進行比較時,就可以靈活地設(shè)置以對信號的某些位進行比較。見下面的兩個例子:

 reg[7:0] ir; 
casez(ir) 
 8'b1???????: instruction1(ir); 
 8'b01??????: instruction2(ir); 
 8'b00010???: instruction3(ir); 
 8'b000001??: instruction4(ir); 
endcase
reg[7:0] r, mask; 
mask = 8'bx0x0x0x0; 
casex(r^mask) 
 8'b001100xx: stat1; 
 8'b1100xx00: stat2; 
 8'b00xx0011: stat3; 
 8'bxx001100: stat4; 
endcase 

鎖存器問題

Verilog HDL設(shè)計中容易犯的一個通病是由于不正確使用語言,生成了并不想要的鎖存器。下面我們
給出了一個在“always"塊中不正確使用if語句,造成這種錯誤的例子。
有鎖存器:

always @(al or d)begin
 if(al)
 	q<=d;
end

檢查一下左邊的"always"塊,if語句保證了只有當(dāng)al=1時,q才取d的值。這段程序沒有寫出 al = 0 時的結(jié)果, 那么當(dāng)al=0時會怎么樣呢? 在"always"塊內(nèi),如果在給定的條件下變量沒有賦值,這個變量將保持原值,也就是說會生成一個鎖存器!

無鎖存器:

always @(al or d)begin
 if(al) 
 	q<=d;
 else 
 	q<=0
end

Verilog HDL程序另一種偶然生成鎖存器是在使用case語句時缺少default項的情況下發(fā)生的。
case語句的功能是:在某個信號(本例中的sel)取不同的值時,給另一個信號(本例中的q)賦不同的值。注意看下圖左邊的例子,如果sel=0,q取a值,而sel=11,q取b的值。這個例子中不清楚的是:如果sel取00和11以外的值時q將被賦予什么值?在下面左邊的這個例子中,程序是用Verilog HDL寫的,即默認為q保持原值,這就會自動生成鎖存器。

有鎖存器:

always @(sel[1:0] or a or b)begin
 	case(sel[1:0])
 		2'b00: q<=a;
 		2'b11: q<=b;
  	endcase
end

無鎖存器:

always @(sel[1:0] or a or b)begin
 	case(sel[1:0])
 		2'b00: q<=a;
 		2'b11: q<=b;
 		default:q<='b0;
	endcase
end

`以上就是怎樣來避免偶然生成鎖存器的錯誤。如果用到if語句,最好寫上else項。如果用case語句,最好寫上default項。文章來源地址http://www.zghlxwxcb.cn/news/detail-620580.html

到了這里,關(guān)于Verilog基礎(chǔ)語法(13)之case語句的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • FPGA_學(xué)習(xí)_04_Verilog基礎(chǔ)語法和Modelsem仿真

    FPGA_學(xué)習(xí)_04_Verilog基礎(chǔ)語法和Modelsem仿真

    前言:對于以前學(xué)過C/C++/C#的作者來講,Verilog的基礎(chǔ)語法算是 特別簡單 的。本文主要介紹Verilog的基礎(chǔ)語法和Modelsem仿真。 FPGA開發(fā)是以模塊為基礎(chǔ)的,每個可 綜合 的.v文件都是一個模塊,模塊由 module 和 endmodule 來聲明。在這兩個的內(nèi)部,完成模塊功能的實現(xiàn)。 在Vi

    2024年02月05日
    瀏覽(19)
  • ASIC-WORLD Verilog(8)if-else語句和case語句

    ????????在自己準(zhǔn)備寫一些簡單的verilog教程之前,參考了許多資料----Asic-World網(wǎng)站的這套verilog教程即是其一。這套教程寫得極好,奈何沒有中文,在下只好斗膽翻譯過來(加了自己的理解)分享給大家。 ? ? ? ? 這是網(wǎng)站原文:Verilog Tutorial ????????這是系列導(dǎo)航:

    2024年02月01日
    瀏覽(21)
  • 【FPGA】verilog基礎(chǔ)語法與應(yīng)用:位操作 / 模塊調(diào)用——流水燈(跑馬燈)

    【FPGA】verilog基礎(chǔ)語法與應(yīng)用:位操作 / 模塊調(diào)用——流水燈(跑馬燈)

    今天的實驗是計數(shù)器實驗的升級,設(shè)計讓8個LED燈以每個0.5s的速率循環(huán)閃爍 1 移位法實現(xiàn) 1.1 移位方法1 每個LED燈代表一位,共8位,亮為1,滅為0 如何實現(xiàn)這樣的邏輯呢? 移位操作即可! 怎么樣才能移位呢? 第一個狀態(tài)需滿足最低位為1,然后每次左移1個 源代碼 仿真代碼 功

    2024年01月16日
    瀏覽(26)
  • FPGA中的條件選擇語句——case

    FPGA中的條件選擇語句——case 在FPGA設(shè)計中,條件選擇語句是非常重要的語法結(jié)構(gòu)。其中一種形式是case語句。case語句用于在多種條件之間進行選擇,是實現(xiàn)組合邏輯的基本構(gòu)件之一。本文將詳細講述FPGA中的case語句。 case語句的格式如下所示: 其中,expression是一個變量或表達

    2024年02月04日
    瀏覽(23)
  • Verilog中的force語句用來強制更改信號的值,特別適用于仿真和調(diào)試。本文將深入探討force語句在FPGA開發(fā)中的應(yīng)用和注意事項。

    Verilog中的force語句用來強制更改信號的值,特別適用于仿真和調(diào)試。本文將深入探討force語句在FPGA開發(fā)中的應(yīng)用和注意事項。 首先,我們需要了解force語句的語法。其基本格式為force [time] signal = value。其中,time是可選參數(shù),表示在何時開始強制更改信號的值;signal是要更改的

    2024年02月12日
    瀏覽(231)
  • Verilog語法(三)——賦值語句

    在 Verilog 中,阻塞賦值、非阻塞賦值和連續(xù)賦值是用于賦值操作的不同語法。它們之間的區(qū)別主要在于賦值時機和對后續(xù)代碼執(zhí)行的影響。 阻塞賦值使用等號 = 進行賦值,它的作用是在當(dāng)前時鐘周期內(nèi)立即更新目標(biāo)變量的值,然后繼續(xù)執(zhí)行下一條語句。因為它會阻塞后續(xù)語句

    2024年02月06日
    瀏覽(19)
  • SQL中的CASE WHEN語句:從基礎(chǔ)到高級應(yīng)用指南

    我們使用一個名為\\\"Products\\\"的表,包含以下列:ProductID、ProductName、CategoryID、UnitPrice、StockQuantity。 示例展示 productID productName categoryID unitPrice stockQuantity 1 Laptop 1 800 50 2 Smartphone 1 500 100 3 T-shirt 2 20 200 4 Jeans 2 40 150 5 Headphones 1 100 75 1. CASE WHEN-基本使用 查詢結(jié)果: ProductName UnitPric

    2024年02月09日
    瀏覽(24)
  • Verilog語法——6.測試文件使用for和random語句進行賦值

    Verilog語法——6.測試文件使用for和random語句進行賦值

    參考資料 【明德?lián)P_verilog零基礎(chǔ)入門語法HDL仿真快速掌握-手把手教你寫FPGA/ASIC代碼設(shè)計流程中的應(yīng)用】 題目要求: 涉及到for語句的賦值語句: 小貼士 verilog不支持c/c++中的自增語句i++,因此只能寫成i=i+1 for語句應(yīng)該用在initial begin(…) end中,此處只展示關(guān)鍵代碼 6.2.1 random語句

    2024年01月17日
    瀏覽(33)
  • 【FPGA學(xué)習(xí)記錄3-1】Verilog語法之Verilog的數(shù)據(jù)類型

    寫在前面 本科時學(xué)過FPGA的相關(guān)課程,因此對于Verilog相關(guān)語法的學(xué)習(xí)重在回顧。 1.Verilog的數(shù)據(jù)類型 Verilog 最常用的 2 種數(shù)據(jù)類型就是 線(wire)與寄存器(reg) ,其余類型可以理解為這兩種數(shù)據(jù)類型的擴展或輔助。 1.1wire類型 wire 類型表示硬件單元之間的物理連線,由其連接

    2024年02月02日
    瀏覽(25)
  • 【FPGA入門】第一篇、Verilog基本語法常識

    【FPGA入門】第一篇、Verilog基本語法常識

    目錄 第一部分、不同的變量類型 1、wire和reg的區(qū)別 ?2、如何對變量進行賦值呢? 3、什么是阻塞?什么是非阻塞? 第二部分、變量位寬的定義 1、各種系統(tǒng)默認情況 2、變量位寬聲明方式 3、表明位寬的情況下,賦值方式 4、兩個模塊之間例化,不定義變量直接用的方式 5、常

    2024年02月04日
    瀏覽(28)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包