第1章:Block Design基础操作

各位同学好,我是老张。做FPGA这行十几年了,从Xilinx的ISE时代一路用到Vivado。今天咱们聊聊Block Design的基础操作。说实话,刚接触Vivado的IP Integrator时,我也觉得这玩意儿有点花哨——不就是个图形化连线工具吗?后来做RISC-V处理器集成时才发现,这东西真能救命。

1.1 打开IP Integrator

打开Vivado,新建或打开一个工程。在左侧Flow Navigator里找到「IP Integrator」——对,就是那个长得像芯片图标的选项。点击「Create Block Design」,给设计取个名字。我个人习惯用「system」或「top」,简单明了。

小技巧:创建Block Design时,Vivado会让你选择设计来源。如果你只是做原型验证,选「RTL」就行。如果要做更复杂的系统级设计,可以考虑「IP Catalog」模式。

嗯,这里要注意:Block Design本质上是一个图形化的硬件描述。你画的每一条线,背后都对应着实际的硬件连接。别把它当成Visio画图玩。

1.2 添加IP核

画布打开后,右键点击空白区域,选择「Add IP」。或者直接用快捷键Ctrl+I。这时候会弹出IP Catalog窗口——Vivado里所有可用的IP核都在这里了。

我建议你养成一个习惯:添加IP核之前,先想清楚你要做什么。比如我们要集成RISC-V处理器,那就需要:

  • 一个RISC-V核心(比如VexRiscv或SweRV EH1)
  • 一个AXI互联模块
  • 几个外设IP(UART、GPIO、SPI等)
  • 一个时钟和复位模块

在搜索框里输入「VexRiscv」,双击添加。你会看到画布上出现了一个带引脚的方块。这就是你的处理器核心了。

注意:有些IP核需要额外配置。比如RISC-V核心,你得指定指令集扩展、缓存大小、中断控制器类型等参数。双击IP核,在「Customization」窗口里设置。别偷懒,这些参数直接影响最终性能。

1.3 自动连线

IP核放好了,接下来就是连线。Vivado提供了两种方式:自动连线和手动连线。

自动连线,说白了就是让工具帮你猜。点击画布上方的「Run Connection Automation」按钮(那个闪电图标)。Vivado会扫描所有未连接的端口,然后尝试自动匹配。

我记得第一次用这个功能时,心里还挺忐忑的——万一它连错了怎么办?后来发现,对于标准总线接口(比如AXI、AXI4-Stream),Vivado的自动连线准确率很高。但对于自定义接口,它经常犯迷糊。

自动连线的步骤:

  1. 点击「Run Connection Automation」
  2. 在弹出的对话框里,勾选你要自动连接的IP核
  3. 选择连接模式(一般选「All」就行)
  4. 点击「OK」

你会看到画布上瞬间多了一堆线。嗯,这时候别急着高兴——检查一下连接是否正确。我遇到过好几次,自动连线把时钟和复位搞混了。

1.4 手动连线

手动连线,说白了就是你自己画。把鼠标移到IP核的引脚上,光标会变成十字形。按住左键,拖到目标引脚上松开。

手动连线适合以下场景:

  • 自定义接口(比如GPIO的位宽配置)
  • 非标准总线连接
  • 需要精确控制延迟的路径

我曾经在一个项目中,需要把RISC-V处理器的调试接口连到外部JTAG控制器。自动连线死活搞不定,最后手动画了十几条线。虽然累,但心里踏实。

核心原则:能用自动连线就用自动连线,省时间。但关键路径一定要手动检查。别偷懒,FPGA调试最怕的就是「我以为连对了」。

1.5 创建输入输出端口

IP核连好了,但怎么跟外部世界通信?这就需要创建输入输出端口了。

右键点击Block Design的边界,选择「Create Port」。在弹出的对话框里,设置:

  • 端口名称(比如「clk_in」、「rst_n」)
  • 方向(Input/Output/Inout)
  • 位宽(默认1位)
  • 类型(Wire/Register)

创建好端口后,把它连到对应的IP核引脚上。比如把「clk_in」连到时钟模块的输入引脚。

这里有个坑:Vivado的端口类型默认是Wire。如果你需要寄存器输出,记得手动改成Register。我刚开始做时,就因为忘了改这个,仿真死活不对。

1.6 实战小技巧

最后分享几个我常用的技巧:

  • 快捷键:Ctrl+I添加IP,Ctrl+W连线,Ctrl+S保存。记住这三个,效率翻倍。
  • 分组管理:把相关的IP核用框选起来,右键「Group」。这样画布看起来清爽很多。
  • 验证连接:点击「Validate Design」按钮(那个对勾图标)。Vivado会检查所有连接是否合法。
  • 导出网表:设计完成后,记得导出HDL网表。在Block Design上右键,选择「Generate Output Products」。
避坑指南:我曾经在自动连线后直接跑综合,结果报了一堆时序错误。后来发现是时钟域没处理好。记住:自动连线只负责连接,不负责时序。时钟域交叉的问题,你得自己处理。

好了,Block Design的基础操作就这些。说白了就是三步:放IP、连IP、加端口。但每一步都有讲究。你想想看,一个复杂的RISC-V系统,可能有几十个IP核、几百条连接线。如果基础操作不扎实,后面调试起来会非常痛苦。

下一章咱们聊聊如何配置RISC-V处理器核心。嗯,到时候我会分享一些实际项目中的配置经验。


公众号:蓝海资料掘金营,微信deep3321