第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本质上是一个图形化的硬件描述。你画的每一条线,背后都对应着实际的硬件连接。别把它当成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」,双击添加。你会看到画布上出现了一个带引脚的方块。这就是你的处理器核心了。
1.3 自动连线
IP核放好了,接下来就是连线。Vivado提供了两种方式:自动连线和手动连线。
自动连线,说白了就是让工具帮你猜。点击画布上方的「Run Connection Automation」按钮(那个闪电图标)。Vivado会扫描所有未连接的端口,然后尝试自动匹配。
我记得第一次用这个功能时,心里还挺忐忑的——万一它连错了怎么办?后来发现,对于标准总线接口(比如AXI、AXI4-Stream),Vivado的自动连线准确率很高。但对于自定义接口,它经常犯迷糊。
自动连线的步骤:
- 点击「Run Connection Automation」
- 在弹出的对话框里,勾选你要自动连接的IP核
- 选择连接模式(一般选「All」就行)
- 点击「OK」
你会看到画布上瞬间多了一堆线。嗯,这时候别急着高兴——检查一下连接是否正确。我遇到过好几次,自动连线把时钟和复位搞混了。
1.4 手动连线
手动连线,说白了就是你自己画。把鼠标移到IP核的引脚上,光标会变成十字形。按住左键,拖到目标引脚上松开。
手动连线适合以下场景:
- 自定义接口(比如GPIO的位宽配置)
- 非标准总线连接
- 需要精确控制延迟的路径
我曾经在一个项目中,需要把RISC-V处理器的调试接口连到外部JTAG控制器。自动连线死活搞不定,最后手动画了十几条线。虽然累,但心里踏实。
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