Tang Primer 20K 译码器亮灯
2022-09-30
更新历史
日期 | 版本 | 作者 | 更新内容 |
---|---|---|---|
2022-09-30 | v0.1 | wonder |
|
说明
本例程使用 Dock 底板上的 S0、S1 按键,和 LED0、LED1、LED2、LED3 四个 LED 灯。
使用两个按键来控制 4 个LED灯的状态,进行的操作与对应的结果如下:
按键 | LED 状态 | 真值表达式 | ||||
---|---|---|---|---|---|---|
S0 | S1 | LED0 | LED1 | LED2 | LED3 | |
亮 | $$ LED0 = S0\cdot S1 $$ | |||||
按下 | 亮 | $$ LED1 = \overline{S0}\cdot S1 $$ | ||||
按下 | 亮 | $$ LED2 = S0\cdot \overline{S1} $$ | ||||
按下 | 按下 | 亮 | $$ LED3 = \overline{S0}\cdot \overline{S1} $$ |
从前面的 按键亮灯 已知:当 FPGA 与 LED 所连接的引脚为低电平时,对应的 LED 灯会亮;按下按键,对应的 FPGA 引脚为低电平状态。
上面那个表格的输出是以 1 为结果,为了根据原理图来点灯,需要将上面的真值表结果取反来实现最终的效果:
按键 | LED 电平状态 | 真值表达式 | ||||
---|---|---|---|---|---|---|
S0 | S1 | LED0 | LED1 | LED2 | LED3 | |
0 | $$ LED0= \overline{S0\cdot S1} $$ | |||||
0 | 0 | $$ LED1 = \overline{\overline{S0}\cdot S1} $$ | ||||
0 | 0 | $$ LED2 = \overline{S0\cdot \overline{S1}} $$ | ||||
0 | 0 | 0 | $$ LED3 = \overline{\overline{S0}\cdot \overline{S1}} = S0 | S1 $$ |
操作
引脚复用
- 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 |
亮 | |||||
按下 | 亮 | ||||
按下 | 亮 | ||||
按下 | 按下 | 亮 |