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 ?
|
Forum: FPGA, VHDL & Co. Verilog signed vorzeichen in den bits enthalten ?
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 ? 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 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. pantagruel schrieb: > In VHDL wird einfach das Zweierkompliment benutzt. Im Eifer des Gefechts ging ein "auch" verloren... Danke Lothar für die Richtigstellung. 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 ? 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 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 ? 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 ? https://de.wikipedia.org/wiki/Festkommazahl Im Gegensatz dazu: https://de.wikipedia.org/wiki/Gleitkommazahl 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 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 ? 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
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. > 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.
|
|