基于状态机的LCD多级菜单设计

基于状态机的LCD多级菜单设计
基于状态机的LCD多级菜单设计

2012年12卷2期73-75页. 经验交流返回目录

基于状态机的LCD多级菜单设计

贾志成,程敏,宋涛,王彦,康志龙,郭艳菊

1. 河北工业大学信息工程学院,天津300401;

2.天津职业技术大学

1概述

液晶显示器(Liquid Crystal Display,LCD)由于其体积和功耗等因素,非常适合嵌入式环境的使用。近年来,随着微处理器性能的提高,嵌入式系统实现的功能越来越强大,产生的数据量也越来越大。相对应地,需要显示的数据量也随之增大。嵌入式环境下使用LCD显示器,由于条件限制,体积较小,且显示的内容有限。而且,传统的LCD显示模式总是不加选择地显示所有监控的信息,在监控的信息量非常庞大时会导致不能及时显示用户所需求的信息。多级菜单显示则是将信息分类显示的一种显示方式,该方式根据用户的选择,对显示信息加以筛选并分级显示,这样既保证用户获取其所需的信息,又能保障信息显示的实时性。

2多级菜单的结构

设计多级菜单的目的在于将需要显示的信息分门归类,方便用户筛选。所以在设计菜单时需要根据整个系统的功能和要求来设定菜单的级数,以及各级子菜单的个数。整个多级菜单的拓扑结构为树型结构,主菜单为根节点,子菜单为枝节点,最后一级菜单为叶节点,如图1所示。

图1多级菜单的结构图

3多级菜单的程序设计

3.1循环方式

循环方式的设计思路:预先定义一个包含6个结构元素的结构体、5个字符型和1个指针型。第1个字符变量存放当前界面的索引号;第2个字符变量存放按下“down(向下)”键时需要跳转到的索引号;第3个字符变量存放按下“up(向上)”键时需要跳转到的索引号;第4个字符变量存放按下“enter(进入)”键时需要跳转的索引号;第5个字符变量存放按下“esc (退出)”键时需要跳转的索引号;第6个变量为函数指针变量,存放当前索引号下需要执行的函数的入口地址。

将所有需要显示的界面其所对应的执行函数和按键索引号以结构体的形式列表存储。具体实现如下:

typedef struct{

uchardown_index;

ucharup_index;

ucharenter_index;

ucharesc_index;

void (*operate)();

}Key_index_struct;

假设菜单分3级,共10个界面,则有:

Key_index_struct const Key_tab[10]={

{0, 0, 0, 1, 0,(*main_menu)},

{1, 2, 3, 4, 0,(*sub_menu1)},

{2, 3, 1, 5, 0,(*sub_menu2)},

{3, 1, 2, 7, 0,(*sub_menu3)},

{4, 4, 4, 4, 1,(*sub_menu1_1)},

{5, 6, 6, 5, 2,(*sub_menu2_1)},

{6, 5, 5, 5, 2,(*sub_menu2_2)},

{7, 8, 9, 7, 3,(*sub_menu3_1)},

{8, 9, 7, 8, 3,(*sub_menu3_2)},

{9, 7, 8, 9, 3,(*sub_menu3_3)},

};

void Lcd_display(void){

switch(Key_status){

case enter:

Key_fun=Key_tab[Key_fun].enter_index;

break;

case down:

Key_fun=Key_tab[Key_fun].down_index;

break;

case up:

Key_fun=Key_tab[Key_fun].up_index;

break;

case esc:

Key_fun=Key_tab[Key_fun].esc_index;

break;

default:

return;

break;

}

Key_fun_Pt=Key_tab[Key_fun].operate;

(*Key_fun_Pt)();//执行当前按键的操作

}

当微处理器扫描键盘检测到有按键按下时,根据按键按下的类型,返回在当前界面下其所对应的跳转索引号,并执行相应的函数。

由于每个界面的绘制都是由一个独立函数实现的,从循环方式的实现过程中发现,每发生一次按键按下操作都需要重新绘制整个屏幕。如果核心处理器是低速主频的处理器,在界面切换的时候会闪烁。而且,每一个界面都有固定不变的索引号,在增加或删除界面的时候需要重新修改整个列表,降低了程序的可移植性。

3.2查询方式

查询方式是通过结构体对自身的递归调用实现菜单的多级嵌套。

结构体通过对自身的两次调用构建双向列表。一个菜单界面即为一个节点,节点的前驱和后继分别存放其父节点和子节

点的入口地址。

菜单参数的结构体定义如下:

typedef struct Lcd_menu_content{

uchar *lpIcon;//显示图标

uchar *lpText;//显示文本信息

uchar nTextCount; //菜单对应的文本信息的个数

}Lcd_menu_content;

每个界面对应一个节点,节点都定义成如下结构体的变量:

typedef struct Lcd_menu{

struct Lcd_menu*lpfather;//父级

struct Lcd_menu*lpson;//大儿子

uchar nSonCount;//父级的儿子个数

Lcd_menu_content lpIconAndText;

uchar Flag_return;//返回标志

void (*operate)();//处理函数入口地址

}Lcd_menu;

由图1可知,多级菜单的拓扑结构为树型拓扑结构,即每一个节点只有一个父节点和若干个子节点。所以,对整个叉树进行遍历即可准确地查找到菜单界面所在的节点。

