【FPGA设计】如何从代码层面降低布线拥塞程度

在FPGA设计中,布线拥塞是一个常见的问题,尤其是在设计复杂度高或者资源使用密集的场景下。从代码层面来降低布线拥塞程度,可以通过以下几种策略来实现:

限制扇出数(Fan-out)

布线拥塞本质上与设计自身的一些特征有密切的关系,而这些特征又和代码相关。例
如,高扇出网线会消耗大量的布线资源,容易引起长线拥塞,因此,在设计中对这类网线
就要格外关注,最好在综合阶段就能发现。

存储单元的使用

在可能的情况下,使用本地寄存器而不是全局寄存器,这样可以减少长距离的布线,从而减轻拥塞。
还要注意设计中使用的较大的存储单元。例如,深度为 16、宽度为 512 的单
端口 RAM,如果使用分布式资源实现,将会消耗 512 个 LUT。以 UltraScale+ 芯片为例,
每个 SLICE 里有 8 个 LUT,因此这 512 个 LUT 至少要占用 64 个 SLICEM,也意味着 512
个输出对应 512 根网线。从 SLICEM 入口处看,端口密度会比较大,容易引发短线拥塞,
而 512 根网线又容易引发长线拥塞。如果使用 Block RAM 实现,将会消耗 7 个 36Kb 的
Block RAM 和 1 个 18Kb 的 Block RAM。由于每个 Block RAM 可提供 72 位数据,所以相
比于分布式 RAM,Block RAM 输出的 512 根网线更为集中。因此,从布线拥塞的角度而言,
对于大位宽的存储单元,如果运行在较高的时钟频率下(时钟频率大于 300MHz),建议
采用 Block RAM 实现。
对于基于 SSI 器件的设计,要做好早期设计规划,使得跨 die 路径尽可能少,因为过
多的跨 die 路径容易导致长线拥塞。

并行化处理

如果设计允许,尝试将一些计算并行化,这可以减少单个路径上的布线负载。

时钟设计

避免在设计中使用过多的全局信号和复杂的时钟树网络,这些都可能导致布线拥塞。
确保所有异步时钟域之间有适当的同步,避免跨时钟域的信号成为瓶颈。

🚀 获取更多中文资料可点击链接进群领取,谢谢支持!👇

不知道人工智能如何学习?不知道单片机如何运作?不知道嵌入式究竟是何方神圣?搞不清楚什么是物联网?遇到问题无人可问?来我的交流群吧!里面有丰富的人工智能资料,帮助你自主学习人工智能相关内容,不论是基础的Python教程、OpenCV教程以及机器学习等,都可以在群中找到;单片机毕设项目、单片机从入门到高阶的详细解读、单片机的一系列资料也备好放入群中!关于嵌入式,我这里不仅仅有嵌入式相关书籍的电子版本,更是有丰富的嵌入式学习资料,100G stm32综合项目实战提升包,70G 全网最全嵌入式&物联网资料包,嵌入式面试、笔试的资料,物联网操作系统FreeRTOS课件源码!群内高手云集,各位大佬能够为您排忧解难,让您在学习的过程中如虎添翼!扫码进群即可拥有这一切!还在等什么?赶快拿起手机,加入群聊吧!

点击免费领取更多资料

  • 6
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值