Forum: FPGA, VHDL & Co. Rechenfehler mit unsignd und integer constante


von 123 (Gast)


Lesenswert?

Hallo,

der folgende Code gibt mit modelsim eine Rechenfehler. Wenn row 1 ist, 
dann ist row_offset 759, wie es sein sollte. test ist aber 247, warum?


port (
row          : in std_logic_vector(8 downto 0);
 );

test: process(n_reset, clk )


        variable test       : unsigned(18 downto 0);
        variable row_offset       : unsigned(18 downto 0);

    begin
        if (n_reset = '0') then

        elsif(rising_edge(clk))then

                row_offset  :=(to_unsigned((758+1),10)*unsigned(row));
                test        :="0"&((758+1)*unsigned(row));

        end if;
    end process;

Ich hoffe einer hat eine Erklährung

von Jan M. (mueschel)


Lesenswert?

>dann ist row_offset 759, wie es sein sollte. test ist aber 247

247 + 512 = 759
Das ist ein ganz einfacher Ueberlauf, genau wie in c oder jeder anderen 
Programmiersprache.
Auch in VHDL gilt: Erst die Operanden auf die Breite des Ergebnisses 
bringen, dann die Operation ausfuehren.

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.