上电状态机的初始状态是什么?
如果定义了状态机,使得一个或多个状态位在复位状态下为非零,那么您应该使用复位信号显式复位状态机(见下文)。如果状态机并没有明确在这种情况下复位,状态机可通电进入不确定状态,和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中实现状态机的完整信息。