Fragen zur Wiederholung 13.07

Pflücker
BASIC-Programmierer
BASIC-Programmierer
Beiträge: 129
Registriert: 21. Sep 2010 14:27

Re: Fragen zur Wiederholung 13.07

Beitrag von Pflücker » 26. Jul 2011 21:21

tobizZL hat geschrieben:Ah klingt gut =)

Vielen Dank schonmal soweit! Das hat mir auf jeden Fall weiter geholfen.

Jetzt grübel ich gerade noch ein bisschen über die Instanziierung der einzelnen ROM Module in der Testbench.

Man bräuchte ja für das 16KB ROM insgesamt 16x das 1KB rom1kx8, oder?
Meine Überlegung war jetzt, dass ich erstmal 4 Stück in Reihe schalte, damit ich anstatt 8bit 32bit Datenbreite erreiche.
Jetzt brauch man davon 4 Reihen, damit man insgesamt auf die 4096 Speicherzellen kommt.

Wäre diese Überlegung so korrekt?

Danke ;-)
Ich würde mit dem kleinsten Modul anfangem, also mit dem 4k ROM in dem ich die 1K Roms, die vorgegeben waren, implementieren würde und hätte in dem nächstgrößeren ROM (8k) einfach die 4k ROMs implementiert und so weiter ;) Das erspart dir eine Menge Schreiberei und die Select-Schaltungen in den einzelnen Modulen bleiben übersichtlich, da du auf die vorherigen Module aufbaust. Geht gewiss auch so wie du es vorhast, nur eventuell schneller ;)

tobizZL
Windoof-User
Windoof-User
Beiträge: 34
Registriert: 19. Okt 2009 14:48

Re: Fragen zur Wiederholung 13.07

Beitrag von tobizZL » 26. Jul 2011 21:25

Ohman -.- Es ist wohl schon etwas zu spät ;-) Na klar! Haha vielen Dank - ich hätte hier jetzt wohl die Monsterschaltung entworfen ;-)

Pflücker
BASIC-Programmierer
BASIC-Programmierer
Beiträge: 129
Registriert: 21. Sep 2010 14:27

Re: Fragen zur Wiederholung 13.07

Beitrag von Pflücker » 26. Jul 2011 21:27

tobizZL hat geschrieben:Ohman -.- Es ist wohl schon etwas zu spät ;-) Na klar! Haha vielen Dank - ich hätte hier jetzt wohl die Monsterschaltung entworfen ;-)
Schaltungstechnisch dürfte es nahezu äquivalent sein, je nachdem wie du deine Module im Code verbindest ;) Nur viel Code wäre es (mehr als nötig), da hast du recht ;)
Gerngeschehen^^

tobizZL
Windoof-User
Windoof-User
Beiträge: 34
Registriert: 19. Okt 2009 14:48

Re: Fragen zur Wiederholung 13.07

Beitrag von tobizZL » 26. Jul 2011 22:23

Hehe das meinte ich - ne ganze Menge Code..... ;-)


Hm hab nochmal ne Frage.. =)

Und zwar bei dem Steuerwerk im Zustand S1 steht "if(expZeroN)".

Das sollte "if(expZero)" heißen oder? Sorry für das ganze Gefrage - ich lass mich nur sehr leicht verunsichern ^^

Edit: Ah quatsch - das N soll wohl für ungleich stehen, oder?

Pflücker
BASIC-Programmierer
BASIC-Programmierer
Beiträge: 129
Registriert: 21. Sep 2010 14:27

Re: Fragen zur Wiederholung 13.07

Beitrag von Pflücker » 27. Jul 2011 10:55

tobizZL hat geschrieben:Hehe das meinte ich - ne ganze Menge Code..... ;-)


Hm hab nochmal ne Frage.. =)

Und zwar bei dem Steuerwerk im Zustand S1 steht "if(expZeroN)".

Das sollte "if(expZero)" heißen oder? Sorry für das ganze Gefrage - ich lass mich nur sehr leicht verunsichern ^^

Edit: Ah quatsch - das N soll wohl für ungleich stehen, oder?
expZeroN ist das Status-Signal, welches du auch im Datenpfad wiederfindest. expZeroN=1 gilt wenn exp != 0 ist und expZeroN = 0 gilt wenn exp == 0 - sinngemäß also die Negation von "ist exp null?". Das N steht mM nach also eher für "Negation", was wieder Sinn macht da man bei den Übergängen expZero abfragt (welches offensichtlich die Negation von expZeroN sein muss) ;)

