Hallo Leidensgenossen und Profis, mein erstes eigenes Design läuft natürlich nicht! Mal in Kurzform wie ich es verstanden habe, von einem Programm auf dem Picoblaze schließlich die Hardware im Spartan anzusprechen. Einfache Aufgabe: Die LEDs des 3A Starter Kits anzusprechen: Da gibt es erst mal die UCF-Datei zum Projekt, die mir beschreibt, welche Pins des FPGA wofür verwendet werden (geklaut aus der "s3astarter.ucf"): NET "LED<0>" LOC = "R20" | IOSTANDARD = LVCMOS33 | DRIVE = 8 | SLEW = SLOW ... NET "LED<7>" LOC = "W21" | IOSTANDARD = LVCMOS33 | DRIVE = 8 | SLEW = SLOW ; Jetzt muß ich im meinem (Verilog) Top-Modul die Schnittstelle beschreiben: module test_led ( ... output wire [7:0] LED, ... ); Damit müsste die Verknüpfung zu den HW-Pins geschaffen sein. Weiterhin in diesem Modul beschreibe ich ein Register, das mir die Daten hält: reg [7:0] led_out; und weise es den Pins zu: assign LED = led_out; jetzt sorge ich dafür, dass dieses Register aus PicoBlaze über einen "output"-Befehl (Port 0x27) geschrieben werden kann: always @(posedge clk) begin if (write_strobe) begin if (port_id == 8'h27) led_out <= out_port; end end "port_id", "write_strobe", "out_port" sind dabei in der Schnittstelle zu PicoBlaze definiert. (Teilweise aus "boarddemo" übernommen) Natürlich funkts nicht, hatte ich aber auch nicht ernsthaft erwartet. Nur - was habe ich falsch beschrieben? (Ich wäre schon glücklich, wenn ich das irgendwo mal "am Stück" eklärt finden würde.) Vielen Dank, viele Grüße Petra
Deine Überlegungen sind soweit richtig, aber aus den Codeschnipseln kann man so noch nicht genug rauslesen. Wenn möglich poste bitte mal die Verilog-Dateien, UCF und Picoblaze-Assembler-Quellcode (ausgenommen die HDL-Datei für den Picoblaze selbst, die ist bekannt und darst du nicht posten).
Hallo Morin, ich habe nichts anderes gemacht als den "Terminal"-Teil aus dem "boarddemo"-Projekt für das 3A Starter Kit gemommen und leicht modifiziert bzw. gekürzt. Auch vermute ich, dass Assemblierung und Impact richtig arbeiten, ich bekomme nach jedem Lauf unterschiedliche Ergebnisse. Mal brennt eine LED, mal reagiert sogar eine auf eine Taste, aber es funktioniert nicht so wie gedacht. Im ZIP sind die UCF, das Top-Modul und ein kurzes PicoBlaze-Programm. Im Top-Modul habe ich die ergänzten Zeilen mit einen "/*PK*/" vorweg markiert. Viele Grüße Petra
Soweit ich das sehe: In deinem Assembler-Programm liest du von Port 25h und schreibst das Ergebnis nach Port 27h, und das immer wieder. Port 25h kommt von Keyboard-Controller. Du bekommst also in schneller abfolge die Scancodes vom Keyboard auf den LEDs zu sehen, und danach nichts mehr (genau genommen: das was der Keyboard-Controller ausgibt wenn er leer ist). War das so gedacht, dass die LEDs vom Keyboard gesteuert werden?
Hallo Morin, danke für Deine Mühe. Richtig, im Programm ist der falsche Port angesteuert, die typische Betriebsblindheit, wenn man tagelang rumprobiert. Jetzt habe ich den Port 20 eingesetzt, für die Switches. Leider funktioniert es eben so wenig, es brennt nur LD2 permanent, alle anderen sind aus. Eine einfache Ausgabe eines hochzählenden Registers auf die LEDs klappt im übrigen auch nicht, daher vermute ich, dass schon in der Ausgabe auf die LEDs eine Macke ist. Viele Grüße Petra
Hm langsam gehen mir die Ideen aus. Leider hab ich auch kein solches Board und kann es deshalb nicht ausprobieren. Poste zur Sicherheit mal das Programm mit dem Zähler - ich habe mehr Hoffnung, das zum Laufen zu bringen, weil die Switches als Fehlerquelle ausgeschlossen sind.
nun ja, wirklich nicht weiter schwer: CONSTANT switches , 20 ; switch input port CONSTANT led_out , 27 ; led control ;;====================================================================== ====== loop: LOAD s0, switches OUTPUT s0, led_out JUMP loop Inzwischen habe ich auch einfach nur eine Schleife laufen lassen, die s0 incrementiert und auf "led_out" ausgibt, auch hie rpassiert nicht das gewünschte: loop: ADD s0, 01 OUTPUT s0, led_out JUMP loop Vermutlich habe ich irgendwo einen ganz anderen Fehler gemacht, z.B. in der Initialisierung des PicoBlaze oder in der Takt-Erzeugung. Dass noch ein Fehler im Handling auf dem Weg vom Assemblieren bis zur Erzeugung des bit-Files liegt schließe ich langsam aus, das habe ich 100 Mal überprüft, auch nachgesehen ob sich der Inhalt ändert, wenn ich die Sourcen geändert habe, aus dem Spartan zurückgelesen und verglichen usw. Was ich auch nicht verstehe: Es muß doch irgendwo in diesem ganzen Internet einige einfache Beispiel-Projekte geben, an denen man sich orientieren kann. Verzweifelte Grüße Petra
Vielleicht läuft die DCM (DCM_SP) nicht richtig ? Geb doch mal das Signal "locked" an einen (LED-)Pin aus und schau nach ob es stabil auf 1 ist. Genauer: nach dem Download ist "locked" auf 0, nach einigen externen Takten sollte es auf 1 wechseln und dann dort bleiben. Wenn "locked" nicht 1 bleibt, dann stimmt evtl. um die DCM was nicht.
Hallo, also der erste Versuch (die Schalter einlesen) kann so nicht funktionieren, da wurde für den Zweck ein falscher Befehl verwendet. Die Zeile "LOAD s0, switches" lädt das Register s0 mit der Konstanten "switches", hier also 20h, deswegen leuchtet nur eine Led. Gebraucht wird aber "INPUT s0, switches" was dann das Register s0 mit den Daten vom Input 20h == "switches" lädt. Damit sollte der erste Versuch funktionieren. Die zweite Sache mit dem Zähler schaut erstmal richtig aus und ich nehm auch einfach mal an, dass das Resultat stimmt. Nur wirklich zählen kann man da nichts sehen. Der Picoblaze läuft in dem Design mit 50 MHz, damit schafft der 25 MIPS. Also läuft der 8-bit-Zähler, der die Leds direkt bedient mit 3,125 MHz über. Das heißt das die acht Leds auf dem Board mehr als drei Millionen mal alle Zustände annehmen die möglich sind! Also ich könnte da auch nichts erkennen ;) Versuch doch mal bei dem Zählerversuch eine Verzögerung einzubauen. Also zum Beispiel drei oder vier verschachtelte 8-Bit-Zähler die immer wenn einer überläuft den nächsten incrementieren. Also im Endeffekt ein wesentlich breiter Zähler. (Du musst es irgendwie zerlegen da der picoBlaze nur 8Bit-Register hat). Wenn du dann am langsamsten Zählerteil die Leds ankoppelst, dann siehst du auch das Zählen in einer menschlich erfassbaren Geschwindigkeit. mfg Felix
>Die Zeile "LOAD s0, switches" lädt das Register s0 mit der Konstanten Oh, das ist nun wirklich ein Anfänger-Fehler. >Nur wirklich zählen kann man da nichts sehen. Ja, das war mir denn doch klar. An den LEDs habe ich deswegen mit dem Oszi gemessen, ohne nennenswertes Ergebnis. Gestern habe ich immerhin das NEXYS_PBLAZE Projekt auf dem Spartan 3A Starter Kit zum Laufen bekommen, durch anpassen der UCF. Funktionierte prächtig. Heute hänge ich wieder dumm da, dieses Projekt,dass gestern lief, läuft heute nicht mehr, obwohl ich nichts verändert habe und inzwischen sogar alles nochmals von Anfang an neu aufgezogen habe. Auch "Cleanup Project Files" habe ich nicht vergessen und mit einem zweiten Starter Kit gegengetestet. Vielleicht sollte ich diesen Job aufhgeben. Viele Grüße Petra
Hallo Petra, Ich bin auf der Suche nach eine File"NEXYS_PBLAZE" dat gehört zu eine Artikel auf www. echelonembedded.com. Leider is die Website verschwunden. Der einzige Link den ich zu diesen fFile gefunden habe führte mich zu diese Seite. Wenn du diesen File nog besizts, kan Ich davon eine Kopie bekommen? Mit Freundlichem Gruß, Robert P.S. Entschuldige mein Deutsch, ist schon lange her...
Robert Beekhuijzen schrieb: > Ich bin auf der Suche nach eine File"NEXYS_PBLAZE" dat gehört zu eine > Artikel auf www. echelonembedded.com. Bei Webarchive finden sich von der Webseite nur Fragmente: http://web.archive.org/web/*/http://echelonembedded.com/* Aber die Picoblaze-Dateien gibt es hier: https://www.xilinx.com/products/intellectual-property/picoblaze.html#design Die Anpassung an das Nexys-Board sollte nicht schwierig sein. Wenn es dabei Probleme gibt, eröffne bitte einen neuen Beitrag mit folgenden Punkten: - Was möchte ich erreichen? - Was habe ich bisher dafür getan? - Welches unlösbare Problem trat dabei für mich auf? Duke
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.