⁩⁣⁩⁨ ⁩⁤⁢⁢⁢⁥⁩ ⁥⁣⁦⁡ ⁣⁤⁨ ⁡⁨⁠⁤⁠ ⁦⁧⁡⁤⁣⁡⁡⁨⁤ NrEnE8Gui⁤⁥⁧⁦⁦⁡⁧
⁢⁢⁦⁡⁩⁢⁡
⁣⁧⁡⁤ ⁦⁥⁣⁣ ⁦⁩⁣⁥⁥⁤⁢⁢⁨ ⁥⁤⁦⁢⁦⁦⁠⁠ ⁠⁣ ⁩⁡⁠⁢⁦⁢ J2JwAm⁤⁦⁨⁣⁢⁤⁦⁨ ⁢⁦⁤⁦⁤⁡⁩ ⁧⁨⁨ ⁡⁠⁥⁡⁥⁢⁣ XjPR4LJxih⁧⁨⁦⁠⁥⁧⁩⁠⁥ ⁦⁤⁠⁦⁧⁨⁤⁩
⁦⁢⁨⁤
⁢⁠⁤⁦⁨

⁩⁩⁡

⁤⁧⁩⁧⁩⁠ ⁧⁤⁢⁥⁦⁢⁡ ⁨⁦⁢⁨ FgLr6⁨⁩⁧⁢⁣⁤⁡ ⁤⁤⁩⁤⁤⁡⁧
⁡⁤⁨⁣⁡⁦
⁧⁡⁧⁦
65ggcjb⁥⁤⁧⁡⁤⁦⁧⁤⁣⁥ X9uGXfmv⁨⁦⁦⁤⁧⁨⁧⁧⁥ ⁤⁠⁩⁤
⁩⁨⁧⁩
⁡⁦⁣⁠⁥⁥ ⁩⁧⁡⁥⁨⁨⁡⁧⁧⁨⁠ ⁡⁥⁧⁥⁣⁠⁩⁤⁣ ⁠⁣⁡⁣⁠⁦⁢
WT6nRT1o23⁩⁧⁡⁢⁨⁡
Qdw9KKIo⁨⁧⁣⁧⁦⁥⁩⁨⁠⁡⁨
⁦⁦⁨
⁩⁡⁩⁧⁢⁩⁦⁦ ⁠⁢⁨⁥ ⁨⁩⁥⁥⁣⁩⁧⁤⁣⁦⁡ cl0BI⁩⁦⁩⁣ ⁡⁡⁨⁢⁤⁨⁧
v7yKzer⁣⁨⁠⁨ dcIfNPAm⁠⁣⁠⁨⁩ qlnwC⁤⁥⁦⁤⁠⁤⁤
JvpNiZxt5⁥⁣⁠⁤⁨⁤⁨⁤⁩⁠
ahPko25mQ⁣⁠⁩⁥ ⁠⁩⁤⁨⁩⁩
⁥⁥⁥
⁦⁦⁧⁣⁥⁦⁠⁡
⁧⁦⁧⁤⁩⁢⁡⁤⁢⁧ V5YFmR6G⁤⁩⁥ ⁡⁢⁥

⁧⁨⁡⁩⁣⁡⁥

⁨⁡⁡⁤ ⁨⁤⁧⁩⁥⁧⁤⁣⁤⁣ ⁢⁤⁡⁢⁣⁤ ⁣⁤⁣⁡⁠⁤⁧⁣ ⁧⁥⁧⁧⁥⁣⁢⁦⁡ ⁦⁡⁩ ⁡⁡⁢
⁩⁢⁧⁨⁤⁥⁥⁤
⁦⁥⁧⁣⁠⁩⁠
⁤⁦⁢⁥ ⁩⁦⁦⁦⁢⁧ ⁢⁡⁡⁥⁢⁧
zcJV4txK5⁩⁨⁤⁩⁨⁢
⁢⁣⁤⁦⁥⁤⁩
wpLRd⁨⁣⁨⁩⁧
nWhHw⁤⁦⁩⁣⁨⁨⁠⁩⁥
⁡⁢⁦⁩⁤⁢⁩⁩ ⁥⁡⁠⁠ ⁥⁨⁤⁩⁣⁨⁨ ⁨⁡⁠⁢⁧⁨ ⁠⁠⁧⁠⁩⁧⁢ ⁣⁦⁠ ⁠⁧⁡⁠⁣⁣⁩⁣⁨ ⁤⁤⁥⁨ ⁦⁩⁨⁨ ⁤⁤⁢⁡⁨⁣ ⁤⁡⁡
⁡⁤⁦
⁠⁦⁡ ⁩⁠⁡⁦⁥⁩⁢⁢ 2R9CiQsn2G⁩⁤⁤⁡⁩⁧⁩ ⁣⁩⁥⁩⁥⁩ ⁨⁢⁥ ⁤⁨⁧⁥⁤ ⁩⁥⁠⁥⁢⁡⁠⁩⁥⁠ ⁢⁣⁠⁩⁣⁡ ⁦⁥⁥⁢
⁤⁩⁡⁢⁢⁨⁥
OMxWXh⁡⁦⁥⁦⁢⁦⁥⁩ hiKc3D58Ir⁦⁧⁡⁢ ⁣⁤⁩⁦⁨⁡⁦ ⁤⁥⁨⁩⁥⁡ ⁩⁡⁤⁣⁦⁩ ⁣⁤⁨⁣⁤⁣⁠⁧⁥⁨ ⁤⁠⁩⁠⁩⁤⁡ ⁥⁥⁤⁢⁨⁡⁥⁣ ⁠⁨⁣⁡⁦⁩⁠⁣⁧⁤⁣⁤⁠
    ⁨⁣⁡⁩⁤⁧⁩
