www.mikrocontroller.net

Forum: FPGA, VHDL & Co. Brauche Hilfe bei VHDL Code


Autor: Razdraz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
da ich demnächst eine Prüfung schreiben muss in der ein wenig VHDL 
gefordert wird, hab ich mir mal Active HDL heruntergeladen um mich ein 
wenig einzuarbeiten.

Doch jetzt komm ich grad ums verrecken nicht mehr weiter.

Mein Ziel ist es eine ganz simple Schaltung, bestehend aus 2 Invertern, 
welche hintereinander geschaltet werden, zu programmieren.

Ich will einen Inverter benutzen den ich zuvor schon folgenermaßen 
programmiert habe:
entity inverter is      --Entity eines einzelnen Inverters
    port( a : in bit;
    b : out bit);
end inverter;



architecture inv_bhv of inverter is --Verhalten des Inverters
    begin
      b <= NOT a AFTER 1 ns;
end inv_bhv;

Dann habe ich folgendes für "Hauptprogramm" geschrieben:
library ieee;
use ieee.std_logic_1164.all;

ENTITY invinv IS                  
    port(D_IN : IN BIT :='0';
    D_OUT : OUT BIT :='0');
END invinv;



architecture netlist of invinv is
  signal out_1 : std_logic :='1';

  component inv              
    port(a: IN BIT; b : OUT BIT);
  end component;

  begin
    INV_1 : inv
    port map (D_IN, out_1);
    INV_2 : inv
    port map (out_1, D_OUT);
end netlist;



configuration konfi OF invinv is
    for netlist
        for INV_1, INV_2 : inv USE ENTITY
            work.inverter(inv_bhv);
        end for;
    end for;
end konfi;

Habe diesen Code aus dem Skript der Vorlesung zusammengestellt. Dort war 
ein Beispiel eines RS-FF mit 2 NAND-Gattern beschrieben.

Ich bekomme bei meinem Code einige Fehlermeldungen:
# Compile Architecture "netlist" of Entity "invinv"
# Warning: ELAB1_0026: INVINV.vhd : (19, 0): There is no default binding 
for component "inv".(No entity named "inv" was found).
# Error: COMP96_0100: INVINV.vhd : (20, 18): Actual parameter type in 
port map does not match the port formal type "b".
# Error: COMP96_0100: INVINV.vhd : (22, 12): Actual parameter type in 
port map does not match the port formal type "a".
# Compile Configuration "konfi"
# Error: COMP96_0209: INVINV.vhd : (28, 6): Unknown architecture name 
used in configuration declaration.

Ich werd nicht schlau draus, zumal ich einige ähnliche Beispiele gesehen 
habe, die genau so programmiert waren(auf Papier).
Ich bin mir acuh nicht sicher mit dem "work" aus 
"work.inverter(inv_bhv);", da es diese library in mienen Augen gar nicht 
gibt. Allerdings erstellt die "Create testbench" Funktion ebenfalls 
diesen code Abschnitt mit der library "work".
Der letzte Fehler is mir dann völlig unklar...ich hab doch eine 
architecture mit dem richtigen Namen im Code O.o ??

Ich hoffe, mir kann jemand Helfen.

Danke, razdraz

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

Bewertung
0 lesenswert
nicht lesenswert
>  (No entity named "inv" was found).
Ja, die gibt es auch nicht, die heißt ja ganz anders:
entity    inverter    is      --Entity eines einzelnen Inverters

Zu dem hier:
  signal out_1 : std_logic :='1';
Wie soll das denn auf ein BIT passen:
    INV_1 : inv
    port map (D_IN, out_1);
    INV_2 : inv
    port map (out_1, D_OUT);
Du kennst offenbar noch nicht die strenge Typprüfung von VHDL?
Als Tipp: verwende nur std_logic. Nicht diese obskuren Bits.


Mit dem hier gehts (einfach alles in 1 Datei):
library IEEE;
use IEEE.std_logic_1164.all;

entity inv is      --Entity eines einzelnen Inverters
    port( a : in bit;
    b : out bit);
end inv;

architecture inv_bhv of inv is --Verhalten des Inverters
    begin
      b <= NOT a AFTER 1 ns;
end inv_bhv;



library ieee;
use ieee.std_logic_1164.all;

ENTITY invinv IS                  
    port( D_IN : IN BIT :='0';
          D_OUT : OUT BIT :='0');
END invinv;

architecture netlist of invinv is
  signal out_1 : bit :='1';

  component inv              
    port(a: IN BIT; b : OUT BIT);
  end component;

  begin
    INV_1 : inv
    port map (D_IN, out_1);
    INV_2 : inv
    port map (out_1, D_OUT);
end netlist;

Autor: ´Dr.Schmock (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Merkwürdig, dass die Configuration nicht funktioniert.
Sie ist eigentlich wie im Lehrbuch gemacht.

Ich habs bei mir mit der Xilinx-ISE ausprobiert. Die Entity findet er 
vom Namen nach, aber die Ports werden nicht gemappt.
"Formal port d_i does not exist in ENTITY"
"Formal port d_o does not exist in ENTITY"

Komisch.
Klar, die Configuration weglassen und die Entity direkt einbinden ist 
ohnehin die gebräuchlichere Lösung, das geht auf jeden Fall.

...aber irgendwie wurmt es doch, wenn etwas nicht funktioniert, was 
eigentlich (scheinbar) fehlerfrei ist. ;)

Autor: Duke Scarring (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
´Dr.Schmock schrieb:
> Merkwürdig, dass die Configuration nicht funktioniert.

Dafür gibt es den "XST User Guide", Chapter "XST VHDL Language Support".
Und da findet man da sowas:

– Configuration
Supported only with the all clause for instances list. If no clause is 
added, XST looks for the entity
or architecture compiled in the default library

Duke

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

Bewertung
0 lesenswert
nicht lesenswert
>> wenn etwas nicht funktioniert, was eigentlich fehlerfrei ist. ;)
Das wird dir im realen VHDL-Synthese-Leben noch einige Male passieren:
der VHDL-Standard erlaubt etwas, was die Synthese nicht in Hardware 
umsetzen kann.

Bei sowas Einfachem (was zudem in fast jedem Buch zu finden ist) geht es 
schon los:
   b <= a after 10ns;
   c = d/5; 
Ein FPGA kann solche Verzögerungen nicht umsetzen.

Oder sowas:
   c = d/5; 
Es kann nur durch Zweierpotenzen (weil das nur ein Shift bzw. eine 
Umverdrahtung ist).

> Dafür gibt es den "XST User Guide", Chapter "XST VHDL Language Support".
Und so ähnlich wird es für Active HDL auch sein...

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.