Verilog signed vorzeichen in den bits enthalten ?

OP #4624436
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 ?
OP #4624495
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
Moderator (Firma: Titel) Persönliche Seite #4624516
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...
Gast #4624527
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.

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