浅谈寄存器被优化的原因

在项目初期,在使用fpga工具quartus或者vivado生成版本烧入开发板进行调试时(dc开启优化选项后同样会优化掉寄存器),我们有时会发现部分寄存器被优化掉了,今天简单聊聊被优化的几种情况。
1、寄存器被优化的原因
目前鸽子发现寄存器被优化的原因主要有两种:
1)驱动寄存器的信号没有驱动源
a. 至少有一个信号没有驱动源,也可能是多个
2)寄存器负载是悬空的,包含如下场景
a. 寄存器的唯一负载时悬空
b. 寄存器的所有负载均悬空
部分场景下被优化的问题很好排查,有些场景排查会比较麻烦,仅仅从信号连线上看都是正常的,无法通过肉眼快速发现问题,这时候需要去看综合报告,找到问题的源头。
2、案例--大量寄存器被优化
如下图所示,crm是复制产生时钟复位的模块,其中输出clka/clka_rst_n给模块a,其中输出clkb/clkb_rst_n给模块b。soft_reset_n是clka_rst_n和clkb_rst_n的源头之一。soft_reset_n为0,则clka_rst_n/clkb_rst_n为0,处于复制状态。soft_reset_n是配置读写模块csr的一个可配置寄存器,其内部偏移地址为0x60。
通过quartus/vivado查看网表结构和资源利用率,我们发现模块a和模块b大量资源被优化,不符合常理。经过检测发现,所有信号连接均正常,没有悬空,所有信号均存在负载。
经过反复排查后发现,csr模块被手动添加的soft_reset_n寄存器地址分配在0x60,而csr入口wr_addr[5:0]只有6bit,只能访问0x40以内的地址范围,因此soft_reset_n在实际网表中是不存在的,导致clka_rst_n/clkb_rst_n都没有驱动源,因此模块a和模块b大量资源被优化。
3、推荐检查方法
在进行fpga版本调试之前,首先进行spyglass lint检查 或者检查quartus/vivado产生的综合报告,检查是否存在如下warning:
信号没有驱动
信号悬空
把这些warning确认完后再进行版本调试。
4、简单的规律
大量模块逻辑被优化,重点看时钟复位
少量模块逻辑被优化,重点看资源独享的驱动信号
end


怎样入手一个心仪的电脑?下面给你们一点小建议
量子的不可预测性加密密匙是物联网安全的关键
什么是频谱泄漏?为什么会出现频谱泄漏?如何最小化频谱泄漏?
美国银行发布专利意在控制区块链网络部分访问权
Android 11加入双击手势功能 可实现更多快捷操作
浅谈寄存器被优化的原因
vivo的5G样机实现了高清移动视频的传送
什么是智能工厂?智能工厂的特性和优势
纵享丝滑,华为云CDN加速服务的极致体验
提高数字万用表电阻测量上限的技巧
28个实用的iPhone使用技巧
基于CD4093的水位传感器电路
dfrobot7.4V锂电池USB充电模块简介
1550nmLiDAR助自动驾驶汽车应对恶劣天气
基于LA4460的5W音频功率放大器电路图
目前惯导的几大类型介绍(一文了解)
丰田成立EV事业企划室 加速量产出电动汽车
如何根据负载模式与峰值效率选择合适的电压转换器
科技股全线大涨:微博创历史新高 数十支中概股涨幅超5%
我国5G手机全面普及步伐提前加速