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...

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...

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.