设计者在写设计代码时,有时可能针对仿真写一些语句,这些语句可能是不为DC所接受,也不希望DC接受;设计者如果不对这些语句进行特殊说明,DC读入设计代码时就会产生语法错误。
另一种情况是,设计者在写设计代码,有些设计代码是为专有的对象写的(如公司内部),这些专有的设计代码可能不希望被综合。
Synopsys提供了引导语句,设计者可以使用这些引导语句控制DC综合的对象。
1.4 编译器指示语句
有时,可以利用HDL描述中的一些特定的注释语句来控制综合工具的工作,从而弥补仿真环境和综合环境之间的差异,这些注释语句称为编译器指示语句(Compiler Directives)。
1) translate_off/ translate_on
这组语句用来指示DC停止翻译 “//synopsys translate_off”之后的Verilog描述,直至出现 “//synopsys translate_on”。当Verilog代码钟含有供仿真用的不可综合语句时,这项功能能使代码方便地在仿真工具与综合工具之间移植。
例1-3(translate_off/ translate_on指示语句的使用):
//synopsys translate_off
/*仅供仿真用语句
……
*/
//synopsys translate_on
/*可综合语句
……
*/
2) parallel_case/ full_case
DC可能使用带优先级的结构来综合Verilog的case语句,为避免这种情况,可以使用“//synopsys parallel_case”指示DC将case语句综合为并行的多路选择器结构。
例 1-4(parallel_case指示语句的使用):
always @ (state)
begin
case (state) //synopsys parallel_case
default: new_state =
endcase
end
另外,Verilog允许case语句不覆盖所有可能情况,当这样的代码由DC综合时将产生锁存器。为避免这种情况,可以使用 “//synopsys full_case”指示DC所有可能已完全覆盖。
例 1-5(full_case指示语句的使用):
always @ (sel or a1 or a2)
begin
case (sel) //synopsys full_case
endcase
end
1) translate_off/ translate_on
作用同Verilog,注意需要使用符合VHDL语法的注释:
--synopsys translate_off
--synopsys translate_on
也可以使用:
--pragma translate_off
--pragma translate_on
需要注意的是,在VHDL中使用了以上编译指示语句后,DC仍会对translate_off/on之间的描述进行语法检查,若想避免这一点,可以改变以下变量的值:
hdlin_translate_off_skip_text = true
2) synthesis_off/ synthesis_on
其作用和语法均类似于translate_off和translate_on,只是它的作用不受上述变量控制。