毕业设计(论文)-基于fpga的数据采集器[管理资料]
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
引言
数据采集是获取信息的基本手段。
数据采集技术作为信息科学的一个重要分支,是以传感器、信号测量与处理、微型计算机等技术为基础而形成的一门综合应用型技术。
数据采集作为现代测控技术的基础,己经广泛应用于工业生产、科学研究的诸多领域。
在工业生产中,应用数据采集系统可以得到工业现场的温度、湿度、电压、电流等技术参数,所得结果可以反馈给用户和控制系统,为提高产品质量、降低成本提供信息;在科学研究方面,数据采集可以提供大量的现场信息,成为探索科学奥秘的重要手段[1]。
如何对信号进行实时采集、实时存储,保证信号不丢失,以满足工业现场的需要,一直是数据采集系统研究的一个重要方向。
国外方面[2][3][4],随着国外微电子技术、计数机技术、测控技术和数字通信技术的发展,目前国外数据采集技术已经较初期有了很大的发展。
从近来国外公司展示的新产品可以看出,主要的发展可以概括为功能多样,体积减小和使用方便等三个方面。
国外在研制和使用数据采集系统方面发展迅速,基于MedWin技术的数据采集器也发展较深,在体积和性能具有很大优势得采集器多以FPGA为平台,但价格相对来说就不具有竞争力。
成本较低的数据采集系统多以单片机为主芯片,但是在性能和速度方面就不具有优势。
目前国外的数据采集方面的研究主要着重于传感器,高精度、高速度的传感器层出不穷而且在价格上有了很大进步。
比如美国尼高力仪器技术公司08年生产的2700型数据采集器,完美地将数据记录仪、程控开关与数字表的优势集于一身,是一款高精度、多功能、使用方便的多路数据采集器。
同年惠普公司生产的HP34970A 型数据采集器具有6/12位分辨率,0.004%基本直流精确度和高达250通道/秒的扫描率,非易失性存储器可保存多达50000个带有时间标记的读书,可测包括直流电压、交流电压等等数据。
虽然这些数据采集器的功能无比强大,但是成本都较昂贵。
国内方面[5][6][7],国内数据采集器与目前国外数据采集器相比,在技术上仍然存在着一定的差距,主要表现在:①由于受国内振动等传感器水平的限制,分析频率范围不宽,在工业方面给一些低速的机器或轴承的诊断等带来了一定的困难;②由于数据采集器的内存不大,数据采集器本身的信号处理功能不强,在现场只能做一些简单诊断,精密诊断需要离线到计算机上去做,现场精密诊断功能较弱;○3设备的软件水平,仍在设备维修管理和基本频谱分析上徘徊,机器故障诊断专家系统还需完善,软件人机界面有待改进④设备的性能与成本的协调还缺乏一定的优势。
近年来,发达国家在研制和使用数据采集系统方面发展较为迅速,仪器的性能先进,使用范围广,且
耐用可靠,但价格较为昂贵,在测量功能、测量通道和数据齐全等方面存在不同程度的缺陷。
例如北京凯文斯系统集成有限责任公司E16系列EPP并口宽动态范围的高精度数据采集器,数据通道最大可以达到16个,采样最高频率决定于微机的CPU及处理速度,一般为60.80KHz。
北京测振仪器厂2007年研制的Hz.9609数据采集器/振动分析仪,它采用中文显示,直观醒目,操作简单方便;采用先进的微电脑技术,工作可靠;采用频谱分析技术和故障诊断技术,是进行数据采集、完成设备状态分析和故障诊断的得力助手。
它可以与微机通讯,建立设备状态数据库,可测量振动信号的加速度、速度和位移,还可测量电压信号和转速信号,采样频率为1Hz到10KHz。
在经过对国内外现有的数据采集行业产品的性能、价格和功能了解,其大概情况是,国外的数据采集器的精度高,速度快,功能强大,但是价格比较昂贵,并且一般来说体积都比较大,操作也复杂,可再编程能力比较弱。
而国内的采集器虽然价格低,但是在性能上还有上升的空间,所以在我国现有的基础上,融合更为先进的技术、工艺,制造出性价比更高,可再编程能力高,小巧而又实用的的测量仪器不失为仪器开发领域的一个热点。
论文的组织结构包括:
引言,介绍了课题背景,课题研究的目的和意义,并对现阶段此研究的情况进行了分析。
第1章系统分析及方案设计,对整个系统进行了需求分析,并介绍了整体设计方案的制定以及可靠性的设计和分析。
第2章系统硬件设计,包括各部分接口设计以及PCB设计。
第3章系统软件设计,即针对各模块的VHDL编程。
第4章仿真与调试,针对已设计的工程,通过仿真器进行仿真调试。
第5章系统实现与设计结果,分析了采集结果并讨论了采集结果是否符合要求。
第6章总结与展望,对本次论文进行总结,并对本次研究的不足进行了总结。
1.系统分析及方案设计
本次设计主要目标是采集系统内、外的数据,并加以处理显示。
对于数据采集的对象则选取了系统内部电压值与外部温度值。
之所以选择温度与电压,是因为两者具有很强的代表性。
在实际监测中,温度和电压也是非常重要的监测对象,有很强的实用性。
本次系统设计的具体目标如下:
1.有较好的人机显示控制界面。
2.FPGA能对系统内部电压进行数据采集。
3.能对读取的开关量进行相关显示。
4.能实现LED灯不同的频闪。
5.能与上位机进行通信。
6.FPGA通过I2C总线能对AD7416进行模拟量的数据采集。
7.能将采样得到的数据送往LCD显示。
完整的数据采集过程通常由数据的通道选择、采样、处理、显示构成,有时也要对数据进行适当的处理。
其中,控制模块起到了核心作用,他作为控制信号产生和处理的中枢对这些外围电路进行着实时的监控和管理。
设计过程中采用FPGA作为控制器,完成对A/D转换器的控制,并将采集到的数据存储到一定的存储单元,通过串口在LCD12232上显示。
具体涉及的外围电路中,电压采集部分主要应用ADC0809作为数据采集芯片,对输入的模拟量进行A/D转换;温度采集部分主要由AD7416作为数据采集芯片。
数据处理部分则通过硬件设计来完成;按键控制部分利用4个按键来控制0809、AD7416转换通道选择;图形显示部分输出当前采集到的电压、温度值。
之所以选择FPGA来完成此工作,原因如下:FPGA生成的硬件系统是基于并行方式运行的,在同一个时钟周期内可以进行多个操作,因此同一项功能由FPGA实现将比用微控制器实现运行速度快很多。
FPGA可以实现许多复杂的特殊功能逻辑,减小了部件数量,缩短了开发周期,并且在FPGA中可以实现比微处理器更为复杂的逻辑功能,很多算法可以很容易地在FPGA中实现。
其次,FPGA在体积方面有更高的优势,其可以同时达到体积小,引脚多即可以控制的信号路数多的要求。
随着半导体工艺的进步,FPGA 的产品不仅性价比高,同时可以在较恶劣的环境下完成其他数字器件所不能完成的任务。
因此,尽管在与上位机通讯、串口通讯上稍显繁琐(相比于单片机),我们仍选用FPGA来完成设计。
介于成本的考虑,我们采用低成本的EPM1270144来完成本次设计。
温度采集芯片AD7416[8]是有8个管脚的温度监测器。
该温度监测器可通过多路复用器的0通道进行访问。
片上寄存器可编程控制极限温度,当温度超过极限时漏极开路温度过热指示器(OTI)处于工作状态。
AD7416是10位,5通道的ADC,℃。
~。
该装置包含一个约15μs的转换器,5通道多路复用器,温度传感器,时钟振荡器,。
其数据传输采用I2C通信协议。
LCD12232[9]是一直由SED1520控制的,122*32点液晶显示屏。
具有低功耗、供应电压范围宽等特点。
具有16common和61segment输出,并可外接驱动IC扩展驱动。
驱动方式为1/32duty,~13V。
具有与68系列或80系列相适配的MPU接口功能,并有专用的指令集,可完成文本显示或图形显示的功能。
ADC0809、RS232在此不做赘述。
系统整体框图
在软件设计方面,FPGA开发的主流语言为VHDL和Verilog HDL两种语言,VHDL 发展的比较早,语法要求比较严格,而Verilog HDL则是在C语言的基础上发展起来的,语法要求相对比较松。
经过两种设计语言的比较,在此选择利用VHDL语言来编写FPGA模块。
上位机接收和控制界面的软件应用的是已有的串口调试软件。
本章主要讨论了系统整体方案的设计,及系统目标的设定。
包括了设计系统目标和系统整体方案设计和器件选择两个部分。
确定了设计方案并选择了合适的器件。
2.系统的硬件设计
FPGA接口电路设计
从第一节我们可以知道,FPGA的任务是采集温度,电压,与上位机通讯,并将采集获得的数据送往LCD12232。
(1) 与温度采集芯片接口设计
AD7416是ADI公司生产的8脚温度监测器。
体积小,精度高,成本低。
它采用I2C通信协议,采用单通道模拟输入,一路数字输出。
其管脚结构图如下:
AD7416管脚结构图。
管脚号名称说明
1 SDA 数字I/O。
双向数据串行总线。
2 SCL 数字输入。
串行总线时钟。
3 OTI 逻辑输出。
当通道0(温度传感器)的转换结果大于温度过热寄存
器(OTR)的8位数时,温度过热指示器(OTI)置位。
信号在连
续读操作结束时重置。
漏极开路输出。
4 GND 跟踪-保持、比较器和电容DAC、数字电路的参考地。
5 A2 数字输入。
串行总线地址的最高可编程位。
6 A1 数字输入。
串行总线地址的中间可编程位。
7 A0 数字输入。
串行总线地址的最低可编程位。
8 VDD 正向供电电压,~。
AD7416管脚功能说明
需要说明的是,AD7416的1脚SDA,2脚SCL是根据I2C总线协议制定的串行总线。
OTI为系统告警逻辑输出。
FPGA在接收由AD7416送出的数据时,必须按照I2C 总线协议的规定,产生特定的CLK信号(与SCL相接)送给AD7416,然后按照制定的传输协议实现数据的传输。
尤其要注意的是,由于I2C总线协议规定,SDA双向数据串行总线在一个SCL内只能传输一位数据,所以在匹配时钟时要特别注意。
AD7416与FPGA 接口图
(2) 与ADC0809接口设计
ADC0809芯片[10]是非常常用的模数采集芯片。
0809是CMOS 的8位A/D 转换器。
片内有八路模拟开关,可控制8各模拟量中的一个进入转换器中。
转换时间约为100m s ,含锁存控制的8路多路开关,输出由三态缓冲器控制,单5V 供电。
其数据传送采用UART 串口传输方式,故可直接与FPGA 通讯。
START OE
EOC
D7-D0
ADC0809与FPGA 原理图 图中,D7~D0是ADC0809的8位数据总线,START 为启动数模转换信号,高电平时有效。
OE 为输出使能信号,当其为高电平时,将转换好的数据传入8位数据总线。
EOC 为状态信号,低电平表示转换结束。
(3) 与LCD12232接口设计
本次设计采用深圳骏显科技生产的LCD12232-C 型液晶,由两片SED1520芯片控制。
因而LCD 的电路特性与实际上就是SED1520的电路特性。
SED1520的主要特性有:具有液晶显示驱动器,16路行驱动输出,级联可实现32路行输出;具有61路列驱动输出,可通过级联实现122路列驱动输出;内置时序发生器,可产生占空比为1/16和1/32两者种;内置显示存储器,显示存储器内的数据直接显示。
实现FPGA 与SED1520数据连接关键在于如何将数据存入存储器。
因而我们就必须了解SED1520的指令代码,并通过FPGA 产生相应的信号,实现与SED1520的通信。
Adc0809
EPM1270
LCD12232接口电路
(4)FPGA配置接口设计
FPGA有三类配置下载方式[11]:主动配置方式(As)和被动配置方式(PS)和最常用的(JTAG)配置方式。
AS方式是由FPGA引导配置操作过程,就是本设计中所利用到的配置方式,FPGA处于主动地位,上电后FPGA引导FPGA配置芯片EPCS4将存储的程序加载给FPGA,而不需要外部计算机或控制器进行配置。
PS方式则是指由外部计算机或控制器配置过程,通常是通过加强型配置器件(EPCI6,EPC8等)来完成,但是这种配置方式成本较高,并且电路也较为复杂,在此并不在选择范围之内。
还有一种就是JTAG配置,JTAG接口是一个业界标准,主要用于芯片测试等功能,. 1149.1联合边界扫描接口引脚,可以使用Altera下载电缆来完成。
针对前两者(AS和PS模式)而言,都需要配置芯片辅助FPGA。
并且两者都存在这一定的模式缺陷,即不能在线调试,而JTAG模式可以在线调试。
一般在即使程序仿真正确后,烧写到芯片里面也未必能出来正确的结果,有了在线调试功能,就可以在修改的过程中观察相应的结果变化。
而且本次设计所使用的低成本FPGA,具有数据掉电保存功能,即系统掉电以后,已下载到FPGA中的工程并不会丢失。
综合上述原因,我们在此选用JTAG 配置模式。
JTAG配置电路
(5)RS232接口电路设计
采用RS232串行通信标准[12]实现接收上位机的控制数据包,实现上位机与FPGA 通讯。
之所以选择串行通信,是由于串行通信结构简单,可靠性高,并且成本较低。
采用串行通信协议可以降低FPGA与上位机通讯设计的难度,提高系统的可靠性。
RS232协议的信号电平必须在±(5-15)v之间,数据信号的逻辑电平“l"电平必须低于-3V,逻辑电平“0”必须高于+3V。
可见RS232接口标准采用的是负逻辑,其逻辑电平和TTL电平不一样,不能兼容,所以必须进行电平转换,在此选用的电平转换芯片为MAX3232,:
RS232接口电路
2.2供电电源电路设计
系统所需电源为7V,5V,。
7V为电源转换电路的供电电压。
5V为LCD12232,MAX232的驱动电压。
(RS232除外)。
在本次设计中,采用自行设计的AC_DC三路输出电源,220V交流输入,得到7V,+,。
系统供电电源电路
2.3本章小结
本章根据系统的制定方案,完成了系统的硬件设计,如FPGA接口电路,系统供电电路,辅助电源的设计。
并按照要求制作了PCB板,手工制作出了完整的硬件电路。
并上电测试成功。
3.系统的软件设计
设计平台Quartus II 简介
软件设计的平台是Altera公司的Quartus II开发系统,Quartus II[13]是综合性的PLD开发软件,支持原理图,各种硬件描述语言以及多种设计输入形式,自身带有综合器和仿真器,可以完成从硬件设计,软件设计,仿真到硬件配置的完整设计流程。
Quartus II同时支持Altera公司的IP核,包含了各种宏功能模块库,使用户可以直接利用已经经过编译的成熟模块,如本设计中用到的双口RAM模块,简化了设计中的复杂性,并且可以缩短设计的周期。
Quartus II的设计输入方法有很多种,可以灵活的运用,主要方法有三种,简要介绍如下:第一种方法就是原理图输入法,这种方法是最为直接的方法,由用Quartus II提供的各种原理图库进行设计输入。
为提高效率,采用这种方法输入的时候应采用自顶向下逻辑分块,即把大规模的电路划分成若干小块的方法。
一般如果对系统了解很深,并且系统速率的要求较高,或这系统中如果时间特性要求较高,就可以采用这种方法。
原理图输入的缺点虽然仿真容易但是效率很低,但是这样的方法便于信号观察以及电路的调整,看起来也很直观。
第二种方法就是硬件描述语言输入:Quartus II支持多种硬件描述。
描述语言的优点是效率高,结果也容易仿真,信号观察也较方便。
但语言输入必须依赖综合器,只有好的综合器才能把语言综合成优化的电路。
对于大量的规范的、易于用语言描述、易于综合的电路可以采用这种输入方法。
第三种方法网表输入:对在其它软件系统上设计的电路,可以采用这种方法,而不必重新进行输入。
Quartus II可以接受的网表有EDIF格式、VHDL格式及Verilog格式等。
采用这种方法的优点是充分利用了现有成熟的设计资源,但对于这种方法得到的电路,不宜于仿真时信号的观测,给仿真带来一定的困难。
现实中为了保证设计的效率,功能的完整往往采用多种方法相结合的方式,而不是拘泥于某一种,例如本设计中就是利用前两种方法相结合,在利用QuartusII自身提供的相关模块基础上自行设计其他模块。
这样就可以提高设计的速度和整个FPGA模块的准确度。
温度控制模块
系统所用温度采集芯片是AD7416。
此芯片是8脚贴片式封装,由第二节可知,其1、2脚为遵循I2C通信协议的串行信号、时钟总线,5、6、7脚为数据输入线。
温
的变化。
度测量方法是在不同的电流下测量当前V
BE
ΔV BE=KT/ln(N)
式中,K是波尔兹曼常数,q 是电子电荷(×10-19库仑),T是绝对温度,N是电流比。
AD7416温度测量电路
通过FPGA控制AD7416,需如下几个步骤[14]:
(1)首先FPGA向AD7416发送初始化指令,AD7416的初始化相对简单,只需发送相应系统初始化指令即可。
(2)FPGA检测到AD7416返回的信号后,即通过“write”指令,选择配置寄存器,AD7416有六个寄存器,其地址从00H依次递加至05H。
在此,我们选择结构寄存器1(地址为01H)。
(3)FPGA检测AD7416的响应信号后,即通过“write”指令选择其工作方式。
AD7416有两者工作方式,在此我们选择第一种,指令代码是“18H”。
然后FPGA设定AD7416的溢出温度值。
溢出温度值保存在结构寄存器2(地址02H)。
(4)此时AD7416开始进行温度监测,FPGA则不断检测是否有AD7416响应信号发生。
检测到AD7416的响应信号后,FPGA立即选择温度寄存器(地址00H),接收AD7416检测得到的数据。
值得注意的是,根据I2C总线协议,AD7416传送数据的第一位和最后一位是数据最高位、结束标志位,在数据接收结束后,FPGA必须发送数据接收完毕信号给AD7416,终止数据传送,置数据总线为高阻态。
(5)当上述步骤完成后,视为一次采样终止,FPGA将AD7416所有状态字赋逻辑态“0”,初始化传感器,等待下一次采样开始。
由上述的5各步骤不难看出,对于AD7416的控制,关键在于对响应信号的检测,以及对相应信号做出相应的应答,即给出相应的状态字,控制传感器状态的变化。
如此分析下来,我们选择状态机作为AD7416的状态控制器,来完成我们设定的目标。
,。
AD7416的功能模块
SDA
AD7416的内部寄存器结构图
,除了温度寄存器只读,其他寄存器进行可读写操作。
地址指针寄存器
(为读/写操作选 择数据寄存
器)
温度值寄存器 (地址00h )
结构寄存器(地址)01h )
T HYST 设定值寄存器(地址02h )
T OTI 设定值寄存器(地址03h )
ADC 寄存器2 (地址04h )
结构寄存器(地址05h )
串行总线接口
地址
数据
通过分析,我们已经了解了AD7416工作的原理,但是一个新的问题摆在我们面前,那就是FPGA的IO口并不支持I2C通信协议。
因此,我们还必须针对FOGA的IO 口进行编程,已满足系统目标的要求。
I2C总线[15]是PHLIPS公司推出的一种串行总线,是具备多主机系统所需的包括总线裁决和高低速器件同步功能的高性能串行总线。
I2C总线只有两根双向信号线。
一根是数据线SDA,另一根是时钟线SCL。
I2C总线通过上拉电阻接正电源。
当总线空闲时,两根线均为高电平。
连到总线上的任一器件输出的低电平,都将使总线的信号变低,即各器件的SDA及SCL都是线“与”关系。
I2C总线进行数据传送时,时钟信号为高电平期间,数据线上的数据必须保持稳定,只有在时钟线上的信号为低电平期间,数据线上的高电平或低电平状态才允许变化。
I2C总线关于数据位有效性的规定。
SCL线为高电平期间,SDA线由高电平向低电平的变化表示起始信号;SCL线为高电平期间,SDA线由低电平向高电平的变化表示终止信号。
起始和终止信号都是由主机发出的,在起始信号产生后,总线就处于被占用的状态;在终止信号产生后,总线就处于空闲状态。
接收器件收到一个完整的数据字节后,有可能需要完成一些其它工作,如处理内部中断服务等,可能无法立刻接收下一个字节,这时接收器件可以将SCL线拉成低电平,从而使主机处于等待状态。
直到接收器件准备好接收下一个字节时,再释放SCL线使之为高电平,从而使数据传送可以继续进行。
连接到I2C总线上的器件,若具有I2C总线的硬件接口,则很容易检测到起始和终止信号。
对于不具备I2C总线硬件接口的FPGA来说,为了检测起始和终止信号,。
起始和终止信号
I2C规定每一个字节必须保证是8位长度。
数据传送时,先传送最高位(MSB),每一个被传送的字节后面都必须它收到最后一个数据字节后,必须向从机发出一个结束传送的信号。
这个信号是由对从机的“非应答”来实现的。
然后,从机释放SDA 线,以允许主机产生终止信号跟随一位应答位(即一帧共有9位)。
由于某种原因从机不对主机寻址信号应答时(如从机正在进行实时性的处理工作而无法接收总线上的数据),它必须将数据线置于高电平,而由主机产生一个终止信号以结束总线的数据传送。
I2C总线上传送的数据信号是广义的,既包括地址信号,又包括真正的数据信号。
在起始信号后必须传送一个从机的地址(7位),第8位是数据的传送方向位(R/),用“0”表示主机发送数据(T),“1”表示主机接收数据(R)。
每次数据传送总是由主机产生的终止信号结束。
但是,若主机希望继续占用总线进行新的数据传送,则可以不产生终止信号,马上再次发出起始信号对另一从机进行寻址。
典型的I2C通信方
S 从机地址O A 数据 A 数据A|A P
典型的I C通信数据帧
“0”表示数据由主机向从机传送,“1”则表示数据由从机向主机传送。
A表示应答,A表示非应答(高电平)。
S表示起始信号,P表示终止信号。
通过分析可知,由于FPGA不具备I2C接口,在设计过程中我们必须保证FPGA不断对通信总线进行扫描,而且每个周期内扫描两次。
并且要严格的按照I2C协议给出SCL信号,以保证整个通信过程准确无误。
由于FPGA的IO口需要进行大量数据处理,因此FPGA的速度和硬件接口速度将会产生较大的偏差。
为此,I2C数据总线上的数据传输要有一个较长的起始过程加以引导。
至此,针对温度采集所面临的问题基本得以解决。
按照分析结果,温度采集模块由两部分组成:AD7416控制模块和I2C通信模块。
根据已有的资料和自己不断总结,
最终得到了实现目标要求的代码。
部分代码如下所示:
-- designed by L_YM and H_YS the I2C BLOCK
ENTITY simple_i2c IS
PORT(
clk : in std_logic;
enable : in std_logic;
nReset : in std_logic;
clk_cnt : in unsigned(7 downto 0); -- 4x SCL
--input signals
start,stop,read_1,write_1,ack_in : std_logic;
Din : in std_logic_vector(7 downto 0);
-- output signals
cmd_ack : out std_logic;
ack_out : out std_logic;
Dout : out std_logic_vector(9 downto 0);
-- i2c signals
SCL : inout std_logic;
SDA : inout std_logic
);
END ENTITY simple_i2c;
-- designed by H_YS and L_YM the ad7416 BLOCK
entity AD7416_I2C_TEST is
port (
clk_sys : in std_logic; --50MHz
nReset : in std_logic;
Dout : out std_logic_vector(9 downto 0); -- data read from AD7416
I2C_OTI: in std_logic;
warning : out std_logic;
error : out std_logic; -- no correct ack received
SCL : inout std_logic;
SDA : inout std_logic
);
end entity AD7416_I2C_TEST;
上面两段代码表示AD7416模块的接口定义。
ADC0809电压采样模块
由第二节分析我们知道ADC0809采样原理比较简单:首先我们给出一个有效的START信号(高电平),随后状态信号EOC随即变成低电平。
此时进入转换状态,周期约为100µs。
转换结束后,EOC变为高电平,此时外部可以控制OE由低电平变为高电平,进入有效输出阶段。
下图是ADC0809的采样状态图。
ADC0809采样状态图
由状态图我们可以发现,运用状态机来控制ADC0809模块无疑是最佳选择。
其核心代码如下:
-- designed by L_YM and H_YS
BEGIN
CASE current_state IS
when st0=> next_state<=st1;
when st1=>next_state<=st2;
when st2=> IF(EOC='1')THEN next_state<=st3;
ELSE next_state<=st2;
END IF;
when st3=>next_state<=st4;
when st4=>next_state<=st0;
when OTHERS => next_state<=st0;。