3、创建第一个Vivado工程:新建工程向导、选择器件、添加源文件、综合与实现
好,咱们正式开始动手了。
前面聊了那么多理论,现在终于到了「真刀真枪」干活的环节。创建第一个Vivado工程,其实没那么玄乎。说白了,就是告诉工具:你要用什么芯片、代码放哪儿、然后让它帮你跑一遍流程。
我个人习惯,每次新项目都会先建一个干净的工程目录。别小看这一步,我在项目中见过太多人把工程文件乱放,最后找东西找到崩溃。
3.1 新建工程向导
打开Vivado,你会看到欢迎界面。点击 Create New Project,向导就启动了。
嗯,这里要注意几个关键步骤:
- Project name:命名要有意义。别用「test1」「project_final」这种。我建议用「项目名_版本号」,比如
uart_controller_v1。 - Project location:路径不要有中文,不要有空格。这是血的教训。我曾经有个同事,路径里带了个空格,综合报错查了两天。
- Create project subdirectory:勾上。Vivado会自动帮你建好文件夹结构,省心。
src 文件夹放源码,constrs 放约束文件,ip 放IP核。这样即使Vivado项目文件坏了,源码还在。
3.2 选择器件
这一步很多人随便选,觉得「反正后面能改」。其实不然。
器件选错了,引脚约束、资源评估全都会乱套。我遇到过有人用Artix-7的工程,结果板子上是Kintex-7,综合出来一堆时序违例。
选择器件时,重点关注这几个参数:
| 参数 | 说明 | 我的建议 |
|---|---|---|
| Family | 芯片系列(如Artix-7、Kintex-7) | 根据板子型号选,别猜 |
| Package | 封装类型(如FBG484) | 看板子上的丝印,或者查原理图 |
| Speed Grade | 速度等级(如-1、-2、-3) | 数字越大越快,但功耗也高 |
如果你用的是开发板,Vivado里有个 Boards 选项卡,可以直接选板卡型号。比如Nexys A7、ZedBoard这些,选完器件自动配好。省事。
3.3 添加源文件
源文件分三种:设计文件(.v/.vhd)、约束文件(.xdc)、IP核文件(.xci)。
添加方式有两种:
- Add Files:直接选择已有的文件
- Create File:新建一个空白文件
我个人习惯先建好文件再添加。比如先写一个 top.v,里面放个简单的LED闪烁代码:
module top (
input clk,
input rst_n,
output reg led
);
reg [23:0] cnt;
always @(posedge clk or negedge rst_n) begin
if (!rst_n)
cnt <= 24'd0;
else
cnt <= cnt + 1'b1;
end
always @(posedge clk or negedge rst_n) begin
if (!rst_n)
led <= 1'b0;
else if (cnt == 24'd5000000)
led <= ~led;
end
endmodule
这段代码很简单,就是让LED以大约0.5秒的频率闪烁。你想想看,如果连这个都跑不通,那后面复杂的逻辑就更别说了。
3.4 综合与实现
文件加完了,接下来就是跑流程。Vivado的流程分三步:
- Synthesis(综合):把RTL代码转成网表
- Implementation(实现):把网表映射到具体器件上
- Bitstream Generation(生成比特流):生成下载文件
在Flow Navigator面板里,依次点击:
- Run Synthesis — 等几分钟
- Run Implementation — 再等几分钟
- Generate Bitstream — 最后一步
嗯,这里要提醒你:第一次跑综合,大概率会报一些warning。别慌。看看是不是有未连接的引脚、或者时钟没约束。我刚开始学的时候,看到红色就紧张,后来发现很多warning其实不影响功能。
但有一个warning你必须重视:Timing constraints not defined。这说明你没加时序约束。虽然综合能过,但上板后可能跑不稳。
下面这张图,是我总结的Vivado工程搭建核心流程,你可以对照着看:
跑完这三步,如果没报错,恭喜你,第一个Vivado工程就建好了。你可以把生成的 .bit 文件下载到板子上,看看LED是不是在闪。
如果没闪,别急。检查一下:时钟引脚对不对?复位电平对不对?LED引脚约束有没有写?这些都是新手最容易踩的坑。