3. Vivado基础操作:创建工程、添加IP、Block Design设计流程、生成比特流

好,咱们直接进入正题。Vivado这个工具,说实话,刚上手的时候会觉得有点「重」。菜单多、选项多,一不小心就迷路。但别怕,我带你走一遍最核心的流程。你只要把这套操作练熟了,后面几十章的内容,你都能跑得起来。

3.1 创建工程——别小看这一步

创建工程听起来简单,对吧?但我见过太多新手,工程建到一半发现器件选错了,或者路径带了中文导致编译报错。嗯,这些坑我都踩过。

打开Vivado,点击 Create Project。这里我建议你养成一个习惯:工程名用英文,路径不要有空格。为什么?因为Vivado底层调用的是一些命令行工具,对中文和空格的支持不太好。我曾经有个项目,就因为路径里带了个「项目」两个字,综合时报了个莫名其妙的错误,查了半天才发现是路径问题。

注意: 工程路径不要包含中文、空格或特殊字符。建议用下划线代替空格,比如 zynq_led_demo。

接下来选择 RTL Project,勾选 Do not specify sources at this time。这一步很多人会纠结——要不要现在就把代码加进来?我的建议是:先不急着加。先把工程框架搭好,后面再慢慢加文件,这样更清晰。

然后就是选芯片了。如果你用的是Zynq-7000系列,比如XC7Z020,那就在 Parts 里搜 xc7z020,选 clg484 封装。如果你用的是开发板,比如ZedBoard或PYNQ-Z2,可以直接在 Boards 标签页里选对应的板卡。我个人习惯用Boards方式,因为Vivado会自动帮你配好一些默认的管脚约束,省事不少。

3.2 添加IP——就像搭积木

工程建好了,接下来就是添加IP。Zynq的优势就在于,你可以把处理器、外设、自定义逻辑都当成IP来用。说白了,就是搭积木。

点击左侧 IP Catalog,在搜索框里输入 zynq,你会看到 ZYNQ7 Processing System。双击它,Vivado会问你要不要创建一个Block Design,点 Yes。

这时候你会看到一个空白的画布,上面只有一个Zynq处理器核。嗯,光有处理器还不够,我们得给它加点料。比如加一个 AXI GPIO IP,用来控制LED灯。再搜 gpio,双击 AXI GPIO,它就会出现在画布上。

小技巧: 添加IP后,可以双击IP模块来配置参数。比如GPIO,你可以把位宽改成4位,用来接4个LED。

你可能会问:「这么多IP,我怎么知道该用哪个?」其实很简单——你先想清楚你要做什么。比如你要控制LED,就用GPIO;你要通信,就用UART或SPI;你要高速数据传输,就用DMA。我在项目中就吃过亏,一开始用了GPIO模拟SPI,结果速度上不去,后来换成硬核SPI IP,问题立马解决。

3.3 Block Design设计流程——连线才是关键

IP都摆好了,接下来就是连线。这一步是Block Design的核心,也是最容易出错的地方。

点击画布上方的 Run Block Automation,Vivado会自动帮你连好Zynq处理器的一些基础接口,比如时钟、复位、DDR接口。这一步很智能,但别完全依赖它。我建议你连完之后,手动检查一下。

然后手动连线:把Zynq的 M_AXI_GP0 接口连到AXI GPIO的 S_AXI 接口上。再把AXI GPIO的 GPIO 接口引出到外部。嗯,这里要注意,引出的时候要右键点击接口,选择 Make External,这样就会生成一个管脚。

连好之后,你的Block Design应该像下面这张图一样。我画了个简单的示意图,帮你理解整个结构:

ZYNQ7 Processing System PS (处理器系统) AXI GPIO PL (可编程逻辑) M_AXI_GP0 GPIO (外部管脚)

连完线之后,记得点击画布上方的 Validate Design 按钮(那个绿色的勾)。Vivado会帮你检查有没有漏连的线或者配置错误。如果有错误,它会告诉你具体哪里有问题。我一般会先跑一遍验证,确保没问题再往下走。

3.4 生成比特流——最后一步,也是最耗时的一步

Block Design验证通过后,我们需要把它生成一个硬件描述文件,然后综合、实现、生成比特流。

在 Sources 面板里,右键点击你的Block Design文件(后缀是 .bd),选择 Generate Output Products。这一步会生成HDL代码,把Block Design转换成Vivado能综合的网表。

然后,在 Flow Navigator 里点击 Generate Bitstream。Vivado会依次执行综合(Synthesis)、实现(Implementation)和生成比特流(Bitstream)。这个过程比较耗时,根据工程大小,可能几分钟到几十分钟不等。

重要提醒: 生成比特流之前,一定要确保你的约束文件(XDC)是正确的。特别是时钟约束和管脚约束。我曾经有一次忘了加时钟约束,结果生成的比特流下载到板子上,LED死活不亮。查了半天,发现是时钟频率不对。

生成成功后,你会看到 Bitstream Generation Complete 的提示。这时候,你就可以把比特流文件(.bit)下载到Zynq开发板上了。

嗯,这里再啰嗦一句:如果你用的是Zynq,光下载比特流还不够,你还需要把 FSBL(First Stage Boot Loader)和 设备树 一起烧进去。这部分内容,我们后面会专门讲。

3.5 避坑指南——我踩过的那些坑

最后,我总结几个常见问题,你遇到了可以回来翻翻:

  • 综合报错说找不到IP:多半是IP版本不匹配。右键IP,选择 Upgrade IP 试试。
  • 实现时报时序违例:检查你的时钟约束,或者降低目标频率。我一般先跑个50MHz试试水。
  • 比特流生成到一半卡住:可能是电脑内存不够。Vivado很吃内存,建议至少8GB,16GB更稳。
  • 下载比特流后板子没反应:检查管脚约束,或者看看板子的供电和复位是否正常。

好了,这一章的内容就到这儿。你跟着操作一遍,应该就能跑通一个最简单的Zynq工程了。下一章我们会深入讲Block Design的高级用法,比如自定义IP和中断控制。但别急,先把基础打牢。

我的建议: 学Vivado最好的方法就是多动手。你照着本章的流程,自己建一个工程,加几个IP,连一连线,生成比特流。哪怕只是点亮一个LED,也比看十遍教程有用。

可可精品资料库