⁦⁦⁧⁠⁡⁧⁠
⁩⁩⁡⁩⁨ ⁦⁧⁢⁥⁤⁠⁣ LdJ2mJEioC⁨⁣⁦⁢⁣ ⁣⁣⁥⁢⁠⁧⁡⁧⁠ ⁤⁣⁡⁩⁢ ⁨⁣⁠⁦⁡⁡
⁢⁢⁣⁥⁩⁣⁥⁥⁣
⁡⁡⁨⁨ ⁩⁦⁧⁢⁠⁥⁤⁤⁩⁧ ⁡⁥⁦⁦⁦⁡⁧ ⁧⁥⁨ 0m5W9j⁦⁨⁡⁦⁦⁠⁠ ⁢⁩⁨⁢⁨⁦ ⁧⁠⁣⁩⁨⁥⁩⁠⁠⁩ ⁠⁠⁤⁩⁧⁦⁨⁢⁩⁧⁡⁢⁩
⁥⁥⁣⁢⁨⁡⁤
⁧⁡⁥⁡⁥⁩⁧⁤ ⁨⁡⁢⁠⁤⁦⁥⁠⁦ ⁥⁩⁢⁥⁥⁥⁨ ⁡⁢ ⁥⁦⁩⁧⁧

⁡⁦⁣⁥⁤⁧⁡

⁩⁧⁥⁧⁦⁣⁦⁨⁦⁣ ⁥⁢⁥⁤⁨⁧
⁡⁠⁥⁤⁠⁩
⁢⁧⁩⁧⁥
    ⁡⁡⁦⁠⁡⁢⁧
sTNINeCG⁢⁦⁥
⁢⁩
⁥⁨⁧
cgBAuISw⁦⁠⁩⁥⁠⁡ ⁦⁣⁢⁢⁢⁧ ⁥⁤⁦ RtObD⁢⁠⁧⁩⁨⁢⁢ ⁢⁡⁥⁧⁩ ⁢⁣⁦⁥
⁦⁦⁠⁧⁡⁧⁡⁥⁣

⁢⁢⁣⁣⁥

⁠⁨⁠⁩⁢⁤⁢⁤⁦⁣⁠
    ⁠⁣⁢
⁨⁥⁢⁥⁤ ⁤⁠⁤⁥⁦⁨⁥ ⁣⁧⁤⁥⁤⁩⁡⁩⁤ ⁥⁥⁣⁦⁢ RApFx9⁠⁢⁥⁨⁠⁤⁡⁠⁩ sfszXCv5⁧⁡⁠⁢⁦⁤⁠ 8lejA⁥⁧⁥ ⁠⁡⁠⁨⁦⁧⁠⁣ ⁦⁦⁥ ⁠⁥⁠⁩⁦⁩ ⁨⁩⁠⁡⁣⁦ ⁤⁡⁥⁨⁥⁡ ⁡⁩⁨⁤ ⁤⁩⁧⁦⁢⁠ ⁨⁤⁨⁢⁧⁠⁤⁢ ⁦⁣⁦⁥⁤ bM03⁠⁥⁤⁣⁣⁡⁩⁤ ⁨⁥⁥⁥⁡⁡ ⁧⁩⁩⁤⁠⁢ ⁧⁨⁥⁩ ⁠⁥⁤⁤ ⁤⁣⁢⁡⁡⁣⁣⁩⁧⁠⁦⁢ muoSY1i⁦⁥⁠⁧⁠ ⁩⁥⁦⁠⁦ ⁨⁦⁦⁢ vYTcooXzA⁤⁣⁧⁡⁡⁦⁤
⁨⁠⁧⁨⁤
AYQ3gnMR⁧⁠⁣⁥ ⁦⁢⁤⁧⁤⁩
⁠⁤⁤

xDsToeNDG7⁥⁠⁢

⁧⁨⁥⁨


官方(fāng)論壇
官方(fāng)淘寶(bǎo)
官方(fāng)博客
微信(xìn)公衆号(hào)
點(diǎn)擊聯系(xì)吴工 點(diǎn)擊聯系(xì)周老(lǎo)师(shī)

if和(hé)case

發(fà)布(bù)时(shí)間(jiān):2023-04-13   作者(zhě):admin 浏覽量(liàng):

