Ich habe den output eines Moduls, der mir das 32768fache eines Ergenisses darstellt, welches zwischen -10000 und +10000 rangiert. Insgesamt sind es 30bit Den Vorkommawert kann ich durch WK <= ouput (30 downto 15) erhalten und er wird auch korrekt angezeigt. Wie füge ich die Nachkommastellen 14 to 0 so hinzu, dass ich Kommastellen sehe? Es würde mir reichen, wenn ich sie in einem zweiten Vektor hätte. Muss ich das manuell machen, also z.B. in der Testbench *1000/32768, und mir das Komma denken, oder gibt es eine Möglichkeit, einen Real zu erzeugen, der die Werte als Kommazahl darstellt. Real = "converto_real" (vector) / 32768 oder so
das sollte funktionieren real = 1.0 * conv_integer(vector) / 32768.0;
user schrieb: > conv_integer Nicht mit der numeric_std. Auch eine Multiplikation von real mit integer ist nicht definiert... Ich empfehle daher:
1 | r <= real(to_integer(unsigned(v))) / 32768.0; |
Lothar Miller schrieb: > r <= real(to_integer(unsigned(v))) / 32768.0; Das schaut gut aus - werde ich probieren. Danke!
Xilinx-Kritiker schrieb: > Das schaut gut aus Und nicht vergessen: nimm die numeric_std statt der alen Synopsys-Libs. Beitrag "IEEE.STD_LOGIC_ARITH.ALL obsolete"
Schon klar. ok, es funktioniert, allerding nur für die reduzierte Auflösung. Wenn ich einen grossen Vekttor einspeise, kommen komische Werte raus. Ich benutzte übrigens real(to_integer(*signed*(v))) / Ich habe mir nun so geholfen, dass ich den Vektor kürze und auf einige Stellen verzichte. Dem Prinzip nach kommt aber das richtige raus.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.