リセット状態で 1 つ以上の状態ビットが 0 でない状態になるようにステートマシンが定義されている場合、リセット信号を使用してステートマシンを明示的にリセットする必要があります (以下を参照)。この場合、ステートマシンが明示的にリセットされない場合、ステートマシンは未定義の状態にパワーアップする可能性があり、PLUS® IIMAX次のメッセージが表示されます。
情報: 状態マシンの「<名>」をリセットして適切な動作を保証する必要があります
この問題を解決するには、ステートマシンを明示的にリセットする必要があります。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 フォーマットで、ステートマシンの初期状態をすべてゼロに定義しない場合、ステートマシンは明示的にリセットされます。 電源が低くなります。
MAX PLUS II ヘルプの AHDL、VHDL、Verilog HDL の各セクションを参照してください。 MAX PLUS II のステートマシンの実装に関する完全な情報。