实验三2的指导书 1.doc
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验三、3-8译码器的设计
一、实验目的
1、学会用Verilog语言的描述方式来设计电路;
2、掌握3-8译码器的设计方法;
3、掌握迁else语句和case语句的使用方法。
二、实验原理
1.设计电路的接口描述
输入变量为三个A,B,C,输出变量有8个,即Y0~Y7。
G1,G2A,G2B为选通输入,仅当Gl=l, G2A=0, G2B=0时,译码器能够正确输出,否则,译码器输出无效,Y0~Y7均为高电平“ 11111111"。
2.电路设计基本方法
译码器输出连接8个二极管,低电平显示输出端有效。
三、实验内容
1、用Verilog语言设计3-8译码器(Verilog程序代码和仿真的波形图附在实验报告后面)。
2、下载并验证结果。
四、实验结果
1、详细的描述你的设计思路。
根据38译码器工作原理,我设计了四个输入,即三个译码输入以及使能端,八个输出,对照38译码器真值表实现功能能即可;在此处实验,我设计了 if-else嵌套,case有限状态机,以及带算法实现三种方法。
接下来我就逐一比较分析。
方案一:
module trans(
input wire [2:0] data in, //三线输入,高电平有效
input en, //使能端,低电平有效
output reg [7:0] data_out〃8 线输出,低电平有效
);
always©(data_in or en) begin
if (!en)
if(data_in==3, bOOO)
data_out=8, blllllllO;
else if(data_in==3, bOOl)
data_out=8, bllllllOl;
else if (data_in=3‘bOlO)
data_out=8, blllllOll;
else if(data_in==3, bOll)
data_out=8, bllllOlll;
else if (data_in=3‘blOO)
data_out=8, blllOllll;
else if(data_in==3, blOl)
data_out=8, bllOlllll;
else if (data_in=3‘bllO)
data_out=8, blOllllll;
else if(data_in==3, bill)
data_out=8, bOlllllll;
else
data_out=8, hff;
end
endmodule
此方法可以实现38译码,缺点是多个if-else嵌套,逻辑较为复杂,程序可读性不高,并且在想扩展至更多功能,比如4-16, 5-32, 6-64甚至更多译码时,难以实现,工作量大。
方案二:有限状态机case
module trans(
input wire [2:0] data_in, //三线输入,高电平有效
input en, //使能端,低电平有效
output reg [7:0] data out//8 线输出,低电平有效
);
always©(data_in or en)
begin
if (!en)
begin
case(data_in)
3'bOOO:data_out=^8, bOOOOOOOl;
3' bOOl:data_out=^8, bOOOOOOlO;
3'bOlO:data_out=~8' bOOOOOlOO;
3'bOl1:data_out=^8, bOOOOlOOO;
3,bl00:data out=~8'bOOOlOOOO;
3' blOl:data_out=~8' bOOlOOOOO;
3'bll0:data_out=~8' bOlOOOOOO;
3' bill:data_out=~8' blOOOOOOO;
default:data_out=85 hff;
endcase
end
else
data_out=8, hff;
end
endmodule
此方案优点是直观明了,缺点是扩展至更多线译码困难,比如4-16, 5-32, 6-64甚至更多译码。
需要书写及大量代码。
方案三:算法实现
module trans(
input wire [2:0] data_in, //三线输入,高电平有效
input en, //使能端,低电平有效
output reg [7:0] data_out//8 线输出,低电平有效
);
always @ (en or data_in)
begin
data_out=85 hff;
if(en)
begin
begin
dataout = 255-(l<<data_in);
end
end
else
data_out=8, hff;
end
endmodule
此方法克服了之前两种方法的局限性,扩展译码时只需要更改寄存器容量以及代码中少数变量,常量值即可实现任意译码,是一种理想方法。
2.仿真测试
.ayout Help
如图所示,当使能端为高电平,无论输入是什么,输出全为高电平。
正常工作输入及输出对应关系如
000 --------- 11111110
001 --------- 11111101
010 --------- 11111011
011 --------- 11110111
100------- 11101111
101------- 11011111
110------- 10111111
11101111111 2、描述你设计的3-8译码器下载到实验箱上的结果。
实验箱观察到的现象满足38译码器功能。
评价项目所得分数
报告完整正确□ 3分□ 2
分□ 1分其
它:
分
程序正确□ 3分□ 2
分□ 1分其
它:
分
结果正确□ 4分□ 3
分□ 2分其
它:
分
总
分:日年
分
月日签名:。