我已經在設計下列時鐘門:如何時鐘門映射到高科技庫單元
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
我已經試過如下:
- 簡單地用一個實例更換
my_clkgate
模塊源的內容LIB_GATE
和轉發所有的端口連接。 Yosys抱怨LIB_GATE
「不屬於設計」。 - 除了第1點,將
LIB_GATE
聲明爲空模塊(如上所示)。這具有在結果網表中留下兩個空模塊LIB_GATE
和my_clkgate
的效果。 - 我也嘗試使用
extract
命令與庫的Verilog模型,不幸的是它解析失敗(我懷疑該文件包含一些不受支持的Verilog構造,如specify
塊)。
當然,我可以寫一個腳本,後期處理的網表來代替my_clkgate
與LIB_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
一行。
我不知道Yosis,但在Design Compiler(Synopsys)上有一個'set_clock_gating_style'命令,它允許您選擇要用作時鐘門禁(和其他選項)的元素。你有沒有檢查Yosis類似的東西? – Krouitch