第五讲-状态机设计及其指导原则_第1页
第五讲-状态机设计及其指导原则_第2页
第五讲-状态机设计及其指导原则_第3页
第五讲-状态机设计及其指导原则_第4页
第五讲-状态机设计及其指导原则_第5页
已阅读5页,还剩33页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第五讲状态机设计及其指导原则1状态机是一种设计思想方法2

状态机结构3

状态机设计的其他技巧4

状态机设计步骤

状态机是一种设计思想方法原语描述modulenoconditional(clk,nrst,state,event);input clk,nrstinputstate;outputevent;regevent;reg[2:0]CS;//CurrentStatereg[2:0]NS;//NextStateparameter[2:0]//onehotwithzeroidle

idle =3’b000,dorm =3'b001,

diningroom =3'b010,classroom =3'b100;//sequentialstatetransitionalways@(posedge

clkornegedge

nrst)if(!nrst)CS<=idle;elseCS<=NS;//combinationalconditionjudgmentalways@(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;

endcaseendendmodule状态机的本质--对具有逻辑顺序或时序规律事件的一种描述方法

状态机的两个应用思路:从状态变量入手明确电路的输出的关系

对于逻辑电路而言,小到一个简单的时序逻辑,大到复杂的微处理器,都适合用状态机方法进行描述。不要仅仅局限于时序逻辑,发现电路的内在规律,确认电路的“状态变量”,大胆使用状态机描述电路模型。由于状态机不仅仅是一种电路描述工具,它更是一种思想方法,而且状态机的HDL语言表达方式比较规范,有章可循,所以很多有经验的设计者习惯用状态机思想进行逻辑设计,对各种复杂设计都套用状态机的设计理念,从而提高设计的效率和稳定性。总结:

状态机结构

摩尔(MOORE)状态机

输出只是当前状态值的函数,并且仅在时钟边沿到来时才发生变化米立(MEALY)状态机

输出则是当前状态值、当前输出值和当前输入值的函数注:这两种状态机都是同步的时序电路Moore状态机

下一个状态=F(当前状态,输入信号);

输出信号=G(当前状态);状态译码器

F输出译码器

G状态寄存器时钟信号clk

clk

输入输入输出当前状态激励信号时序逻辑组合逻辑组合逻辑Mealy状态机

下一个状态=F(当前状态,输入信号);

输出信号=G(当前状态,输入信号);状态译码器

F输出译码器

G状态寄存器时钟信号clk

clk

输入输入输出当前状态激励信号时序逻辑组合逻辑组合逻辑

带流水线的Mealy状态机

下一个状态=F(当前状态,输入信号);

输出信号=G(当前状态,输入信号);状态译码器

F输出译码器

G状态寄存器时钟信号clk

clk

输入输入当前状态激励信号输出流水线寄存器

clk

输入时序逻辑组合逻辑组合逻辑时序逻辑基本要素——状态、输出和输入

状态:也叫状态变量。在逻辑设计中,使用状态划分逻辑顺序和时序规律。比如设计伪随机码发生器时,可以用移位寄存器序列作为状态;在设计电机控制电路时,可以将电机的不同转速作为状态;在设计通信系统时,可以将信令的状态作为状态变量等。

输出:输出指在某一个状态时特定发生的事件。如设计电机控制电路时,如果电机转速过高,则输出为转速过高报警,也可以伴随减速指令或降温措施等。

输入:指状态机中进入每个状态的条件,有的状态机没有输入条件,其中的状态转移较为简单,有的状态机有输入条件,当某个输入条件存在时才能转移到相应的状态。组成部分

组合逻辑部分:分为状态译码器和输出译码器:状态译码器确定状态机的下一个状态,即确定状态机的激励方程;输出译码器确定状态机的输出,即确定状态机的输出方程。

时序逻辑部分:用于存储状态机的内部状态基本操作

状态机内部状态转换:状态机经历一系列状态,下一状态由状态译码器根据当前状态和输入条件决定。

产生输出信号序列:输出信号由输出译码器根据当前状态和输入条件决定。

基本描述方式

状态转移图是状态机描述中最自然的方式。状态转移图经常在设计规划阶段定义逻辑功能时使用,也可以在分析已有源代码中的状态机时使用,这种图形化的描述方式非常有助于理解设计意图。

状态转移列表是用列表的方式描述状态机,是数字逻辑电路常用的设计方法之一,经常被用于状态化简,对于可编程逻辑设计而言,由于可用逻辑资源比较丰富,而且状态编码要考虑设计的稳定性、安全性等因素,所以并不经常使用状态转移列表优化状态。

使用HDL语言描述状态机应具有一定的灵活性,但是决不是天马行空,而是有章可循的.通过使用一些规范的描述方法,可以使HDL语言描述状态机更安全、更稳定、更高效、更易于维护。状态机设计常用语法

变量声明(wire,reg等)

状态编码一般都要使用reg

寄存器型向量。

parameter

描述状态名称,增强源代码的可读性,简化描述。

例:

