【FPGA】组合逻辑 3-8译码器实现

组合逻辑 3-8译码器实现

1 原理

image-20221112075558291

什么是3-8译码器?

将三位的输入信号译码得到一个8位的输出信号

3位的信号的值是n,8位输出信号的第n位上数字就为1

image-20221112075840815

  • 源代码
module decoder_3_8(
    a,
    b,
    c,
    out
    );
    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'b0000_0001;
        3'b001: out = 8'b0000_0010;
        3'b010: out = 8'b0000_0100;
        3'b011: out = 8'b0000_1000;
        3'b100: out = 8'b0001_0000;
        3'b101: out = 8'b0010_0000;
        3'b110: out = 8'b0100_0000;
        3'b111: out = 8'b1000_0000;
    endcase
   end
   
endmodule
  • 仿真代码
`timescale 1ns / 1ps

module decoder_3_8_tb(
    );
    reg a;
    reg b;
    reg c;
    wire [7:0] out;
    
    
    decoder_3_8 UUT(
        .a(a),
        .b(b),
        .c(c),
        .out(out)
    );
    
    initial begin
        a=0;b=0;c=0;
        #200; //延迟200ns
           
        a=0;b=0;c=1;
        #200; //延迟200ns
           
        a=0;b=1;c=0;
        #200; //延迟200ns
           
        a=0;b=1;c=1;
        #200; //延迟200ns
           
        a=1;b=0;c=0;
        #200; //延迟200ns
           
        a=1;b=0;c=1;
        #200; //延迟200ns
           
        a=1;b=1;c=0;
        #200; //延迟200ns              
           
        a=1;b=1;c=1;
        #200; //延迟200ns
    end       
    
    
endmodule

  • 功能仿真

image-20221112092444869

根据功能仿真,我们可以发现,程序能满足我们的需求

  • 分配管脚

image-20221112093551408

image-20221112093946538

程序能满足我们的需求

图中为abc=101 (5) 第5位亮

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值