mikrocontroller.net

Forum: FPGA, VHDL & Co. VHDL Newbie -->Kontrolle VHDL COde


Autor: Ralph H. (guru)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallöchen, nachdem ich mit Eurer Hilfe gestern erstmals (juchhe) nen 
CPLD programmiert habe, ist es nun an der Zeit sich mit VHDL zu 
beschäftigen.
Hab schon paar Bücher bestellt, aber probier schonmal bissl.
Ich hab mal nen Adressdecoder gebastelt und fehlerfrei übersetzt.
Hier der Code.. könnt ihr mal fix drübergucken ob das so ok ist ? Danke 
!!

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

Bewertung
0 lesenswert
nicht lesenswert
Ralph H. schrieb:
> Hallöchen, nachdem ich mit Eurer Hilfe gestern erstmals (juchhe) nen
> CPLD programmiert habe
Na bitte geht doch.
Beitrag "Re: GAL Entwicklungsborad gesucht"
Und nein, die Fallstricke waren nicht absichtlich... ;-)
Aber du hast sie offenbar umschifft.
Das mit der Addresse <-> Adresse war ein Fipptehler...

Ralph H. schrieb:
> Hab schon paar Bücher bestellt
Eins hätte vorab gereicht. Falls es noch nicht dabei ist, dann schreibs 
auf die Wunschliste: VHDL-Synthese Reichhardt&Schwarz
Das handelt zwar eher von FPGAs, aber wer sich schon mal an CPLDs traut, 
der wird bald sehen, dass mit den paar FFs, die dort drauf sind, kein 
Blumentopf zu gewinnen ist.

Ralph H. schrieb:
> Hier der Code.. könnt ihr mal fix drübergucken ob das so ok ist ?
Vergiss am besten gleich bit und bit_vector. Nimm stattdessen den 
std_logic und dessen Vektor. Denn damit lassen sich z.B. 
Tristate-Ausgänge 'Z' beschreiben.
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;

entity Programmcode2 is
    Port (Adresse : in  std_logic_vector(15 downto 12);
    :
Dann passt das schon... ;-)

Autor: Ralph H. (guru)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Lothar,

Danke für Deine Antwort ! Ich hab es jetzt sogar geschafft,
den Decoder mittels Testbench im Simulator zu simulieren :)
Es geht also aufwärts..
Nun steht als nächstes mal ein Latch an. Da hab ich aber gelesen,
dass man sowas NICHT nehmen soll?
Ich brauch aber nur ein Latch, wo ich nen Bitmuster (ROM-Bank Nr.) 
mittels IO-Befehl speichere. Da denk ich mal, das sollte kein Problem 
sein, in diesem Fall ein Latch zu nehmen oder?

Das Buch "VHDL-Synthese" ist übigens da und dort beschriebene
Bespiele erzeugen unter dem Webpack 12.3 welches ich benutze, Fehler!!
z.B. ist der Syntax für das Erzeugen der Testbench ziemlich anders..
Mach ich was falsch????

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

Bewertung
0 lesenswert
nicht lesenswert
Ralph H. schrieb:
> Nun steht als nächstes mal ein Latch an. Da hab ich aber gelesen,
> dass man sowas NICHT nehmen soll?
Nach sorgfältiger Abschätzung...
> Ich brauch aber nur ein Latch, wo ich nen Bitmuster (ROM-Bank Nr.)
> mittels IO-Befehl speichere. Da denk ich mal, das sollte kein Problem
> sein, in diesem Fall ein Latch zu nehmen oder?
...spricht dem nichts entgegen.  ;-)

Wie schon durch die Blume gesagt:
bei der Arbeit mit CPLDs ist (wegen der wenigen FFs) eher eine 
74er-TTL-Denkweise angesagt.

> Das Buch "VHDL-Synthese" ist übigens da und dort beschriebene
> Bespiele erzeugen unter dem Webpack 12.3 welches ich benutze, Fehler!!
> z.B. ist der Syntax für das Erzeugen der Testbench ziemlich anders..
> Mach ich was falsch????
Ja: du zeigst kein Beispiel, und sagst nicht, welche Fehler in welchem 
Zusammenhang da kommen... :-/