tobizZL
Windoof-User
Windoof-User
Beiträge: 34
Registriert: 19. Okt 2009 14:48

Re: Fragen zur Wiederholung 13.07

Beitrag von tobizZL » 27. Jul 2011 13:33

Ah wunderbar - dann hab ich das richtig verstanden!

Danke ;-)

funkypopcorn
Erstie
Erstie
Beiträge: 16
Registriert: 9. Apr 2011 00:07

Re: Fragen zur Wiederholung 13.07

Beitrag von funkypopcorn » 27. Jul 2011 16:02

tobizZL hat geschrieben:
Edit: Dann noch eine kleine Frage:
Wieso verzichtet man bei der Implementierung von dem Register-Modul auf das zusätzliche out-Register? Wurde dies nicht extra eingeführt, damit auch der Lese-Zyklus synchron ist bzw die korrekten Daten immer zur steigenden Taktflanke anliegen?

Vielen Dank schonmal =)
also ich frage mich gerade auch noch wieso das out-register im RAM-Modul vorhanden ist und im Register-Modul nicht.
Könnte man es dann nicht auch im RAM-Modul weglassen und zum lesen einfach:
reg [31:0] mem [0:8191];

assign dataout = (select & ~we) ? mem[addr] : 32'bz;

schreiben? Dann würde halt nicht mehr synchron gelesen werden, ist ja aber nicht vorgeschrieben oder doch?
und noch ne zweite Frage hinterher. Ist es auch möglich den 8bit-Aufbau beizubehalten und sowas in der Art zu schreiben:
reg [7:0] mem [0:32767];

always @(posedge clk) begin
if (select & we) begin
mem[addr] <= datain[7:0];
mem[addr+1] <= datain[15:8];
mem[addr+2] <= datain[23:16];
mem[addr+3] <= datain[31:24];
end

das lesen wäre dann entsprechend ...
Vielen Dank schonmal für die Antworten!

Pflücker
BASIC-Programmierer
BASIC-Programmierer
Beiträge: 129
Registriert: 21. Sep 2010 14:27

Re: Fragen zur Wiederholung 13.07

Beitrag von Pflücker » 27. Jul 2011 16:09

Code: Alles auswählen

also ich frage mich gerade auch noch wieso das out-register im RAM-Modul vorhanden ist und im Register-Modul nicht.
Könnte man es dann nicht auch im RAM-Modul weglassen und zum lesen einfach:
reg [31:0] mem [0:8191];

assign dataout = (select & ~we) ? mem[addr] : 32'bz;

schreiben? Dann würde halt nicht mehr synchron gelesen werden, ist ja aber nicht vorgeschrieben oder doch?
Aus der Sprechstunde vorhin: Es kann aber muss nicht synchron gelesen werden, beides geht.

plo1234
BASIC-Programmierer
BASIC-Programmierer
Beiträge: 116
Registriert: 14. Nov 2009 18:51

Re: Fragen zur Wiederholung 13.07

Beitrag von plo1234 » 27. Jul 2011 16:27

Ich hätte hier nochmal eine Frage zu der Größe des Speichers im RAM.
In der Musterlösung haben wir:

Code: Alles auswählen

reg [31:0] mem [8192:0];  // 4kb RAM mit 32 Bit Zeilen
Aber zugrunde liegt doch ein Byte-adressierbares 32KB RAM. D.h. ist habe 32768 * 1Byte.
Warum lege ich den Speicher dann nicht so an?

Code: Alles auswählen

reg [7:0] mem [32768:0];
Die Rechnungen von Seite 1 (dieses Threads) sind wohl einleuchtend um von 32KB auf 8192 zu kommen, aber ich verstehe nicht, warum diese überhaupt nötig sind.

Grüße

edit: Ok. Jetzt habe ich es ein bischen mehr verstanden. Jede Zeile (in der MuLö) ist 4 mal so groß wie bei mir, deshalb gibt es nur "4 mal so wenig Zeilen" (eieieieiei.. mir fällt grad keine ordentliche Beschreibung dafür ein ;D ). Aber sind dann die Eingangsadressen (ADDR) nicht total falsch? Also man kann doch nicht Adressen (die 32k Zeilen adressieren können) einfach nutzen um 32k/4 Zeilen zu adressieren...
Zuletzt geändert von plo1234 am 27. Jul 2011 16:33, insgesamt 2-mal geändert.

