如果状态机被定义为使一个或多个状态位在重置状态下为非零,则应使用重置信号明确重置状态机(见下文)。如果在这种情况下状态机未明确重置,状态机可能会进入未定义状态,MAX PLUS® II 将提供以下消息:
信息:必须重置状态机"名>",以保证正常运行
为了纠正此问题,应该明确重置状态机。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
对于 Verilog HDL,初始状态必须由 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 中实施状态机的完整信息。