Tang Primer 20K Dock 按键点六个灯
2022-11-27
更新历史
日期 | 版本 | 作者 | 更新内容 |
---|---|---|---|
2022-11-27 | v0.1 | wonder |
|
前面已经完成按键亮两个灯操作了,板子上还剩下五个 LED 可自定义操作,这次可以使用位拼接运算符 {
}
来一起控制六个 LED。
位拼接运算符
例子①
语法:
assign c[5:0] = {{3{1'b1}},{3{1'b0}}};
等效于
assign c[5:0] = 6'b111000 ;
例子②
语法:
wire [2:0] a = 3'b111;
wire [2:0] b = 3'b000;
wire [5:0] c = {a,b} ;
等效于
assign c[5:0] = 6'b111000 ;
硬件电路说明
从 原理图 中,可以知道以下信息:
按键电路:
根据 DOCK 底板原理图,可以看出当板载按键按下时,对应的 FPGA 引脚会为低电平输入。
板载按键电路原理图 | 板载按键与 FPGA 连接引脚图 |
---|---|
LED 电路:
根据 LED 电路,可以知道当 FPGA 引脚为低电平的时候对应连接的 LED 会亮起来。
板载自定义 LED 电路原理图 | 板载自定义 LED 与 FPGA 连接引脚图 |
---|---|
所以直接将按键引脚的逻辑电平输出为 LED 的引脚逻辑电平就可以点亮 LED 灯。
操作
引脚复用
- READY
- DONE
- SSPI
端口和引脚
Port | Direction | Location |
---|---|---|
key | input | T10 |
led[5] | output | L16 |
led[4] | output | L14 |
led[3] | output | N14 |
led[2] | output | N16 |
led[1] | output | A13 |
led[0] | output | C13 |
代码
key_6leds_on.v
key_6leds_on.cst
Verilog文件;
定义了一个按键输入端口,和六个输出端口。六个输出端口的 IO 电平状态由输入端口决定。
module key_6leds_on(
input key,
output [5:0] led
);
assign led[5:0] = {{3{key}},{3{~key}}}; // led[5:0] = {key,key,key,~key,~key,~key};
endmodule
物理约束文件;
将 verilog 代码里的端口绑定到 FPGA 引脚上面
IO_LOC "led[5]" L16;
IO_PORT "led[5]" PULL_MODE=UP DRIVE=8;
IO_LOC "led[4]" L14;
IO_PORT "led[4]" PULL_MODE=UP DRIVE=8;
IO_LOC "led[3]" N14;
IO_PORT "led[3]" PULL_MODE=UP DRIVE=8;
IO_LOC "led[2]" N16;
IO_PORT "led[2]" PULL_MODE=UP DRIVE=8;
IO_LOC "led[1]" A13;
IO_PORT "led[1]" PULL_MODE=UP DRIVE=8;
IO_LOC "led[0]" C13;
IO_PORT "led[0]" PULL_MODE=UP DRIVE=8;
IO_LOC "key" T10;
IO_PORT "key" PULL_MODE=UP;
效果
松开 S0 按键,LED0、LED1 和 LED2 亮,LED3、LED4 和 LED5 灭。
按下 S0 按键,LED3、LED4 和 LED5 亮,LED0、LED1 和 LED2 灭。