2017-01-23 24 views
2

我已經在設計下列時鐘門:如何時鐘門映射到高科技庫單元

module my_clkgate(clko, clki, ena); 
    // Clock gating latch triggered on the rising clki edge 
    input clki; 
    input ena; 
    output clko; 
    parameter tdelay = 0; 

    reg enabled; 
    always @ (clki, ena) begin 
    if (!clki) begin 
     enabled = ena; 
    end 
    end 

    assign #(tdelay) clko = enabled & clki; 
endmodule 

當與Yosys,合成所得到的網表實例化(對於reg enabled)一個\$_DLATCH_P_細胞,其不包括在我使用的標準單元庫文件中,即使庫包含鎖存器。

我不想試圖將此設計的enabled與庫中的標準鎖存單元相匹配,而是使用由庫提供​​的時鐘門,而不是使用包含與門的時鐘門,該門的接口如下所示:

module LIB_GATE (
    input CK, 
    input E, 
    output ECK); 
endmodule 

我已經試過如下:

  1. 簡單地用一個實例更換my_clkgate模塊源的內容LIB_GATE和轉發所有的端口連接。 Yosys抱怨LIB_GATE「不屬於設計」。
  2. 除了第1點,將LIB_GATE聲明爲空模塊(如上所示)。這具有在結果網表中留下兩個空模塊LIB_GATEmy_clkgate的效果。
  3. 我也嘗試使用extract命令與庫的Verilog模型,不幸的是它解析失敗(我懷疑該文件包含一些不受支持的Verilog構造,如specify塊)。

當然,我可以寫一個腳本,後期處理的網表來代替my_clkgateLIB_GATE情況下,但我不知道是否能Yosys爲我做的?

僅供參考,這裏是「synth.ys」的文件,我使用:

read_liberty -lib my_library.lib 
script yosys_readfiles.ys 
proc; opt; memory; opt; fsm -norecode; opt 
techmap; opt 
dfflibmap -liberty my_library.lib 
abc -liberty my_library.lib 
hilomap -hicell LIB_TIEHI Y -locell LIB_TIELO Y 
clean 
write_verilog -noattr -noexpr output.v 
stat 

凡「yosys_readfiles.ys」是包含了所有輸入文件之後是一個read_verilog線文件hierarchy-check -top my_design一行。

+0

我不知道Yosis,但在Design Compiler(Synopsys)上有一個'set_clock_gating_style'命令,它允許您選擇要用作時鐘門禁(和其他選項)的元素。你有沒有檢查Yosis類似的東西? – Krouitch

回答

1

除前面的內容外,聲明LIB_GATE爲空模塊(如上所示)。這會在結果網表中留下兩個空模塊LIB_GATE和my_clkgate。

這是解決方案。但是,你必須設置模塊上的blackbox屬性,像這樣:

(* blackbox *) 
module LIB_GATE (
    input CK, 
    input E, 
    output ECK); 
endmodule 

順便說一句:如果你讀了.V文件,然後read_verilog -lib所有模塊的內容將被忽略,blackbox屬性將被自動設置。

您還可以使用read_liberty -lib讀取自由單元庫,以獲取單元庫中所有內容的可實例化黑盒單元。

+0

非常感謝您的回覆。我最終使用了涉及'read_liberty -lib'的解決方案,因爲它不需要我重新定義'LIB_GATE'模塊。使用'(* blackbox *)'的解決方案似乎也做了正確的事情,但我沒有測試過'read_verilog'。 – FriendFX