第五讲 状态机设计及其指导原则
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第五讲状态机设计及其指导原则 11/ 38
带流水线的Mealy 状态机
下一个状态 = F(当前状态,输入信号); 输出信号 = G(当前状态,输入信号);
组合逻辑
时序逻辑 当前状态
组合逻辑 输出 译码器 G
时序逻辑
输出流 水线寄 存器 clk 输入
输入
状态 激励信号 状态 寄存器 译码器 F
第五讲状态机设计及其指导原则 3/ 38
原语描述
module noconditional (clk,nrst,state,event); input clk,nrst input state; output event; reg event;
reg reg [2:0] CS; //CurrentState [2:0] NS; //NextState
制作人:梁瑞宇 单位:河海大学
第五讲状态机设计及其指导原则 5/ 38
制作人:梁瑞宇 单位:河海大学
第五讲状态机设计及其指导原则 6/ 38
状态机的本质--对具有逻辑顺序或
时序规律事件的一种描述方法
状态机的两个应用思路: - 从状态变量入手
- 明确电路的输出的关系
制作人:梁瑞宇 单位:河海大学
制作人:梁瑞宇 单位:河海大学
第五讲状态机设计及其指导原则 17/ 38
case……endcase 语法格式: case (case_expression) case_item1:case_item_statement1; case_item2:case_item_statement2; case_item3:case_item_statement3; case_item4:case_item_statement4; default:case_item_statement5; endcase 使用default关键字来描述FSM所需状态的补集状态 下的操作,避免FSM进入死循环。 建议初学者使用完整的case 结构,而不使用casex 或casez。
always @ (posedge clk or negedge nrst) if (!nrst) begin NS <= IDLE; {o1,o2,err} <= 3'b000; end else begin case (NS) IDLE: begin if (~i1) begin{o1,o2,err}<=3'b000;NS <= IDLE; end if (i1 && i2) begin{o1,o2,err}<=3'b100;NS <= S1; end if (i1 && ~i2) begin{o1,o2,err}<=3'b111;NS <= ERROR;end end
第五讲状态机设计及其指导原则 9/ 38
Moore 状态机
下一个状态 = F(当前状态,输入信号); 输出信号 = G(当前状态);
组合逻辑 时序逻辑 组合逻辑 输出 译码器 G
输入
状态 状态 译码器 激励信号 寄存器 F
clk 输入
当前状态
输出
时钟信号clk
制作人:梁瑞宇 单位:河海大学
制作人:梁瑞宇 单位:河海大学
第五讲状态机设计及其指导原则 20/ 38
例
一个非常典型的Melay型状态机,共有4 种状态,即IDEL 、S1 、S2 和 ERROR,输入信号包括时钟“clk” ,低电平异步复位信号“ nrst” 和信号 “i1 ”、“ i2 ”,输出信号为“o1”、“o2 ”和“err” ,状态转移图如下。状态 的输出如下: IDLE状态的输出为{o1,o2,err} = 3'b000; S1状态的输出为{o1,o2,err} = 3'b100; S2状态的输出为{o1,o2,err} = 3'b010; ERROR状态的输出为{o1,o2,err} =3'b111 。
制作人:梁瑞宇 单位:河海大学
第五讲状态机设计及其指导原则 1/ 38
第五讲状态机设计及其指导原则
1 状态机是一种设计思想方法
2 状态机结构
3 状态机设计的其他技巧 4 状态机设计步骤
制作人:梁瑞宇 单位:河海大学
第五讲状态机设计及其指导原则 2/ 38
状态机是一种设计思想方法
制作人:梁瑞宇 单位:河海大学
i1 i2 & !i1
RROR
!i2 & !i1
!i2
!i1 S1 i2 &i1 !i2 & i1 S2 i2
i2 & i1
IDLE
!i2 & i1
制作人:梁瑞宇 单位:河海大学
第五讲状态机设计及其指导原则 21/ 38
基本部分
module state1 ( nrst,clk, i1,i2, o1,o2, err ); input nrst,clk; input i1,i2; output o1,o2,err; reg o1,o2,err;
制作人:梁瑞宇 单位:河海大学
第五讲状态机设计及其指导原则 16/ 38
always——三种使用方法 根据主时钟沿完成同步时序的状态迁移。 -例: //sequential state transition always @ (posedge clk or negedge nrst) if (!nrst) CS <= IDLE; else CS <=NS; 根据信号敏感表完成组合逻辑的输出。 根据时钟沿完成同步时序逻辑的输出。
输出:输出指在某一个状态时特定发生的事件。如设 计电机控制电路时,如果电机转速过高,则输出为转 速过高报警,也可以伴随减速指令或降温措施等。 输入:指状态机中进入每个状态的条件,有的状态机 没有输入条件,其中的状态转移较为简单,有的状态 机有输入条件,当某个输入条件存在时才能转移到相 应的状态。
制作人:梁瑞宇 单位:河海大学
第五讲状态机设计及其指导原则 13/ 38
组成部分
组合逻辑部分:分为状态译码器和输出译码器:状 态译码器确定状态机的下一个状态,即确定状态机的 激励方程;输出译码器确定状态机的输出,即确定状 态机的输出方程。
时序逻辑部分:用于存储状态机的内部状态
基本操作
总结:
第五讲状态机设计及其指导原则 7/ 38
对于逻辑电路而言,小到一个简单的时 序逻辑,大到复杂的微处理器,都适合用状 态机方法进行描述。不要仅仅局限于时序逻 辑,发现电路的内在规律,确认电路的“状 态变量”,大胆使用状态机描述电路模型。 由于状态机不仅仅是一种电路描述工具,它 更是一种思想方法,而且状态机的 HDL 语言 表达方式比较规范,有章可循,所以很多有 经验的设计者习惯用状态机思想进行逻辑设 计,对各种复杂设计都套用状态机的设计理 念,从而提高设计的效率和稳定性。
状态机内部状态转换:状态机经历一系列状态,下 一状态由状态译码器根据当前状态和输入条件决定。
产生输出信号序列:输出信号由输出译码器根据当 前状态和输入条件决定。
制作人:梁瑞宇 单位:河海大学
第五讲状态机设计及其指导原则 14/ 38
基本描述方式
状态转移图是状态机描述中最自然的方式。状态转移 图经常在设计规划阶段定义逻辑功能时使用,也可以 在分析已有源代码中的状态机时使用,这种图形化的 描述方式非常有助于理解设计意图。
状态转移列表是用列表的方式描述状态机,是数字逻 辑电路常用的设计方法之一,经常被用于状态化简, 对于可编程逻辑设计而言,由于可用逻辑资源比较丰 富,而且状态编码要考虑设计的稳定性、安全性等因 素,所以并不经常使用状态转移列表优化状态。 使用HDL 语言描述状态机应具有一定的灵活性,但 是决不是天马行空,而是有章可循的.通过使用一些规 范的描述方法,可以使HDL 语言描述状态机更安全、 更稳定、更高效、更易于维护。
clk 输入
时钟信号clk
制作人:梁瑞宇 单位:河海大学
第五讲状态机设计及其指导原则 12/ 38
基本要素——状态、输出和输入
状态:也叫状态变量。在逻辑设计中,使用状态划分 逻辑顺序和时序规律。比如设计伪随机码发生器时, 可以用移位寄存器序列作为状态;在设计电机控制电路 时,可以将电机的不同转速作为状态;在设计通信系统 时,可以将信令的状态作为状态变量等。
制作人:梁瑞宇 单位:河海大学
第五讲状态机设计及其指导原则 18/ 38
task……endtask 将不同状态所对应的输出用task……endtask 封装, 增强了代码的可维护性和可读性。 task IDLE_out; begin {w_o1 , w_o2 ,w_err} = 3'b000; end
制作人:梁瑞宇 单位:河海大学
第五讲状态机设计及其指导原则 8/ 38
状态机结构
摩尔(MOORE)状态机
- 输出只是当前状态值的函数,并且仅在时钟边沿到 来时才发生变化
米立(MEALY)状态机
- 输出则是当前状态值、当前输出值和当前输入值的 函数
注:这两种状态机都是同步的时序电路
制作人:梁瑞宇 单位:河海大学
第五讲状态机设计及其指导原则 10/ 38
Mealy 状态机
下一个状态 = F(当前状态,输入信号); 输出信号 = G(当前状态,输入信号);
组合逻辑
时序逻辑 状态 寄存器
clk 输入
组合逻辑 输出 译码器 G
输入
状态 激励信号 译码器 F 当前状态
输出
时钟信号clk
制作人:梁瑞宇 单位:河海大学
制作人:梁瑞宇 单位:河海大学
第五讲状态机设计及其指导原则 15/ 38
状态机设计常用语法
变量声明(wire,reg等) 状态编码 一般都要使用reg 寄存器型向量。
parameter
描述状态名称,增强源代码的可读性,简化描述 。
例:
reg [3:0] NS , CS; parameter [3:0] //one hot with zero initial IDLE 3'b0000 , S1 3'b0001 , S2 3'b0010 , S3 3'b0100 , ERROR 3'b1000;
制作人:梁瑞宇 单位:河海大学
第五讲状态机设计及其指导原则 19/ 38
状态机的描述方式 一段式 将整个状态机写到一个always模块里面,在该模块 中即描述状态转移,又描述状态的输入和输出。 两段式 使用两个always 模块,其中一个always 模块采用 同步时序的方式描述状态转移,而另一个模块采用组 合逻辑的方式判断状态转移条件,描述状态转移规律。 三段式 使用3 个always模块,一个always 模块采用同步 时序的方式描述状态转移,一个采用组合逻辑的方式 判断状态转移条件,描述状态转移规律,第三个 always 模块使用同步时序电路描述每个状态的输出。
reg [2:0] NS; //NextState
parameter [2:0] //one hot with zero idle IDLE = 3'b000, S1 = 3'b001, S2 = 3'b010, ERROR = 3'b1式
第五讲状态机设计及其指导原则 22/ 38
parameter [2:0] idle dorm diningroom classroom
//one hot with zero idle = 3’b000, = 3'b001, = 3'b010, = 3'b100;
制作人:梁瑞宇 单位:河海大学 第五讲状态机设计及其指导原则 4/ 38 //sequential state transition always @ (posedge clk or negedge nrst) if (!nrst) CS <= idle; else CS <= NS; //combinational condition judgment always @ (CS) begin case (CS) idle: idle_task;NS = dorm; dorm: dorm_task;NS = diningroom; diningroom:diningroom_task;NS = classroom; classroom: classroom_task;NS = dorm; default: idle_task;NS = dorm; endcase end endmodule