FPGA入门学习笔记(二)Vivado设计38译码器

文章展示了使用Verilog语言设计的一个3位输入到8位输出的解码器模块,以及对应的测试bench,通过改变输入信号来测试解码器功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

仿真波形

在这里插入图片描述

设计文件程序

`timescale 1ns/1ns

module decode38(
    input a,
    input b,
    input c,
    output reg [7:0] out
);

    //以always块描述的信号赋值,被赋值对象必须定义为reg类型
    //{a, b, c}变成了一个三位的信号,这种操作称为位拼接
    
    always@(*)begin
        case({a,b,c})
            3'b000: out = 8'b00000001;
            3'b001: out = 8'b00000010;
            3'b010: out = 8'b00000100;
            3'b011: out = 8'b00001000;
            3'b100: out = 8'b00010000;
            3'b101: out = 8'b00100000;
            3'b110: out = 8'b01000000;
            3'b111: out = 8'b10000000;
        endcase
    end
endmodule

仿真文件程序

`timescale 1ns/1ns

module decode38_tb();
    reg s_a;
    reg s_b;
    reg s_c;
    wire [7:0] out;

    decode38 decode38_test(
    .a(s_a),
    .b(s_b),
    .c(s_c),
    .out(out)
    );
    initial begin
        s_a = 0; s_b = 0; s_c = 0;
        #200;
        s_a = 0; s_b = 0; s_c = 1;
        #200;
        s_a = 0; s_b = 1; s_c = 0;
        #200;
        s_a = 0; s_b = 1; s_c = 1;
        #200;
        s_a = 1; s_b = 0; s_c = 0;
        #200;
        s_a = 1; s_b = 0; s_c = 1;
        #200;
        s_a = 1; s_b = 1; s_c = 0;
        #200;
        s_a = 1; s_b = 1; s_c = 1;
        #200;
        $stop;
      end
endmodule
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值