verilog实现

原理图如下:新建VIVADO工程:

芯片类型:XC7Z020CLG400-2

新verilog语法:always@(*)

完整代码:

module decoder_3_8(
    A0,
    A1,
    A2,
    Y0,
    Y1,
    Y2,
    Y3,
    Y4,
    Y5,
    Y6,
    Y7
);
    input A0;
    input A1;
    input A2;
    output reg Y0;
    output reg Y1;
    output reg Y2;
    output reg Y3;
    output reg Y4;
    output reg Y5;
    output reg Y6;
    output reg Y7;

always@(*)
    case({A2,A1,A0})
        3'b000:{Y7,Y6,Y5,Y4,Y3,Y2,Y1,Y0}=8'b0000_0001;
        3'b001:{Y7,Y6,Y5,Y4,Y3,Y2,Y1,Y0}=8'b0000_0010;
        3'b010:{Y7,Y6,Y5,Y4,Y3,Y2,Y1,Y0}=8'b0000_0100;
        3'b011:{Y7,Y6,Y5,Y4,Y3,Y2,Y1,Y0}=8'b0000_1000;
        3'd4:{Y7,Y6,Y5,Y4,Y3,Y2,Y1,Y0}=8'b0001_0000;
        3'd5:{Y7,Y6,Y5,Y4,Y3,Y2,Y1,Y0}=8'b0010_0000;
        3'd6:{Y7,Y6,Y5,Y4,Y3,Y2,Y1,Y0}=8'b0100_0000;
        3'd7:{Y7,Y6,Y5,Y4,Y3,Y2,Y1,Y0}=8'b1000_0000;
        default:{Y7,Y6,Y5,Y4,Y3,Y2,Y1,Y0}=8'b0000_0000;
    endcase

endmodule

查看电路:

 仿真验证

 代码部分:

`timescale 1ns/1ns
module decoder_3_8_tb();
    reg A0;
    reg A1;
    reg A2;
    wire Y0;
    wire Y1;
    wire Y2;
    wire Y3;
    wire Y4;
    wire Y5;
    wire Y6;
    wire Y7;

    decoder_3_8 decoder_3_8_inst0(
    .A0(A0),
    .A1(A1),
    .A2(A2),
    .Y0(Y0),
    .Y1(Y1),
    .Y2(Y2),
    .Y3(Y3),
    .Y4(Y4),
    .Y5(Y5),
    .Y6(Y6),
    .Y7(Y7)
);
    initial begin
        A2=0;A1=0;A0=0;
        #20;
        A2=0;A1=0;A0=1;
        #20;
        A2=0;A1=1;A0=0;
        #20;
        A2=0;A1=1;A0=1;
        #20;        
        A2=1;A1=0;A0=0;
        #20;        
        A2=1;A1=0;A0=1;
        #20;       
        A2=1;A1=1;A0=0;
        #20;        
        A2=1;A1=1;A0=1;
        #20;
        $stop;        
    end
endmodule

 仿真结果:

板级验证 

 看手册

因为LED灯有限,所以这里只设置部分验证了(无奈哈哈哈)

最后生成比特率插上板子就可以看到可以亮4个灯哈哈哈哈哈哈哈有条件的可以用小梅哥的学习版这个有8个开关更加好。 

Logo

火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。

更多推荐