これはCombinatorial synthesis: Better technology mapping resultsへのフォローアップの質問です。なぜこのMUXはconstですか?入力は最適化されていませんか?
私は、以下の合成スクリプトでYosys(バージョン0.5+ (git sha1 f13e387, gcc 5.3.1-8ubuntu2 -O2 -fstack-protector-strong -fPIC -Os)
)を使用しています:
module mux4(
input i0, i1, i2, i3,
input s0, s1,
output z);
reg zint;
always @(*) begin
case ({s1, s0})
2'b00: zint = i0;
2'b01: zint = i1;
2'b10: zint = i2;
2'b11: zint = i3;
default: zint = i3;
endcase
end
assign z = zint;
endmodule
module test (
input a,b,c,d,
output result
);
mux4 inst (
.i0(a), .i1(b), .i2(c), .i3(d),
.s0(1'b0), .s1(1'b0), # constants here!
.z(result)
);
endmodule
合成結果:次のVerilogコード(test.v)を合成するために...
read_liberty -lib my_library.lib
read_verilog test.v
hierarchy -check -top test
proc; opt; memory; opt; fsm -norecode; opt
techmap; opt
dfflibmap -liberty my_library.lib
abc -liberty my_library.lib -script \
+strash;ifraig;scorr;dc2;dretime;strash;&get,-n;&dch,-f;&nf,{D};&put
hilomap -hicell LIB_TIEHI Y -locell LIB_TIELO Y
clean
write_verilog -noattr -noexpr output.v
stat
S0
およびS1
の両方がLIB_TIELO
個のインスタンスで結ばれているLIB_MUX4
インスタンスを含めます。
はなぜYosysはS0
とS1
が一定であることがわかり、代わりにこの
module test(a, b, c, d, result);
input a;
input b;
input c;
input d;
output result;
assign result = a;
endmodule
のようなものへの出力を低下させませんか?
私は成功せず、clean -purge
、opt_muxtree
とopt_clean
コマンドを使用してみました - 静的LIB_MUX
インスタンスが結果のネットリストに常にあります。
私はYosysの専門家ではありませんが、['flatten'](http://www.clifford.at/yosys/cmd_flatten.html)コマンドを使用する必要があると思います。 [documentation](http://www.clifford.at/yosys/documentation.html)によると、たくさんの最適化( 'opt')コマンドもあります。 – Greg