irpas技术客

上海安陆FPGA软件如何防止模块在综合的时候把信号优化掉_synthesis syn keep 会被综合成_呓语煮酒

网络投稿 4238

上海安陆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 无效。

具体做法如下:

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

Verilog:

module SomeModule(

); /* synthesis keep_hierarchy=true */

endmodule

保留例化的模块:

Verilog:

SomeModule u1( /* synthesis keep_hierarchy=true */

);

不保留例化的模块:

Verilog:

SomeModule u2( /* synthesis keep_hierarchy=false */

);


1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,会注明原创字样,如未注明都非原创,如有侵权请联系删除!;3.作者投稿可能会经我们编辑修改或补充;4.本站不提供任何储存功能只提供收集或者投稿人的网盘链接。

标签: #Synthesis #syn #Keep #会被综合成 #td #505 #64bitTang