JanPM
BASIC-Programmierer
BASIC-Programmierer
Beiträge: 105
Registriert: 20. Mär 2009 14:25
Wohnort: Darmstadt

Re: Fragen zur Wiederholung 13.07

Beitrag von JanPM » 27. Jul 2011 16:32

Dass die Datenleitungen 32bit breit sein sollen war vorgegeben, aber warum die so breit sein sollen weiß ich auch noch net. Irgendwie ist das wiedersprüchlich zur Byte Adressierung. Wäre das dann nicht eher eine (4 Byte) Word adressierung?

Pflücker
BASIC-Programmierer
BASIC-Programmierer
Beiträge: 129
Registriert: 21. Sep 2010 14:27

Re: Fragen zur Wiederholung 13.07

Beitrag von Pflücker » 27. Jul 2011 16:48

Ich habe den RAM damals so implementiert, dass jedes Feld je 32 Bit enthält und damit jeweils 4 Adressen auf sich vereint.
Dass in der gesamten Aufgabe Byte-Adressierung verwendet wurde, hatte nur den Hintergrund, dass man eigentlich fast immer bei Schaltungen Byte-Adressierung verwendet, so war zumindest die Aussage ;)

Edit: Die benötigte Breite der Adresse für den Ram beträgt ja 15 Bit, da jedes Byte adressiert werden soll. In jedem Feld des RAMs in der Musterlösung stehen nun aber 32 Bit, diese kannst du also mit jeweils 4 Adressen erreichen, in diesem Fall also mit 0, 1, 2 und 3. Um nun die Speicherzellen adressieren zu können, muss mal also nur die untersten zwei Bits ausschließen, um jeweils eine Speicherfeld "ansprechen" zu können.

In der Musterlösung wurde anscheinend diese Kappung nun im Hauptmodul getätigt, indem dort etwa folgendes steht bei der instanziierung: .ADDR(ADDR[14:2])
Das fehlt nur leider in der Musterlösung ;)
Zuletzt geändert von Pflücker am 27. Jul 2011 18:43, insgesamt 1-mal geändert.

plo1234
BASIC-Programmierer
BASIC-Programmierer
Beiträge: 116
Registriert: 14. Nov 2009 18:51

Re: Fragen zur Wiederholung 13.07

Beitrag von plo1234 » 27. Jul 2011 17:02

Pflücker hat geschrieben:Das fehlt nur leider in der Musterlösung ;)
Nice! ;D
Naja, gut mit "ein bischen" (wohl sehr viel) Überlegen hätte man wohl auch durch das

Code: Alles auswählen

input wire [12:0] addr
(aus der MuLö) drauf kommen können.. aber naja. Mit dem .ADDR(ADDR[15:2]) macht das natürlich Sinn.
Meine Variante ist aber auch richtig, oder?
Grüße und Danke!

ab26iget.stud.tu
Mausschubser
Mausschubser
Beiträge: 63
Registriert: 14. Okt 2008 20:19

Re: Fragen zur Wiederholung 13.07

Beitrag von ab26iget.stud.tu » 27. Jul 2011 17:16

Sind Theoriefragen auch möglich ?

tobizZL
Windoof-User
Windoof-User
Beiträge: 34
Registriert: 19. Okt 2009 14:48

Re: Fragen zur Wiederholung 13.07

Beitrag von tobizZL » 27. Jul 2011 17:26

Also die 13b Adresse im RAM-Modul braucht man um die 8192 Speicherzellen zu adressieren, richtig?

Vom Hauptmodul bekomm ich jetzt einfach die 13 msb der 16b Adresse, da ja jeweils 4 Adressen zu jeder Speicherzelle gehören und ich somit nur jede 4. Adresse zum adressieren benötige.

Hab ich das Konzept jetzt richtig verstanden? =)
Zuletzt geändert von tobizZL am 27. Jul 2011 17:29, insgesamt 3-mal geändert.

Thorti
BSc Spammer
BSc Spammer
Beiträge: 1047
Registriert: 1. Dez 2003 11:52
Wohnort: Frankfurt
Kontaktdaten:

Re: Fragen zur Wiederholung 13.07

Beitrag von Thorti » 27. Jul 2011 17:27

Ja, der Byteweise Aufbau des Speochers ist auch OK.
Theoriefragen morgen kann es auch geben.

Gruß
Thorsten
Assistent zur Vorlesung TGDI im WS 11/12

Antworten

Zurück zu „Archiv“