16进制7段译码器仿真

一,实验内容
数字逻辑基础与Verilog设计教材书P114页实验4.34 16进制7段译码器仿真。
在这里插入图片描述

二,实验目的
让读者用case选择语句的时候注意输出(leds)矢量与段代码之间的关系,用四位的矢量表示十六进制(hers),用七位的矢量表示七个输入(leds)

三,实验代码
module seg7(hex,leds);
input [3:0]hex;
output reg[1:7]leds;
always @(hex)
case(hex) //abcdefg
0:leds=7’b1111110;
1:leds=7’b0110000;
2:leds=7’b1101101;
3:leds=7’b1111001;
4:leds=7’b0110011;
5:leds=7’b1011011;
6:leds=7’b1011111;
7:leds=7’b1110000;
8:leds=7’b1111111;
9:leds=7’b1111011;
10:leds=7’b1110111;
11:leds=7’b0011111;
12:leds=7’b1001110;
13:leds=7’b0111101;
14:leds=7’b1001111;
13:leds=7’b1000111;
endcase
endmodule

四,实验过程
1.打开modelsim软件
2.选择文件file,新建new,工程project,如图
在这里插入图片描述会弹出以下对话框,选择“是”,如图

### 实验目的 完成一个 16 进制 7 数码显示译码器的设计与仿真,将 16 进制数译码显示在 7 数码管上。 ### 相关知识 7 数码是纯组合电路,常见小规模专用 IC 如 74 或 4000 系列器件一般只能作十进制 BCD 码译码,但数字系统中数据处理和运算为二进制,输出表达多是 16 进制,所以需要 16 进制 7 译码器7 译码器的输出信号 LED7S 的 7 位分别接数码管的 7,高位在左,低位在右,接高电平的发亮,不考虑表示小数点的发光管。设计采用 case 语句对数码管的七个分别赋值 0 或 1 来实现数字显示 [^1]。 ### 实验代码 ```verilog module seg7(hex,leds); input [3:0]hex; output reg[1:7]leds; always @(hex) case(hex) //abcdefg 0: leds = 7'b1111110; 1: leds = 7'b0110000; 2: leds = 7'b1101101; 3: leds = 7'b1111001; 4: leds = 7'b0110011; 5: leds = 7'b1011011; 6: leds = 7'b1011111; 7: leds = 7'b1110000; 8: leds = 7'b1111111; 9: leds = 7'b1111011; 10: leds = 7'b1110111; 11: leds = 7'b0011111; 12: leds = 7'b1001110; 13: leds = 7'b0111101; 14: leds = 7'b1001111; 15: leds = 7'b1000111; endcase endmodule ``` ### 代码解释 - `module seg7(hex, leds);`:定义了一个名为 `seg7` 的模块,包含输入端口 `hex`(4 位宽,用于输入 16 进制数)和输出端口 `leds`(7 位宽,用于驱动 7 数码管)。 - `always @(hex)`:这是一个敏感列表,当输入信号 `hex` 发生变化时,下面的 `case` 语句会执行。 - `case(hex)`:根据输入的 16 进制数 `hex` 的不同值,对输出 `leds` 进行赋值,不同的赋值对应不同的 7 数码管显示。 ### 仿真思路 可以编写一个测试平台(testbench)来对该译码器进行仿真,向 `hex` 输入不同的 16 进制数,观察 `leds` 的输出是否符合预期。 ### 测试平台示例代码 ```verilog `timescale 1ns / 1ps module tb_seg7; // 定义信号 reg [3:0] hex; wire [1:7] leds; // 实例化被测试模块 seg7 uut ( .hex(hex), .leds(leds) ); initial begin // 初始化信号 hex = 4'b0000; #100; // 等待 100ns // 依次输入不同的 16 进制数 hex = 4'b0001; #100; hex = 4'b0010; #100; // 可以继续添加其他 16 进制数的输入 end endmodule ``` ### 测试平台解释 - `timescale 1ns / 1ps`:定义仿真时间单位为 1ns,精度为 1ps。 - `module tb_seg7;`:定义测试平台模块。 - `reg [3:0] hex;` 和 `wire [1:7] leds;`:分别定义输入信号 `hex` 和输出信号 `leds`。 - `seg7 uut`:实例化被测试的 `seg7` 模块。 - `initial` 块:初始化 `hex` 信号,然后依次输入不同的 16 进制数,每个输入保持 100ns。 ### 实验步骤 1. 将上述设计代码和测试平台代码分别保存为 `.v` 文件。 2. 使用 Verilog 仿真工具(如 ModelSim 等),将设计文件和测试平台文件添加到工程中。 3. 编译代码,若有错误则修改代码直至编译通过。 4. 运行仿真,观察波形,检查 `leds` 的输出是否与预期的 7 数码管显示一致。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值