tag 标签: 有限状态机

相关博文
  • 热度 15
    2014-3-29 15:19
    1251 次阅读|
    0 个评论
       EDN博客精华文章   作者: ilove314    利用有限状态机进行复杂时序逻辑的设计:   目的:掌握利用有限状态机实现复杂时序逻辑的方法。   在数字电路中我们已经学习过通过建立有限状态机来进行数字逻辑的设计,而在Verilog HDL硬件描述语言中,这种设计方法得到进一步的发展。通过Verilog HDL提供的语句,我们可以直观地设计出适合更为复杂的时序逻辑的电路。关于有限状态机的设计方法在教材中已经作了较为详细的阐述,在此就不赘述了。   下例是一个简单的状态机设计,功能是检测一个5位二进制序列“10010”。考虑到序列重叠的可能,有限状态机共提供8个状态(包括初始状态IDLE)。   状态机设计确实是一个很实用的工具,可以加快设计的进展。当然在进行状态机原理图的会之前设计者心里要清楚各个状态间如何进行转换。   这是状态机设计的原理图:   以下是用StateCAD的自带激励仿真进行的功能仿真,可能是对这个仿真工具还不太熟悉吧,感觉不是很好用。在输入的码序列CODE_IN出现10010后CHECK立马出现一个高电平信号。   以下是用MODELSIM进行的仿真。也是在CODE_IN出现10010以后CHECK会有一个高电平。   用状态机设计后生成的VerilogHDL:
  • 热度 23
    2013-11-28 10:20
    2818 次阅读|
    5 个评论
    现在用有限状态机的思想来写段程序。 硬件平台: STM32F103 软件平台: Keil uv4 说明:这段程序中用在 STM32 的 USART 串口中断里面,接收来自上位 PC 的一帧的数据,完成后向 PC 端做出应答,表示接收完成。   先把状态转移图贴上吧。这是手绘的,因为我的 visio 打开老有问题,只好手画了一个。简单说一下,上位发送给下位的一帧数据长度不定,帧头用 0x55 开始,数据帧的第二个字节为数据帧的长度,第三个字节开始后面是数据。要说明一下,第二字节的长度,是指后面从第三个字节开始跟的数据的长度,也就是说,整个数据帧的长度,就是第二个字节的内容 +2. 状态的切换是这样的,先是在“ WaitState ”,等待数据,当收到 0x55 后,跳到“ ReadyState ”,接收帧长度后就直接跳到“ BusyState ”,这个状态会把整个帧的数据都接收完,完成后,跳到“ ACKState ”应答状态,向上位 PC 应答,而后跳回“ WaitState ”。       /***********************************************************************/ enum {WaitState = 0, ReadyState, BusyState, ACKState} CommState;// 状态 u8 Rx_DataBuf = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};// 接收数据缓存 u8 ACKMessage = {0xAA,0x55};// 应答帧 u8 CommCnt,CommDataLen;// 接收计数和表示数据长度的变量   void USART1_IRQHandler(void)// 串口中断服务程序 {          if((USART_GetFlagStatus(USART1, USART_FLAG_RXNE)) == SET)          {                    USART_ClearITPendingBit(USART1, USART_IT_RXNE);                    switch(CommState)          // 状态机                    {                             case WaitState:// 等待状态                             {                                      Rx_DataBuf = USART_ReceiveData(USART1);                                      if(Rx_DataBuf == 0x55)                                      {                                                CommCnt++;                                                CommState = ReadyState;// 如果是 0x55 ,状态切换                                                                    }                                      break;                             }                             case ReadyState:// 准备状态,用来确定帧长度                             {                                      Rx_DataBuf = USART_ReceiveData(USART1);                                      CommDataLen = Rx_DataBuf ;                                      CommCnt++;                                      CommState = BusyState;// 切换到下一状态                                      break;                             }                             case BusyState:// 忙状态,接收整个帧的数据                             {                                      Rx_DataBuf = USART_ReceiveData(USART1);                                      CommCnt++;                                        if(CommCnt=(CommDataLen + 2))                                      {                                                CommCnt = 0;                                                                   CommState = ACKState;// 接收完成,切换到下一状态                                      }                                      break;                             }                             case ACKState:                             {                                      USART1_Send(ACKMessage);                                      CommState = WaitState;// 应答上位,跳回等待状态                             }                             default:break;                    }          } } /****************************************************************************/   关于程序要做几点说明,一是这段程序是可用的,已经用在实际的项目里面,但完整的工程是不能分享给大家的,因为公司项目,只能分享这一部分用到 FSM 的部分;二是上面的 CommState 在初始化程序中已经初始化为 WaitState ,以及变量 CommCnt 也被初始化为 0 ;三是这段程序是最初用来测试用的,后面的加上了校验以及出错处理的机制,其实也就是再添加了几个状态,让控制逻辑上更严谨了,这个大家可以自己加上试试。   希望和大家分享的这点东西对您有帮助。
  • 热度 21
    2013-11-25 20:05
    2783 次阅读|
    1 个评论
    看到有朋友的博客里面在讨论 FSM (有限状态机)的内容( http://bbs.ednchina.com/BLOG_ARTICLE_3016729.HTM ),对此我也很感兴趣,所以也发一篇凑凑热闹。当然,我这个可能更侧重在嵌入式软件编程方面吧。 这篇博客的主要内容,其实算是整理自网络上的一些文档,主要的思想还是来自附件的 PDF 文档《用状态机原理进行软件设计》,那篇文档比这篇博客要写得好。 一.    FSM 的定义: 维基百科版:有限状态机(英语: finite-state machine ,缩写: FSM )又称有限状态自动机,简称状态机,是表示有限个状态以及在这些状态之间的转移和动作等行为的数学模型。( http://zh.wikipedia.org/wiki/%E6%9C%89%E9%99%90%E7%8A%B6%E6%80%81%E6%9C%BA ) 另一版本,来自附件文档:总的来说,有限状态机系统,是指在不同阶段会呈现出不同的运行状态的系统,这些状态是有限的、不重叠的。这样的系统在某一时刻一定会处于其所有状态中的一个状态,此时它接收一部分允许的输入,产生一部分可能的响应,并且迁移到一部分可能的状态。 二.    FSM 的要素: 1. State( 状态 )   State( “状态” ) ,就是一个系统在其生命周期中某一时刻的运行情况,此时,系统会执行一些动作,或者等待一些外部输入。 2. Guard( 条件 )   状态机对外部消息进行响应的时候,除了需要判断当前的状态,还要判断跟这个状态相关的一些条件是否成立。这种判断称为 guard (“条件”)。 guard 通过允许或者禁止某些操作来影响状态机的行为。   3. Event( 事件 )   Event (“事件”),就是在一定的时间和空间上发生的对系统有意义的事情。   4. Action( 动作 )   当一个 Event 被状态机系统分发的时候,状态机用 Action( “动作” ) 来进行响应,比如修改一下变量的值、进行输入输出、产生另外一个 Event 或者迁移到另外一个状态等等。 5. Transition (迁移)   从一个状态切换到另一个状态被称为 Transition (“迁移”)。引起状态迁移的事件被称为 triggering event   (“触发事件”),或者被简称为 trigger   (“触发”)。 // 这一节的内容全部剽自附件文档,这些都是专业的定义。文档中用了一个键盘的假想模型来阐述 FSM 的要素。我把这个模型整理了一下,用中文来表示,用 visio 重新画了一下。 圆角矩形里面是状态,箭头表示迁移,箭头上标注的是条件、事件或动作,虚线框里面的算是注释了。  
相关资源
  • 所需E币: 1
    时间: 2023-3-27 09:13
    大小: 290.84KB
    上传者: 张红川
    有限状态机在单片机编程中的应用.pdf
  • 所需E币: 5
    时间: 2022-5-2 14:37
    大小: 976.13KB
    上传者: ZHUANG
    汽车桩考系统中移动机器人的有限状态机设计
  • 所需E币: 1
    时间: 2022-5-1 22:43
    大小: 951.94KB
    上传者: ZHUANG
    基于有限状态机(FSM)的多传感器信息融合在轮式运动机器人编程中的应用
  • 所需E币: 1
    时间: 2022-1-6 21:59
    大小: 1MB
    上传者: ZHUANG
    基于有限状态机的售卖机控制器的设计与仿真
  • 所需E币: 0
    时间: 2021-4-24 18:18
    大小: 145.5KB
    上传者: Argent
    随着FPGA技术的不断发展,许多消费类产品都嵌入了FPGA程序,ZYNQ架构属于主流,搜集的部分有关FPGA学习资料,希望对您有所帮助,欢迎下载。
  • 所需E币: 0
    时间: 2020-12-25 21:11
    大小: 3.06MB
    上传者: czd886
    基于有限状态机的高速串口通信收发器的FPGA设计
  • 所需E币: 0
    时间: 2020-5-25 22:45
    大小: 147.31KB
    上传者: Argent
    FPGA技术一直是比较火的领域,其开发的难度也让许多开发人员望而却步。了解FPGA的基础编程语言是非常有必要的。本人收集了一些关于CPLD和VerilogHDL编程技术资料,有需要的网友自行下载,希望能帮到您。
  • 所需E币: 3
    时间: 2019-12-25 10:32
    大小: 433.32KB
    上传者: 978461154_qq
    系统行为描述(计算)模型嵌入式系统概论四系统行为描述(计算)模型北京大学软件与微电子学院嵌入式系统概论计算模型(ComputationModel)概述时序程序模型有限状态机(FSM)并发进程模型数据流模型流程图小结北京大学软件与微电子学院嵌入式系统概论计算模型-概述(1)计算模型(computationModel)描述系统的处理行为(过程)的方法模型作用帮助设计者理解和描述系统行为减少系统缺陷(bug)Mostsystembugscomefrommistakesmadedescribingthedesiredbehaviorratherthanfrommistakesinimplementingthatbehavior.北京大学软件与微电子学院嵌入式系统概论计算模型-概述(2)描述嵌入式系统的模型时序程序模型(sequentialprogrammodel)提供一组语句、语句排列的规则……
  • 所需E币: 3
    时间: 2020-1-4 12:51
    大小: 252.83KB
    上传者: wsu_w_hotmail.com
    有限状态机是数字系统中的重要组成部分.简单分析了有限状态机产生毛刺的原因,重点讨论了消除有限状态机毛刺的三种方案,比较了它们的优劣及其适用的条件,并以ADC0809采样控制过程为例,给出了实现控制功能的Moore型有限状态机方案和状态码直接输出型有限状态机方案的VHDL语言主要源程序,通过开发工具Max+plusⅡ的功能仿真验证了消除毛刺方案的正确性.消除状态机毛刺策略探讨鲁玲,刘大年(扬州大学信息学院…:江苏扬州225009)摘要:有限状态机是数字系统中的重要组成部分。简单分析了有限状态机产生毛刺的原因,重点讨论了消除有限状态机毛刺的三种方案,比较了它们的优劣及其适用的条件,并以ADC0809采样控制过程为例,给出了实现控制功能的M00re型有限状态机方案和状态码直接输出型有限状态机方案的VHDL语言主要源程序,通过开发工具Ma】【+plusII的功能仿真验证了消除毛刺方案的正确性。关键词:有限状态机VHDL毛刺随着EDA技术的高速发展,以大规模和超大规模10ckl<-‘0’:器件FPGA/CPLD为载体、以VHDL(硬件描述语言)为工……