Forum: FPGA, VHDL & Co. VHDL Maxplus2 Library Compile Error


von Maximilian K. (imazze)


Lesenswert?

Hi!

Bin aktuell Anfänger was VHDL, etc. anbetrifft. Leider Schmeißt mit 
Quartus einen Error folgendermaßen: "Node instance "u1" instantiates 
undefined entity a_74374".

Habe versucht das Logikgatter 74374 aus der Maxplus2 Bibliothek 
einzubinden.

Der Code war in etwa so:
1
library IEEE;
2
use IEEE.STD_LOGIC_1164.ALL;
3
LIBRARY altera;
4
USE altera.maxplus2.ALL;
5
6
entity mem_mod is
7
    Port ( ...
8
end mem_mod;
9
10
architecture Behavioral of mem_mod is
11
...
12
begin
13
14
u1: a_74259 
15
PORT MAP ( 
16
   data => DAT8, 
17
   q(0) => LED,
18
   q(1) => LATCH_Q1,
19
   q(2) => MEMSL,
20
   s(0) => ADR(0),
21
   s(1) => ADR(1),
22
   s(2) => ADR(2),
23
   gn => XLE,
24
   clrn => SHUTDOWN);
25
26
end Behavioral;

Habt ihr eine Lösung für mich?

von Gustl B. (gustl_b)


Lesenswert?

Ich kenne das alles nicht, aber bei dir steht ein "a_" vor der Zahl und 
laut dieser Seite http://susta.cz/fel/74/index_engall.htm ist der Name 
nur eine Zahl.

Edit:
Aber ganz ehrlich, diese Gatter oder 74 ICs sind schnell selbst 
beschrieben und diese Bibliothek sieht steinalt aus.
Wenn du auch was lernen willst denn schreibe das selbst.

: Bearbeitet durch User
von Fpgakuechle K. (Gast)


Lesenswert?

Maximilian K. schrieb:

> Habt ihr eine Lösung für mich?

schreibt dir selbst eine passende Componentdecleration.
Schau in der kompilierten Bibliethek nach wie die passende Entity 
heisst.

Referenziere direkt auf die komülierte Bibliothek,

also  bspw.

u1: entity work.a_74259


> Habe versucht das Logikgatter 74374

Hast du nicht, jedenfalls referenziert dein Code auf ne ganz andere 
Nummer.
Und vielleicht gibt es das a_74374 auch tatsächlich nicht.

Lies dir mal dir schritte zum Einbinden der Bibliothek genau durch, 
möglicherweise ist da was schief gegeangen. Unter Projet settings sind 
u.U. einige Pfade zu setzen.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Maximilian K. schrieb:
> Habe versucht das Logikgatter 74374 aus der Maxplus2 Bibliothek
> einzubinden.
Warum willst du Bausteine aus dem letzten Jahrtausend nachbilden statt 
einfach selber mal kurz so einen getakteten 8-Bit-Speicher zu schreiben?
Etwa so in wenigen Zeilen:
1
signal reg : std_logic_vector (7 downto 0) := x"00";
2
:
3
:
4
reg  <= inp when rising_edge(clk);
5
outp <= x"00" when OE = 0 else reg;

: Bearbeitet durch Moderator
von Fpgakuechle K. (Gast)


Lesenswert?

Lothar M. schrieb:

> Warum willst du Bausteine aus dem letzten Jahrtausend nachbilden

Vielleicht will er sich ja nur das Grundlagenwissen
"Wie binde ich in VHDL Bauteil/Komponenten-/Test-bibliotheken in eigenen 
Code ein und warum ist das so anders als wie ich mir das mit meinen 
'C'-Kenntnissen vorstelle" erarbeiten?

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Fpgakuechle K. schrieb:
> Lothar M. schrieb:
>> Warum willst du Bausteine aus dem letzten Jahrtausend nachbilden
> Vielleicht will er sich ja nur das Grundlagenwissen
> "Wie binde ich in VHDL Bauteil/Komponenten-/Test-bibliotheken in eigenen
> Code ein
Mag sein. Trotzdem meine Frage. Denn das Einbinden von Komponenten kann 
man auch anders lernen als an 30 Jahre alten Modellen.

Gustl B. schrieb:
> Ich kenne das alles nicht, aber bei dir steht ein "a_" vor der Zahl und
> laut dieser Seite http://susta.cz/fel/74/index_engall.htm ist der Name
> nur eine Zahl.
Da steht das etwas anders:
http://www.amos.eguru-il.com/vhdl_info/libs/maxplus2.htm

Maximilian K. schrieb:
> Der Code war in etwa so
Wie war er genau?
Sonst funktioniert die Fehlersuche auch nur "in etwa" wie man hier so 
sieht.

> Leider Schmeißt mit Quartus einen Error folgendermaßen:
> "Node instance "u1" instantiates undefined entity a_74374".
Welcher Teil der Toolchain erzeugt den Fehler?

von Fpgakuechle K. (Gast)


Lesenswert?

Lothar M. schrieb:
> Fpgakuechle K. schrieb:

> Gustl B. schrieb:
>> Ich kenne das alles nicht, aber bei dir steht ein "a_" vor der Zahl und
>> laut dieser Seite http://susta.cz/fel/74/index_engall.htm ist der Name
>> nur eine Zahl.
> Da steht das etwas anders:
> http://www.amos.eguru-il.com/vhdl_info/libs/maxplus2.htm

Und da steht:
"Logic function names that begin with a number must be preceded by "a_" 
in VHDL designs"

https://www.intel.com/content/www/us/en/programmable/support/support-resources/design-software/max_plus-ii/library.html

von Maximilian K. (imazze)



Lesenswert?

Hi!

Vielen Dank für alle eure sinnvollen Antworten!
Wie gesagt bin ziemlicher VHDL Anfänger. Mein Projekt ist es aktuell 
eine 30 Jahr Alte Schaltung, welche mit diskreten Logikgattern aufgebaut 
ist durch heutzutage Programmierbare Logik zu ersetzen (siehe Anhang). 
Grund: Bauraum, Kosten, Erweiterbarkeit, etc. Nun kaufte ich mir ein 
CPLD Board (Altera Max II) sowie ein FPGA Board (Altera Cyclones II) zum 
"herumspielen". First of all ist es ja erstmal unabhängig von der 
Hardware, dass mein "Code" läuft, ja?

Ziel war es ohne größeres Nachdenken die Logikgatter einfach wie diese 
im Schaltplan "verdrahtet" sind in VHDL nachzubauen -> beantwortet die 
Frage nach der 30 Jahr alten Technik. Wenn dieser Teil des "nachbauen" 
für mich erfolgreich ist, kann ich mir ja die nächsten Schritte wagen.

Mein Code sah im ganzen so aus:
1
library IEEE;
2
use IEEE.STD_LOGIC_1164.ALL;
3
LIBRARY altera;
4
USE altera.maxplus2.ALL;
5
6
entity mem_mod is
7
    Port ( 
8
         ADR    : in std_logic_vector(0 to 6);
9
         DAT8    : in STD_LOGIC;
10
         SHUTDOWN   : in STD_LOGIC;
11
         
12
         LED    : out STD_LOGIC);
13
end mem_mod;
14
15
architecture Behavioral of mem_mod is
16
  signal XLE     : STD_LOGIC;
17
  signal LATCH_Q1   : STD_LOGIC;
18
  signal MEMSL     : STD_LOGIC;
19
  signal XWE     : STD_LOGIC;  
20
begin
21
22
23
u1: a_74259 
24
PORT MAP ( 
25
   data => DAT8, 
26
   q(0) => LED,
27
   q(1) => LATCH_Q1,
28
   q(2) => MEMSL,
29
   s(0) => ADR(0),
30
   s(1) => ADR(1),
31
   s(2) => ADR(2),
32
   gn => XLE,
33
   clrn => SHUTDOWN);
34
35
36
end Behavioral;

... und ja, es fehlen auch hier einige Zeilen, aber diese sind 
unrelevant für mein Problem.

Wie gesagt mein Problem aktuell ist, dass im Part "Analysis & Synthesis" 
der Rechner die Definitionen von a_74259 nicht findet.

: Bearbeitet durch User
von Fpgakuechle K. (Gast)


Lesenswert?

> Wie gesagt mein Problem aktuell ist, dass im Part "Analysis & Synthesis"
> der Rechner die Definitionen von a_74259 nicht findet.

Dann musste ihm eine passende Definition des Interfaces geben.

beispielsweise durch eine componentdeclaration
1
architecture Behavioral of mem_mod is
2
3
component a_74259
4
    port(
5
     data: in std_ulogic;
6
     q   : out std_ulogic_vector(2 downto 0);  
7
     s   : in std_ulogic_vector(2 downto 0);  
8
    gn   : in std_ulogic;
9
    clrn : in std_ulogic);
10
end component a_74259;
11
12
begin

Angaben ohne Gewähr, da ich nicht weiß, wie 'dein' a_74259 ausschaut.
Eventuell musst du auch deine Port Map zu passender vector-zuweisung 
umschreiben. std_logic statt std_ulogic könnte auch erforderlich sein.

https://tams.informatik.uni-hamburg.de/vhdl/doc/ajmMaterial/vhdl.pdf
S.53 ff

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Fpgakuechle K. schrieb:
> Dann musste ihm eine passende Definition des Interfaces geben.
Die sollte aber doch schon im altera.maxplus2 Package drin sein...
Im von mir verlinkten Package findet sich das hier:
1
component a_74259
2
       port ( clrn: in STD_LOGIC;
3
              gn: in STD_LOGIC;
4
              s: in STD_LOGIC_VECTOR (2 downto 0);
5
              data: in STD_LOGIC;
6
              q: out STD_LOGIC_VECTOR (7 downto 0));
7
end component;
Das kann man zwar sicher nochmal einbinden, aber dann fällt halt der 
nächste Teil der Toolchain auf die Nase.

Maximilian K. schrieb:
> Ziel war es ohne größeres Nachdenken die Logikgatter einfach wie diese
> im Schaltplan "verdrahtet" sind in VHDL nachzubauen -> beantwortet die
> Frage nach der 30 Jahr alten Technik. Wenn dieser Teil des "nachbauen"
> für mich erfolgreich ist, kann ich mir ja die nächsten Schritte wagen.
Mir fällt da immer der Beitrag "kruder Fehler bei FPGA-Programmierung (ISE WEBpack-Schematic)" in 
den Sinn.

: Bearbeitet durch Moderator
von Fpgakuechle K. (Gast)


Lesenswert?

Lothar M. schrieb:
> Fpgakuechle K. schrieb:
>> Dann musste ihm eine passende Definition des Interfaces geben.
> Die sollte aber doch schon im altera.maxplus2 Package drin sein...
> Im von mir verlinkten Package findet sich das hier:
>
1
> component a_74259
2
>        port ( clrn: in STD_LOGIC;
3
>               gn: in STD_LOGIC;
4
>               s: in STD_LOGIC_VECTOR (2 downto 0);
5
>               data: in STD_LOGIC;
6
>               q: out STD_LOGIC_VECTOR (7 downto 0));
7
> end component;
8
>


VHDL sucht gerne nach componenten in einer 'objektorientierten' Art und 
Weise, meint, es überprüft nicht nur den Namen sondern auch die 
Portliste und Typen müßen passen. Da kann es schon passieren, das eine 
Komponente angemeckert wird, weil zwar der Component-Name stimmt, aber 
nicht die Ports, respektive die Portmap. Beim TO fehlen in der Portmap 
Q(7 downto 0),.

Und natürlich stellt sich auch die Frage ob die Altera-componenten auch 
in die altara working lib compiliert worden und nicht in die work. Oder 
andere Fallstricke im package/Bibliothek-handling.


> Das kann man zwar sicher nochmal einbinden, aber dann fällt halt der
> nächste Teil der Toolchain auf die Nase.

Nein, nicht zwingend.
Es ist sicher nicht 'nochmal' weil dann würde er nicht meckern das es 
ihm fehlt. Also steht es wohl nicht in dem oben eingebunden 
altera.maxplus2 packages.

Das packages interessiert ohnehin nur den analyze schritt, dem 
anschliessenden fitter ist das egal, der sucht nach einer passenden 
Netzliste/Makro aus dem IP-Katalog. Und ob die korrekt eingebunden ist, 
wissen wir nicht, weil das nicht im VHDL steht.

von Maximilian K. (imazze)


Angehängte Dateien:

Lesenswert?

Hi!

Habe folgendes herausgefunden: alle (stichprobenmäßig herausgefunden) 
Bausteine, welche in der Library 
http://www.amos.eguru-il.com/vhdl_info/libs/maxplus2.htm KEINE Vektoren 
im Ein/Ausgang haben kompilieren bei mir perfekt.

Meine Interpretation hierbei ist, dass es Quartus nicht schafft mein 
Port Mapping passend auf das Blockschaltbild der *.bdf Datei des 74259 
zu Mappen. Hier mal ein Screenshot wie das aussieht.

Quartus müsste
1
s: in STD_LOGIC_VECTOR (2 downto 0);
 somit auf die Eingänge S0, S1 und S2 Mappen, was wahrscheinlich nicht 
funktioniert, oder liege ich da völlig falsch?

von Fpgakuechle K. (Gast)


Lesenswert?

Maximilian K. schrieb:
> Hi!
>
> Habe folgendes herausgefunden: alle (stichprobenmäßig herausgefunden)
> Bausteine, welche in der Library
> http://www.amos.eguru-il.com/vhdl_info/libs/maxplus2.htm KEINE Vektoren
> im Ein/Ausgang haben kompilieren bei mir perfekt.
>
> Meine Interpretation hierbei ist, dass es Quartus nicht schafft mein
> Port Mapping passend auf das Blockschaltbild der *.bdf Datei des 74259
> zu Mappen. Hier mal ein Screenshot wie das aussieht.
>
> Quartus müsste
1
s: in STD_LOGIC_VECTOR (2 downto 0);
 somit
> auf die Eingänge S0, S1 und S2 Mappen, was wahrscheinlich nicht
> funktioniert, oder liege ich da völlig falsch?

Das meinte ich mit
"Eventuell musst du auch deine Port Map zu passender vector-zuweisung
umschreiben."

Ich 'mappe' vector-ports immer 'am Stück' und nicht einzeln wie bei dir 
oben.  Aufgedrösselt wird dann das signal aus der Port map.
 Und std_logic_vector immer auf std_logic_vector port-mappen und nicht 
auf std_logic. Auch wenn anderslautende Beispiele zu finden sind:
https://www.hdlworks.com/hdl_corner/vhdl_ref/VHDLContents/PortMap.htm

s(2) kann wohl auch zu den vectoren (genauer: std_logic_vector(2 downto 
2)) gezählt werden. Bei Altera kommen öfters solche 'lustigen Sachen' 
wie cs(0 downto 0) bspw. aus dem memory-interface-generator gepurzelt.



Siehe auch
https://embdev.net/topic/382101

von Gustl B. (-gb-)


Lesenswert?

Lothar M. schrieb:
> Da steht das etwas anders:
> http://www.amos.eguru-il.com/vhdl_info/libs/maxplus2.htm

Tatsache.

Fpgakuechle K. schrieb:
> Bei Altera kommen öfters solche 'lustigen Sachen'
> wie cs(0 downto 0) bspw. aus dem memory-interface-generator gepurzelt.

Nicht nur dort, das macht Xilinx auch sehr oft und das ist sogar völlig 
OK und gut. Bei generische anpassbarem Code kann man oft die Breite 
selbst angeben. Verwendet man nur 1 Bit Breite kommt eben dieser sehr 
schmale Vektor bei raus.

von Maximilian K. (imazze)


Lesenswert?

Also einfachstes Beispiel wie hier funktioniert leider auch nicht bei 
mir...
1
library IEEE;
2
use IEEE.STD_LOGIC_1164.ALL;
3
LIBRARY altera;
4
USE altera.maxplus2.ALL;
5
6
entity mem_mod is
7
    Port (  mem_data: in std_ulogic;
8
         mem_q   : out std_ulogic_vector(2 downto 0);  
9
         mem_s   : in std_ulogic_vector(2 downto 0);  
10
        mem_gn   : in std_ulogic;
11
        mem_clrn : in std_ulogic);
12
end mem_mod;
13
14
architecture Behavioral of mem_mod is
15
  
16
begin
17
18
u1: a_74259 
19
PORT MAP ( 
20
   data => mem_data, 
21
   q => mem_q,
22
   s => mem_s,
23
   gn => mem_gn,
24
   clrn => mem_clrn);
25
26
27
end Behavioral;

von Gustl B. (-gb-)


Lesenswert?

Maximilian K. schrieb:
> u1: a_74259
> PORT MAP (
>    data => mem_data,
>    q => mem_q,
>    s => mem_s,
>    gn => mem_gn,
>    clrn => mem_clrn);

Hier http://www.amos.eguru-il.com/vhdl_info/libs/maxplus2.htm steht eine 
abweichende Portbeschreibung, dort ist q 8 Bits breit, bei dir aber nur 
3.
1
component a_74259
2
       port ( clrn: in STD_LOGIC;
3
              gn: in STD_LOGIC;
4
              s: in STD_LOGIC_VECTOR (2 downto 0);
5
              data: in STD_LOGIC;
6
              q: out STD_LOGIC_VECTOR (7 downto 0));
7
end component;

von Maximilian K. (imazze)


Lesenswert?

... war eher ein Tippfehler, sorry!

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Angehängte Dateien:

Lesenswert?

Maximilian K. schrieb:
> Habe folgendes herausgefunden:
In der Zwischenzeit hätte ich die paar Gatter und die daraus 
verschaltete Hardware schon mit VHDL beschrieben und simuliert...  ;-)

