FPGA学习(二)—— 三八译码器

FPGA学习(二)—— 三八译码器

一、三八译码器原理

1、三八译码器的真值表

输入 A输入 B输入 C输出 Y0输出 Y1输出 Y2输出 Y3输出 Y4输出 Y5输出 Y6输出 Y7
00010000000
00101000000
01000100000
01100010000
10000001000
10100000100
11000000010
11100000001

2、逻辑表达式

在这里插入图片描述

3、Verilog代码实现

module _38yima(a, b, c, out);
    input a;  // 输入端口a
    input b;  // 输入端口b
    input c;  // 输入端口c
    output [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_0001
            3'b001: out = 8'b0000_0010;  // 当{a, b, c}为001时,out输出0000_0010
            3'b010: out = 8'b0000_0100;  // 当{a, b, c}为010时,out输出0000_0100
            3'b011: out = 8'b0000_1000;  // 当{a, b, c}为011时,out输出0000_1000
            3'b100: out = 8'b0001_0000;  // 当{a, b, c}为100时,out输出0001_0000
            3'b101: out = 8'b0010_0000;  // 当{a, b, c}为101时,out输出0010_0000
            3'b110: out = 8'b0100_0000;  // 当{a, b, c}为110时,out输出0100_0000
            3'b111: out = 8'b1000_0000;  // 当{a, b, c}为111时,out输出1000_0000
        endcase
    end
endmodule

4、RTL原理图

在这里插入图片描述

5、波形仿真

在这里插入图片描述

二、点亮数码管

1、数码管的介绍

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

2、代码实现

/*实现38译码器
module _38yima(a, b, c, out);
    input a;  // 输入端口a
    input b;  // 输入端口b
    input c;  // 输入端口c
    output [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_0001
            3'b001: out = 8'b0000_0010;  // 当{a, b, c}为001时,out输出0000_0010
            3'b010: out = 8'b0000_0100;  // 当{a, b, c}为010时,out输出0000_0100
            3'b011: out = 8'b0000_1000;  // 当{a, b, c}为011时,out输出0000_1000
            3'b100: out = 8'b0001_0000;  // 当{a, b, c}为100时,out输出0001_0000
            3'b101: out = 8'b0010_0000;  // 当{a, b, c}为101时,out输出0010_0000
            3'b110: out = 8'b0100_0000;  // 当{a, b, c}为110时,out输出0100_0000
            3'b111: out = 8'b1000_0000;  // 当{a, b, c}为111时,out输出1000_0000
        endcase
    end
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) begin
        case (sw)
            3'b000: seg = 8'b1100_0000; // 显示数字 0
            3'b001: seg = 8'b1111_1001; // 显示数字 1
            3'b010: seg = 8'b1010_0100; // 显示数字 2
            3'b011: seg = 8'b1011_0000; // 显示数字 3
            3'b100: seg = 8'b1001_1001; // 显示数字 4
            3'b101: seg = 8'b1001_0010; // 显示数字 5
            3'b110: seg = 8'b1000_0010; // 显示数字 6
            default: seg = 8'b1111_1111; // 默认全灭
        endcase
    end
endmodule

3、引脚配置

在这里插入图片描述

4、测试结果

FPGA实现三八译码器

好的,让我为您解释一下38译码器(通常指的是74HC138或类似型号的3线-8线译码器)的工作原理,并提供其基本原理图的概念。 ### 38译码器工作原理 **74HC138是一种常见的3线到8线译码器/解复用器集成电路(IC),它有三个输入端(A、B、C)和八个输出端(Y0-Y7)**。根据这三位进制数的不同组合(从000至111), 它会选择对应的单一低电平有效输出通道激活 (其他所有非选择性的输出都保持高阻态或者说是逻辑“1”状态)。此外还有几个控制信号用于启用或禁用整个设备的功能: - **选通使能端(G1, G2A', 和G2B')**: 这些是用来打开或关闭芯片操作的关键点。当所有的使能条件满足时才能正常工作;如果任一禁止,则全部输出会变为无效状态。 - 对于74HC138来说, * 若`G1 = 1`, `G2A' = 0`, 并且 `G2B'= 0` ,则允许编码; * 否则所有的Yn都会被设为高电阻状态(Hi-Z) ### 原理图概览 虽然我现在无法直接画出图形化的电路图,但我可以描述典型的应用连接方式: ``` +5V----|>|----- Vcc +-----------+ | | | --- | IC | ___ [ ] | | | A ->---o------------------->|IN_A | B ->---o------------------->|IN_B | C ->---o------------------->|IN_C | | | G1 --> o--------------------|EN_1 | G2A'--> o--------------------|EN_2' | G2B'--> o--------------------|EN_3' | | | Y[0..7] ---> Outputs ------<|OUT_Yx ... | | | GND <-------------| |- + `-|-<>------ GND ``` 每个输出将对应唯一的地址组合,在实际应用中它们可能会驱动LEDs或其他外围器件等。 #### 输出规则表示例如下: | 输入 ABC | 输出状态 | |---------|-----------------------| | 000 | Y0= L ; 其余皆 H/Z | | 001 | Y1= L ; 其余皆 H/Z | | …… | | | 111 | Y7= L ; 其余皆 H/Z | 其中L表示Low Level ("0"), 而H/Z代表High Impedance 或者 High level ("1") 状态取决于具体设计需求. --- 这种类型的译码器广泛应用于计算机硬件和其他数字系统里作为地址选择工具来访问特定内存位置或者是I/O口。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值