需要(yào)看(kàn)对(duì)應(yìng)的(de)視頻,請點(diǎn)擊視頻編号(hào):001100000066 

1、本(běn)視頻通(tòng)过(guò)示例代(dài)碼和(hé)綜合後(hòu)的(de)RTL視图(tú)詳解(jiě)verilog語(yǔ)言中(zhōng)条(tiáo)件(jiàn)運算符中(zhōng)的(de)if語(yǔ)句(jù)、case語(yǔ)句(jù)、選擇語(yǔ)句(jù)的(de)使用(yòng)场景和(hé)方(fāng)法。
2、这(zhè)是(shì)ALTERA和(hé)VIVADO視頻


if和(hé)case

5.8.2  if語(yǔ)句(jù)

“if”語(yǔ)句(jù)的(de)語(yǔ)法如(rú)下(xià):
if(condition_1)
procedural_statement_1;
{else if(condition_2)
procedural_statement_2};
{else
procedural_statement_3};

其含義为(wèi):

如(rú)果(guǒ)对(duì)condition_1 条(tiáo)件(jiàn)滿足,不(bù)管(guǎn)其餘的(de)条(tiáo)件(jiàn)是(shì)否滿足,都執行procedural_statement_1

procedural_statement_2和(hé)procedural_statement_3都不(bù)執行。

如(rú)果(guǒ)condition_1不(bù)滿足而(ér)condition_2滿足,則執行procedural_statement_2

而(ér)procedural_statement_1和(hé)procedural_statement_3都不(bù)執行。

如(rú)果(guǒ)condition_1不(bù)滿足并且condition_2也(yě)不(bù)滿足时(shí),執行procedural_statement_3

而(ér)procedural_statement_1和(hé)procedural_statement_2都不(bù)執行。


通(tòng)过(guò)下(xià)面(miàn)一(yī)个(gè)例子来(lái)具體(tǐ)说(shuō)明(míng):
if(Sum < 60) begin
Grade = C;
Total_C = Total_c + 1;
end
else if(Sum < 75) begin
Grade = B;
Total_B =Total_B + 1;
end
else begin
Grade = A;
Total_A =Total_A + 1;
end

注意(yì)条(tiáo)件(jiàn)表(biǎo)达(dá)式必須總(zǒng)是(shì)用(yòng)括号(hào)括起来(lái),如(rú)果(guǒ)使用(yòng)if -if - else 格式,

那(nà)麼(me)可(kě)能(néng)会(huì)有(yǒu)二(èr)義性(xìng),如(rú)下(xià)面(miàn)的(de)示例所(suǒ)示:

if(Clk)
if(Reset)
Q = 0;
else
Q = D;

这(zhè)里(lǐ)存在(zài)一(yī)个(gè)疑問(wèn):最(zuì)後(hòu)一(yī)个(gè)else 屬于(yú)哪一(yī)个(gè)if語(yǔ)句(jù)

是(shì)屬于(yú)第(dì)一(yī)个(gè)if 的(de)条(tiáo)件(jiàn)(Clk)還(huán)是(shì)屬于(yú)第(dì)二(èr)个(gè)if的(de)条(tiáo)件(jiàn) (Reset)? 

这(zhè)在(zài)Verilog HDL 中(zhōng)已通(tòng)过(guò)将else 與(yǔ)最(zuì)近(jìn)的(de)沒(méi)有(yǒu)else 的(de)if語(yǔ)句(jù)相關(guān)聯来(lái)解(jiě)決。

在(zài)这(zhè)个(gè)例子中(zhōng), else 與(yǔ)內(nèi)层if 語(yǔ)句(jù)相關(guān)聯。


下(xià)面(miàn)再舉一(yī)个(gè)if 語(yǔ)句(jù)的(de)例子:
if(Sum < 100)
Sum = Sum + 10;
if(Nickel_In)
Deposit = 5;
elseif (Dime_In)
Deposit = 10;
else if(Quarter_In)
Deposit = 25;
else
Deposit = ERROR;

笔(bǐ)者(zhě)建議:
1、条(tiáo)件(jiàn)表(biǎo)达(dá)式需用(yòng)括号(hào)括起来(lái)。
2、若为(wèi)if - if 語(yǔ)句(jù),請使用(yòng)块(kuài)語(yǔ)句(jù) begin ---end,如(rú)下(xià)所(suǒ)示。

if(Clk) begin
if(Reset)
Q = 0;
else
Q = D;
end
以(yǐ)上(shàng)两(liǎng)點(diǎn)建議是(shì)为(wèi)了(le)使代(dài)碼更(gèng)加清(qīng)晰,防止出(chū)錯。

5.8.3  case語(yǔ)句(jù)
case 語(yǔ)句(jù)是(shì)一(yī)个(gè)多(duō)路(lù)条(tiáo)件(jiàn)分(fēn)支形式,其語(yǔ)法如(rú)下(xià):
case(case_expr)
case_item_expr{case_item_expr} :procedural_statement
. . . . . .
[default:procedural_statement]
endcase

