Test auf Saturation

Gast #3928214
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?
Moderator (Firma: Titel) Persönliche Seite #3928237
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...
Gast #3929131
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).
Gast #3929135
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;

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren