集成电路实验集成电路实验状态机设计实验报告专业:电子信息工程姓名:江燕婷 学号: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)码等顺序编码,简单状态寄存器占用少;一位热码输出译码电路简单;在状态顺序变化时,格雷码每次只有一位变化,避免产生输出信号毛刺三. 实验设备与软件平台微型计算机,GW48-CK,QuartusII v5.0四.实验内容(一)练习一采用状态机moore机,110 检测状态图如下:设s0 为初始状态,s1 为检测到一个‘1’的状态,s2 为检测到连续两个‘1’的状态,s3 为检测到连续的‘110’状态图1-3 110序列检测器的状态转换图假设监测器的输入、输出信号规定如下:输入信号: 复位reset,时钟clk,被测序列in;输出信号: 指示信号flag,‘1’表示测到110 序列,‘0’表示测到非110 序列。
当前状态state,‘00’、‘01’、‘10’、‘11’分别表示三种状态s0、s1、s2、s3用Verilog HDL实现的代码如图1-4所示图1-4 110序列检测器代码实现该程序用两个always过程描述,一个过程用来描述现态和次态时序逻辑,另一个过程描述输出逻辑将程序用综合器生成,可以直观地观察到生成的状态图和状态表图1-5 110序列检测器状态机视图图1-6 110序列检测器状态表下面设计测试模块为了方便观察仿真结果,将当前状态satate设为输出信号,编写testbench代码如下,图1-7 110序列检测器testbench代码使用ModelSim软件得到仿真结果如图1-8所示,图1-8 110序列仿真效果图可以发现,ModelSim仿真结果与实验要求的状态转换情况相符,也与用Quartus II生成的State Machine Viewer状态相同在每次时钟上升沿到来时连续输入110,将输出一个高电平二)练习二设计一台饮料自动售卖机,要求如下:图1-9所有饮料价格均为30美分,投币值大于30美分时可以找零,有5美分和10美分找零币值设定售卖机的输入、输出信号规定如下:输入信号:Q(投入25美分硬币)、D(投入10美分硬币)、N(投入5美分硬币);输出信号:DC(分配一瓶饮料)、DD(找零10美分)、DN(找零5美分)。
GOT_5c、GOT_10c、GOT_15c、GOT_20c、GOT_25c、GOT_30c、GOT_35c、GOT_40c、GOT_45c、RETURN_50c表示投入的各种可能币值,RETURN_20c、RETURN_15c、RETURN_10c、RETURN_5c表示可能需要找零的币值因此该售卖机共有14个状态用Verilog HDL实现的代码如下图1-10-1 图1-10-2 图1-10-3在Quartus II生成的状态机视图和状态表分别如下图所示图1-11 售货机状态机视图图1-12 售货机状态表设计测试模块,为方便观察结果,将state改为输出信号,编写testbench代码如下图1-13 售卖机testbench代码使用ModelSim软件得到仿真结果如图1-14所示,与实验要求的状态转换次序一致图1-14 售卖机仿真效果图五.实验结果实验验证结果与预期设想一致,具体如以上实验内容所示六.实验的收获与问题分析1.在集成电路实验课中学会了使用Quartus II软件,学会了Verilog HDL硬件语言的基本知识,了解了更多的关于EDA技术、FPGA器件和Verilog HDL硬件描述语言的知识。
2.由于实验课每周只有一次,每次仅下午3个小时,在实验课上不能完成所有验证与设计实验,因此自己下载安装了Quartus II和ModelSim软件,借来了芯片型号为EP4CE6F17C8的FPGA板子,完成了剩余的硬件电路测试实验3.实验中还发现并解决了一些问题七.实验的问题分析在验证110序列检测器时,一开始发现无法生成状态机视图,而程序的硬件实现与ModelSim仿真结果是正确的通过查询资料了解到,Quartus II中对状态机的设计有一些特别的规定,如果不了解这些规定在设计的时候常常使人产生困惑编译器识别状态机的条件:1.表现状态机的信号或变量必须为枚举类型;2.状态转移必须由clk触发,并且是用if语句检测的上升沿进行转移;3.状态转移到下一个状态由case语句判断;4.所有信号,变量赋值都要放在状态机进程里进行5.状态机的状态必须多于两个状态为此,将原来结构为现态、次态+输出逻辑的程序改为现态+次态时序逻辑、输出逻辑结构的程序,从而满足状态转移都在一个由clk上升沿触发的always块语句里,并且都用case语句判断状态转移同时要注意此时状态变量state不能作输出端口修改后的程序最终可以在Quartus II上生成状态机视图与状态表。
令人奇怪的是,在售卖机的实验中仍为现态、次态+输出逻辑结构的程序却可以在Quartus II上生成状态机视图与状态表因此我到最后也没有完全明白问题的真正所在,不过可以确定的是,在需要生成状态图时,状态变量state是不能用作输出端口的,若设定为output,则不能在在Quartus II上生成状态图,当需要在ModelSim上观察仿真结果时,再将state作为输出端口可以清楚地观察到实验现象。