H5.1.1/H5.1.4 Register
H5.1.1/H5.1.4 Register
Hallo,
mich verwirrt das vorgegebene Registermodul im Zusammenhang mit der Aufgabenstellung ein wenig.
Oben steht, dass man Byteaddressierung verwenden soll, bei den Registern ist dies ja leicht sinnlos, da ist ja jeder für sich eine 32bit Einheit und so groß sind ja auch die Datenleitungen. Gehe ich dann recht in der Annahme, dass pro Register nur genau eine Adresse benötigt wird? Oder sollen trotzdem 4 Addressen/Register reserviert werden, welche alle denselben Wert zurückgeben?
Und dass das Registermodul dann alle 8 Register implementiert (-> [2:0] addr) und diese dann sozusagen nicht byte-addressierbar sind?
Die Byte-Addressierung allgemein verwirrt mich gerade, was macht man z.B. wenn das letzte Byte eines ROMs addressiert wird, man muss ja 32bit zurückgeben. Oder werden bei allen Adressen die hinteren 2 Bits beim Auslesen ignoriert?
EDIT: Der RAM soll komplett synchron sein nehme ich mal an mit der Modulbeschreibung? Genauso register.
Danke im Vorraus,
Kai
mich verwirrt das vorgegebene Registermodul im Zusammenhang mit der Aufgabenstellung ein wenig.
Oben steht, dass man Byteaddressierung verwenden soll, bei den Registern ist dies ja leicht sinnlos, da ist ja jeder für sich eine 32bit Einheit und so groß sind ja auch die Datenleitungen. Gehe ich dann recht in der Annahme, dass pro Register nur genau eine Adresse benötigt wird? Oder sollen trotzdem 4 Addressen/Register reserviert werden, welche alle denselben Wert zurückgeben?
Und dass das Registermodul dann alle 8 Register implementiert (-> [2:0] addr) und diese dann sozusagen nicht byte-addressierbar sind?
Die Byte-Addressierung allgemein verwirrt mich gerade, was macht man z.B. wenn das letzte Byte eines ROMs addressiert wird, man muss ja 32bit zurückgeben. Oder werden bei allen Adressen die hinteren 2 Bits beim Auslesen ignoriert?
EDIT: Der RAM soll komplett synchron sein nehme ich mal an mit der Modulbeschreibung? Genauso register.
Danke im Vorraus,
Kai
Re: H5.1.1/H5.1.4 Register
Eine gute Frage. Ich sehe eine mögliche Antwort im Vergleich mit der x86-Achrtitektur.
Dort ist es ja genau so. Man hat Byteadressierung, arbeitet aber mit 32bit-Werten. Als Folge greift man nur auf Adressen zu, die ein Vielfaches von 4 sind (wenn man z.B. Assembler programmiert).
Da in der Aufgabe immer 32Bit gelesen/geschrieben werden, könnte man davon ausgehen, dass nur solche Adressen (also 0, 4, 8, ...) angelegt werden.
Mal sehen, was Thorti dazu meint.
Dort ist es ja genau so. Man hat Byteadressierung, arbeitet aber mit 32bit-Werten. Als Folge greift man nur auf Adressen zu, die ein Vielfaches von 4 sind (wenn man z.B. Assembler programmiert).
Da in der Aufgabe immer 32Bit gelesen/geschrieben werden, könnte man davon ausgehen, dass nur solche Adressen (also 0, 4, 8, ...) angelegt werden.
Mal sehen, was Thorti dazu meint.
Re: H5.1.1/H5.1.4 Register
Deine Ideen sind richtigdavidda hat geschrieben:Eine gute Frage. Ich sehe eine mögliche Antwort im Vergleich mit der x86-Achrtitektur.
Dort ist es ja genau so. Man hat Byteadressierung, arbeitet aber mit 32bit-Werten. Als Folge greift man nur auf Adressen zu, die ein Vielfaches von 4 sind (wenn man z.B. Assembler programmiert).
Da in der Aufgabe immer 32Bit gelesen/geschrieben werden, könnte man davon ausgehen, dass nur solche Adressen (also 0, 4, 8, ...) angelegt werden.

