これはCombinatorial synthesis: Better technology mapping resultsの別のフォローアップの質問です。合成ネットリスト内の余分なバッファ/インバータ
これは私のYosys TCL制御スクリプトです:
yosys -import
set libfile osu018_stdcells.lib
read_liberty -lib $libfile
read_verilog test.v
hierarchy;
procs; opt
memory; opt
fsm -norecode; opt -full
techmap; opt -full
dfflibmap -liberty $libfile
abc -liberty $libfile \
-script {+strash;ifraig;scorr;dc2;dretime;strash;&get,-n;&dch,-f;&nf,{D};&put}
clean
write_verilog test_synth.v
使用osu018_stdcells.libファイルが1.1 packageQflowバージョンの一部です。
module test (
input rx_clk,
input rxena,
input rstn,
input [2:0] d,
output reg [2:0] q
);
wire rx_rstn = rstn & rxena;
always @ (negedge rx_clk or negedge rx_rstn) begin
if (!rx_rstn) begin
q <= 0;
end else begin
q <= d;
end
end
endmodule
Yosys(バージョン0.5+ (git sha1 f13e387, gcc 5.3.1-8ubuntu2 -O2 -fstack-protector-strong -fPIC -Os)
)以下test_synth.v出力ネットリスト生成:
これはtest.vファイルで明らか
/* Generated by Yosys 0.5+ (git sha1 f13e387, gcc 5.3.1-8ubuntu2 -O2 -fstack-protector-strong -fPIC -Os) */
(* src = "test.v:1" *)
module test(rx_clk, rxena, rstn, d, q);
wire _0_;
wire _1_;
wire _2_;
(* src = "test.v:5" *)
input [2:0] d;
(* src = "test.v:6" *)
output [2:0] q;
(* src = "test.v:4" *)
input rstn;
(* src = "test.v:2" *)
input rx_clk;
(* src = "test.v:8" *)
wire rx_rstn;
(* src = "test.v:3" *)
input rxena;
INVX1 _3_ (
.A(rx_clk),
.Y(_0_)
);
AND2X1 _4_ (
.A(rstn),
.B(rxena),
.Y(rx_rstn)
);
INVX1 _5_ (
.A(rx_clk),
.Y(_1_)
);
INVX1 _6_ (
.A(rx_clk),
.Y(_2_)
);
DFFSR _7_ (
.CLK(_1_),
.D(d[0]),
.Q(q[0]),
.R(rx_rstn),
.S(1'b1)
);
DFFSR _8_ (
.CLK(_2_),
.D(d[1]),
.Q(q[1]),
.R(rx_rstn),
.S(1'b1)
);
DFFSR _9_ (
.CLK(_0_),
.D(d[2]),
.Q(q[2]),
.R(rx_rstn),
.S(1'b1)
);
endmodule
は、INVX1
セルの3つのインスタンスが存在しますこの設計では、3つのフリップフロップごとに1つずつです。私はフリップフロップCLK
入力の間で共有されるこれらのインバータとその駆動ネットのうちの1つだけを期待していました。
落下クロックエッジからトリガされた約30個のレジスタを持つデザインでは、インバータは1つしか見えませんでしたが、その出力はフリップフロップごとに1つのバッファを通過するため、理想的ではありません。
Yosysにレジスタ間でこれらのリソースを結合/共有させる方法はありますか?
TCLインタプリタを使用するとエラーが発生しました( '無効なコマンド名" opt_merge "')が、代わりに 'opt'を実行してチャームのように働きました。再度、感謝します! – FriendFX
@FriendFX Yosys 0.5+ f13e387は2015年10月からのものです。当時は「opt_share」と呼ばれていました。私は最後のリリース(Yosys 0.7)またはgit headを使うことをお勧めします。 – CliffordVienna