編譯器指示語句 -开发者知识库

編譯器指示語句 -开发者知识库,第1张

   設計者在寫設計代碼時,有時可能針對仿真寫一些語句,這些語句可能是不為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可能使用帶優先級的結構來綜合Verilog的case語句,為避免這種情況,可以使用“//synopsys parallel_case”指示DC將case語句綜合為並行的多路選擇器結構。

 

 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_off和translate_on,只是它的作用不受上述變量控制。

轉載:http://www.cnblogs.com/god_like_donkey/archive/2009/07/19/1526655.html

最佳答案:

本文经用户投稿或网站收集转载,如有侵权请联系本站。

发表评论

0条回复