Gruß
Thorsten
Assistent zur Vorlesung TGDI im WS 11/12
Re: H5.1.1/H5.1.4 Register
Ergo sollen wir Adressen wie 1,2,3 für die Register ignorieren?Thorti hat geschrieben:Deine Ideen sind richtigdavidda hat geschrieben:Eine gute Frage. Ich sehe eine mögliche Antwort im Vergleich mit der x86-Achrtitektur.
Dort ist es ja genau so. Man hat Byteadressierung, arbeitet aber mit 32bit-Werten. Als Folge greift man nur auf Adressen zu, die ein Vielfaches von 4 sind (wenn man z.B. Assembler programmiert).
Da in der Aufgabe immer 32Bit gelesen/geschrieben werden, könnte man davon ausgehen, dass nur solche Adressen (also 0, 4, 8, ...) angelegt werden.![]()
Gruß
Thorsten
Re: H5.1.1/H5.1.4 Register
Wenn man aber x86 bedenkt: Dort kann man ja schon auch nur auf einem Byte eines 32-Bit-Registers arbeiten (z.B. %ah oder %al). Damit so etwas geht, müssen die Register schon byte-addressierbar sein.
Re: H5.1.1/H5.1.4 Register
Bei uns sollen es aber immer 32bit Datenleitungen sein.
Im ersten Beitrag hatte ich noch ein, zwei kleine Fragen drinstecken, dazu Antworten, Bestätigungen?
Im ersten Beitrag hatte ich noch ein, zwei kleine Fragen drinstecken, dazu Antworten, Bestätigungen?
Re: H5.1.1/H5.1.4 Register
Hallo,
zu der Frage mit dem RAM:
Der RAM und die Register sollen synchron sein.
Gruß
Thorsten
zu der Frage mit dem RAM:
Der RAM und die Register sollen synchron sein.
Gruß
Thorsten
Assistent zur Vorlesung TGDI im WS 11/12
Re: H5.1.1/H5.1.4 Register
das kann aber beim Lesen zu Problemen führen, da der ROM asynchron ist:Thorti hat geschrieben:Hallo,
zu der Frage mit dem RAM:
Der RAM und die Register sollen synchron sein.
Gruß
Thorsten
wenn z.B. zu einer fallenden Taktflanke die Adresse von RAM zu ROM wechselt, dann schreiben beide bis zur nächsten steigenden Taktflanke parallel auf den Bus, bevor RAM aufhört....
oder ging es hier nur um synchron schreiben?
Re: H5.1.1/H5.1.4 Register
Dieses Problem existiert zwar, lässt sich aber doch leicht vermeiden. Nur weil der RAM nur zur steigenden Takflanke seinen Datenausgang ändert, heißt das ja noch nicht, dass er diesen Datenausgang auch nur zur steigenden Taktflanke an den Bus anlegen bzw. von ihm trennen darf.wenn z.B. zu einer fallenden Taktflanke die Adresse von RAM zu ROM wechselt, dann schreiben beide bis zur nächsten steigenden Taktflanke parallel auf den Bus, bevor RAM aufhört....
Re: H5.1.1/H5.1.4 Register
Also ist es jetzt falsch wenn man das Schreiben synchron und das Lesen asynchron gemacht hat, oder kann es so bleiben?
Re: H5.1.1/H5.1.4 Register
Darauf bin ich auch noch gestoßen...
Entweder müsste man das Lesen überall synchron, oder überall asynchron machen, sonst gibts Murks... In der Vorlesung war es in den Beispielen asynchron, also ist es asynchron okay?
Entweder müsste man das Lesen überall synchron, oder überall asynchron machen, sonst gibts Murks... In der Vorlesung war es in den Beispielen asynchron, also ist es asynchron okay?
Re: H5.1.1/H5.1.4 Register
Wenn das lesen / schreiben der ganzen Speichermedien (roms / ram / register) asynchron ist,
jedoch der Dekoder synchron, dann dürfte der gesamte Bus sowohl synchron schreiben und lesen.
Wäre ein work-around wie es funktionieren könnte.
Die Register wären dann jedoch eig. keine Register mehr.. bin mir also net sicher ob es so stimmt.
Alternativ - alles gemischt synchron / asynchron und den Dekoder getaktet, allerdings nur mit halber
Frequenz. Dann sollte wieder alles synchron laufen, egal ob die Speichermedien nun selber synchron
oder asynchron laufen.
Noch eine Frage zu 5.1.1 und 5.1.6
In 5.1.1 heißt es, dass Aliasing erlaubt ist, in 5.1.6 jedoch nicht mehr.
Langt es nun, wenn man kein Memory-Aliasing zulässt, oder soll es zwei verschiedene Dekoder
geben, die einmal Memory-Aliasing zulassen und einmal nicht?
Und eine weiter zu der "byte-adressierbarkeit".
Kann man es auch sowohl byte als auch 4 byte adressierbar machen? Ich habe bis jetzt das Modul nämlich
Byte-adressierbar, kann aber ohne Probleme ein weiteres Steuersignal "Byte" oder so hinzufügen, welches
angibt ob nun 4 Byte gelesen/geschrieben werden, oder eben nur 1 Byte.
jedoch der Dekoder synchron, dann dürfte der gesamte Bus sowohl synchron schreiben und lesen.
Wäre ein work-around wie es funktionieren könnte.
Die Register wären dann jedoch eig. keine Register mehr.. bin mir also net sicher ob es so stimmt.
Alternativ - alles gemischt synchron / asynchron und den Dekoder getaktet, allerdings nur mit halber
Frequenz. Dann sollte wieder alles synchron laufen, egal ob die Speichermedien nun selber synchron
oder asynchron laufen.
Noch eine Frage zu 5.1.1 und 5.1.6
In 5.1.1 heißt es, dass Aliasing erlaubt ist, in 5.1.6 jedoch nicht mehr.
Langt es nun, wenn man kein Memory-Aliasing zulässt, oder soll es zwei verschiedene Dekoder
geben, die einmal Memory-Aliasing zulassen und einmal nicht?
Und eine weiter zu der "byte-adressierbarkeit".
Kann man es auch sowohl byte als auch 4 byte adressierbar machen? Ich habe bis jetzt das Modul nämlich
Byte-adressierbar, kann aber ohne Probleme ein weiteres Steuersignal "Byte" oder so hinzufügen, welches
angibt ob nun 4 Byte gelesen/geschrieben werden, oder eben nur 1 Byte.
Re: H5.1.1/H5.1.4 Register
asynchrones Lesen ist in Ordnung.
Assistent zur Vorlesung TGDI im WS 11/12
Re: H5.1.1/H5.1.4 Register
In 5.1.2. ist Memory-Aliasing erlaubt, und eine Implementierung mit möglichst wenig Gattern gefordert. In 5.1.6 ist Memory-Aliasing verboten.Flo S hat geschrieben:Noch eine Frage zu 5.1.1 und 5.1.6
In 5.1.1 heißt es, dass Aliasing erlaubt ist, in 5.1.6 jedoch nicht mehr.
Langt es nun, wenn man kein Memory-Aliasing zulässt, oder soll es zwei verschiedene Dekoder
geben, die einmal Memory-Aliasing zulassen und einmal nicht?
Ein solche Byte-Enable-Signal kann implementiert werden, muss aber nicht.Und eine weiter zu der "byte-adressierbarkeit".
Kann man es auch sowohl byte als auch 4 byte adressierbar machen? Ich habe bis jetzt das Modul nämlich
Byte-adressierbar, kann aber ohne Probleme ein weiteres Steuersignal "Byte" oder so hinzufügen, welches
angibt ob nun 4 Byte gelesen/geschrieben werden, oder eben nur 1 Byte.
Gruß
Thorsten
Assistent zur Vorlesung TGDI im WS 11/12
-
- BASIC-Programmierer
- Beiträge: 140
- Registriert: 2. Mai 2010 17:55
Re: H5.1.1/H5.1.4 Register
hallo,
Kai.S hat zu Beginn dieses Themas eine Frage gestellt,
ob das Modul register genau ein Register implementieren soll,
wobei dann der Adresseingang ([2:0] addr) ein Bit zu groß wäre da ja 32 Bit(Größe der Register) genau 4 Byte sind, also 2^2 und nicht 2^3.
oder ob es so gemeint ist, dass das Modul register alle 8 Register implementieren soll,
dann würde auch der 3 Bit breite Adresseingang Sinn machen, dann könnte man nur die die einzelnen Register nicht mehr byteweise adressieren.
Ich habe in diesem Forumsthread leider noch keine richtige Antwort auf diese Frage raus lesen können.
ich würde mich um eine schnelle Beantwortung der Frage von ofizieller Seite freuen,
mit freundlichen Grüßen,
Alexander
Kai.S hat zu Beginn dieses Themas eine Frage gestellt,
ob das Modul register genau ein Register implementieren soll,
wobei dann der Adresseingang ([2:0] addr) ein Bit zu groß wäre da ja 32 Bit(Größe der Register) genau 4 Byte sind, also 2^2 und nicht 2^3.
oder ob es so gemeint ist, dass das Modul register alle 8 Register implementieren soll,
dann würde auch der 3 Bit breite Adresseingang Sinn machen, dann könnte man nur die die einzelnen Register nicht mehr byteweise adressieren.
Ich habe in diesem Forumsthread leider noch keine richtige Antwort auf diese Frage raus lesen können.
ich würde mich um eine schnelle Beantwortung der Frage von ofizieller Seite freuen,
mit freundlichen Grüßen,
Alexander