AHDL dff сбрасывает к нему значение по умолчанию - PullRequest
0 голосов
/ 14 декабря 2018

Я делаю часы с переменной частотой на 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

1 Ответ

0 голосов
/ 14 декабря 2018

Нашел проблему.Блок defaults работает каждый раз, если значение не было установлено.Поэтому, если вы хотите сохранить одно и то же значение, вам следует устанавливать его каждый раз.

...