微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > FPGA项目记录2--MCU验证

FPGA项目记录2--MCU验证

时间:10-02 整理:3721RD 点击:
前段时间,综合的时候,发现我们的项目有些时候很不稳定,有时候又运行的很好。我看了下我们的代码,时钟太多,都是门控时钟,时序很难满足,而且时序就算满足了,还是有些模块的寄存器写不进去,或者写进去的值不对。综合报告是bufg不够用,我用的synplify_pro综合的,然后ise来map,pr,最后,我把rtl改了改就都通过了。用synplify写约束,感觉约束不太管用,效果不大,我就算约束不要用全局时钟,可是synplify还是要用,特别是有些输出信号是时钟的引脚,我约束不要在这个引脚插入全局时钟,可综合的时候,还是要插入,有些引脚我约束了,确实不会插入,比如输入引脚,我约束不插入全局时钟,就不会插入,有些时钟频率低的时钟就可以不用插入全局时钟,不如jtag时钟,和iic都,都只有几百K,在这种时钟比较多的情况下,应该可以这样权衡吧。有高手知道怎么做么?求指导哈。主要是把能同时用的门控时钟就尽量用一个时钟,避免太多同样的时钟,做验证嘛,和ASIC肯定没法比了,还好改了就通过了。
请问大家遇到这样的问题,一般怎么弄呢?
synplify中关闭自动插入bufg.
.sdc文件:
define_global_attribute syn_noclockbuf 1

源代码:
module my_test(data, clk) ;
output data;
input clk / synthesis syn_noclockbuf=1 /;   前面的斜杠后面和后面的斜杠前面 要记得加*。我如果加了这个发不出来。

看到门控时钟赶紧躲



   往哪里躲啊?躲不了啦。所以,很苦逼啊,让我写约束,我已经无能为力了啊,只有该门控了。把几十个门控时钟用其中2个,稳定性还是提高了一点。我就算把全部的门控都改了,route也占85%左右(资源占30%左右)。

什么叫寄存器无法写入,或者写进去不对,如果是Timing问题的话,根本谈不上功能测试。
先得约束好。gated clock难close timing,看看有没有可能改成clock enable。

路过帮顶!



   就是写寄存器后,读寄存器的值不是期望的值,修改策略,或者重新综合,或者稍微改改代码就正确了,这些好难搞啊。有时候交换下管脚,结果就不对,比如交换前,串口打印正确,交换后,串口没有打印信息,交换的两个管脚绝对和串口没有关系。      时钟门控没法改成使能信号,因为太多了,不是一两个信号这样。
    现在是综合基本没问题,模块都调通了,就是有点担心,要是什么时候改点东西,结果又不对,就恼火啊。
    大家遇到这种情况一般怎么弄的呢?会写约束吗?比如:FROM:TO;multi-cycle;offset IN/OUT。有点不知道从何下手去写这些约束,还有就是管脚使用的电平,不知道什么时候需要用不是默认的电平。

就是时序问题。源时钟、分频时钟、门控时钟等几个时钟要求在同一个时钟域,FPGA的布线没有满足时序要求。
要么在约束上下功夫,要么门控时钟不用,简化时钟。FPGA和IC还是有不少区别,做ASIC验证时将就一下,有时很难实现ASIC一样的功能。


目前算是基本完成了。不过约束有点不好弄啊,请问,你们一般怎么写约束呢?能不能给点你们项目的约束呢,想看看和我做的有什么区别,谢谢了。

   没什么通用的规则,用的命令也就create_clock/set_false_path等等,电路不一样约束就不一样,套用不了。
   不过我这边弄来弄去,也是不能达到ASIC的理想状态,有各种限制,简单的是把门控时钟全去掉,分频时钟也去掉,最后只留下几个不同时钟域的时钟,这样就简单了。


我也把时钟去了一些,留了8个门控时钟,不过,有时候(有一次)综合出来结果也不正确,不去时钟还反而正确, 或者改改策略综合就可以了。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top