微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > 寄存器本来可以写1后自动回0,加进去其他IP后,就无法回0

寄存器本来可以写1后自动回0,加进去其他IP后,就无法回0

时间:10-02 整理:3721RD 点击:

碰到一很奇怪的问题,搞了两个多礼拜了,还是没法搞定,望各位大侠帮忙解答下,谢谢!
         always @ (posedge clk or negedge reset_n)
      if(~reset_n)
          cntrl[31:0]         <= 0;
      else
          if (cntrl[2])
            cntrl[2] <= 1'b0;
          else if (byte_en[0] && cntrl_write)
            cntrl[2]<= regb_wdata[2];
      以上是一个成熟IP的代码,我把这个简化了呈现出来。cntrl[2]有写1后,下一个clk会自动回0的功能。
     cntrl寄存器共有32位,其他位的写入读出是完全OK的。cntrl[2]在我的SOC加进来的模块IP不多的情况下,读写也是正常的。但一旦我把自身的加解密IP加进去后,写1就没办法回0了。起初在Nexys4板子上用的XC7A100T的时候,LUT占用到了60%多,一度以为是资源紧张引起的问题。可后来用AC701的XC7A200T,LUT才占用不到30%,问题依旧出现。
        SOC规模有点大,vivado布局布线后的网表又有点分辨不清楚,目前怀疑是不是vivado工具把这个电路给优化精简后出问题了?
        是不是有其他策略设置可以避免类似情形的发生?(怕电路中仍旧隐藏一些类似的现象,只是暂时没发觉)。
        vivado 2014.1, vivado 2015.3都试过了,一样的现象

用综合后的网表做下仿真就可以了。


跑综合后function仿真是OK的啊,imple后的还没仿,机器跑起来龟爬啊。



   布局布线后的网表,如果不加SDF,速度还是可以接受的,如果加SDF,速度会比较慢

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

网站地图

Top