Ich versuche gerade eine Design unit zu schreiben wo man verschiedene
Addierertypen (Simpel, CarrySelect, CarryLock ahead...) auswählen kann.
Breite soll 32bit sein, ohne overflow erkennung mit Carry in.
Beim Carry Select adder hakt es jezt irgenwie, einmal erzeugt er mir für
die UnterAddiere immer welche die am Eingang einmal den Operanden und
einmal konstant 1 haben.
Als nächstes wird kein MUX erzeugt, sondern das Ergebnis wird einfach
wieder Rückgekoppelt an den nächsten Addierer.
Im Ergebnis macht er also aus meinem CarrySelect Addierer wieder einen
RippleCarry Addierer.
Hab erst vermutet das ich das Schematic nicht Durchblicke, aber im
Report erscheit es genauso:
1 | Synthesizing Unit <ADDER32bit>.
|
2 | Related source file is "C:/daten/VHDL/CPUS/IJVM/ADDER32bit.vhd".
|
3 | Found 9-bit adder for signal <C1>.
|
4 | Found 9-bit adder for signal <C2>.
|
5 | Found 8-bit adder for signal <C3>.
|
6 | Found 9-bit adder carry in for signal <L>.
|
7 | Found 9-bit adder for signal <N1$add0000> created at line 47.
|
8 | Found 9-bit adder for signal <N2$add0000> created at line 48.
|
9 | Found 8-bit adder for signal <N3>.
|
10 | Summary:
|
11 | inferred 7 Adder/Subtractor(s).
|
12 | Unit <ADDER32bit> synthesized.
|
Die erste Stufe erzeugt er korrekt als addierer mit Carry in, bei den
anderen jedoch wird Cin immer auf 0 gesezt...
Recourcesharing hab ich abgeschaltet in den Synthese Optionen daran
sollte es also auch nicht liegen :-\