我一直在尝试为计数器编写VHDL代码。 最终,我想获取输出值,用常量值检查它,并查看计数器是否达到常量值。如果它到达那里,我想重置它。如果没有,我想继续数下去。 我为计数器过程写的内容如下:
CNT: process(clk,reset)
begin
if (reset='0') then
cnt_tmp<= (others=>'0');
elsif (rising_edge(clk)) then
if (enable= '1') then
if (match='1') then
cnt_tmp <= (others => '0');
else
cnt_tmp <= cnt_tmp + 1;
end if;
else
cnt_tmp <= cnt_tmp;
end if;
end if;
end process;
cnt<= cnt_tmp;
所以,当匹配为1时,我们同步重置计数器,并且它还有一个使能引脚。
该匹配信号由计数器输出和 xnor 输出的“与”一起按位 xnor 常数生成。
但是,当我运行模拟时,我看到一些像这样的故障:
有人知道我该如何处理这个问题吗?
我希望消除这些故障,即使它们不会影响我的模拟中的功能。
这里发生了很多事情:
xnor/and
结构引起。输入的变化时间略有不同,因此输出会出现故障match='1'
替换为与“常数”的比较?故障消失了cnt_tmp
有什么用?没必要cnt_tmp <= cnt_tmp
有什么意义?这只是毫无意义的额外打字if
语句中的所有括号