Forum: FPGA, VHDL & Co. Test auf Saturation


von Peter Z. (Gast)


Lesenswert?

Hallo Forum, ich versuche gerade den Verilog-Code des RedPitayah PID 
Reglers zu verstehen.
1
wire [ 33-1: 0] int_sum ;
2
reg [ 32-1: 0] int_reg ;
3
4
// hab hier was weggelassen
5
6
else if (int_sum[33-1:33-2] == 2'b01) // positive saturation
7
int_reg <= 32'h7FFFFFFF; // max positive
8
else if (int_sum[33-1:33-2] == 2'b10) // negative saturation
9
int_reg <= 32'h80000000; // max negative
10
else
11
int_reg <= int_sum[32-1:0]; // use sum as it is
12
end
int_sum ist ein 33 Bit typ,
int_rg ist ein 32 Bit typ.

beim Test auf negative Sättigung wäre meiner Meinung:
1
else if (int_sum[33-1:33-2] == 2'b11) // negative saturation
richtig. Oder liege ich da falsch?

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Peter Zz schrieb:
> Oder liege ich da falsch?
Ja.
Sieh dir mal die Binärdarstellung negativer Zahlen an. Du wirst 
erkennen, dass 2'b11 schon bei -1 zuträfe.

Allerdings ist die Sättigung hier relativ rüde, denn es bleibt durch die 
Abfrage nur der signifikanten Bits insgesamt gerade noch der halbe 
effektive Wertebereich übrig...

: Bearbeitet durch Moderator
von P. K. (pek)


Lesenswert?

Lothar Miller schrieb:
> Allerdings ist die Sättigung hier relativ rüde, denn es bleibt durch die
> Abfrage nur der signifikanten Bits insgesamt gerade noch der halbe
> effektive Wertebereich übrig...

Das 33-bit-Resultat wird wieder in einen 32-bit-Wert überführt, da 
bleibt Dir nichts anderes übrig wenn die Skala dieselbe bleiben soll...

: Bearbeitet durch User
von Peter Z. (Gast)


Lesenswert?

Lothar Miller schrieb:
> Ja.
> Sieh dir mal die Binärdarstellung negativer Zahlen an. Du wirst
> erkennen, dass 2'b11 schon bei -1 zuträfe.

Eh klar! Kopfschüttel über mich selbst!
Danke!   :-)

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

P. K. schrieb:
> Das 33-bit-Resultat
Ach, schlags kaputt. Das ist ja ein Bit mehr...
Dann passt die Prüfung.

von Peter Z. (Gast)


Lesenswert?

1
wire [ 33-1: 0] int_sum ;
2
reg [ 32-1: 0] int_reg ;
Ist diese Notation mit 33-1 bzw. 32-1 in Verilog üblich, oder ist das 
eher Anfänger-Style?

von Trundle Trollkönig (Gast)


Lesenswert?

Ja ist die normale Notation. Das einzige was man normalerweise bei 
Registern noch hinzufügt ist: reg [7:0] Data = 0; => Initialwerte. 
Logischerweise nur bei Registern nicht bei Verdrahtungen (wire).

von Trundle Trollkönig (Gast)


Lesenswert?

Ach du meintest nur die "-1"... Sry vergiss mein Post vorher. Nee ich 
mach das mit der "-1" nicht mehr außer ich hab bestimmte Werte als  ... 
keine Ahnung wie man das nennt.. Parameter?? abgelegt. Als Beispiel:

parameter Busbreite = 32;

reg [Busbreite - 1 : 0] Data = 0;

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.