Forum: FPGA, VHDL & Co. QSYS component Avalon MM read Abfolge


von Christian G (Gast)


Lesenswert?

Hallo,
ich versuche gerade eine QSYS Komponente zu erstellen, einen instruction 
cache für den NiosII(e) - der hat ja leider keinen, die Komponente ist 
auf das DE0-nano Board und dessen 32 MB SDRAM zugeschnitten.

Ich habe dazu einen Avalon MM Slave erstellt, dieser wird an den 
instruction master der cpu angeschlossen.
Da die instructions des nios anscheinend 32 Bit lang sind habe ich den 
internen Speicher des cache (welcher aus arrays und records etc 
zusammengesetzt ist) auf 32 Bit Datenworte ausgelegt.
Die Adressbreite ist 23 Bit (32 MB SDRAM auf dem DE0-nano board / 4) und 
wie schon gesagt 32 Bit Daten.

Desweiteren habe ich einen Avalon MM Master erstellt an den der SDRAM 
controller angeschlossen wird (std. Altera SDRAM Controller)
Addressbreite auf 24 Bit (32 MB SDRAM als 16 Bit words aufgeteilt / 2) 
und 16 Bit Daten.

Wenn jetzt ein cache miss auftritt wird ein neuer cache block (64 bytes) 
vom SDRAM gelesen und intern gespeichert. (Dieses lesen vom SDRAM wollte 
ich als bursts durchführen, leider lese ich überall das der Altera SDRAM 
Controller einen festen BurstCount von 1 hat, also kann ich doch auch 
ganz normal lesen, oder? Also 32 mal ein 16 Bit Wort.

Jetzt scheine ich aber das Avalon system noch nicht so ganz verstanden 
zu haben...
mein Ablauf für den avalon slave im groben:
slave_WaitRequest = 0
 Wenn slaveRead = 1
  - slave_WaitRerquest = 1
  - im internen Speicher nach der Adresse suchen
    - wenn gefunden
      - slave_readData = data
      - slave_WaitRequest = 0
    - sonst
      - sdram adresse berechnen, block aus sdram laden und intern 
speichern
      - slave_readData = data
      - slave_WaitRequest = 0

mein Ablauf für das lesen vom SDRAM controller im groben:
warten bis master_WaitRequest = 0
 - master_address = sdram adresse
 - master_read = 1
 - warten bis master_WaitRequest = 0
   - master_read = 0
   - intern speicher = master_readData
   - wenn nicht alle Daten geladen
     - sdram adresse erhöhen, intern Speicher index erhöhen und von 
vorne anfangen

stimmt das in etwa so mit den WaitRequests und Reads?
Wie kann ich das ganze vernünftig simulieren?
Ein grober Fehler scheint zu sein den Adressbus des Avalon Master auf 
die Länge des SDRAM controller Adressbus zu beschränken, den das Qsys 
meckert der Adressbereich des SDRAM controllers liegt nicht in dem des 
Avalon Masters, also scheint es ja so zu sein das der Avalon Master noch 
die base Adresse des SDRAM controllers immer mit aufrechnen muss also 
einen 32 bit Adressbus braucht.
Wie bekomme ich denn, ausser ich sehe sie in dem qsys builder, die 
Basisadresse des angeschlossenen SDRAM controllers heraus? Und stelle 
ich dann wirklich 32 Bit Basisadresse + 16 Bit Adresse zum lesen ein? 
Dachte das müsste dann alles auf 32 Bit getrimmt sein, aber das SDRAM 
speichert ja immer nur 16 bits...*uargh* ich verstehs nicht mehr!

Wenn gewünscht kann ich den vhdl code gerne zeigen.

THX
Christian G.

von Christian G (Gast)


Lesenswert?

...mir fällt da noch grad ein, ich habe den data master des nios auch an 
den SDRAM controller angeschlossen, könntes es dann nicht sein das er 
damit auch seine instructions überschreiben könnte weil der instruction 
cache geht jetzt von 0 bis 32 MB, der SDRAM controller von 32 MB bis 64 
MB Adressmäßig, jetzt sind für die cpu die Adressräume der instructions 
und der "Daten" um 32 MB versetzt, aber in Wirklichkeikt zeigen sie auf 
den selben physischen Bereich!?!?

Mal agenommen ich würde den data master des nios auch an den instruction 
cache anschießen damit sie beide wieder auf den selben Adressraum 
zeigen, wie kann ich dann feststellen ob jetzt gerade der data master 
darauf zugreifen will und seine Anfragen damm am instruction cache 
vorbei direkt an den SDRAM controller zu senden?

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.