Und dann kommt der Witz: dieser Designstil wie in der Innenbeschaltung 
des 74259 dargestellt mit asnychronem Speichern und Latches passt nicht 
zu FPGAs. Dafür sind sie nicht ausgelegt und damit wirst du 
garantiert(!) ständig oder ab&zu eigenartiges Verhalten erleben.

von Gustl B. (gustl_b)


Lesenswert?

Da fehlt ein Punkt im Bild.

von Gustl B. (-gb-)


Lesenswert?

So, hier ist ein Versuch nach der Tabelle hier 
https://assets.nexperia.com/documents/data-sheet/74HC_HCT259.pdf auf 
Seite 4:
1
library IEEE;
2
use IEEE.STD_LOGIC_1164.ALL;
3
use IEEE.NUMERIC_STD.ALL;
4
5
entity IC74259 is port(
6
  MR_n: in  std_logic;
7
  LE_n: in  std_logic;
8
  D   : in  std_logic;
9
  A   : in  std_logic_vector(2 downto 0);
10
  Q   : out std_logic_vector(7 downto 0));
11
end IC74259;
12
13
architecture rtl of IC74259 is
14
15
signal BITS: std_logic_vector(7 downto 0);
16
17
begin
18
19
process (MR_n, LE_n, D, A) begin
20
  if MR_n = '1' then
