【FPGA】三八译码器

        包括3-8译码器的程序文件、RTL原理图、时序仿真等内容。

       涉及思路如下: 三八译码器有三根输入线,可以输入三位二进制数码,共有八种状态组合,即可译出 8 个输出信号,所以实验需要一个存放3位输入信号的变量in和一个8位输出信号的变量out,接下来只需要判断输入信号的数据来确定输出信号的数据就可以了,当输入信号为000时,输出信号应该为00000001,当输入信号为001时,输出信号应该为00000010,当输入信号为010时,输出信号应为00000100,后续信号同理。对于仿真代码,由于输入信号是一个从000开始每次加1的三位二进制数,所以仿真代码只需要使用for循环,然后通过一个integer变量i来控制循环次数,就可以做到输入信号数据的累加。

        

首先进行工程的创建,然后创建一个design source进行主程序的编写,然后进行仿真程序的编写,创建一个simulation source,这里只写了一个周期的三八译码器仿真代码,在定义好引脚后初始化寄存器,代码如下:

//主程序代码
`timescale 1ns / 1ps
module decode_3_8(    
    input [2:0]in,
    output [7:0]out
    );
    assign out[0]=(in==3'd0); //先判断输入端in的值,然后根据结果对输出端out进行赋值
    assign out[1]=(in==3'd1);
    assign out[2]=(in==3'd2);
    assign out[3]=(in==3'd3);
    assign out[4]=(in==3'd4);
    assign out[5]=(in==3'd5);
    assign out[6]=(in==3'd6);
    assign out[7]=(in==3'd7);
endmodule


//仿真代码
`timescale 1ns / 1ps
module decoder_3_8_tb();
    reg [2:0]in0;
    wire [7:0]out0;
    decode_3_8 decoder_3_80(.in(in0),.out(out0));//定义设计文件名和使用变量
    integer i=0; //定义inteager类对象,会在后续initial中进行例化
    initial begin
            for(i=0;i<=7;i=i+1)begin //通过for循环让输入端的三位二进制不断加1
            # 10
            in0=i;
        end
        # 30
        $finish;
    end
endmodule

之后进行仿真测试,点击run simulation后测试结果如下

  

可以看到,输出变量out按照00000001-00000010…..-10000000的顺序都依次输出了一次,输出的八个结果也正好对应了输入端的000-111,符合三八译码器的逻辑,也符合仿真代码中只执行一个选择周期的逻辑,可见实验代码没有问题。

点击Open Elaborated Designed进行所有程序的编译,产生的RTL图和编译结果如下

可见,实验电路符合三八译码器逻辑电路,实验代码没有error,认为实验成功,试验结束。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值