小梅哥ZYNQ FPGA之三八译码器

一.三八译码器

        译码器(Decoder)是一种多输入多输出的组合逻辑电路,负责将二进制代码翻译为特定的对象(如逻辑电平等),功能与编码器相反。译码器一般分为通 用译码器和数字显示译码器两大类。本节设计的是通用译码器,数字显示译码 器会在数码管驱动设计章节中详细介绍。

        以 3-8 译码器为例,即将 3 种输入状态翻译成 8 种输出状态,其真值表如下表所示,其中 A,B,C 为数据输入,Out 为数据输出。在 MCU 应用中,如果需要保证一定的速度情况下实现此功能,一般选取外挂一片 74HC38 或者 74LS38 等独立芯片,但 FPGA 提供了一个完整的想象以及实现空间,仅靠其自身即可实现设计要求。

ABCOUT
0000000_0001
0010000_0010
0100000_0100
0110000_1000
1000001_0000
1010010_0000
1100100_0000
1111000_0000

二.模块接口图

 三.Verilog代码设计

`timescale 1ns / 1ps

module decoder_38(
    in_a,
    in_b,
    in_c,
    out

);
    input in_a;
    input in_b;
    input in_c;
    output reg [7:0] out;

always@(*)begin
    case({in_a,in_b,in_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_38_tb();

reg in_a;
reg in_b;
reg in_c;
wire [7:0] out;

decoder_38 decoder_ins(
    .in_a(in_a),
    .in_b(in_b),
    .in_c(in_c),
    .out(out)
);

initial begin
    in_a = 0;in_b = 0;in_c = 0;
    #20;
    in_a = 0;in_b = 0;in_c = 1;
    #20;
    in_a = 0;in_b = 1;in_c = 0;
    #20;
    in_a = 0;in_b = 1;in_c = 1;
    #20;
    in_a = 1;in_b = 0;in_c = 0;
    #20;
    in_a = 1;in_b = 0;in_c = 1;
    #20;
    in_a = 1;in_b = 1;in_c = 0;
    #20;
    in_a = 1;in_b = 1;in_c = 1;
end

endmodule

仿真结果:

通过整体的代码逻辑和仿真输出来看,仿真波形符合设计的逻辑。

五.引脚约束

set_property PACKAGE_PIN AB22 [get_ports in_a]
set_property PACKAGE_PIN AB21 [get_ports in_b]
set_property PACKAGE_PIN AA20 [get_ports in_c]
set_property PACKAGE_PIN AB14 [get_ports {out[0]}]
set_property PACKAGE_PIN AA14 [get_ports {out[1]}]
set_property PACKAGE_PIN AA15 [get_ports {out[2]}]
set_property PACKAGE_PIN AA12 [get_ports {out[3]}]
set_property PACKAGE_PIN R17 [get_ports {out[4]}]
set_property PACKAGE_PIN T17 [get_ports {out[5]}]
set_property PACKAGE_PIN U19 [get_ports {out[6]}]
set_property PACKAGE_PIN V19 [get_ports {out[7]}]
set_property IOSTANDARD LVCMOS33 [get_ports {out[7]}]
set_property IOSTANDARD LVCMOS33 [get_ports {out[6]}]
set_property IOSTANDARD LVCMOS33 [get_ports {out[5]}]
set_property IOSTANDARD LVCMOS33 [get_ports {out[4]}]
set_property IOSTANDARD LVCMOS33 [get_ports {out[3]}]
set_property IOSTANDARD LVCMOS33 [get_ports {out[2]}]
set_property IOSTANDARD LVCMOS33 [get_ports {out[1]}]
set_property IOSTANDARD LVCMOS33 [get_ports {out[0]}]
set_property IOSTANDARD LVCMOS33 [get_ports in_a]
set_property IOSTANDARD LVCMOS33 [get_ports in_b]
set_property IOSTANDARD LVCMOS33 [get_ports in_c]

六.上板测试

通过整体的代码逻辑上板测试的输出来看,上板测试的结果符合设计的逻辑。

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值