引導語句“//……”在synopsys DC中的用途

以前一直沒弄懂,以爲就是個簡單的註釋完事,原來還可以用來引導綜合過程:

 

設計者在寫設計代碼時,有時可能針對仿真寫一些語句,這些語句可能是不爲DC所接受,也不希望DC接受;設計者如果不對這些語句進行特殊說明,DC讀入設計代碼時就會產生語法錯誤。

 

另一種情況是,設計者在寫設計代碼,有些設計代碼是爲專有的對象寫的(如公司內部),這些專有的設計代碼可能不希望被綜合。

 

Synopsys提供了引導語句,設計者可以使用這些引導語句控制DC綜合的對象。
在設計代碼中,引導語句“// synopsys translate_off”後直到“// synopsys translate_on”之間的語句被DC忽略。下面的例子給出了這兩個引導語句的用法。

舉例:
// synopsys translate_off
`ifdef ZTEIC
// synopsys_translate_on
    `define VENDOR_ID 16'h0083
// synopsys_translate_off
`else
    `define VENDOR_ID 16'h0036
`endif
// synopsys_translate_on

 

 

parallel_case 和full_case引導格式
一般情況下,DC把case語句綜合成選擇器電路,但也可能把case語句綜合成優先權譯碼電路。有時,優先權譯碼電路是不必要的,這是可以使用“// synopsys parallel_case”引導語句強迫DC把case語句綜合成選擇器電路。這種引導格式在case狀態聲明沒有完全列舉時應用較多。

舉例:
always @(cs_state)
begin
    case(cs_state) // synopsys parallel_case
          2'b00: next_state = 2'b01;
          2'b01: next_state = 2'b00;
          2'b10: next_state = 2'b10;
          default: next_state = 2'b00;
    endcase
end

在case語句中,如果列舉的條件不完全,DC將生成不必要的鎖存單元。在狀態機描述中,可能沒有一些狀態,此時如果不加聲明,DC將認爲條件沒有完全列舉。在這種情況下,設計者可以使用full_case引導語句。

 

舉例:
always @(cs_state)
begin
    case(cs_state) // synopsys full_case
        2'b00: next_state = 2'b01;
        2'b01: next_state = 2'b00;
        2'b10: next_state = 2'b10;
    endcase
end

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章