结构体实现的链表如图2所示。

图2结构体链表

查询方式与循环方式相比,由于减少了查表次数,因而改善了MPU的效率;但查询方式占用MPU处理时间过长,不适应需要高速处理数据的应用。而且,在查询方式中增加或删除节点对程序改动较大,也不适合移植。

3.3状态机方式

状态机是由事件驱动,在各个状态之间跳转。采用状态机方式时,只需要提供驱动事件(在此设计中驱动事件为有效的按键按下),然后根据按键扫描返回的键值,决定所要跳转的下一状态。

如图3所示,系统启动初始化是显示Main_menu界面,当按键检测有返回值(即有按键按下)时,根据按下的按键所代表的操作跳转到指定的状态。例如:按下Up或者是down键时,只是在Main_menu界面内高亮显示不同区域;按下Enter时,则要根据原来按下的Up和down键来选择需要跳转的方向,假设在按下Enter之前仅按下一次down键,则key_v的值为2(key_v的值默认为1,即默认选中子菜单的第一项),就跳转为Sub_menu2界面;按下Esc键时,为从子菜单返回到上一级菜单,如果已经是主菜单了则返回的还是主菜单。

图3多级菜单的状态图

由于使用的是状态机的方式,只有发生一次有效的按键,状态才会发生一次跳转。而且,仅当Enter和Esc键按下时,才会切换界面。所以即便是在高速MPU应用中,也不会出现屏幕闪烁的效果。

从图3中可以看出,当要发生状态跳转时,目的状态只能是当前状态几个分支预测中的一个,从而不需要遍历整个列表,能够适应高速数据处理的场合。

多级菜单的程序流程如图4所示。系统上电初始化后显示主菜单,键盘扫描可以通过主程序中循环查询或者中断扫描来实现,最终根据键盘返回的键值选择下一状态。

图5为基于状态机的多级菜单的实现。

图4多级菜单的程序流程图

图5多级菜单的实现

结语

以上三种多级菜单的实现方式均具有很强的实用性。循环方式和查询方式下,程序结构简单易用,而状态机方式下程序可移植性强。状态机程序设计不仅可以用在人机接口设计中,还可用于嵌入式通信协议等其他场合中。

参考文献

[1] 胡汉才.单片机原理及其接口技术[M].北京:清华大学出版社,1996:1415.

[2] 陆铮,罗嘉.单片机C语言下LCD多级菜单的一种实现方法[J].工矿自动化,2006(1):5051.

[3] 宋晓辉,叶桦,丁昊.基于单片机的多级菜单实现方法改进[J].东南大学学报:自然科学版,2007(37):66.

[4] 陈东,夏遂华.液晶显示多层菜单结构的软件设计[J].电气传动,2001(4):36.

程敏(硕士研究生),研究方向为电子遥测遥控、工业控制、嵌入式系统。

(责任编辑:芦潇静收稿日期:2011-09-06)

实验四 有限状态机设计(2学时)

实验四有限状态机设计(2学时) 实验内容一: 状态机是指用输入信号和电路状态(状态变量)的逻辑函数去描述时序逻辑电路功能的方法,也叫时序机。有限状态机是指在设计电路中加入一定的限制条件,一般用来实现数字系统设计中的控制部分。 根据时序电路输出信号的特点可将时序电路划为Mealy 型和Moore 型两种。Moore型电路中,输出信号仅仅取决于存储电路的状态。Mealy型电路中,输出信号不仅取决于存储电路的状态,而且还取决于输入变量。图1是某Mealy型电路的状态转换图,图中圆圈内的S0、S1等代表电路的状态,状态转换箭头旁斜杠“/”上边的数字代表输入信号,斜杠“/”下边的数字代表输出信号。假设电路的当前状态为S0,当输入信号为0时,电路的下一个状态仍为S0,输出信号为0;当输入信号为1时,电路的下一个状态为S1,输出为1。 图1 Mealy状态机 下面的程序中使用两个进程来描述该状态机。第一个进程负责状态转化,在CP上升沿到达时,当前状态(PresetState)向下一个状态(NextState)的转换;第二个进程负责检测输入信号(DIN)和当前状态(PresetState)的值,并由CASE-WHEN 语句决定输出信号(OP)和下一个状态值(NextState)的值。请补充下图中虚线“…”部分省略掉的程序,然后对完整程序进行编译,并用Tools->Netlist Views->State Machine Viewer和RTL Viewer工具查看该状态机的状态图和RTL顶层图。

… … 实验内容二: 论文《基于VHDL的一个简单Mealy状态机》中设计了一个Mealy状态机用来检测数据流“1101010”,用以验证状态机在数据检测上的应用。请在读懂文中程序的基础上,在Quartus Ⅱ软件中通过编译仿真得到状态图和波形图,仿真中输入波形的设置应能体现该状态机的用途。 实验报告: 本次实验占用两个学时,请于12周周四(5月12日)上课时交实验报告。对于实验内容一,报告的内容应重在程序的完善上,对于实验内容二,报告的内容应重在对论文中源程序的分析和理解,以及仿真的波形图上。

有限状态机设计

有限状态机设计 实验报告 一.实验题目 有机状态机设计 二.实验目的 掌握有机状态机设计的基本方法。 三.实验远离 状态机是指用输入信号和电路状态(状态变量)的逻辑函数去描述时序逻辑电路功能的方法,也叫时序机。有限状态机是指在设计电路中加入一定的限制条件,一般用来实现数字系统设计中的控制部分。 四.实验内容

