Hallo, ich hab das Spartan3 Starter Board und habe folgendes Problem. Ich möchte das angeschlossene RAM ansteuern. Hab mir auch einen kleinen VHDL-Code zusammengeschrieben mit dem man eine Adresse und ein Datenwort erzeugen kann. (Quellcode folgt später, da ich ihn im Moment nicht zur Hand habe). Dieser Code funktioniert einwandfrei. Mein Problem ist das Beschreiben bzw. Auslesen des RAMS nicht richtig funktioniert. Habe mir für das Schreiben und Lesen eine State-Machine gebaut die mit dem Quarz (50 MHz) läuft. Beim Schreiben mache ich folgendes : Zustand 1 : OE des RAMS auf 1 CE " " auf 0 WE " " auf 0 Datenbus mit Datenwort besetzen Adressbus setzen Zustand = 2 Zustand 2 : CE des RAMS auf 1 Zustand = 3 Zustand 3: CE des RAMS auf 0 Datenbus hochohmig (also Z) setzen Zustand = 0 (idle) Beim Lesen passiert folgendes Zustand 1 : OE des RAMS auf 0 CE " " auf 0 WE " " auf 1 Datenbus hochohmig (also Z) setzen Adressbus setzen Zustand = 2 Zustand 2 : CE des RAMS auf 1 Zustand = 3 Zustand 3: CE des RAMS auf 0 Datenwort am Datenbus einlesen Zustand = 0 (idle) Mein Problem ist das das Auslesen mit immer FF zurückliefert. Wie gesagt den Quellcode schicke ich noch nach. Nur ich komm bei diesem Problem einfach nicht weiter. Gruß
Hallo, ich hatte das selbe Problem mit dem Spartan 3 Starter Kit. Hast du die drei Jumper auf dem Board M0, M1, M2 auf den Wert 101 gesetzt, falls du du mit JTAG Kabel programmierst? BZW. messe mal ob das Pin OE eine physische Verbindung zum RAM hat. Mein erstes Board war deswegen nämlich defekt.
Simuliere doch mal das ganze im ModelSim und vergleich die Waves mit den Timing-Diagrammen des RAMs (Datenblatt). Ist das alles OK? CE ist ja meistens Lo-aktiv, deswegen wundert mich die 0-1-0-Folge beim CE etwas. Sind alle Setup- und Hold-Zeiten eingehalten? Gib mal den RAM-Typ an und mach einen Screenshot vom Modelsim-Wave-Fenster, jeweils für einen Write- und Read-Zyklus !
Ah Danke. Werd die Verbindung zwischen OE und RAM (wenn ich denn da dran komme ;-)) messen. Aber direkt noch mal ne Frage zum programmieren. Da ich erst am Wochenende mit dem Board angefangen habe und die ganze Umgebung noch etwas groß ist, habe ich bis jetzt nur die Möglichkeit gefunden das Platform Flash über iMPACT zu programmieren. Gibt es nicht auch eine Möglichkeit das .bit File direkt in den FPGA zu pusten ? Wäre praktischer und schneller. Sorry für diese einfache Frage, aber es fiel mir gerade eben ein als du die M0-M2 Jumper erwähntest :-) Aber vom Prinzip her müsste meine Statemachine doch funktionieren oder ?! Jedenfalls ist es ja nix wildes was da von statten geht. Gruß Rene PS. Vielen dank für die schnelle Antwort
Eine Simulation hab ich mir der Einfachheit halber geklemmt. Das ganze ist lediglich eine Statemachine mit 6 Zuständen (7 wenn man Idle hinzurechnet). Die Timings dürften unkritisch sein, da das RAM ein 10ns RAM ist und der Quarz mit 50MHz (also 20 ns) läuft. Ausserdem dauert ja ein Schreib/Lesezugriff insgesamt 60ns (3 Zustände * 20 ns). Die Leitung CE ist laut Anleitung High-Aktiv (hat mich auch etwas gewundert, aber OE und WE sind Low-Aktiv). Von daher müsste es stimmen. Ich werd euch aber den Code mal zuschicken (wahrscheinlich erst heut Nachmittag) Gruß Rene
Hallo, imho ist deine Statemachine ein bischen falsch. muesste so gehen: In den SRAM schreiben Z1: OE <= 1 CE <= 1 WE <= 1 Daten- und Adressbus setzen -> Z2 Z2: OE <= 1 CE <= 1 WE <= 0 -> Z3 Z3: OE <= 1 WE <= 1 ,CE ( je nach Belieben 1 oder 0 ) Aus dem SRAM lesen: Z1: siehe oben, jedoch Datenbus hochohmig Z2: OE <= 0 CE <= 1 WE <= 1 Datum vom Bus in Register (tmp-signal) speichern -> Z3 Z3: siehe oben
Versteh ich nicht so ganz. Löst nicht CE den Schreib bzw. Lese vorgang aus ? (jedenfalls hab ich das so immer verstanden, das CS bzw. CE immer eine Aktion auslöst, egal ob irgendwelche Peripherie oder RAM) Gruß
CE steht fuer ChipEnable bzw CS fuer ChipSelect. Damit bringst du deine Komponente aus dem Standby in den Aktiven Zustand. um eine "Aktion auszuloesen" sind die Signale WE bzw OE fuer zustaendig. Deine Datenblaetter sollten genau das wiedergeben. Gruss
Nachtrag: es dauert eine Weile den Chip aus dem Standby wieder "hochzufahren" und das sind bestimmt mehr als 60ns ... genau deshalb hast du auch nie was in den Speicher geschrieben bzw. davon was gelesen ...
Tip: ohne Simulation kann man beim kleinsten Design voll daneben liegen. Und 10ns-Typ ist erstmal nur ein Anhaltspunkt. Was meinst Du denn, wie lange es dauert, bis Deine Adresse bzw. Daten auf dem Bus sind ? Da können schnell mal zusätzliche 10 ns weg sein, und beim Lesen ist die Setup-Zeit zu beachten, vielleicht auch > 5 ns... Wenn keine IOB-Register verwendet werden, sind die Zeiten noch länger. In den Waves des ModelSim sehe ich die Fehler jedenfalls viel schneller, als beim Lesen des VHDL-Codes.
@ TheMason: >Die Leitung CE ist laut Anleitung High-Aktiv CE ist low-aktiv. Garantiert. Steht im Starterkit-Handbuch und im Datenblatt des SRAMs. Keine Ahnung was Du für eine Anleitung hast. @ Michael Noll: >es dauert eine Weile den Chip aus dem Standby wieder "hochzufahren" >und das sind bestimmt mehr als 60ns Bei einem asynchrones SRAM fährt gar nichts hoch. Das ist einfach nur ein riesiges Array aus Latches mit einem Adressdekoder vorne dran. Die Zeiten nach dem man CE auf Low legt und man lesen und schreiben kann liegen bei diesem SRAM bei 10 ns.
@fpga-user : mmh da gebe ich dir recht. werde mal versuchen das timing langsamer zu machen (so 1 us). mit der simulation werd ich mich später noch beschäftigen. mir geht es erstmal darum einen einstieg zu finden, und wenn ich z.b. das 7 Segment-Display ansteuern möchte oder einfach nur den Master-Clock runterteilen möchte ist eine Simulation nicht wirklich notwendig. Und beim Ansteuern des RAMs braucht man (wenn man das dingen nicht gerade wirklich am maximum betreibt) das ja auch nicht wirklich. aber danke trotzdem für die tipps. mit den iobs wusste ich auch noch nicht. @jochen : Hab nur in der Anleitung zum Starter-Kit geguckt. und da steht oe# - Output Enable we# - Write Enable ce - Chip Enable lb - Lower Byte ub - Upper Byte Hab einfach nur wegen dem # auf invertiert geschlossen. Folglich müsste CE also High-Aktiv sein. (wundert mich aber trotzdem, da ich gefühlsmässig sagen würde CE ist Low-Aktiv). Genaue Daten zu den RAMs hab ich der Starter-Kit Anleitung nicht entnehmen können (oder nicht gefunden). Werd mir mal das Datenblatt aus dem Netz laden. @michael Bin mir auch recht sicher das CE nicht heißt das der Chip aus dem Standby hochfährt. RAMs haben i.d.R. kein Power-Managment (und das würde ja eher auf einen Standby-Modus schließen). Für mich ist CE immer noch dasselbe wie CS (nur halt eine andere Bezeichnung). Die Bezeichnung CE findet man ja auch bei der ganzen alten Peripherie, und die hatte mit Standby ja noch gar nichts anner Mütze :-)) Danke für die vielen Infos. Werde mit Sicherheit noch einige Fragen stellen. Hier gibts ja echt super-kompetente Leute die auch recht schnell antworten :-)) Danke Jungs.
CE = aktiv ansonsten hochohmig, bei allen aktuellen Chips auch gleichzeitig stromsparen ... das ist fuer mich standby ;-) siehe datenblatt fuer einen SRAM hier: http://www.chipcatalog.com/Datasheet/CFD5315B106306F379B36F9A8BB16B08.htm siehe seite 2 Tabelle oben bzw. Seite 3 Tabelle oben das der vllt doch nicht so lange braucht um auf eine CE-Aenderung zu reagieren ist wohl ein Irrtum meinerseits ... naja hatte mit SRAMs jetzt lange Zeit nix zu tun.
@martin hey cool. wusste ich auch noch nicht das die bei hochohmigkeit in standby gehen. coool :-) danke für die info. (bin bei meinen experimenten zwar immer eine stromschleuder, da power management noch nie meine stärke war ggg aber vllt bau ich mal irgendwann sowas ein). hoffe das ich das problem mit dem Ram gelöst bekomme (nach möglichkeit auch ohne simulation, da ich mich erst noch in modelsim einarbeiten muß :-((, aber da komme ich über kurz oder lang eh nicht drum herum) man möchte sich diese gigantischen speichermengen gg ja auch mal zunutze machen, vor allem bei soviel speed von den fpgas.
Aus Nachmittag ist nun Abend geworden .... Das ZIP File enthält alles notwendige incl. npl + ucf fürs Starter Kit. Zum simulieren bin ich noch nicht gekommen.
@Michael Noll: Bei "aktuellen Chips" ist der stationäre Zustand so gut wie immer der "Stromspar" Zustand, weil die meisten Logik-Chips in CMOS-Technik aufgebaut sind. Der einzige Strom, der verbraten wird, wenn man die /CE-Leitung auf 0 setzt ist der Leckstrom, der zusätzlich in die /CE-Leitung reinfließt (oder aus ihr raus).
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.