一、创建工程
启动 Vivado 后,在左侧面板点击'创建(或打开)工程',右侧会显示最近打开的项目列表。选择新建工程,输入项目名称并设置存放路径。这里我们以 D 触发器为例。
进入向导后,选择 RTL 项目类型,直接点击 Next。如果已有设计文件可在此添加,没有则跳过,后续再添加也无妨。接着选择芯片型号,务必根据实际开发板选型,选好后查看信息概要,确认无误点击 Finish 完成初始化。
二、创建文件
工程建立后进入主界面。在工程管理区右键选择 Add Sources,创建新的设计文件。语言选择 Verilog,按需求命名即可。
系统支持定义端口,若在此处勾选,会自动生成端口声明代码,比手动编写更快捷。注意端口类型默认是 wire,如需寄存器输出需显式声明为 reg,例如 output reg q。
文件创建完成后,会在 Source 窗口中显示,准备开始编写逻辑。
三、编写代码
以 D 触发器为例,代码如下:
`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 进行综合编译。遇到报错时不要慌,查看 Messages 面板中的 Error 信息,针对性修改直到通过。关于 CPU 工作线程数,可在设置中调整,配置越高可选数量越多,能提升编译速度。
四、仿真验证
综合成功后,需要创建 Testbench 进行仿真。同样在 Add Sources 中选择 Create or add simulate source。
Testbench 代码如下:
`timescale 1ns / 1ps
module dff_tb();
reg clk_sim;
reg d_sim;
wire q_sim;
wire q_n_sim;
always #10 clk_sim = ~clk_sim; // 每 10 个时间单位翻转,周期 20
initial begin
clk_sim = 0;
d_sim = 0;
#20; // 延时 20ns
d_sim = 1;
#40;
d_sim = 0;
#100;
$stop; // 停止仿真
end
dff dff_inst(
.clk(clk_sim),
.d(d_sim),
.q(q_sim),
.q_n(q_n_sim)
);
endmodule
再次运行综合确保无错。随后点击 Run Simulation,若有多个 TB 文件,请右键设为 Active。注意仿真时长上限可在 Tool Settings 中调整,若波形不全可适当增加时间。
观察波形,当 clk 上升沿到来时,q 应跟随 d 的值变化,说明功能正确。
五、配置管脚
仿真通过后,点击 Run Implementation 进行实现。完成后解锁部分仿真选项,通常无需使用。
实现结束后,点击 Open Implemented Design,在菜单栏 Window 中找到 I/O Ports。在此分配引脚,已分配的 Fixed 栏会自动打勾。I/O Standard 通常设置为 LVCMOS33。
保存后命名,OK 生成 XDC 约束文件,位置可在工程目录中查看。
六、生成 Bitstream 文件并烧录
最后一步是生成比特流。点击 Generate Bitstream,等待完成。
连接开发板并确保通电,点击 Program Device 自动连接硬件。识别到芯片型号后,右键选择 Program Device 进行烧录。若未识别,请检查线缆与供电状态。
至此,FPGA 开发流程基本结束,代码已成功下载至硬件。


