如何使用Vivado Schematic创建单个buffer缓冲门
问题原因
- 例化IBUF出现2个缓冲门:Vivado默认会为顶层模块的输入端口自动插入IBUF(输入缓冲),手动额外例化1个IBUF后就会叠加生成2个缓冲单元。
assign x = a无缓冲门:该逻辑为纯连线功能,默认会被综合器直接优化为物理走线,不会生成独立的缓冲逻辑单元。
实现单个缓冲门的解决方案
方案1:关闭全局IO缓冲自动插入开关
适合需要全局控制IO缓冲插入的场景:
- 打开Vivado项目的「综合设置」,在
synth_design的配置参数中添加-no_iobuf,关闭顶层端口自动插入IBUF/OBUF的默认行为 - 保留你原有手动例化IBUF的inv.v代码,重新综合后就只会生成1个手动定义的缓冲门。
方案2:添加综合保留约束(无需修改全局设置)
不想改动全局综合规则的话,直接使用带约束的通用缓冲单元即可:
`timescale 1ns / 1ps (* keep_hierarchy = "yes" *) module inv( input a, output x ); (* keep = "true" *) BUF buf_inst ( .I(a), .O(x) ); endmodule
说明:(* keep = "true" *)约束会强制综合器保留该BUF单元不被优化,使用通用BUF而非IBUF也不会和端口自动插入的IBUF重复,最终生成单个缓冲门。
注:如果你需要将缓冲映射到芯片IO引脚,实现后绑定引脚时要确认对应引脚的IO标准配置和你的项目要求匹配。
内容的提问来源于stack exchange,提问作者Paul Kim
相关产品推荐
相关产品推荐