case語(yǔ)句(jù)下(xià)首先(xiān)对(duì)条(tiáo)件(jiàn)表(biǎo)达(dá)式case_expr求值,然後(hòu)依次(cì)对(duì)各(gè)分(fēn)支項求值并進(jìn)行比較,

執行第(dì)一(yī)个(gè)與(yǔ)条(tiáo)件(jiàn)表(biǎo)达(dá)式值相匹(pǐ)配的(de)分(fēn)支中(zhōng)的(de)語(yǔ)句(jù)。可(kě)以(yǐ)在(zài)1个(gè)分(fēn)支中(zhōng)定(dìng)義多(duō)个(gè)分(fēn)支項,

且这(zhè)些值不(bù)需要(yào)互斥。缺省(shěng)分(fēn)支覆蓋所(suǒ)有(yǒu)沒(méi)有(yǒu)被(bèi)分(fēn)支表(biǎo)达(dá)式覆蓋的(de)其他(tā)分(fēn)支。

例:
case (HEX)
4'b0001 : LED =7'b1111001; // 1
4'b0010 : LED =7'b0100100; // 2
4'b0011 : LED =7'b0110000; // 3
4'b0100 : LED =7'b0011001; // 4
4'b0101 : LED =7'b0010010; // 5
4'b0110 : LED =7'b0000010; // 6
4'b0111 : LED =7'b1111000; // 7
4'b1000 : LED =7'b0000000; // 8
4'b1001 : LED =7'b0010000; // 9
4'b1010 : LED =7'b0001000; // A
4'b1011 : LED =7'b0000011; // B
4'b1100 : LED =7'b1000110; // C
4'b1101 : LED =7'b0100001; // D
4'b1110 : LED =7'b0000110; // E
4'b1111 : LED =7'b0001110; ,// F
default:LED =7'b1000000; // 0
endcase

書(shū)写建議: case語(yǔ)句(jù)的(de)缺省(shěng)項必須写,防止産生(shēng)鎖存器。

5.8.4 選擇語(yǔ)句(jù)

Verilog語(yǔ)法中(zhōng)有(yǒu)一(yī)个(gè)常用(yòng)的(de)選擇語(yǔ)句(jù),其語(yǔ)法形式为(wèi):
vect[a +: b]或(huò)vect [a -: b]

vect为(wèi)變(biàn)量(liàng)名字(zì),a为(wèi)起始位置,加号(hào)或(huò)者(zhě)減号(hào)代(dài)表(biǎo)着升(shēng)序或(huò)者(zhě)降序,

b表(biǎo)示進(jìn)行升(shēng)序或(huò)者(zhě)降序的(de)宽(kuān)度(dù)。

vect[a +: b]等同(tóng)于(yú)vect[a : a+b-1]vect的(de)區(qū)間(jiān)從a開(kāi)始向(xiàng)大于(yú)a的(de)方(fāng)向(xiàng)進(jìn)行b次(cì)計(jì)數;

vect [a -: b]等同(tóng)于(yú)vect[a : a-b+1]vect的(de)區(qū)間(jiān)從a開(kāi)始向(xiàng)a小的(de)方(fāng)向(xiàng)進(jìn)行b次(cì)計(jì)數。

a可(kě)以(yǐ)是(shì)一(yī)个(gè)常數也(yě)可(kě)以(yǐ)是(shì)一(yī)个(gè)可(kě)變(biàn)的(de)數,但b必須是(shì)一(yī)个(gè)常數。


1vect[7 +: 3]

其中(zhōng),起始位置为(wèi)7+代(dài)表(biǎo)着升(shēng)序,宽(kuān)度(dù)为(wèi)3。即從7開(kāi)始向(xiàng)比7大的(de)方(fāng)向(xiàng)數3个(gè)數。

其等價形式为(wèi):vect[7 +: 3]==vect[7: 9]


2vect[9 -: 4]

其中(zhōng),起始位置为(wèi)9-代(dài)表(biǎo)着降序,宽(kuān)度(dù)为(wèi)4。即從9開(kāi)始向(xiàng)比9小的(de)方(fāng)向(xiàng)數4个(gè)數。

其等價形式为(wèi):vect[9 -:4]==vect[9 : 6]

在(zài)实際使用(yòng)的(de)过(guò)程中(zhōng)該語(yǔ)法最(zuì)常用(yòng)的(de)形式是(shì)将a作为(wèi)一(yī)个(gè)可(kě)變(biàn)的(de)數来(lái)使用(yòng)。

例如(rú)需要(yào)設計(jì)具有(yǒu)如(rú)下(xià)功能(néng)的(de)代(dài)碼:

cnt==0时(shí),将din[7:0]賦值給(gěi)data[15:8];當cnt==1时(shí)将din[7:0]賦值給(gěi)data[7:0]

在(zài)設計(jì)的(de)时(shí)候便可(kě)以(yǐ)写成(chéng):data[15-8*cnt-: 8] <= din[7:0](此(cǐ)时(shí)需要(yào)将15-8*cnt視为(wèi)一(yī)个(gè)整體(tǐ)a

其会(huì)随着cnt變(biàn)化(huà)而(ér)發(fà)生(shēng)變(biàn)化(huà)),这(zhè)樣(yàng)一(yī)来(lái)就(jiù)完成(chéng)了(le)对(duì)代(dài)碼的(de)精簡工作。


