mikrocontroller.net

Forum: FPGA, VHDL & Co. Potenzierer in VHDL!


Autor: Flori K. (jasi)
Datum:

Bewertung
0 lesenswert
nicht 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

LIBRARY ieee;
USE ieee.std_logic_1164.all;
USE ieee.std_logic_arith.all;
use ieee.numeric_std.all;
use ieee.std_logic_unsigned.all;

ENTITY Pot IS
  port (  bas    :in std_logic_vector (3 downto 0);
          exp    :in std_logic_vector (3 downto 0);
          erg    :inout std_logic_vector (31 downto 0));
END ENTITY Pot;

ARCHITECTURE verhalten OF Pot IS
BEGIN
  process (bas,exp,erg)
      variable basi:integer;
      variable expi:integer;
      variable ergi:integer;   
      begin
      ergi:=1;  
                                      -- std_logic vektor in int
      basi := conv_integer(bas);
      expi := conv_integer(exp);
                                      --Formel
      for i in 3 downto 0  loop
          ergi:=ergi*ergi;
        if exp(i)='1' then
          ergi:=(ergi*basi);
        end if;
      end loop; 
      erg  <= conv_std_logic_vector(ergi, 32); 
    end process;
              
END ARCHITECTURE verhalten;



Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Kann mir jemand sagen ob ich gravierende Fehler gemacht habe ?
Jein, der erste "Fehler" ist schon in der 3. Zeile:
LIBRARY ieee;
USE ieee.std_logic_1164.all;
USE ieee.std_logic_arith.all;
use ieee.numeric_std.all;
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:
LIBRARY ieee;
USE ieee.std_logic_1164.all;
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
   process (bas,exp)
dann klappt das auch mit out anstelle von inout.


> Der hier ist synthetisierbar und läuft.
Ist aber auch sehr ressourcenhungrig...
   Number of MULT18X18s                      3 out of 4      75%
und ziemlich langsam:
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.

Autor: Duke Scarring (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Flori K.:
> Kann mir jemand sagen ob ich gravierende Fehler gemacht habe?

Ja, deine Testbench kann das. Siehe VHDL Testbench

Duke

Autor: Flori K. (jasi)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> In der Area Report file wird mir dies nicht angezeigt.
Naja, da wird auch mit Flächen herumgemacht...

Such mal nach Maximum combinational path delay im Synthesereport 
(grobe Näherung) oder im P&R Report (schon besser).

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.