FPGA系统性学习笔记连载_Day6 医院护士灯之Intel Q和Xilinx S-6、 ZYNQ7020三个平台的实现及验证篇
本系列为FPGA系统性学习学员学习笔记整理分享,如有学习或者购买开发板意向,可加交流群联系群主。
连载《叁芯智能fpga设计与研发-第6天》 【医院护士灯实验】之【intel Cyclone IV、Xilinx Spartan-6、Xilinx ZYNQ7020三个平台的实现及验证】
原创作者:紫枫术河 转载请联系群主授权,否则追究责任
本实验,实现一个护士灯实验,要求输入4个按键,输出4个led灯,同一时间只能有一个led灯点亮,key有优先级 key1 > key2 > key3 > key4
一、基本思路
将4路按键信号的值进行判断,先判断key1-->key2-->key3-->key4,如果高优先级的按键按下,低优先级的就不用判断了,代码如下
doctor_leds.v
代码语言:javascript复制module doctor_leds(
input wire [3:0]keys,
output reg [3:0]leds
);
wire [3:0] keys_status;
assign keys_status = keys;
always @(*) begin
if(keys_status[0] == 1'b0)
leds = 4'b0001;
else if(keys_status[0] == 1'b1 && keys_status[1] == 1'b0)
leds = 4'b0010;
else if(keys_status[0] == 1'b1 && keys_status[1] == 1'b1
&& keys_status[2] == 1'b0)
leds = 4'b0100;
else if(keys_status[0] == 1'b1 && keys_status[1] == 1'b1
&& keys_status[2] == 1'b1 && keys_status[3] == 1'b0)
leds = 4'b1000;
else
leds = 4'b0000;
end
endmodule
二、编写仿真脚本:
doctor_leds_tb.v
代码语言:javascript复制`timescale 1ns/1ns
module doctor_leds_tb();
reg [3:0]keys;
wire [3:0]leds;
doctor_leds doctor_leds_inst(
.keys (keys),
.leds (leds)
);
initial begin
keys = 4'b1111;
#20;
repeat(10)begin
keys = {$random};
#20;
end
end
endmodule
仿真结果:
三、Intel Cycle IV FPGA平台验证
我用的是叁芯智能的开发板(intel Cycle IV:EP4CE6E22C8)
3.1、按键原理图
KEY0:PIN_91
KEY1:PIN_90
KEY2:PIN_89
KEY3:PIN_88
3.2、LED灯原理图
LED0:PIN_73
LED1:PIN_74
LED2:PIN_75
LED3:PIN_76
3.3、打开Pin Planner引脚分配工具,分配管脚
3.4、硬件测试效果
四、Xilinx Spartan-6 FPGA 平台验证
我用的是叁芯智能的开发板(Xilinx Spartan-6:XC6SLX9)
4.1、按键原理图
KEY0:PIN_83
KEY1:PIN_82
KEY2:PIN_81
KEY3:PIN_80
4.2、LED灯原理图
LED0:PIN_74
LED1:PIN_75
LED2:PIN_78
LED3:PIN_79
4.3、打开Pin Planner引脚分配工具,分配管脚
4.4、硬件测试效果
五、Xilinx ZYNQ7020 FPGA 平台验证
我用的是广州创龙的开发板(Xilinx ZYNQ7020:xc7z020clg400-2)
5.1、按键原理图
我们用SW1、SW2、SW3、SW4作为与门的输入信号
SW1:C6 这个引脚是连接到PS端,FPGA没法用,这个脚我们必须指定一个(扩展GPIO),否则vavido编译报错
SW2:J15
SW3:H15
SW4:G15
5.2、LED灯原理图
LED0:B5 这个引脚是连接到PS端,FPGA没法用,这个脚我们必须指定一个(扩展GPIO),否则vavido编译报错
LED1:F16
LED2:M14
LED3:M15
5.3、打开Pin Planner引脚分配工具,分配管脚
5.4、硬件测试效果