3. Vivado基础操作:创建工程、添加源文件、RTL分析、综合与实现
好,咱们正式开始动手了。这一章我带你走一遍Vivado的基本操作流程。说实话,很多初学者一打开Vivado就被密密麻麻的按钮吓到了。别慌,核心流程其实就五步:建工程、加文件、做分析、跑综合、搞实现。我当年第一次用Vivado的时候,光找"创建工程"按钮就找了半天……嗯,咱们直接开始。
3.1 创建工程——别小看这一步
打开Vivado,你会看到欢迎界面。点"Create Project",接下来就是一路Next。但有几个坑我得提前说:
- Project name:别用中文,别带空格。我用过带空格的,后面脚本跑起来各种报错。
- Project location:路径也别有中文。这是Xilinx的老毛病了,习惯了就好。
- RTL Project:选这个,别选"Post-synthesis"那个,那是给老手用的。
- Target language:Verilog还是VHDL?我个人习惯用Verilog,生态好一些。
- Part选择:这里要选对芯片型号。比如Zynq-7020,就是xc7z020clg484-1。选错了后面综合会出问题。
3.2 添加源文件——把代码放进来
工程建好了,接下来就是添加设计文件。点"Add Sources",或者直接在Flow Navigator里找到"Add Sources"。
这里有三种常见情况:
- 新建文件:选"Create File",输入文件名,Vivado会帮你生成一个模板。我个人不太喜欢这个模板,太啰嗦了,通常删掉自己重写。
- 添加已有文件:选"Add Files",找到你的.v或.vhd文件。注意,Vivado会自动识别文件类型,但有时候会识别错,记得检查一下。
- 添加IP核:这个后面章节会细讲,这里先提一嘴。
添加完源文件后,记得还要加约束文件(.xdc)。没有约束文件,综合出来的结果就是一堆未分配管脚的逻辑。我在项目中遇到过,综合完了才发现没加约束,白跑了一小时……
3.3 RTL分析——先别急着跑综合
很多人加完文件就直接点"Run Synthesis"了。我建议你先做一步:RTL Analysis。
点开"RTL Analysis",然后选"Open Elaborated Design"。Vivado会把你写的RTL代码解析成逻辑网表。这时候你可以:
- 看Schematic:图形化地看看你的电路长什么样。我经常用这个来检查有没有意外生成的锁存器。
- 看I/O Ports:检查管脚分配对不对。
- 看Hierarchy:看看模块之间的连接关系。
为什么会这样?因为综合是把RTL映射到具体的LUT、FF、DSP这些资源上,跑起来很慢。而RTL分析只是做语法检查和逻辑解析,几秒钟就出结果。你想想看,先花10秒检查一下,总比跑半小时综合后发现错误强吧?
3.4 综合——把代码变成电路
RTL分析没问题了,就可以点"Run Synthesis"了。综合的过程就是把你的Verilog代码映射到FPGA的底层资源上。
综合完成后,你会看到几个关键报告:
| 报告名称 | 看什么 |
|---|---|
| Utilization Report | 用了多少LUT、FF、BRAM、DSP。如果超过80%,就要考虑优化了。 |
| Timing Summary | 看WNS(最差负时序裕量)是不是正数。负数说明时序不满足。 |
| Power Report | 功耗估算。做低功耗设计时要重点关注。 |
3.5 实现——把电路放到芯片上
综合完了,下一步就是Implementation。这个过程包括三个子步骤:
- Opt_Design:逻辑优化。Vivado会自动做一些优化,比如合并逻辑、删除冗余。
- Place_Design:布局。把逻辑单元放到FPGA的具体位置上。
- Route_Design:布线。把各个逻辑单元用连线连起来。
你可以一键跑完,也可以分步跑。我建议初学者直接点"Run Implementation",省事。
实现完成后,一定要看Timing Report。这时候的时序才是真实的。如果WNS是负数,说明你的设计跑不到目标频率。怎么办?要么优化代码,要么降低频率,要么换更快的芯片——嗯,最后那个是下下策。
3.6 知识体系总览
下面这张图把整个流程串起来了。你可以把它当作一个检查清单,每次做项目时对照着走一遍。
这张图里我特意加了一个反馈回路。说白了,做FPGA设计很少能一次成功的。综合或实现后发现时序不满足,就得回到RTL分析甚至代码层面去改。别灰心,这是常态。
好了,这一章的内容就到这儿。你跟着走一遍,应该就能把Vivado的基本操作摸熟了。下一章咱们聊点更带劲的——用IP Integrator搭一个Zynq的最小系统。
课后小作业:打开Vivado,创建一个新工程,选Zynq-7020芯片。随便写一个8位计数器,走一遍RTL分析→综合→实现的流程。看看你的Utilization Report里用了多少个LUT和FF。