工程创建与初始化
启动 Vivado 后,首先在左侧导航栏找到'创建或打开工程'的入口。右侧面板会显示最近访问的项目列表,方便快速切换。
进入向导界面后,需要为工程命名并指定存放路径。本例以 D 触发器设计为例,路径建议设置在非系统盘以避免权限问题。点击 Next 后选择 RTL Project,此时可以添加现有的 Verilog 文件,若暂无代码可跳过直接继续。
关键步骤是选择目标芯片型号。务必根据实际使用的开发板规格进行选择,选错会导致后续管脚约束无法生效。确认信息概要无误后,点击 Finish 完成工程初始化。
设计文件管理
工程建立后,界面会切换到项目管理器。在左侧 Sources 窗口中右键选择'Add Sources',随后选择'Create File'。
在语言选项中勾选 Verilog,输入模块名称。这里有一个小技巧:如果在创建时勾选了'Define Ports',工具会自动生成端口声明代码,能节省手动编写的时间。注意端口类型默认为 wire,若需存储状态(如寄存器输出),请显式定义为 reg 类型,例如 output reg q。
文件创建完成后,会在 Sources 窗口的 Design Sources 下看到新模块,双击即可进入编辑模式。
核心代码编写
以 D 触发器为例,代码结构如下。这里使用 timescale 指令定义时间单位和精度,确保仿真与综合的一致性。
`timescale 1ns / 1ps // 定义时间单位与精度
module dff( // D 触发器模块
input wire clk, // 时钟信号
input wire d, // 数据输入
output reg q, // 数据输出
output reg q_n // 反相输出
);
always@(posedge clk) begin
q <= d; // 上升沿采样
q_n <= !d;
end
endmodule
编写完成后保存文件,点击菜单栏的运行综合(Run Synthesis)。首次运行可能会提示配置 CPU 线程数,这取决于你的电脑性能,调高线程数可加快编译速度。综合过程中若有报错,请在 Messages 窗口查看 Error 级别的信息,常见错误包括未连接的端口或语法拼写错误,修正后重新运行直至通过。
仿真验证
功能验证是 FPGA 开发中不可或缺的一环。参考设计文件的创建方式,新建一个 Testbench 文件用于仿真。
Testbench 不需要端口定义,主要任务是实例化被测模块并产生激励信号。以下是一个简单的测试代码示例:
`timescale 1ns / 1ps
module dff_tb();
reg clk_sim;
reg d_sim;
wire q_sim;
wire q_n_sim;
// 生成周期为 20ns 的时钟信号
always #10 clk_sim = ~clk_sim;
initial begin
clk_sim = 0;
d_sim = 0;
#20 d_sim = 1; // 延时 20ns 后改变输入
#40 d_sim = 0; // 再延时 40ns
#100 $stop; // 仿真结束
end
// 实例化被测模块
dff uut (
.clk (clk_sim),
.d (d_sim),
.q (q_sim),
.q_n (q_n_sim)
);
endmodule
保存后再次运行综合,然后进入 Simulation 流程。如果有多个 Testbench 文件,记得右键选中当前要运行的那个,设为 Active。在 Run Simulation 前,可在 Tool Settings 中调整仿真时长上限,避免波形截断。
运行结束后观察波形图。理想情况下,每当 clk 出现上升沿,q 端应跟随 d 端的值变化。如果波形符合预期,说明逻辑设计正确。
管脚约束与实现
仿真通过后,需要执行实现(Run Implementation)流程,这一步会将逻辑映射到具体的硬件资源上。实现成功后,部分仿真选项会被解锁。
实现完成后,点击 Open Implemented Design,在菜单栏选择 Window -> I/O Ports 打开引脚分配界面。在这里需要根据开发板的原理图分配物理引脚。已分配的引脚在 Fixed 栏会显示打勾状态。通常 I/O Standard 设置为 LVCMOS33,具体视板载电平标准而定。
设置完毕后按 Ctrl+S 保存,工具会自动生成 XDC 约束文件。该文件记录了所有管脚映射关系,位置通常在 sources 窗口的 Constraints 目录下。
比特流生成与烧录
最后一步是生成比特流文件(Bitstream)。点击 Generate Bitstream 按钮,等待处理完成。
连接开发板并确保供电正常,然后点击 Program Device。工具会自动检测硬件连接,若识别成功,会显示对应的芯片型号。右键点击设备,选择 Program Device 进行烧录。烧录进度条走完即表示程序已写入 FPGA,此时可以通过拨动开关或按键观察 LED 灯的变化来验证功能。


