假设您正在构建一个电路来处理来自 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语句后面不跟任何内容,否则会报错。