저는 학교를위한 최종 프로젝트를 진행하고 있으며 Quartus 및 ModelSIM에서 VHDL로 작업 한 것은 이번이 처음입니다. 그것은 3 층에 서비스를 제공하는 엘리베이터의 제어 장치가되어야합니다. 몇 가지 신호에이 이상한 스파이크가 있으며 소스를 찾을 수없는 것 같습니다.신호의 이상한 급증 ModelSim VHDL
내가 가진 한 가지 문제점은 현재 바닥을 보여주는 위/아래 카운터에 신호를 보내는 신호입니다. 바닥에서 멈 추면 한 번 더 계산하거나 한 층을 너무 높이거나 한 층을 너무 낮게 끝내는 반면, 다음 층에는 다른 층이 호출 될 때까지 동일한 층을 표시하는 것처럼 보입니다. 다음 플로어 디스플레이는 FSM에서 나오고, 현재 플로어 디스플레이는 위/아래 카운터에서옵니다.
여기에 모든 것을 게시하는 것이 약간 복잡하므로 누군가이 신호 스파이크를 우연히 만났을 때를 대비해 파형을 게시 할 예정이며 사소한 오류/쉬운 수정이 될 수 있습니다.
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을 사용하고 예는 시계로 카운터를 입력합니다. 그것은 교수가 제안했습니다.
편집 : 이전에는 잘못된 코드였습니다. Andar_Dif는 Elev_Pulse가있는 구성 요소로가는 신호를 보냅니다.
Elev_Pulse를 할당 한 코드를 게시하십시오. 네가 OR 게이트를 지정했을거야? – Russell
스파이크로 인해 추가 카운트가 발생 했습니까? 일반적으로 시계처럼 사용할 수 없다면 (마스터 시계를 사용하는 것처럼 보이지는 않습니다), 또는 명백하지 않은 다른 작업을 수행하지 않는 한 일반적으로 사용하지 않을 것입니다. – fru1tbat