2. (开发流程)组合逻辑3_8译码器实现与相关语法基础

1. 设计定义

三八译码器,顾名思义,三位输入,八位输出;即通过三根信号线控制八种输出情况。

2. FPGA

2.1 打开vivado,创建项目

2.2 创建设计文件

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

    //以always块描述的信号赋值,被赋值对象必须定义为reg类型
    
    //{a, b, c}变成了一个三位信号, 这种操作叫做位拼接
    //wire[3:0] d;
    //assign d = {a, 1'b0, b, c};

    always@(*) begin
        case({a, b, c})
            3'b000: out = 0000_0001;
            3'b001: out = 0000_0010;
            3'b010: out = 0000_0100;
            3'b011: out = 0000_1000;
            3'b100: out = 0001_0000;
            3'b101: out = 0010_0000;
            3'b110: out = 0100_0000;
            3'b111: out = 1000_0000;
        endcase
    end

endmodule

2.3 创建仿真文件

`timescale 1ns/1ns

module decoder_3_8_tb();

    reg s_a;
    reg s_b;
    reg s_c;
    wire[7:0] out;
    
    decoder_3_8 decoder_3_8(
        .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

2.4 查看波形,调试代码

2.5 布置引脚

查看引脚编号

 

2.6 上板验证

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值