Kommerstellen-Rechner designen?
Hallo,
baue gerade einen CPU und frage mich wie man mit Kommerstellen rechnet. Und wie man das dann in Verilog umsetzt.
Damit ich das dann in Verilog umsetzen kann.
![](https://images.gutefrage.net/media/user/sugercat2005/1676663631423_nmmslarge__0_0_300_300_9a4334409e63f908baa4b0bff88a688f.png?v=1676663632000)
Was hat ein CPU mit Kommazahlen rechnen zu tuen und mit Design ?
Möchtest du eine App Designen die Brüche in Kommazahlen umrechnet ?
![](https://images.gutefrage.net/media/default/user/9_nmmslarge.png?v=1551279448000)
Ich möchte in mein CPU eine Schaltung einbauen die mit Kommerzahlen Rechnungen spezialisiert ist.
![](https://images.gutefrage.net/media/default/user/7_nmmslarge.png?v=1438863662000)
Was sind denn KommER-Zahlen?
Unter KommA-Zahlen kann ich mir noch etwas vorstellen.
![](https://images.gutefrage.net/media/default/user/9_nmmslarge.png?v=1551279448000)
zB. 427.4153
4 Antworten
![](https://images.gutefrage.net/media/user/Bushmills145/1652135501895_nmmslarge__0_97_452_452_0eb7c46e98a2301b95b1457e224bfec0.png?v=1652135502000)
Floating point in hardware darzustellen ist recht aufwändig. Ich würde stattdessen an Alternativen denken. Z.B. fixed point, also integers, bei denen ein gedachter Dezimalpunkt irgendwo gesetzt wird - damit reduziert sich der Aufwand darauf, lediglich zusätzlich bestimmen zu müssen, wo der Dezimalpunkt im Ergebnis sein muss, und das Rechnen selbst erfolgt mit Integer Math. Also Quasi float mit nichtveränderlicher Mantisse. Das erspart dir den Prozess des Normalisierens der Operanden, da diese schon normalisiert sind.
Eine weitere Alternative ist, mit Fraktionen zu rechnen, Gleitkommazahlen also stattdessen als Zähler/Nenner darzustellen, also als Brüche. Dadurch dass Zähler und Nenner Brüche sind, werden die dann ebenfalls als Integers dargestellt, und bleiben mit Integer Math berechenbar.
![](https://images.gutefrage.net/media/default/user/9_nmmslarge.png?v=1551279448000)
![](https://images.gutefrage.net/media/user/Bushmills145/1652135501895_nmmslarge__0_97_452_452_0eb7c46e98a2301b95b1457e224bfec0.png?v=1652135502000)
Schau alternativ mal nach in z.B. auf github publizierte sources rein, z.B. https://github.com/dawsonjon/fpu
![](https://images.gutefrage.net/media/default/user/9_nmmslarge.png?v=1551279448000)
Ähm wie berechnet man wo die Kommerstelle sein soll?
![](https://images.gutefrage.net/media/user/Bushmills145/1652135501895_nmmslarge__0_97_452_452_0eb7c46e98a2301b95b1457e224bfec0.png?v=1652135502000)
Beim Addieren bleibt sie erhalten, beim Multiplizieren zweier Operanden verdoppeln sich die Anzahl Nachkommastellen, und um soviele sollte dann vom Resultat mittels Schieben wieder entfernt werden.
![](https://images.gutefrage.net/media/default/user/9_nmmslarge.png?v=1551279448000)
Ähm wie berechnet man die Nachkommerstellen bei Dividieren?
![](https://images.gutefrage.net/media/user/Bushmills145/1652135501895_nmmslarge__0_97_452_452_0eb7c46e98a2301b95b1457e224bfec0.png?v=1652135502000)
Da bietet sich an, die nicht zu berechnen, sondern wiederholt Divisionsschritte auszuführen, bis die gewünschte Anzahl Stellen erreicht ist. Solch ein einzelner Divisionschritt kann auch als Instruktion der CPU zugänglich gemacht werden, und die Anzahl benötigter oder gewünschter Teilungsschritte auch in Software bestimmt werden.
CPUs, die solche Teilungsschritte als Instruktion kennen, benutzen für den Divident gerne ein extra dafür bereitgestelltes Register.
![](https://images.gutefrage.net/media/user/Erzesel/1497339133085_nmmslarge__0_524_1080_1080_4b38ff31970de3b94deb6a27ca8a8f01.jpg?v=1497339133000)
Ich meine, Verilog ist für die hiesige "Gemeinde" wohl doch etwas zu speziell. (damit schließe ich mich ä, trotz meiner fast 37 Jahre Erfahrung in Sachen Hard- und Softwareware ein)
Die Wahrscheinlichkeit in GF einen versierten Fachmann*in zu finden halte ich für sehr gering
In Deiner Sache solltest Du Dich gezielter umschauen.
- https://www.veripool.org/verilator/
- https://www.mikrocontroller.net/forum/fpga-vhdl-cpld
- https://www.edaboard.com/forums/systemverilog.270/
Ich habe mir mal die Entwicklung Deiner Fragen angesehen...
Ihrgend suggeriert Dein Frageverlauf, dass Du einer Art Lern-/Wissens-Bullemie erlegen bist.
Nichts einzuwenden, wenn jemand versucht mit der Hardware zu arbeiten... aber einen moderne Prozessor dürfte weit jenseits Deiner Möglichkeiten mit einem halben Jahr Erfahrung liegen...(bezogen auf den Inhalt Deiner alten Fragen)
Was Du jetzt mit Verilog anfangen willst, erschließt sich mir schon garnicht...
Dir fehlen komplett die Hintergründe...
Für für "Kommarechnen" solltest du Dich mit den internationalen Standards dazu beschäftigen... https://de.m.wikipedia.org/wiki/IEEE_754
![](https://images.gutefrage.net/media/default/user/5_nmmslarge.png?v=1438863662000)
https://github.com/pulp-platform/fpu
Hier wäre ein Beispiel, die FPU ist auch niedrige Fläche hin optimiert, AFAIK.
bzw. auch folgender Link:
https://github.com/openhwgroup/cvfpu
Du kannst Dich auch selbst nach anderen freien Entwürfen umschauen.
![](https://images.gutefrage.net/media/user/FaTech/1708715131049_nmmslarge__0_0_500_500_77a0f43d5804c908f40c8a1b0c260400.png?v=1708715131000)
1.2x4.6=5.52 bitte sehr. War doch easy?
![](https://images.gutefrage.net/media/default/user/9_nmmslarge.png?v=1551279448000)
Danke schön für Sternchen!