关注、星标公众号,直达精彩内容
来源:https://zhuanlan.zhihu.com/p/400351795
背景说明
当设计中模块较多时,可能会出现增加一些逻辑,或者增加一个模块后,先前正常的模块工作出现错误的情况,当注释掉增加的逻辑或模块时,先前的模块又恢复正常,这很有可能是增加逻辑前后软件布局布线不一样导致的。
最近遇到一个情况是,在调试过程中添加了probe and source IP核去观察一个新写的模块的输出数据,全编译后,用ISSP观察数据是正常的,于是注释掉probe and source IP核,再全编译,然后固化到器件中,结果测试时发现输出数据不对,反复验证了多次,发现情况都是这样。后来发现是增加和去除该IP核前后,软件的布局布线不一样的原因导致的。
解决方法
添加probe and source IP核后,模块的布局布线位置如下(chip planner中查看):
红色区域为probe and source IP核的布局位置,紫色区域为lm75模块布局位置。
注释掉probe and source IP核后,再查看布局情况:
可以看到,lm75模块的位置发生了变化,为了使lm75模块工作正常,现在退回到有probe and source IP核的情况,给lm75创建逻辑锁定(logic lock),
由于lm75模块的布局是分散的,我们让软件自己来规划区域锁定
全编译,查看布局情况
可以看到quartus软件帮我们创建了一个逻辑锁定区域,这个区域的state是floating模式,说明该区域是可以浮动,如果不想后续布局布线时该区域移动,则可以修改为fixed模式,如下:
下载程序调试后,功能正常,注释掉probe and source IP核后,lm75布局没有变化,下载程序调试后,功能正常,其他模块的功能经测试后也是正常的,说明逻辑锁定是有效果的。但是这里并不能保证对其他模块的逻辑布局的影响,以及对整体性能的影响,只能说在现阶段可以解决笔者遇到的问题,故记录一下。
‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧ END ‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