21
    if LE_n = '0' then
22
      BITS(to_integer(unsigned(A))) <= D;
23
    end if;
24
    Q(to_integer(unsigned(A))) <= D;
25
  else
26
    BITS <= (others => '0');
27
    Q <= (others => '0');
28
    if LE_n = '0' then
29
      Q(to_integer(unsigned(A))) <= D;
30
    end if;
31
  end if;
32
end process;
33
34
end;

Edit:
Aber ja, weil es im FPGA keine Latches gibt sollte man die Schaltung aus 
dem Bildchen in Lothars Port implementieren. Das könnte/wird aber 
Probleme bei der Simulation geben wegen der Rückkopplungen.

: Bearbeitet durch User
von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Gustl B. schrieb:
> Da fehlt ein Punkt im Bild.
Jetzt wo du es sagst. Aber auch mit Punkt wird die Schaltung nicht 
signifikant übersichtlicher...  ;-)

von Elektrofurz (Gast)


Lesenswert?

Gustl B. schrieb:
> Da fehlt ein Punkt im Bild.

Nicht nur einer. Es fehlen sogar 3 Punkte und zwar am Ausgang von den 3 
Eingangsinvertern 1, 2 und 3! Direkt an den Abzweigungen.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite



Lesenswert?

Elektrofurz schrieb:
> fehlen sogar 3 Punkte und zwar am Ausgang von den 3 Eingangsinvertern
Ja, die fehlen tatsächlich auch...  ;-)

Aber auch die Alternativen sind nicht besser für ein FPGA geeignet. Bei 
den HC-Varianten tauchen noch Phi und Phi-nicht auf und steuern den 
Inverterkringel hinter Gattern an. Diese Funktion scheint mir jetzt 
irgendwie gar nicht für FPGAs geeignet.

: Bearbeitet durch Moderator
von Klakx -. (klakx)


Lesenswert?

Maximilian K. schrieb:
> Also einfachstes Beispiel wie hier funktioniert leider auch nicht bei
> mir...

Ich sehe in deiner entity std_ulogic_vector. In der component der 
Bibliothek wird jedoch std_logic_vector verwendet. Hier muss man 
eigentlich noch casten.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.