> z.B. ist der Syntax für das Erzeugen der Testbench ziemlich anders..
Das glaube ich nicht.
Eine Testbench ist nur eine "normale" VHDL-Beschreibung, die keine Ports 
nach aussen hat. Und in diese Test-Entity wird das zu testende Modul als 
Komponente eingefügt und entsprechend verdrahtet.

> z.B. ist der Syntax für das Erzeugen der Testbench ziemlich anders..
Bestenfalls der Weg zur Erzeugung einer Testbench ist ziemlich anders. 
Das kommt u.U. daher, dass seit ISE12 der ModelSim nicht mehr aktiv 
supported wird, und alles auf den ISIM zugeschnitten ist...

Autor: Ralph H. (guru)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Lothar Miller schrieb:
>> z.B. ist der Syntax für das Erzeugen der Testbench ziemlich anders..
> Bestenfalls der Weg zur Erzeugung einer Testbench ist ziemlich anders.
> Das kommt u.U. daher, dass seit ISE12 der ModelSim nicht mehr aktiv
> supported wird, und alles auf den ISIM zugeschnitten ist...
Jo genau das wird es sein, es geht ja auch prima, wenn ich den vom 
WebPack automatisch erstellen Code für die Testbench erstmal verwende.. 
:-)

Heut will ich mal ein Latch bauen und dann den Adressdecoder mit 
verknüpfen :)

Beste Grüße

PS: Deine HP finde ich echt sehr int. hab gestern mal geschnüffelt :-)

Autor: Anguel S. (anguel)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Lothar Miller schrieb:
> Falls es noch nicht dabei ist, dann schreibs
> auf die Wunschliste: VHDL-Synthese Reichhardt&Schwarz
...
> Vergiss am besten gleich bit und bit_vector. Nimm stattdessen den
> std_logic und dessen Vektor.

Hm, irgendwie wird aber gerade im Reichhardt&Schwarz der bit_vector 
empfohlen, wenn ich mich richtig erinnere. Das war eines der Dinge, die 
mich dort gestört haben. Müsste nochmal schauen, ob die nicht auch noch 
asynchrone Resets verwenden... :)

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

Bewertung
0 lesenswert
nicht lesenswert
Anguel S. schrieb:
> wird aber gerade im Reichhardt&Schwarz der bit_vector empfohlen
Richtig, in der ersten Hälfte , es werden auch gern noch die alten 
Synopsis-Libs verwendet. Das habe ich offenbar verdrängt...

> Das war eines der Dinge, die mich dort gestört haben.
Das Buch ist ein lokales Hoch. Dort wird nicht einfach der VHDL-Syntax 
durchgekaut, sondern das gemacht, was jeder könnte: einfache Schaltungen 
analysiert und dem Synthesizer ein wenig auf die Finger geschaut.
Es gibt blöderweise m.E. (noch) nichts besseres Deustsprachiges...
Aber wenn jemand eines weiß: ich kauf mir das gern mal... ;-)

> Müsste nochmal schauen, ob die nicht auch noch
> asynchrone Resets verwenden... :)
Die werden leider in mindestens 99% der VHDL-Bücher, die ich (gesehen) 
habe, verwendet. Und das ohne wenigstens die Problematik mit asynchronen 
Resets einmal anzusprechen... :-(

Autor: Ralph H. (guru)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
und wieder ein Stückchen weiter...(war ja nicht schwer).. das Latch 
funktioniert :) auch als ausschließlich internes Latch :). Hier der 
Code..
begin
-- Variante Latch mit Adressierung
  Latchout <= DB when (ADR7 = "00010100" AND IORQ = '0' AND WR = '0') 
Else Latchout ;
end VERHALTEN;

Einzig ein dominanter Reset fehlt noch. Leider ist mir das nicht 
gelungen, das ein '0' zwingend die Ausgänge auf '0' setzt. Könnt ihr mir 
helfen dabei ? Dankeschön !

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

Bewertung
0 lesenswert
nicht lesenswert
Ralph H. schrieb:
> Könnt ihr mir helfen dabei ?
Zeig doch mal, was du schon hast...

Ich würde es mal so ansetzen:
Latchout <= (others => '0') when (Reset = '1') else 
            DB when (ADR7 = "00010100" AND IORQ = '0' AND WR = '0') else 
            Latchout ;

