數字IC之-Verilog編譯器指示語句
數字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
//==========================================================================================