ACS/Verilog Frage

Herrzattacke
BASIC-Programmierer
BASIC-Programmierer
Beiträge: 143
Registriert: 20. Nov 2004 16:04

ACS/Verilog Frage

Beitrag von Herrzattacke »

Nehmen wir mal an, dass ich folgendes auf der RCU in meinem ACS berechnen will.

X = A + B;
und
X = A - B;

Dann würde ich das folgendermaßen machen:

Code: Alles auswählen

module user ...

reg[31:0] A,B; // bin mir nicht sicher ob das geht, aber semantisch sollte klar sein was gemeint ist.
reg[31:0] result;

assign DATAOUT = result;

always @(DATAIN) begin
    if ( ADDRESS == 32'b0) begin
        A <= DATAIN;
    end else if ( ADDRESS == 32'b1 ) begin
        B <= DATAIN;
    end
end

always @(posedge CLK or posedge RESET) begin
    if ( RESET ) begin
        result <= 32'hF000AFFE;
    end else if ( ADRESSED & ~WRITE ) begin
        if ( ADDRESS == 32'b0 ) begin
            result <= A + B;
        end else begin
            result <= A - B;
        end
    end
end

endmodule
Kann man das so machen oder gibt es da nochwas besseres?

Die Fälle, das A und B nicht initialisiert sind kann ich ignorieren, wenn ich die RCU aus dem C Programm immer richtig benutze? Oder muss ich beim Reset A und B z.B. auf Null setzen?

Die Zuweisung von "result" wurde in den Folien immer beim schreiben der Variablen gemacht. Kann ich das so wie hier auch beim lesen machen? Oder lese ich dann das alte Datum?

A380
Mausschubser
Mausschubser
Beiträge: 52
Registriert: 16. Dez 2003 21:36

Beitrag von A380 »

Code: Alles auswählen

always @(DATAIN) begin
    if ( ADDRESS == 32'b0) begin
        A <= DATAIN;
        B<=B;
    end else if ( ADDRESS == 32'b1 ) begin
        B <= DATAIN;
        A<=A;
    end
end
Ich würde ihm sicherheitshalber noch deutlich sagen das er den jeweils anderen Wert halten soll (kann sein das es überflüssig ist)

Wahrscheinlich wäre es auch besser die Daten an einer Taktflanke zu lesen?

Das Problem bei deinem Code dürfte sein: Dauert die Berechnung sehr lange, liest du evtl. einen falschen Wert. (von der Softwareseite)
Andererseits hat man mit der Methode im Skript eigentlich das gleiche Problem, nur dort früher, beim Übernehmen der Daten.
Bei kleinen Berechnungen macht das sicherlich nichts aus, vor allem nicht beim Bits umdrehen ;)

Benutzeravatar
NedFlanders84
Mausschubser
Mausschubser
Beiträge: 44
Registriert: 3. Nov 2004 10:30
Kontaktdaten:

Re: ACS/Verilog Frage

Beitrag von NedFlanders84 »

Ist vlt. etwas spät, aber hier meine Ideen dazu:
Herrzattacke hat geschrieben:
Die Zuweisung von "result" wurde in den Folien immer beim schreiben der Variablen gemacht. Kann ich das so wie hier auch beim lesen machen? Oder lese ich dann das alte Datum?
Ich denke, dass es auch so geht, da du die Daten ja immer bei Änderungen am DataIn schon mal zwischen speicherst. Allerdings wenn du es erst beim Lesen zuweist, muss man vlt. noch ein wenig Wartezeit einrechnen, bis die Registerwerte von Reserved auf Result zugewiesen wurden.
Wenn man das beim WRITE macht geht man ja davon aus, dass die Daten irgendwann mal wieder gelesen werden sollen. Und sind daher schon im Result vorgespeichert.

Gruß

Alex
.
Eisbären sind Linkshänder!!!

Herrzattacke
BASIC-Programmierer
BASIC-Programmierer
Beiträge: 143
Registriert: 20. Nov 2004 16:04

Beitrag von Herrzattacke »

Das war ja gerade meine Vermutung.

Ich hab jetzt nochmal drüber nachgedacht und mir überlegt, dass man die Berechnungsverzögerung verschieben kann, wenn man bei jedem Schreibvorgang x=a+b und y=a-b speichert.
Dann kann man beim Lesevorgang direkt die Daten aus den internen Registern auf den Output legen, sprich in "result" speichern.
Zuletzt geändert von Herrzattacke am 30. Jan 2007 16:39, insgesamt 1-mal geändert.
Alle sagten: "Das geht nicht!" Dann kam einer, der wusste das nicht und hat´s gemacht.

koch
Dozentin/Dozent
Beiträge: 221
Registriert: 4. Jul 2005 11:08

Beitrag von koch »

Dann kann man beim Lesevorgang direkt die Daten aus den internen Registern auf den Output legen, sprich in "result" speichern.
Das ist bei diesen sehr einfachen die RCUs die beste Vorgehensweise. Bei komplizierteren klappt das allerdings in der Tat nicht mehr (weil die Verzögerungen zu lang werden). Aber deutlich kompliziertere Fälle als der in der Vorlesung gezeigte werden auch in der Klausur nicht vorkommen :wink:

Antworten

Zurück zu „Archiv“