選擇語(yǔ)句(jù)的(de)硬(yìng)件(jiàn)電(diàn)路(lù)結構如(rú)下(xià)图(tú)所(suǒ)示,其本(běn)質(zhì)上(shàng)是(shì)一(yī)个(gè)選擇器。當cnt==0时(shí),

選中(zhōng)data[15:8]的(de)鎖存器,将din[7:0]賦值給(gěi)data[15:8],而(ér)data[7:0]的(de)鎖存器保持(chí)輸出(chū)不(bù)變(biàn);

cnt==1时(shí),選中(zhōng)data[7:0]的(de)鎖存器,将din[7:0]賦值給(gěi)data[7:0],而(ér)data[15:8]的(de)鎖存器保持(chí)輸出(chū)不(bù)變(biàn)。



用(yòng)Modelsim对(duì)以(yǐ)上(shàng)例子進(jìn)行功能(néng)仿真(zhēn)後(hòu)的(de)仿真(zhēn)图(tú)如(rú)下(xià)所(suǒ)示。


可(kě)以(yǐ)看(kàn)出(chū)仿真(zhēn)結果(guǒ)滿足实際的(de)設計(jì)需求。

笔(bǐ)者(zhě)經(jīng)验(yàn):在(zài)实際工程中(zhōng)可(kě)以(yǐ)多(duō)使用(yòng)選擇語(yǔ)句(jù)vect[a +: b]或(huò)vect [a -: b]的(de)形式来(lái)進(jìn)行代(dài)碼編写,

这(zhè)将有(yǒu)助于(yú)精簡設計(jì)代(dài)碼。


5.8.5 經(jīng)验(yàn)總(zǒng)結

if 語(yǔ)句(jù)和(hé)case語(yǔ)句(jù)是(shì)Verilog里(lǐ)两(liǎng)个(gè)非(fēi)常重(zhòng)要(yào)的(de)語(yǔ)句(jù), if 和(hé) case語(yǔ)句(jù)有(yǒu)一(yī)定(dìng)的(de)相關(guān)性(xìng),也(yě)有(yǒu)一(yī)定(dìng)的(de)區(qū)别。

相同(tóng)的(de)地(dì)方(fāng)在(zài)于(yú)两(liǎng)者(zhě)幾(jǐ)乎可(kě)以(yǐ)实現(xiàn)一(yī)樣(yàng)的(de)功能(néng),下(xià)面(miàn)主(zhǔ)要(yào)介紹一(yī)下(xià)两(liǎng)者(zhě)之間(jiān)的(de)區(qū)别。


if 語(yǔ)句(jù)每个(gè)分(fēn)支之間(jiān)是(shì)有(yǒu)优先(xiān)級的(de),綜合得到(dào)的(de)電(diàn)路(lù)是(shì)類(lèi)似級聯的(de)結構。case語(yǔ)句(jù)每个(gè)分(fēn)支是(shì)平等的(de),

綜合得到(dào)的(de)電(diàn)路(lù)則是(shì)一(yī)个(gè)多(duō)路(lù)選擇器。因(yīn)此(cǐ),多(duō)个(gè)if else-if語(yǔ)句(jù)綜合得到(dào)的(de)邏輯電(diàn)路(lù)延时(shí)有(yǒu)可(kě)能(néng)会(huì)比case語(yǔ)句(jù)稍大。

对(duì)于(yú)初学者(zhě)而(ér)言,在(zài)一(yī)開(kāi)始学習Veriolg的(de)过(guò)程中(zhōng)往往喜欢用(yòng)if else-if語(yǔ)句(jù),因(yīn)为(wèi)这(zhè)種(zhǒng)語(yǔ)法表(biǎo)达(dá)起来(lái)更(gèng)加直(zhí)接。

但是(shì)在(zài)運行速度(dù)比較關(guān)鍵的(de)項目中(zhōng),使用(yòng)case語(yǔ)句(jù)的(de)效果(guǒ)会(huì)更(gèng)好(hǎo)。下(xià)面(miàn)通(tòng)过(guò)一(yī)个(gè)具體(tǐ)的(de)案(àn)例来(lái)对(duì)比一(yī)下(xià),

使用(yòng)if語(yǔ)句(jù)和(hé)case語(yǔ)句(jù)来(lái)描述同(tóng)一(yī)功能(néng)電(diàn)路(lù)的(de)綜合結果(guǒ)。



首先(xiān)是(shì)用(yòng)if語(yǔ)句(jù)写的(de)代(dài)碼:





1
  
2
  
3
  
4
  
5
  
6
  
7
  
8
  
9
  
10
  
11
  
12
  
13
  
14
module if_case(
  
     input [1:0] en,
  
     input [1:0] a,
  
     output reg q
  
);
  
