Fragen zur Wiederholung 13.07

Suiteng
Mausschubser
Mausschubser
Beiträge: 45
Registriert: 20. Okt 2010 14:44

Fragen zur Wiederholung 13.07

Beitrag von Suiteng » 24. Jul 2011 18:05

hallo, ich habe hier 2 Fragen:

1. Warum wird das Resetsignal in RAM nirgendwo behandelt?
2. Warum werden nur die ersten 3 Register beim Reset auf 0 gesetzt?

Grüße
Suiteng

Benutzeravatar
hymGo
Sonntagsinformatiker
Sonntagsinformatiker
Beiträge: 209
Registriert: 4. Okt 2009 23:17

Re: Fragen zur Wiederholung 13.07

Beitrag von hymGo » 24. Jul 2011 19:02

Suiteng hat geschrieben: 1. Warum wird das Resetsignal in RAM nirgendwo behandelt?
Bei "echtem" Speicher kann man sich auch nicht sicher sein was am Anfang drinne steht. Daher kann man das reset einfach weglassen. Des Weiteren wäre es zu Aufwendig alles auf 0 zu setzen
Suiteng hat geschrieben: 2. Warum werden nur die ersten 3 Register beim Reset auf 0 gesetzt?
Soweit ich es mitbekommen habe, sind diese weggelassen, damit es auf die Folie passt :wink:

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 » 24. Jul 2011 19:03

Hallo,
Suiteng hat geschrieben: 2. Warum werden nur die ersten 3 Register beim Reset auf 0 gesetzt?
Soweit ich es mitbekommen habe, sind diese weggelassen, damit es auf die Folie passt :wink:[/quote]
Genau so ist es.
Assistent zur Vorlesung TGDI im WS 11/12

Suiteng
Mausschubser
Mausschubser
Beiträge: 45
Registriert: 20. Okt 2010 14:44

Re: Fragen zur Wiederholung 13.07

Beitrag von Suiteng » 24. Jul 2011 20:02

ich habe noch eine Frage zur letzten Aufgabe. Das loadPow-Signal taucht sowohl bei einem Multiplexer als auch beim pow-register auf. Ist das Signal beim Pow-register nicht überflüssig bzw falsch, weil das loadPow-signal eigentlich nur bestimmt, ob 1 oder der neue Pow-wert übernommen wird?

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 » 24. Jul 2011 20:11

Das ist eine Sache die ich auch noch nachfragen werde, aber ich hege die starke Vermutung, dass diese Enable-Signale darstellen ;) Auch wenn leider die Bezeichnungen der Eingänge am Register fehlen...

Also wenn loadPow = 1 wird einmal der Multiplexer entsprechend geschaltet und das FlipFlop wird angewiesen, zur nächsten steigenden Taktflanke das Signal am Eingang zu übernehmen.

Dementsprechend müsste mulPow dann auch ein Enable-Signal des Registers sein...

Edit: Das ganze macht insofern Sinn und ist hier nicht überflüssig, als dass man, wenn man mit der eigentlichen Rechnung fertig ist, einfach das Register anweist das Signal am Eingang nicht mehr zu übernehmen ;)

Suiteng
Mausschubser
Mausschubser
Beiträge: 45
Registriert: 20. Okt 2010 14:44

Re: Fragen zur Wiederholung 13.07

Beitrag von Suiteng » 24. Jul 2011 20:24

man bräuchte dann 2 Signale, eins nur für das Laden in den Register, das andere für das Schalten am Multiplexer oder nicht?

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 » 24. Jul 2011 21:13

Dein Signal loadPow muss eh zur positiven Taktflanke gesetzt sein (am Multiplexer), somit kannst du es auch am Register verwenden, wo das Enable-Signal ja auch zur positiven Taktflanke gesetzt sein muss.

Falls ich dich jetzt aber falsch verstanden habe, und du meintest ob man die beide Signale am Register durch eines ersetzen sollte ;) :
Kann man muss man nicht - hardwaretechnisch würde ich beide Signale durch eine Oder-Verknüpfung an den Enable-Eingang des Registers hängen, dann hat man den gewünschten Effekt. Mit nur einem Signal für das aktivieren des Registers und entsprechender Anpassungen des Steuerwerkes sollte es aber auch funktionieren.

Ich habe das Gefühl, dass das Datenpfad-Modell hier stark vereinfacht wurde - es wäre mal für die Klausur interessant zu wissen wie detailliert wir das ganze machen müssen^^

Suiteng
Mausschubser
Mausschubser
Beiträge: 45
Registriert: 20. Okt 2010 14:44

Re: Fragen zur Wiederholung 13.07

Beitrag von Suiteng » 24. Jul 2011 21:37

es wird auch in den Register geladen, wenn loadPow 0 ist, weil sonst pow = pow * pow2n nicht mehr durchgeführt wird. loadPow wird nur nachm Start auf 1 gesetzt, danach bleibt es immer auf 0, damit immer der neuer pow-Wert vom Multiplexer übernommen wird. wenn aber loadpow während der Iteration auf 0 gesetzt wird, wird dann 1 in den pow-Register geladen, obwohl man den neu berechneten Wert haben will.

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 » 24. Jul 2011 21:43