reg[3:0]NS,CS; parameter[3:0]//onehotwithzeroinitial IDLE 3'b0000, S1 3'b0001, S2 3'b0010, S3 3'b0100, ERROR3'b1000;

always——三种使用方法

根据主时钟沿完成同步时序的状态迁移。例: //sequentialstatetransition always@(posedge

clkornegedge

nrst) if(!nrst) CS<=IDLE; else CS<=NS;

根据信号敏感表完成组合逻辑的输出。

根据时钟沿完成同步时序逻辑的输出。

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。

task……endtask

将不同状态所对应的输出用task……endtask

封装,增强了代码的可维护性和可读性。 taskIDLE_out; begin {w_o1,w_o2,w_err}=3'b000; end

状态机的描述方式

一段式

将整个状态机写到一个always模块里面,在该模块中即描述状态转移,又描述状态的输入和输出。

两段式

使用两个always模块,其中一个always模块采用同步时序的方式描述状态转移,而另一个模块采用组合逻辑的方式判断状态转移条件,描述状态转移规律。

三段式

使用3个always模块,一个always模块采用同步时序的方式描述状态转移,一个采用组合逻辑的方式判断状态转移条件,描述状态转移规律,第三个always模块使用同步时序电路描述每个状态的输出。例一个非常典型的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。S1

RRORS2IDLEi2&!i1

!i2&!i1

i2&i1

i2&i1!i2&i1i1i2!i2!i1!i2&i1基本部分modulestate1(nrst,clk,i1,i2,o1,o2,err);inputnrst,clk;inputi1,i2;outputo1,o2,err;rego1,o2,err;reg[2:0]NS;//NextStateparameter[2:0]//onehotwithzeroidleIDLE=3'b000,S1=3'b001,S2=3'b010,ERROR=3'b100;一段式always@(posedge

clkornegedge

nrst)if(!nrst)beginNS<=IDLE;{o1,o2,err}<=3'b000;endelsebegincase(NS)IDLE:beginif(~i1)begin{o1,o2,err}<=3'b000;NS<=IDLE;endif(i1&&i2)begin{o1,o2,err}<=3'b100;NS<=S1;endif(i1&&~i2)begin{o1,o2,err}<=3'b111;NS<=ERROR;endendS1:beginif(~i2)begin{o1,o2,err}<=3'b100;NS<=S1;endif(i2&&i1)begin{o1,o2,err}<=3'b010;NS<=S2;endif(i2&&(~i1))begin{o1,o2,err}<=3'b111;NS<=ERROR;endendS2:beginif(i2)begin{o1,o2,err}<=3'b010;NS<=S2;endif(~i2&&i1)begin{o1,o2,err}<=3'b000;NS<=IDLE;endif(~i2&&(~i1))begin{o1,o2,err}<=3'b111;NS<=ERROR;endendERROR:beginif(i1)begin{o1,o2,err}<=3'b111;NS<=ERROR;endif(~i1)begin{o1,o2,err}<=3'b000;NS<=IDLE;endenddefault: begin{o1,o2,err}<=3'b000;NS<=IDLE;end

endcaseendendmodule两段式//outputtasktaskIDLE_out;{o1,o2,err}=3'b000;endtasktaskS1_out;{o1,o2,err}=3'b100;endtasktaskS2_out;{o1,o2,err}=3'b010;endtasktaskERROR_out;{o1,o2,err}=3'b111;endtask//sequentialstatetransitionalways@(posedge

clkornegedge

nrst)if(!nrst)CS<=IDLE;elseCS<=NS;//combinationalconditionjudgmentalways@(CSori1ori2)begincase(CS)IDLE:begin

IDLE_out;if(~i1)NS=IDLE;if(i1&&i2)NS=S1;if(i1&&~i2)NS=ERROR;end S1:beginS1_out;if(~i2)NS=S1;if(i2&&i1)NS=S2;if(i2&&(~i1))NS=ERROR;endS2:beginS2_out;if(i2)NS=S2; if(~i2&&i1)NS=IDLE;if(~i2&&(~i1))NS=ERROR;endERROR:begin

ERROR_out;if(i1)NS=ERROR;if(~i1)NS=IDLE;end default:begin

IDLE_out;NS=IDLE; end

endcaseendendmodule三段式//1stalwaysblock,sequentialstatetransitionalways@(posedge

clkornegedge

nrst)if(!nrst)CS<=IDLE;elseCS<=NS;//2ndalwaysblock,combinationalconditionjudgmentalways@(CSori1ori2)begincase(CS)IDLE:beginif(~i1)NS=IDLE;if(i1&&i2)NS=S1;if(i1&&~i2)NS=ERROR;end S1:beginif(~i2)NS=S1;if(i2&&i1)NS=S2;if(i2&&(~i1))NS=ERROR;endS2:beginif(i2)NS=S2; if(~i2&&i1)NS=IDLE;if(~i2&&(~i1))NS=ERROR;endERROR:beginif(i1)NS=ERROR;if(~i1)NS=IDLE;end default:NS=IDLE;

endcaseend//3rdalwaysblock,thesequentialFSM

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论