hdlbits系列verilog解答(always块nolatch语句)-36

文章目录

    • 一、问题描述
    • 二、verilog源码
    • 三、仿真结果


一、问题描述

假设您正在构建一个电路来处理来自游戏的 PS/2 键盘的扫描码。设定接收到的最后两个字节的扫描码,您需要指示是否按下了键盘上的一个箭头键。这涉及一个相当简单的映射,可以作为包含四个分支的 case 语句(或 if-elseif)来实现。
Scancode [15:0] Arrow key
16’he06b left arrow
16’he072 down arrow
16’he074 right arrow
16’he075 up arrow
Anything else none

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

为避免产生锁存器,必须在所有可能的条件下为所有输出分配一个值(另请参见always_if2)。仅仅有一个 default 案例是不够的。您必须在所有四种情况下为所有四个输出分配一个值,并且默认情况下。这可能涉及大量不必要的键入。解决此问题的一种简单方法是在 case 语句之前为输出分配一个“默认值”:

always @(*) begin
up = 1’b0; down = 1’b0; left = 1’b0; right = 1’b0;
case (scancode)
… // Set to 1 as necessary.
endcase
end

<

你可能感兴趣的:(verilog语言,fpga开发)