任務(wù)描述
相關(guān)知識(shí)
3線-8線譯碼器的功能
case語句
編程要求
說明?
源代碼
任務(wù)描述
設(shè)計(jì)一個(gè)3線-8線譯碼器。運(yùn)用Verilog HDL進(jìn)行設(shè)計(jì),完善譯碼器的功能描述風(fēng)格代碼,具備組合邏輯電路的設(shè)計(jì)仿真和測(cè)試的能力。
相關(guān)知識(shí)
需要掌握: 1.3線-8線譯碼器的功能; 2.如何用case語句進(jìn)行邏輯功能的描述。
( 本文不是枚舉, 用到了合并和位運(yùn)算 )
3線-8線譯碼器的功能
譯碼是編碼的逆過程,3線-8線譯碼器可以將n位二進(jìn)制代碼可譯成2n種電路狀態(tài)。譯碼器框圖如下所示。
case語句
case語句是一個(gè)多路條件分支形式,其語法如下:
case(case_expr)
case_item_expr{ ,case_item_expr} : procedural_statement
. . . . . .
[default: procedural_statement]
endcase
case語句首先對(duì)條件表達(dá)式case_expr求值,
然后依次與各分支項(xiàng)求值并進(jìn)行比較,
第一個(gè)與條件表達(dá)式值相匹配的分支中的語句被執(zhí)行。
可以在1個(gè)分支中定義多個(gè)分支項(xiàng);
這些值不需要互斥。
缺省分支覆蓋所有沒有被分支表達(dá)式覆蓋的其他分支。
case語句的實(shí)例如下 :
always@ (A or B or OpCode)
case (OpCode)
2'b00: Y = A + B;
2'b01: Y = A -B;
2'b10: Y = A * B;
2'b11: Y = A / B;
default:Y = 0;
endcase
編程要求
根據(jù)提示,在右側(cè)編輯器補(bǔ)充代碼,設(shè)計(jì)具有一位使能端的3線-8線譯碼器。當(dāng)使能端為0時(shí),8位輸出信號(hào)全為0;如果一位使能信號(hào)為1,則輸出高電平有效的譯碼信號(hào)。該譯碼器真值表如下所示。
說明?
本文僅是在下列的基礎(chǔ)上進(jìn)行優(yōu)化,方法與C語言類似,通過觀察真值表發(fā)現(xiàn),A2A1A0組成的二進(jìn)制數(shù)即表示,當(dāng)使能端輸入信號(hào)為1時(shí),其左移多少位得到的Y值(A2、Y7分別為高位)
?3-8譯碼器的Verilog設(shè)計(jì)_38譯碼器verilog代碼_Master_楊的博客-CSDN博客文章來源:http://www.zghlxwxcb.cn/news/detail-720668.html
源代碼
//設(shè)計(jì)具有一位使能端的3線-8線譯碼器。當(dāng)使能端為0時(shí),8位輸出信號(hào)全為0;
//如果一位使能信號(hào)為1,則輸出高電平有效的譯碼信號(hào)。
module decoder3e_test(a,ena,y);
input [2:0] a;
input ena;
output [7:0] y;
// 請(qǐng)?jiān)谙旅嫣砑哟a,完成設(shè)計(jì)任務(wù)
/* Begin */
wire[2:0] a;
wire ena;
reg [7:0] y;
always@ (ena or a)
begin
case(ena)
1'b0: y = 8'b00000000;
1'b1: y = ena << {a[2], a[1], a[0]};
endcase
end
/* End */
endmodule
其中{a[2], a[1], a[0]} 即表示一個(gè)拼接而成的以a[2]為高位的順位的二進(jìn)制數(shù)文章來源地址http://www.zghlxwxcb.cn/news/detail-720668.html
到了這里,關(guān)于Verilog 3線-8線譯碼器設(shè)計(jì)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!