Поскольку вы указываете i+1
для сдвига влево и i-1
для сдвига вправо, мы можем сделать вывод, что вы выражаете диапазон как прямой (вниз).
Размер «регистра» может быть назначен с помощью общего значения, используемого для соответствия размеру порта и любому размеру значения внутреннего массива.
signal internalInputBus: std_logic_vector (REGSIZE-1 downto 0);
В вашем операторе процесса, где сдвиг влево
internalInputBus <= internalInputBus(REGSIZE-2 downto 0) & right_shift_input;
Использование оператора конкатенации справа от большинства битов REGSIZE-1 и сдвиг ввода.
При смещении вправо
internalInputBus <= left_shift_input & internalInputBus(REGSIZE-1 downto 1);
Я видел, как люди раньше использовали ввод с одним сдвигом, но я никогда не находил приложения, в котором это имело бы смысл. Без внутренних сигналов с тремя состояниями где-то подразумевается мультиплексор.
Операторы цикла — это допустимые последовательные операторы внутри оператора процесса. Я полагаю, у вас были проблемы с конечными границами. Поиск решения приведет вас к аналогу использования операторов конкатенации.
Левая и правая границы двух приведенных выше примеров операторов конкатенации привели бы вас к тому, как использовать цикл, не пересекающий все элементы, вместе с дополнительным оператором присваивания, чтобы охватить все элементы целевого массива.
-- LEFT
for i in REGSIZE-2 downto 0 loop
internalInputBus(i+1) <= internalInputBus(i);
end loop;
internalInputBus(0) <= right_shift_input;
а также
-- RIGHT
for i in REGIZE-1 downto 1 loop
internalInputBus(i-1) <= internalInputBus(i);
end loop;
internalInputBus(REGSIZE-1) <= left_shift_input;
Это просто сделано из головы. Пусть покупатель будет бдителен.
Обратите внимание, что назначения сигналов без промежуточных ожиданий (как в операторе цикла) могут считывать текущее значение значения, которое вы только что запланировали для обновления. Если бы вместо этого вы использовали целевую переменную, вы бы хотели изменить порядок, чтобы предотвратить перезапись следующего оцениваемого значения. (В данном случае в примере -- ПРАВИЛЬНО, for i in 1 to REGIZE-1 loop
).
person
Community
schedule
14.02.2014