实验内容一: 状态机是指用输入信号和电路状态(状态变量)的逻辑函数去描述时序逻辑电路功能的方法,也叫时序机。有限状态机是指在设计电路中加入一定的限制条件,一般用来实现数字系统设计中的控制部分。 根据时序电路输出信号的特点可将时序电路划为Mealy 型和Moore 型两种。Moore型电路中,输出信号仅仅取决于存储电路的状态。Mealy型电路中,输出信号不仅取决于存储电路的状态,而且还取决于输入变量。图1是某Mealy型电路的状态转换图,图中圆圈内的S0、S1等代表电路的状态,状态转换箭头旁斜杠“/”上边的数字代表输入信号,斜杠“/”下边的数字代表输出信号。假设电路的当前状态为S0,当输入信号为0时,电路的下一个状态仍为S0,输出信号为0;当输入信号为1时,电路的下一个状态为S1,输出为1。 图1 Mealy状态机 下面的程序中使用两个进程来描述该状态机。第一个进程负责状态转化,在CP上升沿到达时,当前状态(PresetState)向下一个状态(NextState)的转换;第二个进程负责检测输入信号(DIN)和当前状态(PresetState)的值,并由CASE-WHEN 语句决定输出信号(OP)和下一个状态值(NextState)的值。请补充下图中虚线“…”部分省略掉的程序,然后对完整程序进行编译,并用Tools->Netlist Views->State Machine Viewer和RTL Viewer工具查看该状态机的状态转移图和RTL原理图。

状态机及其VHDL设计

第7章状态机及其VHDL设计 内容提要:有限状态机(Finite State Machine,简称FSM)是一类很重要的时序电路,是许多数字系统的核心部件,也是实时系统设计中的一种数学模型,是一种重要的、易于建立的、应用比较广泛的、以描述控制特性为主的建模方法,它可以应用于从系统分析到设计的所有阶段。有限状态机的优点在于简单易用,状态间的关系清晰直观。建立有限状态机主要有两种方法:“状态转移图”和“状态转移表”。标准状态机通常可分为Moore和Mealy两种类型。本章主要介绍了基于VHDL的常见有限状态机的类型、结构、功能及表达方法,重点是如何有效地设计与实现。 学习要求:了解状态机的基本结构、功能和分类,掌握有限状态机的一般设计思路与方法、状态机编码方案的恰当选取、Moore和Mealy状态机的本质区别及设计实现。 关键词:状态机(State Machine),Moore,Mealy,VHDL设计(VHDL Design) 状态机的基本结构和功能 一般状态机的VHDL设计 状态机的一般组成 状态机的编码方案 摩尔状态机的VHDL设计 米立状态机的VHDL设计 状态机的基本结构和功能 状态机的基本结构如图所示。除了输人信号、输出信号外,状态机还包含一组寄存器记忆状态机的内部状态。状态机寄存器的下一个状态及输出,不仅同输入信号有关,而且还与寄存器的当前状态有关,状态机可以认为是组合逻辑和寄存器逻辑的特殊组合。它包括两个主要部分:即组合逻辑部分和寄存器。组合逻辑部分又可分为状态译码器和输出译码器,状态译码器确定状态机的下一个状态,即确定状态机的激励方程,输出译码器确定状态机的输出,即确定状态机的输出方程。寄存器用于存储状态机的内部状态。 状态机的基本操作有两种: 1.状态机的内部状态转换。 状态机经历一系列状态,下一状态由状态译码器根据当前状态和输入条件决定。2.产生输出信号序列。

利用有限状态机进行时序逻辑的设计

利用有限状态机进行时序逻辑的设计 1. 实验目的: (1)掌握利用有限状态机实现一般时序逻辑分析的方法; (2)掌握用Verilog编写可综合的有限状态机的标准模板; (3)掌握用Verilog编写状态机模块的测试文件的一般方法。 (4)在数字电路中已经学习过通过建立有限状态机来进行数字逻辑的设计,而在VerilogHDL硬件描述语言中,这种设计方法得到进一步的发展。通过Verilog HDL提供的语句,可以直观的设计出更为复杂的时序逻辑的电路。关于有限状态机的设计方法在教材中已经作了较为详细的阐述。 2.实验环境 PC机一台,安装有quartusII13.0软件以及modulsim软件 3.实验内容 设计一个简单的状态机,功能是检测一个5位二进制序列“10010”。考虑到序列重叠的可能。有限状态机共提供8个状态(包括初始状态IDLE). 4.实验步骤 1) 源程序: module seqdet(x,z,clk,rst,state); input x,clk ,rst ;

output z; output [2:0] state ; reg[2:0] state ; wire z; parameter IDLE='d0, A='d1, B='d2, C='d3, D='d4, E='d5, F='d6, G='d7; assign z=(state == E && x==0)?1:0; always @(posedge clk) if(!rst) begin state <= IDLE; end else casex(state) IDLE:if(x==1)

有限状态机设计