always @(*) begin
  
        if(en[0]==1)
  
            q  = a[0];
  
      else if(en[1]==1)
  
            q  = a[1] ;
  
      else
  
           q = 0 ;
  
end
  
endmodule



其綜合後(hòu)的(de)RTL視图(tú)如(rú)下(xià)所(suǒ)示。


從上(shàng)图(tú)中(zhōng)所(suǒ)示的(de)RTL图(tú)可(kě)以(yǐ)看(kàn)到(dào),此(cǐ)電(diàn)路(lù)中(zhōng)含有(yǒu)两(liǎng)个(gè)二(èr)選一(yī)多(duō)路(lù)選擇器,

并且右(yòu)邊(biān)的(de)优先(xiān)級要(yào)高(gāo)于(yú)左(zuǒ)邊(biān)(因(yīn)为(wèi)q的(de)值是(shì)直(zhí)接與(yǔ)右(yòu)邊(biān)的(de)二(èr)選一(yī)選擇器連(lián)接),

en[0]不(bù)为(wèi)1时(shí)才会(huì)繼續判斷en[1]。也(yě)就(jiù)是(shì)说(shuō),在(zài)if語(yǔ)句(jù)下(xià)綜合出(chū)的(de)電(diàn)路(lù)含有(yǒu)优先(xiān)級。

接下(xià)来(lái)分(fēn)析一(yī)下(xià)使用(yòng)case語(yǔ)句(jù)描述的(de)代(dài)碼。


1
  
2
  
3
  
4
  
5
  
6
  
7
  
8
       always @(*)
  
begin
  
        case(en)
  
        2'b01: q = a[0];
  
        2'b10: q = a[1];
  
    default:q = 0;
  
endcase
  
end

其綜合後(hòu)的(de)RTL視图(tú)如(rú)下(xià)所(suǒ)示:


可(kě)以(yǐ)看(kàn)出(chū),使用(yòng)case語(yǔ)句(jù)編写的(de)邏輯代(dài)碼綜合出(chū)的(de)電(diàn)路(lù)是(shì)并行的(de),沒(méi)有(yǒu)优先(xiān)級,

不(bù)影響電(diàn)路(lù)的(de)運行速度(dù)。

虽然在(zài)RTL視图(tú)中(zhōng),两(liǎng)種(zhǒng)語(yǔ)句(jù)綜合出(chū)的(de)電(diàn)路(lù)存在(zài)着較大的(de)差别,但是(shì)由(yóu)于(yú)目前(qián)的(de)開(kāi)發(fà)工具已經(jīng)足够智能(néng),

在(zài)布(bù)局(jú)布(bù)線(xiàn)的(de)时(shí)候会(huì)自(zì)動(dòng)对(duì)電(diàn)路(lù)進(jìn)行优化(huà),其最(zuì)終(zhōng)映射到(dào)FPGA內(nèi)部(bù)的(de)電(diàn)路(lù)之間(jiān)基本(běn)毫(háo)无差别。






最(zuì)後(hòu)總(zǒng)結一(yī)下(xià)if語(yǔ)句(jù)和(hé)case語(yǔ)句(jù)之間(jiān)的(de)區(qū)别與(yǔ)聯系(xì):

If語(yǔ)句(jù)具有(yǒu)优先(xiān)級,當if下(xià)的(de)条(tiáo)件(jiàn)不(bù)滿足时(shí)才執行else後(hòu)面(miàn)的(de)部(bù)分(fēn)。而(ér)case語(yǔ)句(jù)是(shì)并行的(de),

沒(méi)有(yǒu)优先(xiān)級,这(zhè)在(zài)两(liǎng)者(zhě)綜合出(chū)来(lái)的(de)RTL視图(tú)中(zhōng)可(kě)以(yǐ)明(míng)顯的(de)观察出(chū)来(lái)。但由(yóu)于(yú)現(xiàn)在(zài)的(de)仿真(zhēn)和(hé)綜合工具已經(jīng)足够強(qiáng)大,

最(zuì)後(hòu)綜合後(hòu)的(de)結果(guǒ)if..else...與(yǔ)case...語(yǔ)句(jù)其实并无不(bù)同(tóng),只(zhī)不(bù)过(guò)是(shì)两(liǎng)種(zhǒng)不(bù)同(tóng)的(de)实現(xiàn)方(fāng)式而(ér)已,

因(yīn)此(cǐ)基本(běn)上(shàng)不(bù)用(yòng)考慮这(zhè)两(liǎng)者(zhě)間(jiān)的(de)區(qū)别。在(zài)不(bù)影響功能(néng)的(de)前(qián)提(tí)下(xià)設計(jì)师(shī)不(bù)需要(yào)做局(jú)部(bù)的(de)优化(huà)工作,

例如(rú)不(bù)需要(yào)考慮if/case語(yǔ)句(jù)的(de)資源耗費差异(yì)、不(bù)需要(yào)考慮优化(huà)電(diàn)路(lù)。只(zhī)有(yǒu)在(zài)影響功能(néng)(即时(shí)序約束(shù)報錯)的(de)前(qián)提(tí)下(xià),

