Я делаю часы с переменной частотой на AHDL.Алгоритм таков: один счетчик (триггер) считает от 0 до x, а когда он достигает x - у нас есть импульс.У меня есть другой триггер, который используется для хранения этого X. Также у меня есть два входа plus
и minus
, которые используются для изменения частоты (увеличения или уменьшения значения X).
И у меня есть следующий код:
constant maximum = 9;
constant minimum = 1;
constant default = 5;
subdesign generator(
plus, minus, clk: input;
pulse, level[3..0], curr_val[3..0]: output;
)
variable
level[3..0]: dff;
curr_val[3..0]: dff;
begin
defaults
level[].d = default; % load 5 as default X value %
end defaults;
level[].clk = clk;
curr_val[].clk = clk;
pulse = (curr_val[] == level[]); % if main counter reached X - send one pulsation %
% main counter %
if curr_val[] < level[] then
curr_val[] = curr_val[] + 1;
elsif curr_val[] == level[] then
curr_val[] = 0;
end if;
% buttons %
if plus then
if (level[].q > minimum) then % if X == maximum ignore button %
level[].d = level[].q - 1;
end if;
end if;
if minus then
if (level[].q < maximum) then
level[].d = level[].q + 1;
end if;
end if;
end;
Проблема в том, что после одного тика при изменении значения X (level[]
) он возвращается к значению по умолчанию.Я что-то упустил?
Подсветка синтаксиса неверна, поскольку неверный тег.% text %
является комментарием.
![enter image description here](https://i.stack.imgur.com/m0vSA.png)