实验七有限状态机设计 一、实验目的 1、掌握利用有限状态机实现一般时序逻辑分析的方法; 2、掌握用VHDL或Verilog编写可综合的有限状态机的标准模板; 3、掌握用VHDL或Verilog编写序列检测器以及其他复杂逻辑电路的设计; 二、实验内容 1、用MOORE型状态机设计一个具有双向步进电动机控制实验:该控制电路有三个输入信号:clk时钟信号,clr复位信号,dir方向控制信号。输出信号为phase[3..0]用来控制步进电机的动作。当dir=1时要求phase[3..0]按照“0001”,“0010”,“0100”,“1000”的顺序变化;当dir=0时要求phase[3..0]按照“0001”,“1000”,“0100”,“0010”的顺序变化。 2、设计一个简单的状态机,功能是检测一个5位的二进制序列“10010”。 3、设计一个串行数据检测器,要求是:连续4个或4个以上为1时输出为1,其他输入情况为0。(选做) 4、根据状态图,写出对应于结构图b,分别由主控组合进程和主控时序进程组成的VERILOG 有限状态机描述。(选做) 三、实验步骤 实验一: 1、建立工程

2、创建Verilog HDL文件 3、输入程序代码并保存 module moore1(clk,clr,dir,phase); input clk,clr,dir; output[3:0] phase; reg[3:0] phase; reg[1:0] state; parameter s0='b00,s1='b01,s2='b10,s3='b11; always@(posedge clk) begin if(clr)begin phase<='b0000;state<=s0;end else begin case(state) s0:if(dir) begin phase<='b0010;state<=s1;end else begin phase<='b1000;state<=s3;end s1:if(dir) begin phase<='b0100;state<=s2;end else begin phase<='b0001;state<=s0;end s2:if(dir) begin phase<='b1000;state<=s3;end

如何设计最优化的状态机

如何设计最优化的状态机 前言:数字电路通常分为组合逻辑电路和时序电路, 组合逻辑电路outputs = F(current inputs) 时序电路outputs = F(current inputs,past inputs) 有限状态机就是时序电路的数学抽象,一个有限状态机系统包括inputs ,outputs, states .状态机分为同步状态机(synchronous)和异步状态机(asynchronous),异步状态机由于输出信号不稳定,所以不详细讨论,对绝大多数设计来说,用的最广泛的是同步状态机。下面主要讨论了同步状态机的设计。 一.状态机的基础知识 1.1. moore状态机和mealy状态机的区别: 2.1.1moore状态机输出只依赖于及其的当前状态,与输入信号无关。这是moore状态机的优点。下面是moore状态机的模型: moore状态机比较容易用数学的方式来分析,因此被更广泛的用在代数状态机理论中(algebraic FSM theory)。 Mealy状态机输出依赖于机器现在的状态和输入的值,如果输入改变,输出可以在一个时钟周期中将发生了改变。其模型如下: 图的说明:state memory :保存现在的状态(current state s(t) ) state transistion function :根据现态和输入x(t),s(t+1)来决定下一个状态。 Output function :根据s(t)和x(t)来决定最后的输出。 Mealy 状态机通常可以有更少的状态变量,因此在工程领域有更为广阔的应用,状态变量越少,则所需的存储单元就越少。

状态机设计总结

状态机设计 简介 状态机的设计被广泛地用于时序控制逻辑中,它是许多数字系统的核心。状态机可以应付众多应用场合的需求,覆盖宽范围的性能和复杂度;例如微处理器与VLSI外围接口的低级别控制,常规微处理器中的总线裁决和时序产生,定制的位片微处理器,数据加密和解密,传输协议等。 通常在设计周期中,控制逻辑的细节安排在最后处理,因为系统需求的改变和特征的增强会对其造成影响。对于控制逻辑设计,可编程逻辑是一个很宽松的解决方案,因为它允许简单的修改而不必扰乱PCB板布局。其灵活性提供了在不影响市场化时间的前提下,允许设计改动的机会。大多数带寄存器的PAL器件应用都是需要使用状态机设计技术的时序控制逻辑。随着技术的发展,新的高速、高性能的器件不断出现,它们简化了状态机设计的任务。对于状态机设计,宽范围的不同功能与性能的解决方案是可行的。在本次讨论中,我们将检验状态机执行的功能,它们在多种器件中的实现,以及它们的选择。 什么是状态机? 状态机是一个以有序的方式,遍历预定的状态序列的数字设备。状态是在电路的不同部分,测量到的一组数值。一个简单状态机可以由以下几部分构成:基于PAL器件的组合逻辑,输出寄存器和状态寄存器。这样一个序列发生器中的状态由状态寄存器和/或输出寄存器中所存储的值来决定。 状态机的通用形式可以用图1所示的设备来描述。除了这一设备的输入和输出,状态机还有两个必需的组成元件:组合逻辑和存储器(寄存器)。这类似于前面所讨论的带寄存器的记数器设计,它们本质上就是简单的状态机。存储器用来存储状态机的状态,组合逻辑可以看成两个截然不同的功能模块:下一状态解码器和输出解码器(图2)。当输出解码器产生实际的输出时,下一状态解码器决定状态机的下一状态。尽管它们执行截然不同的两个功能,但是它们通常被组合成如图1所示的组合逻辑阵列。 状态机的基本操作有两部分: 1、状态机遍历状态序列,下一状态解码器基于当前状态和输入条件来决定下一状态。

状态机设计

集成电路实验 状态机设计实验报告 专业:电子信息工程 姓名:江燕婷 学号:2011301200025

