编译器指示语句

 

     设计者在写设计代码时,有时可能针对仿真写一些语句,这些语句可能是不为DC所接受,也不希望DC接受;设计者如果不对这些语句进行特殊说明,DC读入设计代码时就会产生语法错误。

另一种情况是,设计者在写设计代码,有些设计代码是为专有的对象写的(如公司内部),这些专有的设计代码可能不希望被综合。

Synopsys提供了引导语句,设计者可以使用这些引导语句控制DC综合的对象。

1.4  编译器指示语句

有时,可以利用HDL描述中的一些特定的注释语句来控制综合工具的工作,从而弥补仿真环境和综合环境之间的差异,这些注释语句称为编译器指示语句(Compiler Directives)

1.4.1  Verilog编译器指示语句

1)      translate_off/ translate_on

这组语句用来指示DC停止翻译 “//synopsys translate_off”之后的Verilog描述,直至出现 “//synopsys translate_on”。当Verilog代码钟含有供仿真用的不可综合语句时,这项功能能使代码方便地在仿真工具与综合工具之间移植。

 

1-3translate_off/ translate_on指示语句的使用):

//synopsys translate_off

/*仅供仿真用语句

   ……

*/

//synopsys translate_on

/*可综合语句

  ……

*/

 

2)      parallel_case/ full_case

DC可能使用带优先级的结构来综合Verilogcase语句,为避免这种情况,可以使用“//synopsys parallel_case”指示DCcase语句综合为并行的多路选择器结构。

 

1-4parallel_case指示语句的使用):

always @ (state)

    begin

        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

    end

另外,Verilog允许case语句不覆盖所有可能情况,当这样的代码由DC综合时将产生锁存器。为避免这种情况,可以使用 “//synopsys full_case”指示DC所有可能已完全覆盖。

 

1-5full_case指示语句的使用):

always @ (sel or a1 or a2)

    begin

        case (sel)    //synopsys full_case

            2’b00:    z = a1;

            2’b01:    z = a2;

            2’b10:    z = a1 & a2;

        endcase

    end

 

1.4.2    VHDL编译器指示语句

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_offtranslate_on,只是它的作用不受上述变量控制。

 

原文地址:https://www.cnblogs.com/god_like_donkey/p/1526655.html