首页 > 解决方案 > AHDL dff 重置为其默认值

问题描述

我在 AHDL 上做变频时钟。算法是:一个计数器(触发器)从 0 计数到 x,当它达到 x - 我们有脉冲。我有另一个触发器,用于存储 X。此外,我有两个输入plusminus用于更改频率(增加或减少 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 %是评论。

在此处输入图像描述

标签: hdlintel-fpga

解决方案


发现了问题。defaults如果未设置值,则该块每次都有效。所以,如果你想存储相同的值,你应该每次都设置它。


推荐阅读