状态机设计(实验五)实验报告 一.实验目的 1. 掌握状态机设计的基本方法 2.学习利用状态机的方法实现控制电路 二.实验原理 有限状态机(Finite State Machine FSM)是时序电路设计中经常采用的一种方式,尤其适合设计数字系统的控制模块,在一些需要控制高速器件的场合,用状态机进行设计是一种很好的解决问题的方案,具有速度快、结构简单、可靠性高等优点。有限状态机非常适合用FPGA器件实现,用Verilog HDL的case 语句能很好地描述基于状态机的设计,再通过EDA工具软件的综合,一般可以生成性能极优的状态机电路,从而使其在执行时间、运行速度和占用资源等方面优于用CPU实现的方案。 有限状态机一般包括组合逻辑和寄存器逻辑两部分,寄存器逻辑用于存储状态,组合逻辑用于状态译码和产生输出信号。根据输出信号产生方法的不同,状态机可分为两类:米里型(Mealy)和摩尔型(Moore)。摩尔型状态机的输出只是当前状态的函数,如图1-1所示;米里型状态机的输出则是当前状态和当前输入的函数,如图1-2所示。米里型状态机的输出是在输入变化后立即变化的,不依赖时钟信号的同步,摩尔型状态机的输入发生变化时还需要等待时钟的到来,必须在状态发生变化时才会导致输出的变化,因此比米里型状态机要多等待一个时钟周期。 图1-1 摩尔型状态机图1-2 米里型状态机 状态机在硬件描述语言实现上,可使用单过程、双过程或三过程等不同的结构实现。状态机的状态实现上,可采用符号编码或显式数字编码。编码方式有顺序编码(自然二进制编码),一位热码(one-hot encoding),格雷(gray code)码等。顺序编码,简单状态寄存器占用少;一位热码输出译码电路简单;在状态顺序变化时,格雷码每次只有一位变化,避免产生输出信号毛刺。

利用有限状态机进行时序逻辑的设计

实验三利用有限状态机进行时序逻辑的设计 1.实验目的: (1)掌握利用有限状态机实现一般时序逻辑分析的方法; (2)掌握用Verilog编写可综合的有限状态机的标准模板; (3)掌握用Verilog编写状态机模块的测试文件的一般方法。 (4)在数字电路中已经学习过通过建立有限状态机来进行数字逻辑的设计,而在VerilogHDL硬件描述语言中,这种设计方法得到进一步的发展。通过Verilog HDL提供的语句,可以直观的设计出更为复杂的时序逻辑的电路。关于有限状态机的设计方法在教材中已经作了较为详细的阐述。 2.实验环境 PC机一台,安装有quartusII13.0软件以及modulsim软件 3.实验内容 设计一个简单的状态机,功能是检测一个5位二进制序列“10010”。考虑到序列重叠的可能。有限状态机共提供8个状态(包括初始状态IDLE). 4.实验步骤 1)源程序: module seqdet(x,z,clk,rst,state); input x,clk ,rst ; output z; output [2:0] state ; reg[2:0] state ; wire z; parameter IDLE='d0, A='d1, B='d2, C='d3, D='d4, E='d5, F='d6, G='d7; assign z=(state == E && x==0)?1:0; always @(posedge clk) if(!rst) begin state <= IDLE; end else casex(state) IDLE:if(x==1) begin state <= A; end A: if(x==0) begin state <= B; end B: if(x==0) begin state <= C; end else begin state <= F; end C: if(x==1) begin state <= D; end else begin

第五讲状态机设计及其指导原则

第五讲状态机设计及其指导原则1/ 38第五讲状态机设计及其指导原则1/ 38制作人:梁瑞宇单位:河海大学制作人:梁瑞宇单位:河海大学第五讲状态机设计及其指导原则 1 状态机是一种设计思想方法2状态机结构 3状态机设计的其他技巧4状态机设计步骤 第五讲状态机设计及其指导原则2/ 38 第五讲状态机设计及其指导原则2/ 38制作人:梁瑞宇单位:河海大学制作人:梁瑞宇单位:河海大学z 状态机是一种设计思想方法 第五讲状态机设计及其指导原则3/ 38 第五讲状态机设计及其指导原则3/ 38制作人:梁瑞宇单位:河海大学制作人:梁瑞宇单位:河海大学原语描述 module noconditional (clk,nrst,state,event);input clk,nrst input state;output event;reg event;reg [2:0] CS; //CurrentState reg [2:0] NS; //NextState parameter [2:0] //one hot with zero idle idle = 3’b000,dorm = 3'b001,diningroom = 3'b010,classroom = 3'b100; 第五讲状态机设计及其指导原则4/ 38第五讲状态机设计及其指导原则4/ 38制作人:梁瑞宇单位:河海大学制作人:梁瑞宇单位:河海大学//sequential state transition always @ (posedge clk or negedge nrst) if (!nrst) CS <= idle; else CS <= NS; //combinational condition judgment always @ (nrst or 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 第五讲状态机设计及其指导原则5/ 38第五讲状态机设计及其指导原则5/ 38制作人:梁瑞宇单位:河海大学制作人:梁瑞宇单位:河海大学第五讲状态机设计及其指导原则6/ 38 第五讲状态机设计及其指导原则6/ 38制作人:梁瑞宇单位:河海大学制作人:梁瑞宇单位:河海大学 状态机的本质--对具有逻辑顺序或时序规律事件的一种描述方法 状态机的两个应用思路:-从状态变量入手-明确电路的输出的关系

