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:
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.
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.
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:
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?
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.htmMaximilian 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?
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
libraryIEEE;
2
useIEEE.STD_LOGIC_1164.ALL;
3
LIBRARYaltera;
4
USEaltera.maxplus2.ALL;
5
6
entitymem_modis
7
Port(
8
ADR:instd_logic_vector(0to6);
9
DAT8:inSTD_LOGIC;
10
SHUTDOWN:inSTD_LOGIC;
11
12
LED:outSTD_LOGIC);
13
endmem_mod;
14
15
architectureBehavioralofmem_modis
16
signalXLE:STD_LOGIC;
17
signalLATCH_Q1:STD_LOGIC;
18
signalMEMSL:STD_LOGIC;
19
signalXWE:STD_LOGIC;
20
begin
21
22
23
u1:a_74259
24
PORTMAP(
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
endBehavioral;
... 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.
> 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
architectureBehavioralofmem_modis
2
3
componenta_74259
4
port(
5
data:instd_ulogic;
6
q:outstd_ulogic_vector(2downto0);
7
s:instd_ulogic_vector(2downto0);
8
gn:instd_ulogic;
9
clrn:instd_ulogic);
10
endcomponenta_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
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
componenta_74259
2
port(clrn:inSTD_LOGIC;
3
gn:inSTD_LOGIC;
4
s:inSTD_LOGIC_VECTOR(2downto0);
5
data:inSTD_LOGIC;
6
q:outSTD_LOGIC_VECTOR(7downto0));
7
endcomponent;
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.
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
>componenta_74259
2
>port(clrn:inSTD_LOGIC;
3
>gn:inSTD_LOGIC;
4
>s:inSTD_LOGIC_VECTOR(2downto0);
5
>data:inSTD_LOGIC;
6
>q:outSTD_LOGIC_VECTOR(7downto0));
7
>endcomponent;
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.
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:inSTD_LOGIC_VECTOR(2downto0);
somit auf die Eingänge S0, S1 und S2 Mappen, was wahrscheinlich nicht
funktioniert, oder liege ich da völlig falsch?
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:inSTD_LOGIC_VECTOR(2downto0);
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
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.
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.
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.
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.
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.
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.