当前位置:   article > 正文

上海安陆FPGA软件如何防止模块在综合的时候把信号优化掉_安陆fpga模块不被优化怎么做

安陆fpga模块不被优化怎么做

上海安陆FPGA软件如何防止模块在综合的时候把信号优化掉

上海安陆的FPGA,使用的软件为Anlogic TD 5.0.5 -64bit

Tang Dynasty

但是在编译的时候,使用其自带的ChipWatcher进行信号调试的时候,会发现有很多信号被优化掉了;

参考其使用手册:

1,Synthesis Keep

使用 Synthesis keep 命令可以保证信号不会被后续流程优化掉,从而方便用户后期调试。具体做法如下:

verilog 文件中,为想要保留的信号,添加相应的注释,注释的写法为:

wire reg 等保留:

//synthesis keep = 1; / *synthesis keep=1 * /;

//synthesis keep = true; / *synthesis keep=true */

//synthesis keep; / * synthesis keep * /

如图:

在这里插入图片描述

保存文件并编译;

在使用 debug 工具时,可查看到该内部信号。

(1)对于wire型信号,使用/* synthesis keep=“1” */综合属性,例如下面的语句:

wire [7:0] data_in/* synthesis syn_keep=1 */;

(2)对于reg型信号,使用/* synthesis preserve = 1 */综合属性,例如下面的语句:

reg [7:0] data_in/* synthesis syn_preserve = 1 */;

须要注意的是:描述综合属性的语句必定要添加在“;”前面。

其中,/ synthesis keep=“1” /是TD自带综合器的综合属性,对应于Synplify的综合属性是/ synthesis syn_keep=1 /。

keep module port:

如果要 keep module port,并且是在 module 的定义处 keep,正确的写法如下图:
在这里插入图片描述
在这里插入图片描述

keep instance:多个相同的模块:

如果想要保留 design 中多个相同的模块不被优化掉,TD 提供了 keep instance 的方法。

如下图中的模块 ef2_ram,在 top module 中被完全等价地例化了多次,如果此时不使用 synthesis keep 的功能,则所有 instance 将会被合并成一个 BRAM。要想保留所有的instance 不被优化,需要在该 instance 的每一个层级都添加注释 “//synthesis keep”。

在这里插入图片描述

2,Synthesis Directive

Synthesis keep_hierarchy

在 keep hierarchy auto/manual 的模式下,可以在 HDL 中添加 synthesis directive 命令来指定特定模块的层次是否要保留。Flatten 模式下,synthesis directive 无效。

具体做法如下:

  1. 为想要保留的模块,在源文件中添加相应的注释,注释的写法为:

保留整个 module:

Verilog:

module SomeModule(

); /* synthesis keep_hierarchy=true */

endmodule
在这里插入图片描述

保留例化的模块:

Verilog:

SomeModule u1( /* synthesis keep_hierarchy=true */

);

在这里插入图片描述

不保留例化的模块:

Verilog:

SomeModule u2( /* synthesis keep_hierarchy=false */

);

在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/479664
推荐阅读
相关标签
  

闽ICP备14008679号