Я нашел этот код для 12-битного преобразования двоичного кода в bcd, но я не могу понять часть регистра сдвига (просто показывающую часть конечного автомата). Мне нужна помощь в понимании того, как именно '&' работает в сдвиговом регистре, и если кто-то также может предложить другой способ для части сдвигового регистра выглядеть примерно так, как показано ниже, так как поток данных проще понять:
ishiftRegister(7) <= Rxd;
ishiftRegister(6 downto 0) <= iShiftRegister(7 downto 1);
-- State Machine
process(present_state, binary, binary_in, bcd_temp, bcds_reg, shift_counter)
begin
next_state <= present_state;
bcds_next <= bcd_temp;
binary_next <= binary;
shift_counter_next <= shift_counter;
case present_state is
when st_start =>
next_state <= st_shift;
binary_next <= binary_in;
bcds_next <= (others => '0');
shift_counter_next <= 0;
when st_shift =>
if shift_counter = 12 then
next_state <= st_stop;
else
binary_next <= binary(10 downto 0) & 'L';
bcds_next <= bcds_reg(18 downto 0) & binary(11);
shift_counter_next <= shift_counter + 1;
end if;
when st_stop=>
next_state <= st_start;
end case;
end process;