Potenzierer in VHDL!

OP #1235682
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
> 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.
OP
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

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.