2017-02-15 11 views
0

これは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はS0S1が一定であることがわかり、代わりにこの

module test(a, b, c, d, result); 
    input a; 
    input b; 
    input c; 
    input d; 
    output result; 
    assign result = a; 
endmodule 

のようなものへの出力を低下させませんか?

私は成功せず、clean -purgeopt_muxtreeopt_cleanコマンドを使用してみました - 静的LIB_MUXインスタンスが結果のネットリストに常にあります。

+1

私はYosysの専門家ではありませんが、['flatten'](http://www.clifford.at/yosys/cmd_flatten.html)コマンドを使用する必要があると思います。 [documentation](http://www.clifford.at/yosys/documentation.html)によると、たくさんの最適化( 'opt')コマンドもあります。 – Greg

答えて

1
  1. あなたは、階層の境界を越えた最適化をしたい場合flattenを実行する必要があります。

  2. はおそらく、まもなくtechmapを実行する前に、しかしfsmshareのような高レベルの最適化を実行した後opt -full実行したいです。

  3. JFYI:テストケースを実行するために必要なすべてのファイルを提供していない場合、人々はあなたが話していることを再現することができません。私はあなたのmy_library.libを持っていないので、あなたのコードを実行しようとしても気にしませんでした。

関連する問題