Hallo Freunde des VHDL Ich blick's überhaupt nicht mehr. Wer kann mir helfen? Also, ich habe einen 10 bit breiten Wert, der die Werte 0 bis 1023 haben kann. Nennen wir Ihn x. Von diesem Wert muss ich einen anderen Wert abziehen, der ebenfalls die Werte 0 bis 1023 annehmen kann. Nenn wir Ihn y. So, jetzt kommt's: Das Ergebnis soll aber vom Typ SIGNED sein, aber ebenfalls nur 10 bit breit sein. Hä? Das Ergebnis, wenn es denn als SIGNED darzustellen ist, muss doch 11 bit breit sein, oder? Wie schreibt man das dann? Danke! Mark
Hi, ich bin nicht ganz sicher, ob ich Deine Frage richtig verstanden habe. Für die richtige Breite Deines Registers musst Du schon selbst sorgen: LIBRARY ieee; USE ieee.std_logic_1164.ALL; USE ieee.std_logic_signed.ALL; ... PORT( x,y : IN std_logic_vector(9 DOWNTO 0); o : OUT std_logic_vector(10 DOWNTO 0) ); ... o <= ('0' & x) - ('0' & y); ... sollen x und y auch negativ sein, so musst Du anstatt der Null jeweils das MSB nocheinmal vorne anhängen. VG Michael
x = 10 bit = 0 ... 1023 y = 10 bit = 0 ... 1023 egal ob x + y oder x - y, das Ergebnis muss 1 bit breiter sein als x bzw. y, also z = 11 bit = 0 ... 2047 oder - 1024 ... + 1023 je nachdem, ob als signed oder unsigned betrachtet. Da x und y positiv sein sollen, kann man einfach mit 1 MSB = '0' erweitern, also vereinfacht geschrieben : z <= ('0' & x) - ('0' & y); -- x und y sind immer positiv (MSB=0)
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.