BTW: hier im Forum kannst du mit den Tags
[ vhdl ] und [ /vhdl ]
(ohne Leerzeichen) den Quelltext schön formatieren lassen

Autor: D. I. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schreib du doch ein Buch Lothar :D

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

Bewertung
0 lesenswert
nicht lesenswert
D. I. schrieb:
> Schreib du doch ein Buch Lothar :D
Na, ich habe da so meine Problemchen mit der Sprache... ;-)
Lothar Miller schrieb:
> Deustsprachiges

Autor: Ralph H. (guru)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Oh Du wolltest sehen ?? hihi dann schau mal..  Das ist mein aktueller 
Stand... Sinn und Zweck ist es, je nach Latchbelegung das CS des EPROMs
zu aktivieren. D.h. Bei Bit0=1 Adresse E000..FFFF aber bei zusätzlichen
Bit3=1 bereits 8000..FFFF sowie bei Bit1=1 den Bereich von 4000..5FFF.

Was mir auffällt ist, das ich bereits 55% der Termressourcen des XC9536 
belege. Geht das besser?, denn ich muss noch einiges unterbringen..

Beste Grüße vom Ralph

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

Bewertung
0 lesenswert
nicht lesenswert
Ralph H. schrieb:
> bereits 55% der Termressourcen des XC9536 belege.
Ja, nimm ein 9572...  ;-)
Das 9536 ist das kleinste CPLD von Xilinx, da passt nicht viel rein.

>  Geht das besser?
Überleg dir, ob du den Reset wirklich brauchst...

Autor: Ralph H. (guru)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Na ich hab den Ergeiz es mit dem XC9536 zu schaffen, weil den hab ich im 
DIP hier und kann ihn prima programmieren.
Ja Reset muss für das Latch unbedingt sein ! Evl. reicht es ja auch
es nur beim Latch zu benutzen.. und nicht in jeder Verknüpfung.

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

Bewertung
0 lesenswert
nicht lesenswert
Ralph H. schrieb:
> Na ich hab den Ergeiz es mit dem XC9536 zu schaffen, weil den hab ich im
> DIP hier und kann ihn prima programmieren.
So richtig im DIP (also nicht PLCC)?

Autor: Ralph H. (guru)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jo so richtig im DIP... war ne teure Angelegenheit :-) ebay 330365392990

Autor: Ralph H. (guru)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So.. ich habs grad mal probiert den Reset weiter rauszumachen.. das 
bringt überhaupt keine Einsparung an Pterms und Funktion Blocks... also 
bleibt es drinne :)

Autor: Klaus Falser (kfalser)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ralph H. schrieb:
> Was mir auffällt ist, das ich bereits 55% der Termressourcen des XC9536
> belege. Geht das besser?, denn ich muss noch einiges unterbringen..

Bei einem CPLD ist das nicht so wie bei einem FPGA.
Die Produktterme "gehören" zum Funktion Block, und jedes Input- oder 
Output Signal benötigt mindesten einen Funktion Block.
Nachteilig ist es eventuell nur dann, wenn ein FB von einem benachbarten 
FB Produkt-Terme ausleihen muss.
Zähle dein Pins zusammen und deine internen FF oder Latches, und Du 
solltest auf die Anzahl der FBs kommen, die Du mindestens braucht.
Sorgen machen musst Du Dir, wenn Dir die FBs ausgehen.
Schau Dir den Fitter Report an, dort sind die Gleichungen aufgeführt und 
dort siehts Du auch die Signale, die so viele Product-Terme benötigen, 
dass sie vom Nachbarn gestohlen werden müssen oder die so komplexe 
Gleichungen haben, dass der Fitter einen Zwischenknoten einfügen muss.

Autor: Ralph H. (guru)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ok Klaus, dankeschön !!  Ich hab mal noch ne Frage zum Umgang mit ner 
Testbench.. die stelle ich mal als extra Thread.. guckt Ihr mal auch da 
?

Autor: Anguel S. (anguel)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Lothar Miller schrieb:
> Es gibt blöderweise m.E. (noch) nichts besseres Deustsprachiges...
> Aber wenn jemand eines weiß: ich kauf mir das gern mal... ;-)

