如何避免行为 vhdl 代码模拟中出现故障?

问题描述 投票:0回答:1

我一直在尝试为计数器编写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 常数生成。

但是,当我运行模拟时,我看到一些像这样的故障:

有人知道我该如何处理这个问题吗?

我希望消除这些故障,即使它们不会影响我的模拟中的功能。

vhdl modelsim digital digital-design
1个回答
0
投票

这里发生了很多事情:

  1. 您的毛刺并不重要:信号是在时钟沿采样的。您不需要消除模拟人生中的所有故障,这在更大的设计中并不实用
  2. 您的故障将由您的
    xnor/and
    结构引起。输入的变化时间略有不同,因此输出会出现故障
  3. 不要这样做。为什么不能将
    match='1'
    替换为与“常数”的比较?故障消失了
  4. cnt_tmp
    有什么用?没必要
  5. cnt_tmp <= cnt_tmp
    有什么意义?这只是毫无意义的额外打字
  6. VHDL 不是 C。去掉
    if
    语句中的所有括号
© www.soinside.com 2019 - 2024. All rights reserved.