实验八:利用有限状态机进行时序逻辑的设计

实验八:利用有限状态机进行时序逻辑的设计一:利用有限状态机进行时序逻辑的设计的源程序: module seqdet(x,z,clk,rst,state); input x,clk,rst; output z; output[2:0] state; reg[2:0] state; wire z; parameter IDLE='d0, A='d1, B='d2, C='d3, D='d4, E='d5, F='d6, G='d7; assign z = ( state==E && x==0 )? 1 : 0; always @(posedge clk) if(!rst) begin state <= IDLE; end else casex(state) IDLE : if(x==1) begin state <= A; end A: if(x==0) begin state <= B; end B: if(x==0) begin state <= C; end else begin state <= F; end C: if(x==1) begin state <= D; end else begin

state <= G; end D: if(x==0) begin state <= E; end else begin state <= A; end E: if(x==0) begin state <= C; end else begin state <= A; end F: if(x==1) begin state <= A; end else begin state <= B; end G: if(x==1) begin state <= F; end default:state=IDLE; endcase endmodule 二:利用有限状态机进行时序逻辑的设计的测试代码:`timescale 1ns/1ns `include "./seqdet.v" module seqdet_Top; reg clk,rst; reg[23:0] data; wire[2:0] state; wire z,x; assign x=data[23]; always #10 clk = ~clk;

浅谈状态机的设计方法及应用

浅谈状态机的设计方法及应用 刘成玉 李明 陈洁 (中国兵器工业第214研究所 蚌埠 233042) 摘 要 有限状态机(Fi n ite S tate M achine ,FS M )是时序电路设计中经常采用的一种方式,尤其适用于设计数字系统的控制模块。有限状态机不是孤立的一个状态,它依赖于输入输出关系,系统需求,编程语言的条件限制以及其他诸多因素。本文主要介绍了有限状态机的原理及实际应用。 关键词 有限状态机(Fi n ite State M achine ,FS M ) 二进制编码(B inary S tate M achine) 格雷编码(Gray Code State M ach i n e) 一位热码编码(One-H ot S tate M ach i n e Encod i n g ) 1 引 言 我们可以把有限状态机(F i n ite State M a ch i n e ,FSM )想象成一个能够接受输入信号的系统,系统内部包含状态寄存器,并且在可能的条件下产生输出信号。在任何特定的时刻,状态机内部所有寄存器的状态和形成这个状态的完整的条件构成了那个时刻的状态(state)。因为状态的个数是有限的,所以称之为有限状态机。 根据输出信号产生方法的不同,状态机可以分为米里型(M ealy )和摩尔型(M oore )两类。M ealy 型状态机输出与当前状态和输入有关,而M oore 型状态机的输出只与当前状态有关。在实际设计工作中,M ealy 型状态机应用较为普遍,而在设计高速电路时,常常把状态变量直接用作输出,以提高运行速度,则M oore 型状态机更为适合。有限状态机的结构如图1所示: 我们可以从图1 中清楚地看出两类状态机的 图1 有限状态机的结构 第25卷第1期 2007年3月 集成电路通讯 JICHENGDIANLU TONGXUN V o.l 25 N o .1 M ar .2007

状态机及其VHDL设计说明

第7章状态机及其VHDL设计 容提要:有限状态机(Finite State Machine,简称FSM)是一类很重要的时序电路,是许多数字系统的核心部件,也是实时系统设计中的一种数学模型,是一种重要的、易于建立的、应用比较广泛的、以描述控制特性为主的建模方法,它可以应用于从系统分析到设计的所有阶段。有限状态机的优点在于简单易用,状态间的关系清晰直观。建立有限状态机主要有两种方法:“状态转移图”和“状态转移表”。标准状态机通常可分为Moore和Mealy 两种类型。本章主要介绍了基于VHDL的常见有限状态机的类型、结构、功能及表达方法,重点是如何有效地设计与实现。 学习要求:了解状态机的基本结构、功能和分类,掌握有限状态机的一般设计思路与方法、状态机编码方案的恰当选取、Moore和Mealy状态机的本质区别及设计实现。 关键词:状态机(State Machine),Moore,Mealy,VHDL设计(VHDL Design) 7.1 状态机的基本结构和功能 7.2 一般状态机的VHDL设计 7.2.1 状态机的一般组成 7.2.2 状态机的编码方案 7.3 摩尔状态机的VHDL设计 7.4 米立状态机的VHDL设计 7.1 状态机的基本结构和功能 状态机的基本结构如图7.1所示。除了输人信号、输出信号外,状态机还包含一组寄存器记忆状态机的部状态。状态机寄存器的下一个状态及输出,不仅同输入信号有关,而且还与寄存器的当前状态有关,状态机可以认为是组合逻辑和寄存器逻辑的特殊组合。它包括两个主要部分:即组合逻辑部分和寄存器。组合逻辑部分又可分为状态译码器和输出译码器,状态译码器确定状态机的下一个状态,即确定状态机的激励方程,输出译码器确定状态机的输出,即确定状态机的输出方程。寄存器用于存储状态机的部状态。 状态机的基本操作有两种: 1.状态机的部状态转换。 状态机经历一系列状态,下一状态由状态译码器根据当前状态和输入条件决定。 2.产生输出信号序列。 输出信号由输出译码器根据当前状态和输入条件确定。 用输入信号决定下一状态也称为“转移”。除了转移之外,复杂的状态机还具有重复和历程功能。从一个状态转移到另一状态称为控制定序,而决定下一状态所需的逻辑称为转移函数。