Ich weiß nicht mal was gutes englischsprachiges, was tatsächlich 
up-to-date ist und sich mit neueren FPGAs wie Spartan3 beschäftigt. Das 
bekannte "FPGA Prototyping by VHDL Examples: Xilinx Spartan-3 Version - 
Hardcover (Feb. 4, 2008) by Pong P. Chu" ist teilweise auch sehr 
eigenartig und praxisfern...

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

Bewertung
0 lesenswert
nicht lesenswert
Anguel S. schrieb:
> "FPGA Prototyping by VHDL Examples: Xilinx Spartan-3 Version -
> Hardcover (Feb. 4, 2008) by Pong P. Chu" ist teilweise auch sehr
> eigenartig und praxisfern...
Teilweise sagst du?
http://academic.csuohio.edu/chu_p/rtl/fpga_vhdl_bo...
Dieser Stil wurde konsequent von Anfang bis zum Schluss durchgehalten. 
Iincl. der asynchronen Resets, obwohl es in dem Buch vorrangig um Xilinx 
FPGAs geht, und von Xilinx ein WP272 existiert....  :-(

Allerdings ist die Picoblaze-Abteilung recht gut aufgemacht.

BTW: Hier zum kontern mal mein UART
http://www.lothar-miller.de/s9y/categories/42-RS232

Autor: bko (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ralph H. schrieb:
> Was mir auffällt ist, das ich bereits 55% der Termressourcen des XC9536
> belege. Geht das besser?, denn ich muss noch einiges unterbringen..

Die XC95xx CPLD haben keine Latches sondern nur Flipflops,
somit wird eine Latch-Beschreibung auf viele PTs umgesetzt.
Warum nimmst du keine Flipflops?
Wenn ich aus deinem Code z.B. sowas mache benötigt er weniger Resourcen:
process (CLK,Reset)
begin  
   if Reset = '0' then
      Latchout <= (others => '0');
   elsif (CLK'event and CLK = '1') then
     if ((ADR7 = "00010100" AND IORQ = '0' AND WR = '0')) then
        Latchout <= DB;
    end if;   
   end if;
end process;

--  Latchout <= (others => '0') when (Reset = '0') else 
--          DB when (ADR7 = "00010100" AND IORQ = '0' AND WR = '0') 
--          else Latchout ;
  CSROM <= MEMRD when ((ADR15="1110" OR ADR15="1111")
            AND Latchout(0)='1') -- X-ROM 
            OR   ( ADR15(15)='1' AND Latchout(3)='1') -- ROMDISK
            OR   ((ADR15="0100" OR ADR15="0101") AND Latchout(1)='1') 
            ELSE '1' ;

Ergibt: 11% der PTs

@lkmiller
hier ist nun mit Absicht ein asyncroner Reset drin, denn sonst
wäre CSROM evtl. bis zur ersten Taktflanke undefiniert oder ?

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

Bewertung
0 lesenswert
nicht lesenswert
bko schrieb:
> bis zur ersten Taktflanke undefiniert
Das wäre mir erst mal egal, denn danach kommen noch viele zigtausende 
Taktflanken, wo man das korrigieren kann... ;-)
Aber es kommt in der Tat darauf an, wie das konkret umgesetzt wird.
M.W. sind in den Makrozellen tatsächlich FFs mit asynchonem Reset 
eingebaut, da würde sich de4r dann sehr wohl anbieten.

Autor: Ralph H. (guru)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hm.. Danke Euch beiden.. aber verstehe ich das richtig, dass ich da nun
noch extra einen Takt für meine Schaltung benötige ? Das wäre nicht so 
gut.

Übrigens.. der hohe Verbrauch an Terms war wohl darin zu suchen, das die 
Latchout's als Buffer auch als Ausgangssignal verwendet wurden, was ich 
nicht brauche.. zumindest nicht alle Ausgänge

Hier mein aktueller Codestand..
Der CPLD soll also die Steuerung der RAM und ROM CS in abhängigkeit
versch. gesetzten Bits im Latch übernehmen, sowie diverse
IO-Adressselektionen vornehmen. Dabei hab ich aus PINspargründen das
Signal CSIO extern mit nem 74LS138 decodiert!

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.