数字IC之-Verilog编译器指示语句
设计者在写设计代码时,有时可能针对仿真写一些语句,这些语句可能是不为DC所接受,也不希望DC接受;设计者如果不对这些语句进行特殊说明,DC读入设计代码时就会产生语法错误。另一种情况是,设计者在写设计代码,有些设计代码是为专有的对象写的(如公司内部),这些专有的设计代码可能不希望被综合。Synopsys提供了引导语句,设计者可以使用这些引导语句控制DC综合的对象
可以利用HDL描述中的一些特定的注释语句来控制综合工具的工作,从而弥补仿真环境和综合环境之间的差异,这些注释语句称为编译器指示语句。
Verilog编译器指示语句
1. translate_off/ translate_on
这组语句用来指示DC停止翻译 “//synopsys...translate_off”之后的Verilog描述,直至出现 “//synopsys translate_on”。当Verilog代码钟含有供仿真用的不可综合语句时,这项功能能使代码方便地在仿真工具与综合工具之间移植。
例1(translate_off/ translate_on指示语句的使用):
//synopsys translate_off
//synopsys translate_on
2. parallel_case/ full_case
DC可能使用带优先级的结构来综合Verilog的case语句,为避免这种情况,可以使用“//synopsys...parallel_case”指示DC将case语句综合为并行的多路选择器结构。
(parallel_case指示语句的使用):
always @ (state)
case (state) //synopsys parallel_case
2’b00: new_state = 2’b01;
2’b01: new_state = 2’b10;
2’b10: new_state = 2’b00;
default: new_state = 2’b00;
endcase
另外,Verilog允许case语句不覆盖所有可能情况,当这样的代码由DC综合时将产生锁存器。为避免这种情况,可以使用“//synopsys full_case”指示DC所有可能已完全覆盖。
例2 (full_case指示语句的使用):
always @ (sel or a1 or a2)
case (sel) //synopsys full_case
2’b00: z = a1;
2’b01: z = a2;
2’b10: z = a1 & a2;
endcase
//==========================================================================================