2017-02-15 14 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)) со следующим сценарием синтеза:

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 

... синтезировать следующий Verilog код (test.v):

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 

В результате синтеза включают LIB_MUX4 экземпляр с S0 и S1, привязанный к минимуму двумя LIB_TIELO экземплярами.

Почему не 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 всегда в результате списка соединений.

+1

Я не эксперт Yosys, но я думаю, вам нужно использовать команду ['flatten'] (http://www.clifford.at/yosys/cmd_flatten.html). Также существует команда оптимизации ('opt') в соответствии с [documentation] (http://www.clifford.at/yosys/documentation.html) – Greg

ответ

1
  1. Вам необходимо запустить flatten, если вы хотите оптимизировать через иерархические границы.

  2. Вы, вероятно, хотите, чтобы запустить opt -full незадолго перед запуском techmap, но после запуска оптимизаций высокого уровня, как fsm и share.

  3. JFYI: Если вы не предоставите все файлы, необходимые для запуска тестового примера, люди не смогут воспроизвести то, о чем вы говорите. У меня нет вашего my_library.lib, поэтому я даже не пытался запустить ваш код.