Hallo zusammen,
ich hab meine erste Version meines Pattern Generator fertig und stelle ihn mal auf Sourceforge zum Download bereit.
https://sourceforge.net/project/showfil ... _id=630683
Ich hab auch meinen Frequenzzähler noch reingepackt. Ist also ein Kombimodul.
Was kann er?
Er kann 1k (1024) - 32 Bit Muster nacheinander erzeugen. Der Abstand der Muster ist programmierbar (in Schritten von 20ns). Es geht in Endlosschleife oder Single Shot.
Fütterung über Optobus-Befehle oder als INI Datei auf der Speicherkarte.
@cm: funktioniert übrigens sehr gut. Für Tests ein sensationelles Feature.
Genaueres in der Datei PatCounter.txt im Release.
Pinbelegung für die Verbindungsleiste des c't Lab Moduls ist im ZIP in der Datei ports.ucf.
Leider ist das zip etwas fett (1,5MB). Ich hab ziemlich mit dem ISE gekämpft. Es gibt zwar einen Menüpunkt Clean Project Files. Danach sind auch weniger Files da, aber wenn ich ISE neu starte bricht der Implementierungsprozess immer mit Fehler ab. Ich kämpfe weiter.
Unterstützung im JLab kommt, wenn die anderen Punkte, die da noch anstehen, abgearbeitet sind.
Gruss
Magic Roomy
Pattern Generator und Frequenzzähler
-
- kann c't-Lab-Module konstruieren
- Beiträge: 205
- Registriert: 01.12.2007, 09:23
Gute Idee
Werde mir das mal ansehen. Darf ich dein Beispiel bei Eignung in c't 3/2009 vorstellen? Da gibts dann auch eine Platine mit Vorverstärker, SRAM, D/A-Wandler usw. Erstmal vielen Dank für das Engagement!
PS: Zur Weitergabe von ISE Webpack-Projekten genügt es idR, nur die .sch, .vhd und .sym Dateien abzuspeichern, ggf. das Top Module mit "_top" kennzeichnen oder einfach "main" nennen. Meist muss man ohnehin ein neues Projekt anlegen, weil ISE wieder irgendetwas verbockt hat, das Top Module nicht mehr einstellen will und irgendwas synthetisiert wird, nur nicht das, was man will. Die Pest. Mehr dazu in der 3.
cm
PS: Zur Weitergabe von ISE Webpack-Projekten genügt es idR, nur die .sch, .vhd und .sym Dateien abzuspeichern, ggf. das Top Module mit "_top" kennzeichnen oder einfach "main" nennen. Meist muss man ohnehin ein neues Projekt anlegen, weil ISE wieder irgendetwas verbockt hat, das Top Module nicht mehr einstellen will und irgendwas synthetisiert wird, nur nicht das, was man will. Die Pest. Mehr dazu in der 3.
cm
Carsten Meyer
Redaktion c't
Redaktion c't
-
- kann c't-Lab-Module konstruieren
- Beiträge: 205
- Registriert: 01.12.2007, 09:23
Logo
Hallo cm,
würde mich freuen wenn das Projekt in einer c't vorgestellt wird.
Gruss
Volker
würde mich freuen wenn das Projekt in einer c't vorgestellt wird.
Gruss
Volker
-
- Beiträge: 1
- Registriert: 07.01.2009, 20:42
Hallo magicroomy,
schonmal vielen Dank für das zur Verfügungstellen deiner Xilinx-Dateien.
Ich wäre sehr an dem Pattern-Generator interessiert und suche schon sehr lange nach geeigneten Hinweisen. Wenn es keine Umstände machen sollte, würde ich mich sehr freuen, wenn du den Pattern-Generator mal kurz näher erklären könntest.
Mein Anliegen ist dabei eine Realisierung eines Pattern-Generators (erstmal nur Simualtion) in Altera Max Plus II, mit Bauteilen von Altera. Da ich mich in diesem Gebiet fast garnicht auskenne und bis jetzt nur eineige Erfahrungen mit Xilinx ISE sammeln konnte bin ich über jede Hinweise dankbar.
Mit freundlichen Grüßen
the-sandman
schonmal vielen Dank für das zur Verfügungstellen deiner Xilinx-Dateien.
Ich wäre sehr an dem Pattern-Generator interessiert und suche schon sehr lange nach geeigneten Hinweisen. Wenn es keine Umstände machen sollte, würde ich mich sehr freuen, wenn du den Pattern-Generator mal kurz näher erklären könntest.
Mein Anliegen ist dabei eine Realisierung eines Pattern-Generators (erstmal nur Simualtion) in Altera Max Plus II, mit Bauteilen von Altera. Da ich mich in diesem Gebiet fast garnicht auskenne und bis jetzt nur eineige Erfahrungen mit Xilinx ISE sammeln konnte bin ich über jede Hinweise dankbar.
Mit freundlichen Grüßen
the-sandman
-
- kann c't-Lab-Module konstruieren
- Beiträge: 205
- Registriert: 01.12.2007, 09:23
Grundprinzip Patterngenerator
Hi,
das Grundprinzip hinter dem Patterngenerator ist wie folgt:
Anders als CM mit seiner für Ausgabe 3/2009 geklanten Zusatzplatine hab ich den Ise-Core Generator benutzt, ob mir Dual Port-RAM Komponenten generieren zu lassen. Ich brauche also kein externes RAM.
Dualport hab ich benutzt, weil das Design dann etwas einfacher wird. Ich kann dann parallel Patterns von extern einspeisen während die Patterns auf den Ausgängen erzeugt werden. Bei einem einfachen RAM hätte ich mir irgendeinen Arbitrierungsmechanismus überlegen müssen wann Daten eingespeist werden, und wann sie ausgelesen werden.(Wäre aber auch nicht schwierig)
Ein Ram brauche ich um die Patterns zu speichern. Das zweite RAM speichert die Dauer in Taktzyklen, wie lange (Taktzyklen) ein Pattern bezogen auf den Grundtakt am Ausgang anliegt.
Die Rams werden sequentiell über die SPI Schnittstelle des angeschlossenen ATMega eingelesen. Dies ist sehr speziell für das c't Lab Modul. Wenn Du mit Altera arbeiten willst, musst du Dir hier was eigenes überlegen wie die Testdaten in das FPGA kommen.
Zum Einspeichern der Daten gibt es einen Adresszähler, der einfach bei jedem Schreibzugriff auf das SPI inkrementiert wird. die Adresse von Pattern und Dauer ist ja identisch. Zuerst wird die Dauer gesetzt. Dadurch liegen die Daten per SPI diekt am RAM an. Dabei passiert aber noch nicht mehr.
Wird das Pattern per SPI angegeben, so löst das eine Flanke aus, die Pattern und Dauer in die zwei Rams übernimmt.
Über einen speziellen SPI Zugriff kann der Zähler auch resettet werden, um neue Muster einspeisen zu können.
Für die Ausgabe gibt es einen Ausgangszähler. Der zählt ständig von 0 bis zum Zählerstand des Adresszählers und fängt wieder bei 0 an. Über ihn werden die Patterndaten und die Dauer ausgelesen. Das Pattern liegt damit sofort an den Ausgängen an.
Damit das Pattern auch die spezifizierte Zeit anliegt gibt es einen dritten Zähler, der immer von 0 bis zur ausgelesenen Dauer zählt. Wenn der Wert erreicht ist, wird er resettet und der Ausgangszähler um eins erhöht.
Dadurch liegt das Pattern die spezifizierte Taktanzahl am Ausgang an.
Ein bisserl Logik hab ich noch herumgestrickt, um den Singleshot zu ermöglichen. Dazu wird ein Flipflop benutzt. Erreicht der Ausgangszähler seinen Maximalwert, so blockiert das Flipflop das Clocksignal für den Zähler und muß manuell zurückgesetzt werden.
Ich hoffe das reicht erstmal als Erläuterung wie es grob funktioniert.
Da ich erst mit der FPGA Entwicklung begonnen habe, hab ich noch viel mit Schematics gearbeitet. Sicherlich kann viel davon direkt mit VHDL lösen.
Gruß
Magic Roomy
das Grundprinzip hinter dem Patterngenerator ist wie folgt:
Anders als CM mit seiner für Ausgabe 3/2009 geklanten Zusatzplatine hab ich den Ise-Core Generator benutzt, ob mir Dual Port-RAM Komponenten generieren zu lassen. Ich brauche also kein externes RAM.
Dualport hab ich benutzt, weil das Design dann etwas einfacher wird. Ich kann dann parallel Patterns von extern einspeisen während die Patterns auf den Ausgängen erzeugt werden. Bei einem einfachen RAM hätte ich mir irgendeinen Arbitrierungsmechanismus überlegen müssen wann Daten eingespeist werden, und wann sie ausgelesen werden.(Wäre aber auch nicht schwierig)
Ein Ram brauche ich um die Patterns zu speichern. Das zweite RAM speichert die Dauer in Taktzyklen, wie lange (Taktzyklen) ein Pattern bezogen auf den Grundtakt am Ausgang anliegt.
Die Rams werden sequentiell über die SPI Schnittstelle des angeschlossenen ATMega eingelesen. Dies ist sehr speziell für das c't Lab Modul. Wenn Du mit Altera arbeiten willst, musst du Dir hier was eigenes überlegen wie die Testdaten in das FPGA kommen.
Zum Einspeichern der Daten gibt es einen Adresszähler, der einfach bei jedem Schreibzugriff auf das SPI inkrementiert wird. die Adresse von Pattern und Dauer ist ja identisch. Zuerst wird die Dauer gesetzt. Dadurch liegen die Daten per SPI diekt am RAM an. Dabei passiert aber noch nicht mehr.
Wird das Pattern per SPI angegeben, so löst das eine Flanke aus, die Pattern und Dauer in die zwei Rams übernimmt.
Über einen speziellen SPI Zugriff kann der Zähler auch resettet werden, um neue Muster einspeisen zu können.
Für die Ausgabe gibt es einen Ausgangszähler. Der zählt ständig von 0 bis zum Zählerstand des Adresszählers und fängt wieder bei 0 an. Über ihn werden die Patterndaten und die Dauer ausgelesen. Das Pattern liegt damit sofort an den Ausgängen an.
Damit das Pattern auch die spezifizierte Zeit anliegt gibt es einen dritten Zähler, der immer von 0 bis zur ausgelesenen Dauer zählt. Wenn der Wert erreicht ist, wird er resettet und der Ausgangszähler um eins erhöht.
Dadurch liegt das Pattern die spezifizierte Taktanzahl am Ausgang an.
Ein bisserl Logik hab ich noch herumgestrickt, um den Singleshot zu ermöglichen. Dazu wird ein Flipflop benutzt. Erreicht der Ausgangszähler seinen Maximalwert, so blockiert das Flipflop das Clocksignal für den Zähler und muß manuell zurückgesetzt werden.
Ich hoffe das reicht erstmal als Erläuterung wie es grob funktioniert.
Da ich erst mit der FPGA Entwicklung begonnen habe, hab ich noch viel mit Schematics gearbeitet. Sicherlich kann viel davon direkt mit VHDL lösen.
Gruß
Magic Roomy
Hi,
vielleicht hilft hier ja auch das neue Autoinkrement-Feature für DAT-Binärdateien und PicoBlaze-MEMs. Ab Firmware 2.1. Bitte unbedingt neue Syntax-Tabelle beachten.
.DAT-Binärdateien können jetzt am Stück ins FPGA überspielt werden, wenn man darin zwei spezielle Register reserviert (Default SPI/SubCh 4 für Daten und 5 für Adresszähler-Reset). Einfach Datei auf SD-Karte kopieren, mit dem Panel oder per CFG= auswählen.
Siehe auch ct-PicoBlazeDemo, aus dessen Schaltbild und VHDLs (LoadROM) wird ersichtlich, wie's im FPGA dafür zugehen muss.
vielleicht hilft hier ja auch das neue Autoinkrement-Feature für DAT-Binärdateien und PicoBlaze-MEMs. Ab Firmware 2.1. Bitte unbedingt neue Syntax-Tabelle beachten.
.DAT-Binärdateien können jetzt am Stück ins FPGA überspielt werden, wenn man darin zwei spezielle Register reserviert (Default SPI/SubCh 4 für Daten und 5 für Adresszähler-Reset). Einfach Datei auf SD-Karte kopieren, mit dem Panel oder per CFG= auswählen.
Siehe auch ct-PicoBlazeDemo, aus dessen Schaltbild und VHDLs (LoadROM) wird ersichtlich, wie's im FPGA dafür zugehen muss.
Carsten Meyer
Redaktion c't
Redaktion c't