数字电路之Verilog八按键输出信号

写在前面:以下仿真实验设计应用的是Xilinx Vivado。

一、题目要求

       题目要求应用Verilog语言进行设计,题目内容为某控制板外接入8路数字音频脉冲信号,控制板有8个按键(K1~K8) 与这8路信号相对应,每次只允许有一个按键按下。 按键按下后,与按键相对应的输入信号被选中输出至扬声器,同时有一个LED数码管显示所按键序号,最终需提交整个工程文件以及波形图分析。

二、分析题目

       首先,我们分析题目,主要要求就是一个简单的八按键检测问题,所以,我们先找到主要逻辑,即一共有八个按键,每次按键只能有一个按键按下去,这一句话的意思笔者的理解是如果按下多个按键,或者不按按键一律不输出任何东西,如果按下一个按键我们则输出相应的声音信号以及用LED输出按键序号。

三、开始设计

       和上一篇文章一样,在正式设计之前,我们还是需要知道输入输出是什么,从分析题目的结果来,看我们的输入应该是按键按下去,输出即为我们需要验证的波形图,对于这一道题而言我们的输出即为声音信号以及LED按键序号,之后用数码管显示。
       分析完输入输出之后,我们就要正式开始设计了,在按键进行变化时数码管的值进行改变,与此同时声音的信号进行改变,然后进行输出,废话不多说直接上代码:

    always @(Button)
    begin
        case(Button)
            8'b00000001: ButtonNum <= 4'd1;
            8'b00000010: ButtonNum <= 4'd2;
            8'b00000100: ButtonNum <= 4'd3;
            8'b00001000: ButtonNum <= 4'd4;
            8'b00010000: ButtonNum <= 4'd5;
            8'b00100000: ButtonNum <= 4'd6;
            8'b01000000: ButtonNum <= 4'd7;
            8'b10000000: ButtonNum <= 4'd8;
            default: ButtonNum <= 3'bxxx;
        endcase
    end
    always @(ButtonNum)
    begin
        case(ButtonNum)
            1: Display <= 7'b0110000;
            2: Display <= 7'b1101101;
            3: Display <= 7'b1111001;
            4: Display <= 7'b0110011;
            5: Display <= 7'b1011011;
            6: Display <= 7'b1011111;
            7: Display <= 7'b1110000;
            8: Display <= 7'b1111111;
            default: Display <= 7'bxxxxxxx;
        endcase
        Sound <= ButtonNum;
    end

以上代码中Button用来表示八个按键,ButtonNum用来表示这个按键是第几个按键,sound用来表示是第几个声音信号与按键相对应,Display用来七段数码管的数字显示(笔者使用共阴数码管)就这样这个复杂的问题就设计完了。
       数码管的表示在上一篇文章已经写过了,这一次就不多加说明,将以下表示附上即可。

    0: 7'b1111110;
    1: 7'b0110000;
    2: 7'b1101101;
    3: 7'b1111001;
    4: 7'b0110011;
    5: 7'b1011011;
    6: 7'b1011111;
    7: 7'b1110000;
    8: 7'b1111111;
    9: 7'b1111011;

       逻辑设计已经结束,之后就是测试代码的书写了,此题测试代码依旧比较好写,废话不多说,测试代码如下:

`timescale 1s / 1ps

module sim_ButtonCheck();
    reg[7:0] Button;
    wire[3:0] ButtonNum;
    wire[3:0] Sound;
    wire[6:0] Display;
    ButtonCheck U1(
        .Button(Button),
        .ButtonNum(ButtonNum),
        .Sound(Sound),
        .Display(Display)
    );
    initial Button = 8'd0;
    always #5 Button = Button + 1;
endmodule

四、结果分析

       对于结果分析,笔者不多做解释,直接贴上仿真实验波形图,读者自行分析即可。

1 - 4 以及其他情况的显示 1-4 以及其他情况的显示5 以及其他情况的显示5以及其他的显示8 以及其他情况的显示8以及其他的显示

五、最后的话

       此设计笔者未贴出整个代码以及整个傻瓜式教程,是因为笔者认为这种东西只有自己实际的做一遍才算掌握,对于这一道类型的题目,如果还有问题的话,欢迎联系笔者QQ:2428425170,查看整个工程文件。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值