文章 ID: 000080719 内容类型: 故障排除 上次审核日期: 2021 年 08 月 27 日

状态机开机的初始状态是什么?

环境

BUILT IN - ARTICLE INTRO SECOND COMPONENT
说明 合成用于Altera®设备的状态 机时,您必须确保状态机已正确重置。除非在寄存器上使用 Not-Gate-Push-Back,否则Altera设备中的所有寄存器都会在低状态下开机。所有Altera设备均支持"不门推回"。

如果状态机被定义为使一个或多个状态位在重置状态下为非零,则应使用重置信号明确重置状态机(见下文)。如果在这种情况下状态机未明确重置,状态机可能会进入未定义状态,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 中实施状态机的完整信息。

相关产品

本文适用于 1 产品

英特尔® 可编程设备

本页面上的内容是原始英文内容的人工翻译与计算机翻译的组合。我们提供此内容是为了您的便利并且仅供参考,未必完整或准确。如果本页面的英文版与翻译版之间存在任何冲突,应以英文版为准。 查看此页面的英语版本。