赞
踩
上海安陆的FPGA,使用的软件为Anlogic TD 5.0.5 -64bit
Tang Dynasty
但是在编译的时候,使用其自带的ChipWatcher进行信号调试的时候,会发现有很多信号被优化掉了;
参考其使用手册:
使用 Synthesis keep 命令可以保证信号不会被后续流程优化掉,从而方便用户后期调试。具体做法如下:
在 verilog 文件中,为想要保留的信号,添加相应的注释,注释的写法为:
//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,并且是在 module 的定义处 keep,正确的写法如下图:
如果想要保留 design 中多个相同的模块不被优化掉,TD 提供了 keep instance 的方法。
如下图中的模块 ef2_ram,在 top module 中被完全等价地例化了多次,如果此时不使用 synthesis keep 的功能,则所有 instance 将会被合并成一个 BRAM。要想保留所有的instance 不被优化,需要在该 instance 的每一个层级都添加注释 “//synthesis keep”。
Synthesis keep_hierarchy
在 keep hierarchy auto/manual 的模式下,可以在 HDL 中添加 synthesis directive 命令来指定特定模块的层次是否要保留。Flatten 模式下,synthesis directive 无效。
具体做法如下:
Verilog:
module SomeModule(
…
…
); /* synthesis keep_hierarchy=true */
…
endmodule
Verilog:
SomeModule u1( /* synthesis keep_hierarchy=true */
…
…
…
);
Verilog:
SomeModule u2( /* synthesis keep_hierarchy=false */
…
…
…
);
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。