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。选错了后面综合会出问题。
小技巧:如果你不确定芯片型号,可以在板卡厂商的文档里找。比如ZedBoard、Pynq-Z2,官网上都有明确标注。

3.2 添加源文件——把代码放进来

工程建好了,接下来就是添加设计文件。点"Add Sources",或者直接在Flow Navigator里找到"Add Sources"。

这里有三种常见情况:

  1. 新建文件:选"Create File",输入文件名,Vivado会帮你生成一个模板。我个人不太喜欢这个模板,太啰嗦了,通常删掉自己重写。
  2. 添加已有文件:选"Add Files",找到你的.v或.vhd文件。注意,Vivado会自动识别文件类型,但有时候会识别错,记得检查一下。
  3. 添加IP核:这个后面章节会细讲,这里先提一嘴。

添加完源文件后,记得还要加约束文件(.xdc)。没有约束文件,综合出来的结果就是一堆未分配管脚的逻辑。我在项目中遇到过,综合完了才发现没加约束,白跑了一小时……

3.3 RTL分析——先别急着跑综合

很多人加完文件就直接点"Run Synthesis"了。我建议你先做一步:RTL Analysis。

点开"RTL Analysis",然后选"Open Elaborated Design"。Vivado会把你写的RTL代码解析成逻辑网表。这时候你可以:

  • 看Schematic:图形化地看看你的电路长什么样。我经常用这个来检查有没有意外生成的锁存器。
  • 看I/O Ports:检查管脚分配对不对。
  • 看Hierarchy:看看模块之间的连接关系。
重点:RTL分析这一步不跑综合,速度很快。如果这里就报错了,说明你的代码有语法问题或者模块例化不对。别等到综合再查,浪费时间。

为什么会这样?因为综合是把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 功耗估算。做低功耗设计时要重点关注。
注意:综合后的时序报告是估算值,不是真实值。真实的时序要在实现(Implementation)之后才能看到。我曾经被综合报告骗过,以为时序过了,结果实现后一塌糊涂……

3.5 实现——把电路放到芯片上

综合完了,下一步就是Implementation。这个过程包括三个子步骤:

  1. Opt_Design:逻辑优化。Vivado会自动做一些优化,比如合并逻辑、删除冗余。
  2. Place_Design:布局。把逻辑单元放到FPGA的具体位置上。
  3. Route_Design:布线。把各个逻辑单元用连线连起来。

你可以一键跑完,也可以分步跑。我建议初学者直接点"Run Implementation",省事。

实现完成后,一定要看Timing Report。这时候的时序才是真实的。如果WNS是负数,说明你的设计跑不到目标频率。怎么办?要么优化代码,要么降低频率,要么换更快的芯片——嗯,最后那个是下下策。

避坑指南:我曾经有一个设计,综合后WNS是+0.2ns,觉得稳了。结果实现后WNS变成了-0.5ns。查了半天,发现是约束文件里有个时钟周期写错了。所以,实现后的时序报告一定要仔细看,别偷懒。

3.6 知识体系总览

下面这张图把整个流程串起来了。你可以把它当作一个检查清单,每次做项目时对照着走一遍。

Vivado 基础操作流程 1. 创建工程 选择芯片、设置路径 2. 添加源文件 RTL代码 + 约束文件 3. RTL分析 检查语法和逻辑 4. 综合 映射到LUT/FF/DSP 5. 实现 布局布线 + 时序收敛 时序不满足时返回修改 关键检查点 ① 综合后看Utilization和Timing Summary(估算值) ② 实现后看Timing Report(真实值),WNS必须为正数

这张图里我特意加了一个反馈回路。说白了,做FPGA设计很少能一次成功的。综合或实现后发现时序不满足,就得回到RTL分析甚至代码层面去改。别灰心,这是常态。

好了,这一章的内容就到这儿。你跟着走一遍,应该就能把Vivado的基本操作摸熟了。下一章咱们聊点更带劲的——用IP Integrator搭一个Zynq的最小系统。

课后小作业:打开Vivado,创建一个新工程,选Zynq-7020芯片。随便写一个8位计数器,走一遍RTL分析→综合→实现的流程。看看你的Utilization Report里用了多少个LUT和FF。

可可精品资料库