怎样写好三段式状态机

第6章 如何写好状态机 节选自《Verilog设计与验证》作者:吴继华、王诚 状态机是逻辑设计的重要内容,状态机的设计水平直接反应工程师的逻辑功底,所以许多公司的硬件和逻辑工程师面试中,状态机设计几乎是必选题目。本章在引入状态机设计思想的基础上,重点讨论如何写好状态机。 本章主要内容如下: ?状态机的基本概念; ?如何写好状态机; ?使用Synplify Pro分析FSM。 6.1 状态机的基本概念 本节的重点在于帮助读者理解状态机的基本概念和应用场合。 6.1.1 状态机是一种思想方法 相信大多数工科学生在学习数字电路时都学习过状态机的基本概念,了解一些使用状态机描述时序电路的基本方法。但是,笔者希望大家能扩展思维,认识到状态机不仅仅是一种时序电路设计工具,它更是一种思想方法。 我们先看下面一个简单的例子。在大学生活中,某学生的在校的学习生活可以简单地概括为宿舍、教室、食堂之间的周而复始,用图6-1就可以形象地表现出来。这里画这张图,并不是要讨论这个学生是否是一个“乖乖”类型学生,请大家注意,如果将图中的“地点”认为是“状态”,将“功能”认为是状态的“输出”,这张图就是一张标准的状态转移图,也就是说,我们用状态机的方式清晰地描述了这个学生的在校生活方式。

第6章如何写好状态机 138

状态机的基本概念 139 就是状态机所要描述的核心和强项,换言之,所有具有逻辑顺序和时序规律的事情都适合用状态机描述。 很多初学者不知道何时应用状态机。这里介绍两种应用思路:第一种思路,从状态变量入手。如果一个电路具有时序规律或者逻辑顺序,我们就可以自然而然地规划出状态,从这些状态入手,分析每个状态的输入,状态转移和输出,从而完成电路功能;第二种思路是首先明确电路的输出的关系,这些输出相当于状态的输出,回溯规划每个状态,和状态转移条件与状态输入。无论那种思路,使用状态机的目的都是要控制某部分电路,完成某种具有逻辑顺序或时序规律的电路设计。 其实对于逻辑电路而言,小到一个简单的时序逻辑,大到复杂的微处理器,都适合用状态机方法进行描述。请读者打开思路,不要仅仅局限于时序逻辑,发现电路的内在规律,确认电路的“状态变量”,大胆使用状态机描述电路模型。由于状态机不仅仅是一种电路描述工具,它更是一种思想方法,而且状态机的HDL 语言表达方式比较规范,有章可循,所以很多有经验的设计者习惯用状态机思想进行逻辑设计,对各种复杂设计都套用状态机的设计理念,从而提高设计的效率和稳定性。 6.1.2 状态机基本要素与分类 状态机的基本要素有3个,其实我们在第一节的举例中都有涉及,只是没有点明,它们是:状态、输出和输入。 ? 状态:也叫状态变量。在逻辑设计中,使用状态划分逻辑顺序和时序规律。 比如:设计伪随机码发生器时,可以用移位寄存器序列作为状态;在设计电机 控制电路时,可以以电机的不同转速作为状态;在设计通信系统时,可以用信 令的状态作为状态变量等。 ? 输出:输出指在某一个状态时特定发生的事件。如设计电机控制电路中,如 果电机转速过高,则输出为转速过高报警,也可以伴随减速指令或降温措施 等。 ? 输入:指状态机中进入每个状态的条件,有的状态机没有输入条件,其中的 状态转移较为简单,有的状态机有输入条件,当某个输入条件存在时才能转移 到相应的状态。 根据状态机的输出是否与输入条件相关,可将状态机分为两大类:摩尔(Moore )型状态机和米勒(Mealy )型状态机。 ? 摩尔状态机:摩尔状态机的输出仅仅依赖于当前状态,而与输入条件无关。 例如图6-1所示的例子,将图中的“地点”认为是“状态”,将“功能”认为 是状态的“输出”,则每个输出仅仅与状态相关,所以它是一个摩尔型状态 机。 ? 米勒型状态机:米勒型状态机的输出不仅依赖于当前状态,而且取决于该状 态的输入条件。例如图6-2所示的例子,将图中的“地点”认为是“状态”, 将“功能”认为是状态的“输出”,将“条件”认为是状态转移的“输入条 件”,大家可以发现,该学生到达什么地方,做什么事情都是由当前状态和输

FSM状态机设计规则