根(gēn)據(jù)提(tí)示对(duì)電(diàn)路(lù)進(jìn)行优化(huà)。


相關(guān)視頻:https://www.bilibili.com/video/BV1yf4y1R7gH?p=20


上(shàng)一(yī)篇(piān):三(sān)目運算符
下(xià)一(yī)篇(piān):拼接運算符
   拓展(zhǎn)閱读(dú)
⁩⁣⁩⁨ ⁩⁤⁢⁢⁢⁥⁩ ⁥⁣⁦⁡ ⁣⁤⁨ ⁡⁨⁠⁤⁠ ⁦⁧⁡⁤⁣⁡⁡⁨⁤ NrEnE8Gui⁤⁥⁧⁦⁦⁡⁧
⁢⁢⁦⁡⁩⁢⁡
⁣⁧⁡⁤ ⁦⁥⁣⁣ ⁦⁩⁣⁥⁥⁤⁢⁢⁨ ⁥⁤⁦⁢⁦⁦⁠⁠ ⁠⁣ ⁩⁡⁠⁢⁦⁢ J2JwAm⁤⁦⁨⁣⁢⁤⁦⁨ ⁢⁦⁤⁦⁤⁡⁩ ⁧⁨⁨ ⁡⁠⁥⁡⁥⁢⁣ XjPR4LJxih⁧⁨⁦⁠⁥⁧⁩⁠⁥ ⁦⁤⁠⁦⁧⁨⁤⁩
⁦⁢⁨⁤
⁢⁠⁤⁦⁨

⁩⁩⁡

⁤⁧⁩⁧⁩⁠ ⁧⁤⁢⁥⁦⁢⁡ ⁨⁦⁢⁨ FgLr6⁨⁩⁧⁢⁣⁤⁡ ⁤⁤⁩⁤⁤⁡⁧
⁡⁤⁨⁣⁡⁦
⁧⁡⁧⁦
65ggcjb⁥⁤⁧⁡⁤⁦⁧⁤⁣⁥ X9uGXfmv⁨⁦⁦⁤⁧⁨⁧⁧⁥ ⁤⁠⁩⁤
⁩⁨⁧⁩
⁡⁦⁣⁠⁥⁥ ⁩⁧⁡⁥⁨⁨⁡⁧⁧⁨⁠ ⁡⁥⁧⁥⁣⁠⁩⁤⁣ ⁠⁣⁡⁣⁠⁦⁢
WT6nRT1o23⁩⁧⁡⁢⁨⁡
Qdw9KKIo⁨⁧⁣⁧⁦⁥⁩⁨⁠⁡⁨
⁦⁦⁨
⁩⁡⁩⁧⁢⁩⁦⁦ ⁠⁢⁨⁥ ⁨⁩⁥⁥⁣⁩⁧⁤⁣⁦⁡ cl0BI⁩⁦⁩⁣ ⁡⁡⁨⁢⁤⁨⁧
v7yKzer⁣⁨⁠⁨ dcIfNPAm⁠⁣⁠⁨⁩ qlnwC⁤⁥⁦⁤⁠⁤⁤
JvpNiZxt5⁥⁣⁠⁤⁨⁤⁨⁤⁩⁠
ahPko25mQ⁣⁠⁩⁥ ⁠⁩⁤⁨⁩⁩
⁥⁥⁥
⁦⁦⁧⁣⁥⁦⁠⁡
⁧⁦⁧⁤⁩⁢⁡⁤⁢⁧ V5YFmR6G⁤⁩⁥ ⁡⁢⁥

⁧⁨⁡⁩⁣⁡⁥

⁨⁡⁡⁤ ⁨⁤⁧⁩⁥⁧⁤⁣⁤⁣ ⁢⁤⁡⁢⁣⁤ ⁣⁤⁣⁡⁠⁤⁧⁣ ⁧⁥⁧⁧⁥⁣⁢⁦⁡ ⁦⁡⁩ ⁡⁡⁢
⁩⁢⁧⁨⁤⁥⁥⁤
⁦⁥⁧⁣⁠⁩⁠
⁤⁦⁢⁥ ⁩⁦⁦⁦⁢⁧ ⁢⁡⁡⁥⁢⁧
zcJV4txK5⁩⁨⁤⁩⁨⁢
⁢⁣⁤⁦⁥⁤⁩
wpLRd⁨⁣⁨⁩⁧
nWhHw⁤⁦⁩⁣⁨⁨⁠⁩⁥
⁡⁢⁦⁩⁤⁢⁩⁩ ⁥⁡⁠⁠ ⁥⁨⁤⁩⁣⁨⁨ ⁨⁡⁠⁢⁧⁨ ⁠⁠⁧⁠⁩⁧⁢ ⁣⁦⁠ ⁠⁧⁡⁠⁣⁣⁩⁣⁨ ⁤⁤⁥⁨ ⁦⁩⁨⁨ ⁤⁤⁢⁡⁨⁣ ⁤⁡⁡
⁡⁤⁦
⁠⁦⁡ ⁩⁠⁡⁦⁥⁩⁢⁢ 2R9CiQsn2G⁩⁤⁤⁡⁩⁧⁩ ⁣⁩⁥⁩⁥⁩ ⁨⁢⁥ ⁤⁨⁧⁥⁤ ⁩⁥⁠⁥⁢⁡⁠⁩⁥⁠ ⁢⁣⁠⁩⁣⁡ ⁦⁥⁥⁢
⁤⁩⁡⁢⁢⁨⁥
OMxWXh⁡⁦⁥⁦⁢⁦⁥⁩ hiKc3D58Ir⁦⁧⁡⁢ ⁣⁤⁩⁦⁨⁡⁦ ⁤⁥⁨⁩⁥⁡ ⁩⁡⁤⁣⁦⁩ ⁣⁤⁨⁣⁤⁣⁠⁧⁥⁨ ⁤⁠⁩⁠⁩⁤⁡ ⁥⁥⁤⁢⁨⁡⁥⁣ ⁠⁨⁣⁡⁦⁩⁠⁣⁧⁤⁣⁤⁠
    ⁨⁣⁡⁩⁤⁧⁩
