当你的设计做得越来越大,性能要求越来越高的时候,你就会发现,之前跑得好好的模块,怎么突然间不行了,其实这就是约束的问题,FPGA内部的布局布线就像我们画PCB时的自动布线,如果没有规则设置,那么软件将不能保证你能达到多大的Fmax,而且当你的设计变更的时候,其它没有改动的模块也会在重新综合后受到影响。
正文:
有两种方法来解决发生的这种意外,一个是时序约束,另一个就是逻辑锁定。时序约束是按照你的时序要求去布局布线。而逻辑锁定则是指设计者将某个模块或者某个网络指定在器件的某个位置。尽管有时序约束,但综合器也不能保证每次都能达到要求;而只有当逻辑锁定后,它能保证被锁定的模块在下一次综合不被改变。
事出有因,之前加进来的一个SPI模块,一开始是正常的,后来陆续在设计中加了一些模块,综合后,居然发现SPI模块工作不正常,奇怪的是,在我备份的几个版本中,有几个正常,有几个又不正常,而在这个过程中SPI模块从未被修改过。我想一定是综合器在捣鬼,后来我在SPI正常的版本上查看chip planner中spi的布局信息,然后将其逻辑锁定,再添加新的模块进来,结果发现,SPI果然没有受到影响。
下面在11.1 sp2版本下,介绍这个实例
首先编译SPI正常的那个工程,然后查看spi在chip planner中的位置
如下图
然后创建逻辑锁定
在chip planner中选择spi锁定的区域
选择逻辑锁定区域
综合后,查看结果如下:
在logiclock regions window中可设置类型及属性
Logiclock的区域类型
有时候,并不知道逻辑锁定区域应该放在哪里才算合适,这可以跟据器件pin的位置来安排,尽量保证每个模块集中放置,相关的模块也集中放置,这样综合器综合出来的效果都会要好一些。
结语:
如果当逻辑没问题,添加了时序约束,但仍不能满足时,为了保证系统能稳定的工作,逻辑锁定不失为一个好方法。
文章评论(0条评论)
登录后参与讨论