0

Xilinx FPGA Vivado 降低扇出的又一个好方法

Vivado提供了多种方法来降低扇出。毕竟,高扇出网线带来的直接后果是大量的布线资源被占用,从而导致延迟过大,出现时序违例,甚至布线拥塞,更严重的会出现布线冲突。Vivado给出了时钟频率、逻辑级数和扇出的指导值,如下图所示。
2021-03-19 20-47-53 的屏幕截图.png

在综合阶段,我们可以通过综合属性MAX_FANOUT来降低关键网线的扇出。该属性只能在RTL代码中使用。例如,某个网线的扇出为1000,指定MAX_FANOUT为100,那么工具就会对驱动该网线的设计单元(可能是LUT或者FF)复制10份。使用MAX_FANOUT要注意以下几点:一是MAX_FANOUT不适用于降低全局信号的扇出,这可能会导致大量的复制发生,如果复制的是寄存器,会增大设计的控制信,因此该属性更适用于局部扇出中等或者较低的网线需要进一步降低扇出的场合;二是该属性不能和DONT_TOUCH联合使用,否则无效。三是尽可能地使得高扇出网线是寄存器驱动而不是LUT驱动的。

在布局阶段,默认情形下(从2018.3开始), 对于驱动DSP\BRAM或者URAM的寄存器,如果其扇出大于1000,布局初期工具就会对其进行复制,以降低扇出,同时将复制后的寄存器与对应的Block(DSP\BRAM或者URAM)放置得近一些。但这种复制仍可能会连接Block的网线扇出仍比较高。为此,Vivado 2020.2版本提供了两个属性FOCRE_MAX_FANOUT和MAX_FANOUT_MODE。不同于MAX_FANOUT,这两个属性只能在.xdc中使用。MAX_FANOUT_MODE设定了复制模式,其值可以是CLOCK_REGION, SLR或者MACRO。这里的MACRO,线网we的扇出为60,由寄存器驱动,其中有5个负载为BRAM,其余的负载为LUT。同时设置FORCE_MAX_FANOUT的值为1。那么在布局阶段,工具至少会复制5个寄存器,保证连接BRAM的网线扇出为1,如下图所示。这里看到we_dly2_reg_replica即为复制的寄存器,其输出扇出显示为4,是因为BRAM的WEA位宽为4。

完整版见一楼回复

编辑 重设标签(回车键确认) 标为违禁 关闭 合并 删除
匿名用户

匿名

微信扫码加入我们的圈子! shawn的FPGA圈.png
0
  答案登陆可见 做站不容易,小伙伴支持一下我们吧!
编辑 标为违禁 删除 链接 更多选项...
luozz 头像
登录/注册后进行回答