FPGA自学——三八译码器

发布于:2025-07-23 ⋅ 阅读:(18) ⋅ 点赞:(0)

FPGA自学——三八译码器

一、三八译码器的介绍

在这里插入图片描述

二、项目创建

1.项目命名

在这里插入图片描述

2.选择芯片

在这里插入图片描述

3.添加.v文件,参考https://blog.csdn.net/qq_73050400/article/details/149489361中创建HDL文件

  • 快捷键:alt+A

三、代码实现

module decoder_3_8(
    IN0,
    IN1,
    IN2,
    OUT0,
    OUT1,
    OUT2,
    OUT3,
    OUT4,
    OUT5,
    OUT6,
    OUT7
);

    input         IN0 ;
    input         IN1 ;
    input         IN2 ;
    //由于out0-out7在always的过程赋值语句中实现,所以要修改为reg类型
    output reg   OUT0;
    output reg   OUT1;
    output reg   OUT2;
    output reg   OUT3;
    output reg   OUT4;
    output reg   OUT5;
    output reg   OUT6;
    output reg   OUT7;
    
    //过程赋值语句
    //简单语法介绍:
    //3'd1:三位宽的十进制数1
    //8'b0000_0010:八位宽的二进制数,换算为十进制为2
    always@(*)
        case({IN2,IN1,IN0})//位拼接时要注意:左边高位,右边低位
            3'd0: {OUT7,OUT6,OUT5,OUT4,OUT3,OUT2,OUT1,OUT0} = 8'b0000_0001;
            3'd1: {OUT7,OUT6,OUT5,OUT4,OUT3,OUT2,OUT1,OUT0} = 8'b0000_0010;
            3'd2: {OUT7,OUT6,OUT5,OUT4,OUT3,OUT2,OUT1,OUT0} = 8'b0000_0100;
            3'd3: {OUT7,OUT6,OUT5,OUT4,OUT3,OUT2,OUT1,OUT0} = 8'b0000_1000;
            3'd4: {OUT7,OUT6,OUT5,OUT4,OUT3,OUT2,OUT1,OUT0} = 8'b0001_0000;
            3'd5: {OUT7,OUT6,OUT5,OUT4,OUT3,OUT2,OUT1,OUT0} = 8'b0010_0000;
            3'd6: {OUT7,OUT6,OUT5,OUT4,OUT3,OUT2,OUT1,OUT0} = 8'b0100_0000;
            3'd7: {OUT7,OUT6,OUT5,OUT4,OUT3,OUT2,OUT1,OUT0} = 8'b1000_0000;
            default: {OUT0,OUT1,OUT2,OUT3,OUT4,OUT5,OUT6,OUT7} = 8'b0000_0000;
        endcase
    
    
endmodule

四、查看RTL

在这里插入图片描述

五、仿真验证

1.添加仿真文件,参考https://blog.csdn.net/qq_73050400/article/details/149489361中测试文件编写

  • 快捷键:alt+A

2.测试代码实现

`timescale 1ns/1ns
module decoder_3_8_tb();
    reg     IN0 ;
    reg     IN1 ;
    reg     IN2 ;
    wire    OUT0;
    wire    OUT1;
    wire    OUT2;
    wire    OUT3;
    wire    OUT4;
    wire    OUT5;
    wire    OUT6;
    wire    OUT7;

    decoder_3_8 decoder_3_8_inst0(
        .   IN0     (IN0 ),
        .   IN1     (IN1 ),
        .   IN2     (IN2 ),
        .   OUT0    (OUT0),
        .   OUT1    (OUT1),
        .   OUT2    (OUT2),
        .   OUT3    (OUT3),
        .   OUT4    (OUT4),
        .   OUT5    (OUT5),
        .   OUT6    (OUT6),
        .   OUT7    (OUT7)
    );

    initial begin
        IN2 = 0 ; IN1 = 0 ; IN0 = 0;//0000_0001
        #20
        IN2 = 0 ; IN1 = 0 ; IN0 = 1;//0000_0010
        #20
        IN2 = 0 ; IN1 = 1 ; IN0 = 0;//0000_0100
        #20
        IN2 = 0 ; IN1 = 1 ; IN0 = 1;//0000_1000
        #20
        IN2 = 1 ; IN1 = 0 ; IN0 = 0;//0001_0000
        #20
        IN2 = 1 ; IN1 = 0 ; IN0 = 1;//0010_0000
        #20
        IN2 = 1 ; IN1 = 1 ; IN0 = 0;//0100_0000
        #20
        IN2 = 1 ; IN1 = 1 ; IN0 = 1;//1000_0000
        #20
        $stop;
    end


endmodule

3.仿真波形图

选中的顺序是IN2,IN1,IN0,按顺序选中

在这里插入图片描述

在这里插入图片描述

IN数值多少,对应的out电平为1

六、板级验证

1.查看对应引脚
在这里插入图片描述

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

记得ctrl+s保存

2.生成bitscream文件

参考https://blog.csdn.net/qq_73050400/article/details/149489361中板级验证部分

3.调试结果

三八译码器


网站公告

今日签到

点亮在社区的每一天
去签到