Potenzierer in VHDL!

#1235682
Lesenswert?

Hallo bin gerade dabei mir einen kleinen Potenzierer zu Bauen.
Der hier ist synthetisierbar und läuft.
Kann mir jemand sagen ob ich gravierende Fehler gemacht habe ?

liebe grüße
flori

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;
6

7
ENTITY Pot IS
8
  port (  bas    :in std_logic_vector (3 downto 0);
9
          exp    :in std_logic_vector (3 downto 0);
10
          erg    :inout std_logic_vector (31 downto 0));
11
END ENTITY Pot;
12

13
ARCHITECTURE verhalten OF Pot IS
14
BEGIN
15
  process (bas,exp,erg)
16
      variable basi:integer;
17
      variable expi:integer;
18
      variable ergi:integer;   
19
      begin
20
      ergi:=1;  
21
                                      -- std_logic vektor in int
22
      basi := conv_integer(bas);
23
      expi := conv_integer(exp);
24
                                      --Formel
25
      for i in 3 downto 0  loop
26
          ergi:=ergi*ergi;
27
        if exp(i)='1' then
28
          ergi:=(ergi*basi);
29
        end if;
30
      end loop; 
31
      erg  <= conv_std_logic_vector(ergi, 32); 
32
    end process;
33
              
34
END ARCHITECTURE verhalten;
Moderator (Firma: Titel) Persönliche Seite #1235712
Lesenswert?

> 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
1
   process (bas,exp)
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.
#1236003
Lesenswert?

Vielen Dank für die Tipps.
Hab mein Programm umgeändert.
@Lothar Miller:
Könntest du mir sagen wie ich die Ressourcen Werte ermitteln kann.
Besonders interessier mich, wie du auf den Maximum combinational path 
delay von 51.225ns kommst.
In der Area Report file wird mir dies nicht angezeigt.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren