Forum: FPGA, VHDL & Co. Anfängerfrage cpld, Geschwindigkeiten..


von Grobi (Gast)


Lesenswert?

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

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


Lesenswert?

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

von Grobi (Gast)


Lesenswert?

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

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


Lesenswert?

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ß.

von Grobi (Gast)


Lesenswert?

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?

von Uwe .. (uwegw)


Lesenswert?

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. )

von Grobi (Gast)


Lesenswert?

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

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


Lesenswert?

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

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.