贵州省建设学校网站专业技能培训机构
FPGA学习(二)—— 三八译码器
文章目录
- FPGA学习(二)—— 三八译码器
- 一、三八译码器原理
- 1、三八译码器的真值表
- 2、逻辑表达式
- 3、Verilog代码实现
- 4、RTL原理图
- 5、波形仿真
- 二、点亮数码管
- 1、数码管的介绍
- 2、代码实现
- 3、引脚配置
- 4、测试结果
一、三八译码器原理
1、三八译码器的真值表
输入 A | 输入 B | 输入 C | 输出 Y0 | 输出 Y1 | 输出 Y2 | 输出 Y3 | 输出 Y4 | 输出 Y5 | 输出 Y6 | 输出 Y7 |
---|---|---|---|---|---|---|---|---|---|---|
0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
0 | 0 | 1 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 |
0 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 |
0 | 1 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 |
1 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 |
1 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 |
1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 |
1 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 |
2、逻辑表达式
3、Verilog代码实现
module _38yima(a, b, c, out);input a; // 输入端口ainput b; // 输入端口binput c; // 输入端口coutput [7:0] out; // 输出端口out,8位宽reg [7:0] out; // 声明out为寄存器类型// 或者可以直接写成:output reg [7:0] out;// always块:当a、b或c发生变化时触发always @(a, b, c) begin// case语句:根据{a, b, c}的组合值选择输出case ({a, b, c})3'b000: out = 8'b0000_0001; // 当{a, b, c}为000时,out输出0000_00013'b001: out = 8'b0000_0010; // 当{a, b, c}为001时,out输出0000_00103'b010: out = 8'b0000_0100; // 当{a, b, c}为010时,out输出0000_01003'b011: out = 8'b0000_1000; // 当{a, b, c}为011时,out输出0000_10003'b100: out = 8'b0001_0000; // 当{a, b, c}为100时,out输出0001_00003'b101: out = 8'b0010_0000; // 当{a, b, c}为101时,out输出0010_00003'b110: out = 8'b0100_0000; // 当{a, b, c}为110时,out输出0100_00003'b111: out = 8'b1000_0000; // 当{a, b, c}为111时,out输出1000_0000endcaseend
endmodule
4、RTL原理图
5、波形仿真
二、点亮数码管
1、数码管的介绍
、
2、代码实现
/*实现38译码器
module _38yima(a, b, c, out);input a; // 输入端口ainput b; // 输入端口binput c; // 输入端口coutput [7:0] out; // 输出端口out,8位宽reg [7:0] out; // 声明out为寄存器类型// 或者可以直接写成:output reg [7:0] out;// always块:当a、b或c发生变化时触发always @(a, b, c) begin// case语句:根据{a, b, c}的组合值选择输出case ({a, b, c})3'b000: out = 8'b0000_0001; // 当{a, b, c}为000时,out输出0000_00013'b001: out = 8'b0000_0010; // 当{a, b, c}为001时,out输出0000_00103'b010: out = 8'b0000_0100; // 当{a, b, c}为010时,out输出0000_01003'b011: out = 8'b0000_1000; // 当{a, b, c}为011时,out输出0000_10003'b100: out = 8'b0001_0000; // 当{a, b, c}为100时,out输出0001_00003'b101: out = 8'b0010_0000; // 当{a, b, c}为101时,out输出0010_00003'b110: out = 8'b0100_0000; // 当{a, b, c}为110时,out输出0100_00003'b111: out = 8'b1000_0000; // 当{a, b, c}为111时,out输出1000_0000endcaseend
endmodule
*/
//利用38译码器点亮8段数码管
module _38yima(input wire [2:0] sw, // 3位输入开关,用于选择数码管显示的数字output reg [6:0] seg // 8位输出,连接到数码管的段选信号(a-g + dp)
);// 数码管段选信号定义(共阳极)// seg[6:0] 分别对应数码管的 g, f, e, d, c, b, a// 共阳极数码管:0 点亮,1 熄灭always @(sw) begincase (sw)3'b000: seg = 8'b1100_0000; // 显示数字 03'b001: seg = 8'b1111_1001; // 显示数字 13'b010: seg = 8'b1010_0100; // 显示数字 23'b011: seg = 8'b1011_0000; // 显示数字 33'b100: seg = 8'b1001_1001; // 显示数字 43'b101: seg = 8'b1001_0010; // 显示数字 53'b110: seg = 8'b1000_0010; // 显示数字 6default: seg = 8'b1111_1111; // 默认全灭endcaseend
endmodule
3、引脚配置
4、测试结果
FPGA实现三八译码器