我正在用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 %
是评论。
答案 0 :(得分:1)
发现了问题。
如果未设置值,defaults
块每次都会工作。因此,如果要存储相同的值,则应该每次都设置它。