上电状态机的初始状态是什么?

当综合为Altera®器件状态机,你必须确保状态机正确复位。除非使用Not-Gate-Push-Back或在寄存器上设置上电高电平选项,否则Altera器件中的所有寄存器都将处于低电平状态。所有Altera器件均支持Not-Gate-Push-Back。

如果定义了状态机,使得一个或多个状态位在复位状态下为非零,那么您应该使用复位信号显式复位状态机(见下文)。如果状态机并没有明确在这种情况下复位,状态机可通电进入不确定状态,和MAX + PLUS®II将提供以下信息:

信息:必须重置状态机'< name >'以保证正常运行

要解决此问题,应明确重置状态机。 AHDL,VHDL和Verilog HDL设计输入格式的示例如下所示。

对于AHDL,应声明并断言复位信号。

 SUBDESIGN状态机

(

   clk,reset,ena,d:INPUT;

   q:输出;

)



变量

   ss:带状态的机器(s0 = 1,s1 = 0); - 复位状态为s0,状态寄存器为非零



开始



   ss.reset = reset; - 断言此信号以正确复位状态机

<...>

 

对于VHDL,初始状态可以由IF语句和复位信号定义。

 ENTITY statemachine IS

PORT(clk:IN STD_LOGIC;

输入:IN STD_LOGIC;

reset:IN STD_LOGIC;

输出:OUT STD_LOGIC);

结束状态机;



建筑机构是一个国家机器人

    TYPE STATE_TYPE IS(s1,s2); - 重置状态是s1

    ATTRIBUTE ENUM_ENCODING:STRING;

    STATE_TYPE的属性ENUM_ENCODING:TYPE为“1 0”; -  s1的状态寄存器不为零

    SIGNAL状态:STATE_TYPE;

开始

   过程(clk)

       开始

          IF reset ='1'THEN state <= s2; - 使状态机在状态s2启动

             IF(clk'EVENT和clk ='1')然后

                  CASE状态IS

<...>





 

对于Verilog HDL,初始状态必须由IF语句和a定义 复位信号,即

 模块状态机(clk,in,reset,out);

   输入clk,in,reset;

   输出;          

   退出;

   reg state;

            

   参数s1 = 1,s2 = 0;

   总是@(州)开始

      case(state) - 定义输出

         s1:out = 0;

<..>

   总是@(posedge clk或posedge reset)开始

      if(reset)state = s1; - 使状态机在状态s1启动

      else case(state) - 定义状态转换

            s1:if(in)state = s2;

<...>

 

对于所有HDL格式,如果未将状态机的初始状态定义为全零,则显式重置状态机,因为状态机 会降低电力。

请参阅MAX + PLUS II帮助的AHDL,VHDL和Verilog HDL部分 有关在MAX + PLUS II中实现状态机的完整信息。

编辑 重设标签(回车键确认) 标为违禁 关闭 合并 删除

提问于 2018-08-03 22:19:26 +0800

这个帖子被标记为一个社区wiki

这个帖子是一个wiki(维基). 任何一个积分 >500的人都可以完善它