Geht nicht, bei der Multiplikation von 2 4-Bit-Werten kommt ein Wert mit
5 Bit raus, der muss händisch bearbeitet werden.
Eine Möglichkeit ist der Zwischenschritt über eine Variable:
1 | process (a,b)
|
2 | variable zw : std_logic_vector(4 downto 0);
|
3 | begin
|
4 | zw := a & '0';
|
5 | c <= zw(3 downto 0) + b;
|
6 | end process;
|
Wenn das gilt:
>ich kann sicherstellen dass a<=7 ist
dann machs doch so:
1 | c <= a(2 downto 0)&'0' + b;
|
Richtig wäre dann aber, schon die Deklaration von a so auszulegen, dass
a zum Wertebereich passt.
So gehts auch:
Das Synthese-Ergebnis:
:
Synthesizing Unit <muladd>.
WARNING:Xst:647 - Input <a<3>> is never used.
Found 4-bit adder for signal <c>.
Summary:
inferred 1 Adder/Subtractor(s).
Unit <muladd> synthesized.
:
Also: der Synthesizer hat erkannt, dass a(3) nicht verwendet wird.