首页 文章

信号ModelSim VHDL中出现奇怪的尖峰

提问于
浏览
0

我正在为学校做最后的项目,这是我第一次在Quartus和ModelSIM中使用VHDL . 它应该是为三层楼提供服务的电梯的控制器 . 我在一些信号中有这些奇怪的尖峰,我似乎无法找到它们的来源 .

我遇到的一个问题是信号的尖峰信号,它会向显示当前楼层的向上/向下计数器提供信号 . 当它停在地板上时,它会再计算一次额外的时间,一个楼层太高或一个楼层太低,而下一个楼层显示似乎显示同一楼层,直到另一个楼层被呼叫 . 下一层显示器来自FSM,而当前楼层显示器来自上/下计数器 .

在这里发布所有内容有点复杂,所以我现在要发布波形以防万一有人遇到这个信号尖峰的事情,它最终是一个小错误/轻松修复 .

waveform

library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.std_logic_unsigned.all;

entity FSM_Elevador is
    port (Up_Down, Igual, Reset, Clock: in std_logic;
            Andar_Dif: out std_logic
            );
end FSM_Elevador;

architecture FSM_beh of FSM_Elevador is
    type Elev_States is (Start, Wait_State, Pulse_State);
    signal Current_State, Next_State: Elev_States;
    signal RST, CLK, Sig_Andar_Dif, Cont_Mesmo_Andar: std_logic;

begin

RST <= Reset;
CLK <= Clock;

process(RST, CLK)
begin
    if RST = '0' then
         Current_State <= Start;
    elsif CLK'event and  CLK = '1' then
         Current_State <= Next_State;
    end if;
end process;

process(Current_State, Igual)
begin
    case Current_State is
        when Start =>
            Next_State <= Wait_State;
        when Wait_State =>
            if Igual = '1' then
                Next_State <= Wait_State;
                Sig_Andar_Dif <= '0';
            else
                Next_State <= Pulse_State;
                Sig_Andar_Dif <= '1';
            end if;
        when Pulse_State =>
            if Igual = '1' then
                Sig_Andar_Dif <= '0';
                Next_State <= Wait_State;
            else
                Sig_Andar_Dif <= '0';
                Next_State <= Pulse_State;
            end if;
    end case;
end process;
Andar_Dif <= Sig_Andar_Dif;
end FSM_beh;

fru1tbat: 我使用Elev_pulse使计数器上升或下降一次,是的,它作为时钟进入计数器 . 这是教授的建议 .

Edit: 抱歉这是错误的代码 . Andar_Dif发出的信号最终会转移到具有Elev_Pulse的组件

1 回答

  • 1

    摆脱时钟和重置到CLK和RST的重新分配,直接使用来自端口的信号 . 这就产生了一个delta循环延迟,这是这种尖峰的原因 . 看起来你在设计中有不同的延迟重置,这也可能使问题复杂化 . 如果删除间接不能解决问题,则需要仔细检查何时在信号上生成事件以及何时处理它们的顺序 .

    您的状态机的输出未注册,也可能涉及 . 考虑重新处理FSM,以便注册所有输出 . 这是一种更好的设计实践,因为它确保您没有未知的组合延迟影响下游逻辑 .

相关问题