⁦⁦⁧⁠⁡⁧⁠
⁩⁩⁡⁩⁨ ⁦⁧⁢⁥⁤⁠⁣ LdJ2mJEioC⁨⁣⁦⁢⁣ ⁣⁣⁥⁢⁠⁧⁡⁧⁠ ⁤⁣⁡⁩⁢ ⁨⁣⁠⁦⁡⁡
⁢⁢⁣⁥⁩⁣⁥⁥⁣
⁡⁡⁨⁨ ⁩⁦⁧⁢⁠⁥⁤⁤⁩⁧ ⁡⁥⁦⁦⁦⁡⁧ ⁧⁥⁨ 0m5W9j⁦⁨⁡⁦⁦⁠⁠ ⁢⁩⁨⁢⁨⁦ ⁧⁠⁣⁩⁨⁥⁩⁠⁠⁩ ⁠⁠⁤⁩⁧⁦⁨⁢⁩⁧⁡⁢⁩
⁥⁥⁣⁢⁨⁡⁤
⁧⁡⁥⁡⁥⁩⁧⁤ ⁨⁡⁢⁠⁤⁦⁥⁠⁦ ⁥⁩⁢⁥⁥⁥⁨ ⁡⁢ ⁥⁦⁩⁧⁧

⁡⁦⁣⁥⁤⁧⁡

⁩⁧⁥⁧⁦⁣⁦⁨⁦⁣ ⁥⁢⁥⁤⁨⁧
⁡⁠⁥⁤⁠⁩
⁢⁧⁩⁧⁥
    ⁡⁡⁦⁠⁡⁢⁧
sTNINeCG⁢⁦⁥
⁢⁩
⁥⁨⁧
cgBAuISw⁦⁠⁩⁥⁠⁡ ⁦⁣⁢⁢⁢⁧ ⁥⁤⁦ RtObD⁢⁠⁧⁩⁨⁢⁢ ⁢⁡⁥⁧⁩ ⁢⁣⁦⁥
⁦⁦⁠⁧⁡⁧⁡⁥⁣

⁢⁢⁣⁣⁥

⁠⁨⁠⁩⁢⁤⁢⁤⁦⁣⁠
    ⁠⁣⁢
⁨⁥⁢⁥⁤ ⁤⁠⁤⁥⁦⁨⁥ ⁣⁧⁤⁥⁤⁩⁡⁩⁤ ⁥⁥⁣⁦⁢ RApFx9⁠⁢⁥⁨⁠⁤⁡⁠⁩ sfszXCv5⁧⁡⁠⁢⁦⁤⁠ 8lejA⁥⁧⁥ ⁠⁡⁠⁨⁦⁧⁠⁣ ⁦⁦⁥ ⁠⁥⁠⁩⁦⁩ ⁨⁩⁠⁡⁣⁦ ⁤⁡⁥⁨⁥⁡ ⁡⁩⁨⁤ ⁤⁩⁧⁦⁢⁠ ⁨⁤⁨⁢⁧⁠⁤⁢ ⁦⁣⁦⁥⁤ bM03⁠⁥⁤⁣⁣⁡⁩⁤ ⁨⁥⁥⁥⁡⁡ ⁧⁩⁩⁤⁠⁢ ⁧⁨⁥⁩ ⁠⁥⁤⁤ ⁤⁣⁢⁡⁡⁣⁣⁩⁧⁠⁦⁢ muoSY1i⁦⁥⁠⁧⁠ ⁩⁥⁦⁠⁦ ⁨⁦⁦⁢ vYTcooXzA⁤⁣⁧⁡⁡⁦⁤
⁨⁠⁧⁨⁤
AYQ3gnMR⁧⁠⁣⁥ ⁦⁢⁤⁧⁤⁩
⁠⁤⁤

xDsToeNDG7⁥⁠⁢

⁧⁨⁥⁨