Forum: FPGA, VHDL & Co. Verilog signed vorzeichen in den bits enthalten ?


von A. S. (agor)


Lesenswert?

1
reg signed [5 :0] zahl; // 6 bit

bedeutet das das der wert der zahl 6 bit lang ist und das vorzeichen als 
signed gespeichert wird. oder
1 bit Vorzeichen + 5 bit Zahl ?

von pantagruel (Gast)


Lesenswert?

Hallo Agor,

der signed-Typ in Verilog enthält als MSB das Vorzeichen.

Decimal Value  Signed Representation
3               3’b011
2               3’b010
1               3’b001
0               3’b000
-1              3’b111
-2              3’b110
-3              3’b101
-4              3’b100

(Siehe dazu 
http://www.uccs.edu/~gtumbush/published_papers/Tumbush%20DVCon%2005.pdf)

In VHDL wird einfach das Zweierkompliment benutzt.

Grüße,

pantagruel

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


Lesenswert?

pantagruel schrieb:
> der signed-Typ in Verilog enthält als MSB das Vorzeichen.
Zweierkomplement ist richtig. Und dann gilt: am MSB kann man lediglich 
"erkennen", ob es eine negative Zahl ist.
Aber es ist eben nicht 000001bin = 1dez und 100001bin = -1dez bzw. 
011111bin = 31dez und 111111bin = -31dez.

von pantagruel (Gast)


Lesenswert?

pantagruel schrieb:
> In VHDL wird einfach das Zweierkompliment benutzt.

Im Eifer des Gefechts ging ein "auch" verloren...
Danke Lothar für die Richtigstellung.

von A. S. (agor)


Lesenswert?

perfekt das habe ich verstanden. Aber was ist den wenn ich 
festkommazahlen haben möchte. Also z.B. 0.25 ?

Müsste doch eigentlich easy möglich sein. mit 2hoch-2
also

00,01  kann ich ein komma setzen ?

von Torben K. (tokuhila)


Lesenswert?

Wie du die Bits im Endeffekt interpretierst, ist dir frei. Ob 0101 nun 5 
ist oder 1,25 ist deine Entscheidung. Muss nur durchgängig sein, da 
niemand weiß wo das Komma ist

von A. S. (agor)


Lesenswert?

das verstehe ich absolut nicht. Niemand weiß wo das komma ist ?
Wo kann ich den festlegen wo das komma ist ? Sonst müsste der Computer 
immer nur eine Ausgabe von ganzen zahlen haben ? wo legt dieser das 
komma fest ?

von A. S. (agor)


Lesenswert?

A. S. schrieb:
> das verstehe ich absolut nicht. Niemand weiß wo das komma ist ?
> Wo kann ich den festlegen wo das komma ist ? Sonst müsste der Computer
> immer nur eine Ausgabe von ganzen zahlen haben ? wo legt dieser das
> komma fest ?

ein Gedanken spiel ich multipliziere ein Eingangssignal mit 0101

aber ich kann nicht mit gedanken die hardware steuern.dann müsste einmal 
5 mal eingangssignal das andere 1.25 mal eingangssignal rauskommen ?

von Torben K. (tokuhila)


Lesenswert?


von A. S. (agor)


Lesenswert?

Also so fern ich das richtig verstanden habe.

Wird bei Festkommazahlen das komma festgelegt. Durch die Formel 
wiedergegeben!
 m = k − n

 k = länge der Zahl beim Beispiel 4 bit
 n = 0 bedeutet nur Nachkommastellen

also Beispiel:
0101 mit n = 0 k =4 wäre 0.3125 dezimal
0101 mit n = 4 .. wäre 5

Theoretisch verstehe ich das. Aber wie kann ich in verilog dann 
festlegen wo das komma ist. Wo kann ich m , n festlegen ?

reg signed [3 :0] beispiel; // 4 bit .... bedeutet k = 4

von A. S. (agor)


Lesenswert?

Gleitkommazahlen ist eigentlich auch verständlich. Aber wie kann ich das 
in der praksis verwenden ? sollte ich schauen welche Aritmetik mein 
Prozessor hat ? ob gleit oder festkomma ?

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


Lesenswert?

A. S. schrieb:
> Aber wie kann ich in verilog dann festlegen wo das komma ist. Wo kann
> ich m , n festlegen ?
Tritt mal einen Schritt zurück.
Mal angenommen, du willst Spanungen bis 5V auf 1mV genau messen und 
anzeigen. Dann könntest du dir einen dezimalen Fixpunkttypen mit 1 
Vorkommastelle und 3 Nachkommastellen definieren und bekommst 0.000 - 
4.999 (oder von mir aus auch 5.000). Allerdings hast du jetzt das 
Gelecke, dass du mit solchen "Kommazahlen" rechnen musst. Die 
Alternative wäre hier, in mV zu "denken" und den Wertebereich auf 0 - 
5000 zu verschieben. Von dieser Verschiebung weißt aber nur du! Und du 
musst sie dann entsprechend beachten.

Und genau das selbe bassiert mit binären Fixpunktzahlen: du verschiebst 
das Komma. Und nur du weißt, um wieviele Stellen.


BTW: in VHDL gibt es eine ziemlich simple Sache, Fixpunktzahlen 
anzugehen. Dort schreibt man für einen "normalen" Vektor z.B.
signal IntWert : unsigned(7 downto 0);
Und für einen Fixpunktwert mit 4 Nachkommastellen dann einfach
signal FixWert : unsigned(3 downto -4);
Evtl. kann Verilog auch sowas...

A. S. schrieb:
> Gleitkommazahlen ist eigentlich auch verständlich.
Du willst dir sicher keine Fließkommazahlen in der Hardware antun. Ganz 
sicher nicht.
Und wenn, dann solltest du vorher die Fixpunktzahlen gut verstanden 
haben...

: Bearbeitet durch Moderator
von Achim S. (Gast)


Lesenswert?

A. S. schrieb:
> Wo kann ich m , n festlegen ?

das machst du, sobald du die Bitfolge als Ganzzahl oder als 
Festkommazahl interpretierst.

Wenn du die Bitkombination 0101 als Bitkombination 0101 verwendest, ist 
die Position des Kommas egal (es ist entweder eine Ganzzahl oder eine 
Festkommazahl, für das Rechnen mit der Bitfolge macht es keinen 
Unterschied).

Ein Beispiel:

Addition       Interpretation als Ganzzahl    Interpretation als 
Festkommazahl
 0101           5                             5/4
+0001          +1                            +1/4
-----          --                            ----
 0110           6                             6/4

Erst wenn du die Bitfolge 0101 z.B. als ASCII-String (der eine 
Dezimalzahl darstellt)  über die serielle Schnittstelle senden willst, 
dann entscheidet die Routine, die aus 0101 den ASCII-String "1,25" (oder 
den String "5") macht darüber, wie das Ganzzahlen oder Festpunktzahlen 
waren.

von Torben K. (tokuhila)


Lesenswert?

> signal FixWert : unsigned(3 downto -4);
> Evtl. kann Verilog auch sowas...

reg signed [3:-4] FixWert;

Aber wie im richtigen Leben: Wer Viertele und Maß bunt durcheinander 
mischt kotzt ziemlich schnell

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.