es wird auch in den Register geladen, wenn loadPow 0 ist, weil sonst pow = pow * pow2n nicht mehr durchgeführt wird. loadPow wird nur nachm Start auf 1 gesetzt, danach bleibt es immer auf 0, damit immer der neuer pow-Wert vom Multiplexer übernommen wird
Schau dir mal im Diagramm vom Steuerwerk den Zustand S1 (der die "Iteration" durchführt) genauer an ;)
Dort findest du das hier:

Code: Alles auswählen

if (expZeroN)
if (expBit)
mulPow;
Wenn wir nun davon ausgehen, dass sowohl loadPow als auch mulPow beide an den Enable-Eingang des Registers angeschlossen sind, sollte alles stimmen, oder etwa nicht? ;)

EDIT:
Hm, allerdings vermisse ich gerade eine Deklaration des Statussignals expZero im Datenpfad - Okay das ganze macht aber wiederum Sinn wenn man einen Schritt weiter denkt und expZero als das Negat von expZeroN betrachtet^^ Was mich zu der Frage zurückbringt wie sehr wir bei diesen Diagrammen vereinfachen und den Betrachter zum Mitdenken zwingen dürfen^^

Suiteng
Mausschubser
Mausschubser
Beiträge: 45
Registriert: 20. Okt 2010 14:44

Re: Fragen zur Wiederholung 13.07

Beitrag von Suiteng » 24. Jul 2011 22:19

danke für die Antwort erstmal;) ich glaub es verstanden zu haben, muss mir das Thema aber noch mal genauer anschauen..

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 20:02

Hallo,

hab ne kleine Frage zu dem RAM-Modul:

Man berechnet das Memory-Reg doch durch "Größe des RAMs in byte" * 8 / "Größe der gewünschten Datenbreite"?

Also für ein RAM 32KB:

32 * 1024 * 8 / 32 = 8192

=> reg [31:0] mem[8191:0] oder?

Falls ich das richtig verstanden habe, müsste das ein Tippfehler in der MuLö sein oder? (reg[31:0] mem[8192:0])

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 =)
Zuletzt geändert von tobizZL am 26. Jul 2011 20:28, insgesamt 1-mal geändert.

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 20:25

Hm, deine Anmerkung müsste stimmen, wobei eine Speicherfeld zuviel nicht so schlimm ist wie eine Speichefeld zu wenig ;)

Ich habe die Geschichte damals so gerechnet:

2^(Anzahl_Adressbits - Anzahl_der_Bits_von(32/8))

Edit: Hm stimmt, wenn das Register auch synchron gelesen werden soll ist das nicht implementiert. Ich habe das ganze damals mein ich auch synchron gemacht
Zuletzt geändert von Pflücker am 26. Jul 2011 20:38, insgesamt 1-mal geändert.

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 20:32

Hehe das ist natürlich klar ;-) Mir gings auch eher um die Berechnung.
Kannst du mir das evtl mal kurz erläutern?

Ich bin jetzt sozusagen davon ausgegangen, dass ich die Adressbreite noch nicht weiß. (Die war ja in der Aufgabenstellung offen gelassen)
Das heißt ich wollte mir erstmal die Anzahl der Speicherzellen berechnen und dann davon die benötigte Adressbreite ableiten.
Wäre das so auch korrekt?

Danke ;-)

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 20:48

tobizZL hat geschrieben:Hehe das ist natürlich klar ;-) Mir gings auch eher um die Berechnung.
Kannst du mir das evtl mal kurz erläutern?

Ich bin jetzt sozusagen davon ausgegangen, dass ich die Adressbreite noch nicht weiß. (Die war ja in der Aufgabenstellung offen gelassen)
Das heißt ich wollte mir erstmal die Anzahl der Speicherzellen berechnen und dann davon die benötigte Adressbreite ableiten.
Wäre das so auch korrekt?

Danke ;-)
Bevor wir uns missverstehen: Ich meine die Adressbreite der Adresse, die an das RAM geschickt wird - nicht die gesamte Adressbreite inklusive der Bits die dein Decoder "überprüft" ;)

Sollte so auch funktionieren, es ist evtl sogar eleganter in der Klausur hinzuschreiben, wenn man des Rechnens müde ist, weil es definitiv von ISE akzeptiert werden sollte ;

32 = 5 bits, da 0-31
KiloByte = 10 Bits

32/8 = 4 = 2 Bits, da 0-3

also 2^((5 + 10) -2) = 2^13 = 8192 und das noch minus eins, da wir ja bei Adresse 0 beginnen, also 8191

Im Endeffekt ist die ganze Geschichte nur eine Ablesegeschichte, kann man aber bestimmt auch noch anders machen ;)

Edit:
Noch eine Anmerkung: Die Adressbreite meiner Adresse an das Ram betrug damals jene 15 Bit, die "benötigten" Bits habe ich intern Abgegriffen ;) Ich nehme an in der Musterlösung wurde das in dem Hauptmodul durch die entsprechende Belegung der Adresse gelöst, allerdings wollte ich im RAM-Modul eben jene Byte-Adressierung auch aufrecht erhalten. Deswegen ist "meine" Rechnung vielleicht nicht ganz übertragbar ;)

Die Rechnung wäre dann ähnlich zu oben ;)

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:07

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 ;-)

Antworten

Zurück zu „Archiv“