状态机设计 FSM简介: FSM 分两大类:米里型和摩尔型,组成要素有输入(包括复位),状态(包括当前状态的操作),状态转移条件,状态的输出条件,图1为状态机结构图。设计FSM 的方法和技巧多种多样,但是总结起来有两大类:第一种,将状态转移和状态的操作和判断等写到一个模块(process、block)中。另一种是将状态转移单独写成一个模块,将状态的操作和判断等写到另一个模块中(在V erilog代码中,相当于使用两个“always”block)。其中较好的方式是后者。其原因如下: 首先FSM 和其他设计一样,最好使用同步时序方式设计,好处不再赘述。而状态机实现后,状态转移是用寄存器实现的,是同步时序部分。状态的转移条件的判断是通过组合逻辑判断实现的,之所以第二种比第一种编码方式合理,就在于第二种编码将同步时序和组合逻辑分别放到不同的程序块(process,block)中实现。这样做的好处不仅仅是便于阅读、理解、维护,更重要的是利于综合器优化代码,利于用户添加合适的时序约束条件,利于布局布线器实现设计。 图1为状态机结构图 显式的FSM 描述方法可以描述任意的FSM(参考V erilog 第四版P181 有限状态机的说明)。两个always 模块。其中一个是时序模块,一个为组合逻辑。时序模块设计与书上完全一致,表示状态转移,可分为同步与异步复位。 同步: always @(posedge clk) if (!reset) ………… 异步: always @(posedge clk or negedge reset) if (!reset) …………

组合逻辑用case 语句,sensitive list 包括当然状态(current state)和输入(a,b,c…)。 编者注:以下是编者从“State Machine Coding Styles for Synthesis”一文中摘取的程序代码,是一个简单状态机的示例,采用两个always块的方法: module bm1_s (err, n_o1, o2, o3, o4,i1, i2, i3, i4, clk, rst); output err, n_o1, o2, o3, o4; input i1, i2, i3, i4, clk, rst; reg err, n_o1, o2, o3, o4; parameter [2:0] //可以在此处添加综合约束属性来限定状态机的编码:binary,one-hot,gray,etc… IDLE = 3'd0, S1 = 3'd1, S2 = 3'd2, S3 = 3'd3, ERROR = 3'd4; reg [2:0] state, next; always @(posedge clk or posedge rst)//异步复位,时序逻辑 if (rst) state <= IDLE; else state <= next; always @(state or i1 or i2 or i3 or i4) begin //组合逻辑,敏感列表包含当前状态以及所有的状态机输入 next = 3'bx;//设置默认值,以便防止因为if或者case语句不完整综合生成锁存器 err = 0; n_o1 = 1; o2 = 0; o3 = 0; o4 = 0; case (state)

基于状态机的工程设计

2.6.4.2 基于状态机的工程设计方法 学习利用quartusII软件中的状态机编辑器设计一个1110010序列检测器。 1.建立工程文件 工程文件的建立主要包括指定工程文件名称、选择添加的文件和库及选择目标器件3个过程。 在quartusII菜单栏中选择Fil e→New Project Wizard,在弹出的图2.6.8对话框中输入新建工程所在的文件夹名称(exp_detect3)、工程名称(exp_detect3)和顶层实体名称(exp_detect3),然后点击Next,选择目标器件EPF10K20TC144-3,其他取系统默认设置,继续点击Next按钮,直至进入如图2.6.9所示的对话框,该对话框可以查看设置信息是否正确。正确则单击Finish按钮,完成工程文件的建立。 图2.6.8 创建新工程文件1(指定工程文件名称)

图2.6.9 工程创建结束对话框 2.输入状态机 ⑴建立文件 在quartusII菜单栏中选择Fil e→New,或单击工具栏中的按钮,在弹出的新建文件对话框中,选择State Machine File,单击OK按钮,进入如图2.6.10所示的状态机编辑器窗口。 图2.6.10 quartusII的状态机编辑窗口 ⑵创建状态机 在quartusII的状态机编辑窗口的菜单栏中选择Tool s→State Machine Wizard,弹出如图2.6.11所示的状态机创建向导选择对话框。在该对话框中选择Edit an existing state machine design,点击OK按钮,进入如图2.6.12所示的状态机向导4步中的步骤1对话框。

用状态机原理进行软件设计

用状态机原理进行软件设计 池元武 展讯通信(上海)有限公司,PLD,上海 摘要:本文描述状态机基础理论,以及运用状态机原理进行软件设计和实现的方法。关键词:有限状态机层次状态机面向对象分析行为继承 参考文献 [1] Miro Samek, Ph.D 《Practical Statecharts in C/C++ Quantum Programming for Embedded Systems》 [2] OpenFans https://www.360docs.net/doc/846372170.html,/viewArticle.html?id=289 缩略语

目录 第1章引言 (3) 第2章FSM概念 (3) 2.1 FSM定义 (3) 2.2 FSM要素 (3) 2.3 FSM图示 (4) 第3章FSM设计方法 (5) 3.1 C Parser(注释分析程序) (5) 3.2 Calc(计算器)程序举例 (6) 第4章HSM概念 (11) 4.1 programming-by-difference(按照差异编程) (11) 4.2 HSM图示 (12) 4.3 HSM分析和OOP分析 (12) 第5章HSM设计方法 (14) 5.2 继承关系是否合理 (15) 第6章HSM在实际工程的应用 (17) 6.1 PoC Audio Player (17) 6.2 PoC Call Control (18) 第7章FSM实现 (19) 7.1 nested switch statement(嵌套switch语句) (20) 7.2 state table(状态表) (22) 7.3 Function Address As State(用函数指针作为状态) (23) 7.4 QFSM frame(QFSM框架) (25) 第8章HSM实现 (28) 第9章附录 (31)

相关文档
最新文档