1. FPGA开发环境搭建与LED流水灯
任务目标
本案例完成两项工作:一是搭建FPGA开发环境(以Xilinx Vivado为例),二是编写并下载一个LED流水灯程序,通过板载8个LED依次点亮来验证FPGA的基本IO操作。最终判定标准:程序下载后,8个LED按固定方向循环点亮,且可通过复位按键清零。
环境与依赖
- 硬件:任意Xilinx 7系列开发板(本案例以Digilent Basys3为例,芯片型号xc7a35tcpg236-1)
- 软件:Vivado 2019.1及以上版本(需包含Vivado HL WebPACK,免费即可)
- 连接:Micro-USB线(用于下载与供电)
核心代码
以下Verilog代码实现8位流水灯。时钟信号clk来自板载100MHz晶振,复位信号rst_n为低有效。计数器cnt对时钟分频,产生约2Hz的移位使能信号,驱动led_reg循环左移。
module led_waterfall(
input wire clk, // 100MHz 板载时钟
input wire rst_n, // 低有效复位
output reg [7:0] led // 8个LED
);
// 分频计数器:100MHz / 2Hz = 50_000_000
reg [25:0] cnt;
wire tick;
always @(posedge clk or negedge rst_n) begin
if (!rst_n)
cnt <= 26'd0;
else if (cnt == 26'd49_999_999)
cnt <= 26'd0;
else
cnt <= cnt + 1'b1;
end
assign tick = (cnt == 26'd49_999_999);
// 流水灯移位寄存器
always @(posedge clk or negedge rst_n) begin
if (!rst_n)
led <= 8'b0000_0001; // 复位后仅最右侧LED亮
else if (tick)
led <= {led[6:0], led[7]}; // 循环左移
end
endmodule
约束文件(XDC)
将以下引脚约束保存为basys3_led.xdc,与Verilog文件一同加入工程。引脚编号对应Basys3板卡上的物理位置,若使用其他开发板请按原理图修改。
set_property PACKAGE_PIN W5 [get_ports clk]
set_property IOSTANDARD LVCMOS33 [get_ports clk]
create_clock -period 10.000 -name sys_clk [get_ports clk]
set_property PACKAGE_PIN U18 [get_ports rst_n]
set_property IOSTANDARD LVCMOS33 [get_ports rst_n]
set_property PACKAGE_PIN U16 [get_ports {led[0]}]
set_property PACKAGE_PIN E19 [get_ports {led[1]}]
set_property PACKAGE_PIN U19 [get_ports {led[2]}]
set_property PACKAGE_PIN Y19 [get_ports {led[3]}]
set_property PACKAGE_PIN T11 [get_ports {led[4]}]
set_property PACKAGE_PIN V17 [get_ports {led[5]}]
set_property PACKAGE_PIN V18 [get_ports {led[6]}]
set_property PACKAGE_PIN V19 [get_ports {led[7]}]
set_property IOSTANDARD LVCMOS33 [get_ports {led[*]}]
set_property IOSTANDARD LVCMOS33 [get_ports rst_n]
运行步骤
- 打开Vivado,创建新工程(RTL Project),选择芯片xc7a35tcpg236-1。
- 添加上述Verilog源文件和XDC约束文件。
- 点击Generate Bitstream,等待综合、实现与比特流生成完成(首次运行约5~10分钟)。
- 连接开发板并上电,点击Open Hardware Manager → Open Target → Program Device,选择生成的.bit文件下载。
验证方法
下载完成后观察板载LED:
- 按下复位键(BTN对应引脚为低有效)时,仅LED[0](最右侧)亮起;
- 松开复位后,LED从右向左依次点亮,即0000_0001 → 0000_0010 → 0000_0100 → … → 1000_0000,然后回到0000_0001循环,每步间隔约0.5秒;
- 若LED不亮或方向相反,检查XDC引脚是否与板卡丝印一致;若所有LED常亮或全灭,检查复位按键极性是否正确。
满足上述循环点亮行为即判定本案例通过,说明FPGA开发环境搭建成功且基本IO操作正确。
常见问题
- 时序错误:若Vivado报时序未收敛,确认XDC中已添加
create_clock约束,且未修改时钟频率。 - 下载失败:检查USB线是否为下载线(非仅充电线),并在Hardware Manager中确认设备被识别。
- LED不变化:检查复位引脚是否被外部拉低(Basys3的BTN按下为低电平,默认上拉为高),若rst_n恒为低则计数器始终清零。