я хочу сделать следующее:
Чтобы сгенерировать соответствующий ВЫХОД, я должен добавить значение (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 поменялись местами).