Генератор адресов: проблема обмена битами (VHDL) - PullRequest
0 голосов
/ 09 ноября 2019

я хочу сделать следующее:

Чтобы сгенерировать соответствующий ВЫХОД, я должен добавить значение (2 ^ (stage-small_p + 1) к своему входу и затем поменять местами LSB (0) с битом, положение которого зависит от разницы между уровнем сигнала и константой small_p (stage-small_p).

Спасибо за помощь!


PROCESS(INPUT,stage)

BEGIN

    IF stage > small_p THEN

    OUTPUT_sig<=STD_LOGIC_VECTOR(TO_UNSIGNED(to_integer(UNSIGNED(INPUT)+2** 
    (stage-small_p+1)),m));

        bit_0 <= OUTPUT_SIG(0);

        bit_sp <=OUTPUT_SIG(stage-small_p);

        FOR i in 0 to m-1 LOOP

            IF (i=0) THEN
               OUTPUT(i)<=bit_sp ;
            ELSIF (i=(stage-small_p)) THEN
                OUTPUT(i)<=bit_0;
            ELSE
                OUTPUT(i)<=OUTPUT_SIG(i);
        END IF;

        END LOOP;

    ELSE
        OUTPUT <= STD_LOGIC_VECTOR(TO_UNSIGNED(0,m));
    END IF;

Ошибкапохоже, что при назначении OUTPUT_SIG (i) для OUTPUT (i): например, stage = 9 и p_small = 4: Мой INPUT равен 00110010, OUTPUT_SIG имеет значение: 01110010, тогда как OUTPUT имеет значение: 01010101. stage-small_p =5, поэтому я ожидаю: 01010011 (бит 5 и бит 0 поменялись местами).

...