Hallo,
ich möchte mich gerne etwas in die Welt der CPLD und FPGA einarbeiten
und hab da noch ein paar grundlegende Fragen. Ich hab von xilinx ein
XC9572-15ns und ein XC95144XL-5ns cpld zum spielen. So, was sagen jetzt
eigentlich diese 15ns bzw. 5ns genau aus? In welcher Verbindung steht
das zur eigentlichen Clock (Quartzoszilator)? (hab da ein 40 und ein 50
MHz teil liegen)
Z.B. Ich möchte mit dem 9572-15ns lesend auf ein 15ns sram zugreifen.
15ns vs 15ns hört sich ja schonmal gut an, kann ich das jetzt z.B. mit
einem mikrocontroller vergleichen und sagen, der cpld könnte also in
einem "Instructioncycle???" (15ns?) genau ein byte aus dem sram lesen,
also praktisch mit fullspeed zugreifen? Oder wie lange braucht der cpld
wirklich um die Adresse zu berechnen, die ganzen Signale wie z.B. CE, R,
OE, Addresse am sram zu setzen und dann das byte einzulesen?
thx
Grobi
Grobi schrieb:> So, was sagen jetzt eigentlich diese 15ns bzw. 5ns genau aus?
Das ist die kombinatorische Verzögerung von einem Eingang zu einem
Ausgang.
> In welcher Verbindung steht das zur eigentlichen Clock> (hab da ein 40 und ein 50 MHz teil liegen)
Du kannst jeden davon als Taktgenerator nehmen.
> kann ich das jetzt z.B. mit> einem mikrocontroller vergleichen und sagen, der cpld könnte also in> einem "Instructioncycle???" (15ns?) genau ein byte aus dem sram lesen,> also praktisch mit fullspeed zugreifen?
Nein, so einfach geht das nicht. Du mußt untersuchen, wie die Abfolge
der Signale und die Durchlaufzeiten (und Setup- und Hold-Zeiten) durch
die Bausteine ist. Die größte Summe dieser Zeiten ergibt die maximale
Taktfrequenz.
(Achtung: was sich hier so einfach anhört, kann in einem Buch durchaus
auf 50 Seiten aufgeweitet werden!)
> Z.B. Ich möchte mit dem 9572-15ns lesend auf ein 15ns sram zugreifen.> 15ns vs 15ns hört sich ja schonmal gut an,
Aber 5ns vs 15ns wäre besser. Denn dann hast du in der Summe geringere
Durchlaufzeiten...
> einem "Instructioncycle???" (15ns?)
Wie kommst du darauf?
Dein Cycle wird vom Takt bestimmt und ist 20 bzw 25 ns.
BTW:
> (Quartzoszilator)?
Quarz ohne T, aber dafür ein Oszillator mit zwei L
Vielen Dank Lothar, jetzt ist schon ein wenig mehr Licht im Dunkeln.
... oh man... "Quartzoszilator"... da war es aber auch schon spät! :)
Ok also der Quarz gibt den eigentlichen Systemtakt vor.
Also wenn ich jetzt im Falle des sram theoretisch so eine Abfolge
hätte..
1. entsprechende pins am cpld für CE, Adresse und Daten von tristate auf
in bzw output setzen (ich möchte das ein weiterer controller auf das
sram zugreifen kann wenn es der cpld gerade nicht tut).
2. CE -> L, Adresse(13 Bit) anlegen
3. WE -> L, RE -> H
4. Datenbyte einlesen
5. entsprechende pins am cpld für Adresse und Daten von in bzw output
auf tristate setzen.
... und den cpld mit dem 40MHz Quarz betreibe würde diese Abfolge quasi
25ns * 5 also 125ns dauern wobei ich also 10ns pro cycle "verschwende".
Wäre es auch möglich Schrit 2,3,4 so zusammen zufassen das Sie in 2
Cycle ausgeführt werden aber halt nacheinander : 1. Cycle 15ns für CE
und Adresse + 10ns für WE und RE, 2.Cycle restliche 5ns für WE, RE +
15ns fürs Daten einlesen ? Wenn das so ginge und man Schritt 1 und 5
auch noch da reinverwurstet könnte man das ganze ja von 5 auf 3 Cycle
also 75ns, um ein byte aus dem sram zu lesen, drücken.
thx
Grobi
Grobi schrieb:> würde diese Abfolge quasi 25ns * 5 also 125ns dauern
Richtig.
> Wäre es auch möglich Schrit 2,3,4 so zusammen zufassen das Sie in 2> Cycle ausgeführt werden aber halt nacheinander
Ja. Beim Lesen geht das.
Nur beim Schreiben mußt du ins Datenblatt des RAMs schauen, insbesondere
wie der WR# deaktiviert werden muß.
Lothar Miller schrieb:> Ja. Beim Lesen geht das.> Nur beim Schreiben mußt du ins Datenblatt des RAMs schauen, insbesondere> wie der WR# deaktiviert werden muß.
ok also wäre das dann sram abhängig.
Aber was kann ich denn überhaupt während eines cycles in dem cpld so
anstellen?
Kann ich z.B. während eines cycles mehrer pins in ein register oder
welche "Speichermöglichkeit" der cpld auch immer hat einlesen UND danach
den Zustand der pins auf tristate setzen UND dabei noch z.B. einen
Adresscounter erhöhen? Oder würde das einen zweiten und dritten cycle
benötigen?
Man merkt an deiner Frage, dass du aus der µC-Welt kommst und noch nicht
viel von programmierbarer Logik weißt ;).
Bei CPLDs und FPGAs wird nicht ein Befehl nach dem anderen abgearbeitet,
sondern die gewünschte Aufgabe wird durch eine Schaltung aus
Logikgattern und Flipflops erledigt. Genau wie man es auch mit diskreten
Gattern und FFs aufbauen könnte. Das läuft dann darauf hinaus, dass
mehrere Aufgaben parallel erledigt werden können (nicht nur
pseudo-parallel wie bei Multitasking auf einem µC), falls für jede
Aufgabe ein eigener Schaltungsteil spendiert wird.
Du kannst also in jedem Takt:
* Pins einlesen und in FFs speichern
* Eine Adresscounter erhöhen, der in Form von mehreren FFs vorliegt
* viele andere Sachen machen, solange dein CPLD noch genügend Ressourcen
frei hat
( nur die Pins auf tristate schalten geht im selben Takt nicht, wenn du
gerade von ihnen gelesen hast. )
Uwe ... schrieb:> Man merkt an deiner Frage, dass du aus der µC-Welt kommst und noch nicht> viel von programmierbarer Logik weißt ;).
100% Richtig!
Ok also ich muss sozusagen den "programmcode" aus logikschaltungen
zusammenbauen. Welche dann warscheinlich durch eine "hauptschaltung",
die von der clock ausgeführt wird, gesteuert werden.
D.h. back to the roots und die Digitaltechnik Bücher wieder wälzen.
Aber ich denke wenn man sich erstmal mit dieser Umstellung angefreundet
hat und einigermaßen weis was man tut, ist die ganze Sache garnicht mehr
so wild und man fragt sich warum man sich nicht schon früher damit
beschäftigt und herangetraut hat.
Ein paar tutorials zu dem cpld Thema hab ich auch schon gefunden, nur
konnte ich halt bisher nix mit den darin behandelten Themen wie 4Bit
addiere in VHDL usw. anfangen. In euren posts hier hab ich bisher mehr
zur Sache erfahren als in den tutorials!
Kennt ihr vielleicht sonst ein paar sehenswerte Seiten zu dem cpld Thema
mit vielleicht auch ein paar "praktischen" Beispielen?
thx
Grobi
Grobi schrieb:> Ok also ich muss sozusagen den "programmcode" aus logikschaltungen> zusammenbauen. Welche dann warscheinlich durch eine "hauptschaltung",> die von der clock ausgeführt wird, gesteuert werden.
Du wirst "in FFs und Logik denken" lernen müssen... ;-)
Ubrigens: blöd, dass in CPLDs so wenig FFs vorhanden sind. :-(
Das wird dir ziemlich bald auffallen.
> D.h. back to the roots und die Digitaltechnik Bücher wieder wälzen.
Wenn du das Thema anfängst, dann auf jeden Fall gleich mit einer
Beschreibungssprache wie VDHL oder Verilog. Ich empfehle VHDL, weil VHDL
in Europa überdurchschittlich verbreitet ist...
Übrigens: der "Debugger" in diesem Prozess ist der "Simulator".
> Aber ich denke wenn man sich erstmal mit dieser Umstellung angefreundet> hat und einigermaßen weis was man tut, ist die ganze Sache garnicht mehr> so wild und man fragt sich warum man sich nicht schon früher damit> beschäftigt und herangetraut hat.
So ist es.
> Kennt ihr vielleicht sonst ein paar sehenswerte Seiten zu dem cpld Thema> mit vielleicht auch ein paar "praktischen" Beispielen?
Wenn du dich weniger auf ein CPLD als Zielbaustein fokussierst uns VHDL
als Beschreibungssprache anpeilst, dann sieh dir mal meine HP an:
http://www.lothar-miller.de