上海安陆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 */

);

在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值