상태 머신이 하나 이상의 상태 비트가 리셋 상태에서 0이 아닌 상태로 정의되면 리셋 신호를 사용하여 상태 컴퓨터를 명시적으로 재설정해야 합니다(아래 참조). 이 경우 상태 시스템이 명시적으로 재설정되지 않으면 상태 컴퓨터가 정의되지 않은 상태로 전원을 공급할 수 있으며, PLUS II MAX® 다음 메시지를 제공합니다.
정보: 상태 컴퓨터 '< 이름>'을 재설정하여 적절한 작동을 보장해야 합니다.
이 문제를 해결하려면 상태 컴퓨터를 명시적으로 재설정해야 합니다. AHDL, VHDL 및 Verilog HDL 설계 항목 형식에 대한 예는 아래와 같습니다.
AHDL의 경우 리셋 신호를 선언하고 주장해야 합니다.
SUBDESIGN statemachine ( clk, reset, ena, d : INPUT; q : OUTPUT; ) VARIABLE ss: MACHINE WITH STATES (s0=1, s1=0); -- reset state is s0, state register is non-zero BEGIN ss.reset = reset; -- assert this signal to properly reset the state machine
VHDL의 경우, 초기 상태는 명령문과 재설정 신호로 IF
정의될 수 있습니다.
ENTITY statemachine IS PORT( clk : IN STD_LOGIC; input : IN STD_LOGIC; reset : IN STD_LOGIC; output : OUT STD_LOGIC); END statemachine; ARCHITECTURE a OF statemachine IS TYPE STATE_TYPE IS (s1, s2); -- reset state is s1 ATTRIBUTE ENUM_ENCODING : STRING; ATTRIBUTE ENUM_ENCODING OF STATE_TYPE : TYPE IS "1 0"; -- state register for s1 is non-zero SIGNAL state : STATE_TYPE; BEGIN PROCESS (clk) BEGIN IF reset = '1' THEN state <= s2; -- causes state machine to power up in state s2 IF (clk'EVENT AND clk = '1') THEN CASE state IS
Verilog HDL의 경우, 초기 상태는 명령문과 a IF
에 의해 정의되어야 합니다.
리셋 신호, 즉.
module statemachine (clk, in, reset, out); input clk, in, reset; output out; reg out; reg state; parameter s1 = 1, s2 = 0; always @ (state) begin case (state) -- define outputs s1: out = 0; always @ (posedge clk or posedge reset) begin if (reset) state = s1; -- causes state machine to power up in state s1 else case (state) -- define state transitions s1: if (in) state = s2;
모든 HDL 형식의 경우 상태 머신의 초기 상태를 모든 0으로 정의하지 않으면 상태 머신 이후 상태 컴퓨터를 명시적으로 재설정합니다. 전원이 낮아지게 됩니다.
AHDL, VHDL 및 Verilog HDL 섹션의 MAX PLUS II 도움말 을 참조하십시오. MAX PLUS II에서 상태 머신 구현에 대한 완전한 정보.