> Kann mir jemand sagen ob ich gravierende Fehler gemacht habe ?
Jein, der erste "Fehler" ist schon in der 3. Zeile:
1 | LIBRARY ieee;
|
2 | USE ieee.std_logic_1164.all;
|
3 | USE ieee.std_logic_arith.all;
|
4 | use ieee.numeric_std.all;
|
5 | use ieee.std_logic_unsigned.all;
|
Lass die alten herstellerabhängigen std_logic_arith und
std_logic_unsigned Packages weg. Die haben eigene Konvertierungen und
bringen die zusammen mit der standardisierten numeric_std nur
Verwirrung.
So sieht es besser aus:
1 | LIBRARY ieee;
|
2 | USE ieee.std_logic_1164.all;
|
3 | use ieee.numeric_std.all;
|
> erg :inout std_logic_vector (31 downto 0));
Warum ist der Port bidirektional?
> process (bas,exp,erg)
Der Prozess ist nicht von erg abhängig.
Schreib also
dann klappt das auch mit out anstelle von inout.
> Der hier ist synthetisierbar und läuft.
Ist aber auch sehr ressourcenhungrig...
1 | Number of MULT18X18s 3 out of 4 75%
|
und ziemlich langsam:
1 | Maximum combinational path delay: 51.225ns
|
Hier könntest du mit 1 Multiplizierer und einem Sequencer sparsamer
werden. Die Gesamtzeit, bis das Ergebnis da ist, wird sicher nicht
geringer, aber die Ressourcen besser genutzt.