HDL Compiler:translate_on/translate_off综合指令的使用

发布时间:2026/10/26 9:49:09
HDL Compiler:translate_on/translate_off综合指令的使用

相关阅读

HDL Compilerhttps://blog.csdn.net/weixin_45791458/category_12893238.html?spm=1001.2014.3001.5482


综合指令(Synthesis Directives)是一些特殊注释,用于影响综合工具如何处理RTL代码,这些注释会被综合工具识别,但会被其他工具(如仿真器)忽略。关于综合指令相关概念的更多介绍,可以参考下面的博客。HDL Compiler:综合指令https://chenzhang.blog.csdn.net/article/details/148695750

translate_on/translate_off综合指令用于指定某些RTL代码只用于仿真,而不会被综合工具考虑,一般用于如下所示的不可综合代码。

对于verilog

  • primitive定义
  • time定义
  • event定义
  • triand、trior、tri1、tri0、trireg定义
  • 对integer类型使用域选
  • initial语句
  • repeat语句
  • 延迟控制(#)
  • 事件控制(@event)
  • forever语句
  • fork语句
  • force语句
  • release语句
  • deassign语句
  • 精确相等===和精确不相等运算符!==

下面举例说明translate_on/translate_off指令的用法,该指令的语法如下所示。

// synopsys translate_off ***** // synopsys translate_on

考虑例1所示的RTL代码,其中使用了initial语句进行了初始化。

// 例1 module dff_with_initial ( input clk, input d, output reg q ); initial q = 1'b0; always @(posedge clk) q <= d; endmodule

读取设计时,HDL Compiler将产生以下的警告。

Warning: /home/zhangchen/Multiplier_Booth_STG_0/translate.v:7: The statements in initial blocks are ignored. (VER-281)

使用translate_on/translate_off指令可以使HDL Compiler读取设计时忽略其中的RTL代码,如例2所示。

// 例2 module dff_with_initial ( input clk, input d, output reg q ); // synopsys translate_off initial q = 1'b0; // synopsys translate_on always @(posedge clk) q <= d; endmodule

其实现在translate_on/translate_off指令即将被弃用,Synopsys推荐使用预定义宏SYNTHESIS和条件编译指令`ifdef、`ifndef、`else和`endif指定综合器需要忽略的RTL代码。

// 例3 module dff_with_initial ( input clk, input d, output reg q ); `ifndef SYNTHESIS initial q = 1'b0; `endif always @(posedge clk) q <= d; endmodule