2016-04-11 3 views
-1

Ich versuche zu sehen, ob Yosys meinen Anforderungen entspricht oder nicht. Was ich tun möchte, ist eine Operation in Verilog-Code zu finden (z. B. temp = 16 * val1 + 8 * val2) und ersetzen Sie diese durch ein anderes Op wie (temp = val1 < < 4 + val2 < < 3).Suchen und Ersetzen einer Operation in Verilog mit Yosys

Welche Teile muss ich lernen & Verwendung von Yosys? Wenn jemand den Befehlssatz kennt, kann er/sie mir bitte Bescheid geben, um meine Lernkurve zu verbessern?

Danke.

Antwort

0

Zum Beispiel betrachten die folgenden Verilog Eingang (test.v):

module test(input [7:0] val1, val2, output [7:0] temp); 
    assign temp = 16*val1 + 8*val2; 
endmodule 

Der Befehl yosys -p 'prep; opt -full; show' test.v die folgende Schaltbild erzeugen wird:

enter image description here

und die Ausgabe an die Konsole geschrieben enthält diese :

3.1. Executing OPT_EXPR pass (perform const folding). 
Replacing multiply-by-16 cell `$mul$test.v:2$1' in module `\test' with shift-by-4. 
Replacing multiply-by-8 cell `$mul$test.v:2$2' in module `\test' with shift-by-3. 
Replacing $shl cell `$mul$test.v:2$1' (B=3'100, SHR=-4) in module `test' with fixed wiring: { \val1 [3:0] 4'0000 } 
Replacing $shl cell `$mul$test.v:2$2' (B=2'11, SHR=-3) in module `test' with fixed wiring: { \val2 [4:0] 3'000 } 

Die zwei Zeilen, die Replacing multiply-by-* cell lesen, sind die Transformation, die Sie erwähnten. Die beiden folgenden Zeilen ersetzen die Konstantverschiebungsoperationen durch Verdrahtung, wobei {val1[3:0], 4'b0000} und {val2[4:0], 3'b000} als Eingänge für den Addierer verwendet werden.

Dies wird in der opt_expr bestanden. Siehe passes/opt/opt_expr.cc für seinen Quellcode, um zu sehen, wie es gemacht wird.