HDLBITS笔记10:always nolatches(给游戏创建一个ps/2键盘)

假设您正在构建一个电路来处理来自 PS/2 键盘的扫描码的游戏。给定收到的最后两个字节的扫描码,您需要指示是否按下了键盘上的某个箭头键。这涉及一个相当简单的映射,可以实现为具有四个事例的事例语句(或 if-elseif)。

扫描码 [15:0]箭头键
16'he06b向左箭头
16'he072向下箭头
16'he074向右箭头
16'he075向上箭头
别的东西没有

您的电路具有一个 16 位输入和四个输出。构建此电路,用于识别这四个扫描码并断言正确的输出。

法1:使用case

// synthesis verilog_input_version verilog_2001
module top_module (
    input [15:0] scancode,
    output reg left,
    output reg down,
    output reg right,
    output reg up  ); 
    always@(*)
        begin
          up = 1'b0; down = 1'b0; left = 1'b0; right = 1'b0;  
            case(scancode)
                16'he06b: left=1;
                16'he072: down=1;
                16'he074: right=1;
                16'he075: up=1;
                default: ;
            endcase
        end
        

endmodule

使用quartus ii画出逻辑图:

法2:使用if——else语句

// synthesis verilog_input_version verilog_2001
module top_module (
    input [15:0] scancode,
    output reg left,
    output reg down,
    output reg right,
    output reg up  ); 
    always@(*)
        begin
       up = 1'b0; down = 1'b0; left = 1'b0; right = 1'b0;
            if(scancode == 16'he06b)
             left = 1;
            else if(scancode == 16'he072)
            down = 1;
            else if(scancode == 16'he074)
            right = 1;
            else if(scancode == 16'he075)
            up = 1;    
            else
                begin
                up = 1'b0; down = 1'b0; left = 1'b0; right = 1'b0;  
                end
        end     

endmodule

使用quartus ii画出逻辑图:

 注意:使用if -else if -else语句时,注意else语句后面不跟任何内容,否则会报错。

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值