Я только начинаю изучать VHDL в modelsim, поэтому заранее прошу прощения, если то, что я делаю, кажется действительно нубистским.
По сути, я пытаюсь создать синтезируемый код VHDL для одноразрядного счетчика BCD вверх / вниз. Счетчик будет считать, когда «Включить» равен «1», или же он останется прежним. При инициализации входа «Инициализация» счетчик устанавливается на 0 или 9 в зависимости от значения входа «Направление». (Когда «Направление» равно «1», это счетчик увеличения).
Мне просто интересно, есть ли лучшие инструменты, которые можно использовать для этой работы, кроме использования 100, если и еще подряд.
Вот мой код, я пишу тестовый стенд для него прямо сейчас, так что я пока не уверен, сработает ли он вообще. Поэтому, если вы случайно заметили какую-то ошибку, пожалуйста, укажите мне.
Заранее большое спасибо, и вот мой код
entity BCD_counter is
port(clk, direction, init, enable: in bit;
q_out: out integer);
end entity BCD_counter;
architecture behaviour of BCD_counter is
signal q: integer;
begin
process(clk)
begin
if(Clk'event and Clk = '1') then
if(direction = '1') then -- counting up
if(init = '1')then --initialize
q<=0; -- reset to 0
else
if(enable = '1')then -- counting
if (q<9) then
q<=q+1;
else
q<=0;
end if;
else
q<=q;
end if;
end if;
elsif(direction = '0') then --counting down
if(init = '1') then --initialize
q<=9; --reset to 9
else
if(enable = '1') then --counting
if (q>0) then
q<=q-1;
else
q<=9;
end if;
else
q<=q;
end if;
end if;
end if;
end if;
end process;
q_out <= q;
end architecture behaviour;