Tang Primer 20K 译码器亮灯
2022-11-03
更新历史
日期 | 版本 | 作者 | 更新内容 |
---|---|---|---|
2022-11-03 | v0.1 | wonder |
|
说明
在前面的 译码器亮灯 中,使用 verilog 语句来写出真值表达式来达到译码器的目的。这里介绍使用 case 语句来实现译码器功能。
在前面的 译码器亮灯 中,我们所需要的最终结果如下:
按键 | LED 电平状态 | ||||
---|---|---|---|---|---|
S0 | S1 | LED0 | LED1 | LED2 | LED3 |
0 | |||||
0 | 0 | ||||
0 | 0 | ||||
0 | 0 | 0 |
case 语法
操作
引脚复用
- READY
- DONE
- SSPI
端口和引脚
Port | Direction | Location |
---|---|---|
key[0] | input | T10 |
key[1] | input | T3 |
led[0] | output | C13 |
led[1] | output | A13 |
led[2] | output | N16 |
led[3] | output | N14 |
代码
decode_led_on.v
decode_led_on.cst
Verilog文件;
定义了两个按键输入端口,和四个输出端口。根据按键输入的状态,译码输出到对应的端口。
module decode_led_on(
input [1:0] key,
output [3:0] led
);
assign led[0] = !( key[0] & key[1] ) ;
assign led[1] = !(!key[0] & key[1] ) ;
assign led[2] = !( key[0] &!key[1] ) ;
assign led[3] = ( key[0] | key[1] ) ;
endmodule
物理约束文件;
将 verilog 代码里的端口绑定到 FPGA 引脚上面
IO_LOC "led[3]" N14;
IO_LOC "led[2]" N16;
IO_LOC "led[1]" A13;
IO_LOC "led[0]" C13;
IO_LOC "key[1]" T3;
IO_LOC "key[0]" T10;
IO_PORT "led[3]" PULL_MODE=UP DRIVE=8;
IO_PORT "led[2]" PULL_MODE=UP DRIVE=8;
IO_PORT "led[1]" PULL_MODE=UP DRIVE=8;
IO_PORT "led[0]" PULL_MODE=UP DRIVE=8;
IO_PORT "key[1]" PULL_MODE=UP;
IO_PORT "key[0]" PULL_MODE=UP;
效果
默认只有 LED0 亮;按下 S0 按键 LED1 亮;按下 S1 按键 LED1 亮;按下 S0 和 S2 按键 LED3 亮;
按键 | LED 状态 | ||||
---|---|---|---|---|---|
S0 | S1 | LED0 | LED1 | LED2 | LED3 |
亮 | |||||
按下 | 亮 | ||||
按下 | 亮 | ||||
按下 | 按下 | 亮 |