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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.