編譯器指示語句 -开发者知识库
設計者在寫設計代碼時,有時可能針對仿真寫一些語句,這些語句可能是不為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-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
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-5(full_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
最佳答案: