实验四 有限状态机设计(2学时)
洗衣机Word版
实验四全自动洗衣机控制器一、实验目的1.学习掌握全自动洗衣机的控制原理。
2.掌握基于有限状态机的控制电路设计方法。
二、预习要求1.预习全自动洗衣机的控制原理和基于有限状态机的控制电路的设计方法。
2.画出洗衣机控制器包括不同洗衣模式的完整的状态转移图。
3.用Verilog HDL 语言编程实现全自动洗衣机控制器,并进行时序仿真。
4.对顶层设计文件进行引脚锁定。
三、实验要求1.设计一个全自动洗衣机控制器电路,实现对洗衣机的全自动控制。
根据全自动洗衣机的控制原理设计一个控制电路,使之能够控制全自动洗衣机完成整个工作过程。
洗衣机工作过程分为两种情况:(1)全部自动完成当按下复位按钮时,洗衣机上电,控制电路复位到初始状态(默认水位为“中”;使用)者可根据衣服的多少,按下水位控制按钮,改变水位设置,以控制上水时加水的多少;当按下启动/暂停按钮时,洗衣机开始洗衣的第一个操作:进水阀门打开,开始上水,并根据水位设置(高、中、低、少)历时不同的时间timeadd(8s、7s、6s、5s);然后进水阀门关闭,电机开始运转,开始洗衣过程,并历时9s;然后电机停止运转,排水阀门打开,开始排水,并根据水位设置(高、中、低、少)历时不同的时间timedrain(7s、6s、5s、4s);然后排水阀门关闭,进水阀门打开,开始第二次上水,并历时timeadd……当甩干结束后,整个洗衣过程完成,扬声器发出持续15 秒的急促的“嘀嘀”音,提示用户洗衣结束。
正常运行状态下全自动洗衣机工作过程如图 1. 1所示。
注意:在甩干过程中,电机一边高速旋转,一边排水。
空闲(idle)→第一次加水(water1)7s→洗衣(wash)9s→第一次排水(drain1)6s→第二次加水(water2)7s→漂洗(rinse)9s→第二次排水(drain2)6s→甩干(dry)5s→蜂鸣15s从图中可以看出,洗衣机整个工作过程可分为9 个状态,要求运用有限状态机的设计思想来实现。
有限状态机(FSM)的设计
begin
state<=B;z=0;
end
else
state<=IDLE;
B:if(x==1)
begin
state<=C;z=0;
end
else
state<=IDLE;
C:if(x==1)
begin
state<=D;z=1;
end
else
state<=IDLE;
D:if(x==1)
实验报告四
有限状态机(FSM)的设计
1、实验目的
1、了解FSM的应用范围和两种类型的不同特点;
2、掌握FSM的电路结构和设计特点。
二.实验内容
设计一个串行数据检测器,连续4个或4个以上的1时输出为1,其他情况下输入情况为0,编写测试模块并给出仿真波形
三、实验步骤
1.程序编程
module ceshi(x,z,clk,rst,clk1);
#500 $stop;
end
ceshi m(x,z,rst,clk1);
Endmodule
3.对应引脚
4仿真结果
input x,clk,rst;
output z;
reg z;
output clk1;
reg clk1;
reg[2:0] state;
reg [27:0] n;
parameter IDLE='d0,A='d1,B='d2,C='d3;
always@(posedge clk)
begin
if (n==24999999)
wire x,z,clk1;
assign x=data[23];
实验四_有限状态机设计(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日)上课时交实验报告。
有限状态机课程设计报告EDASodaMachine自动售货机
1有限状态机有限状态机(Finite State Machine )是一种具有内部记忆的抽象机器模型,是时序电路的一种,通过有限状态机课实现高效率高可靠逻辑控制。
根据输出与输入关系、系统状态的关系,有限状态机又可以分为Moore型有限状态机和Mealy型有限状态机。
Moore型状态机的输出信号只于当前的状态有关;Mealy型状态机是输出信号不仅与当前的状态有关,还与输入信号有关。
Mealy机的示意图如图二所示:Mealy图二Mealy机的示意图Moore机的示意图如图三所示:Moore图三Moore机的示意图Moore型有限状态机和Mealy型有限状态机的区别:•在Moore机中,输出的时钟活动沿到达后的几个门电路的延迟时间之后即到达,并且在该时钟周期的剩余时间内保持不变,即使输入在该时钟周期内发生变化,输出值也保持不变。
然而,因为输出与当前的输入无关,当前输出产生的任何效果将延迟到下一个时钟周期。
Moore机的优点是将输出与输入分隔开。
einepde r registeroutputencoderoutputregisteroutputencoderoutput• 在Mealy 机中,因为输出是输入的函数,如果输入改变,则输出可以在下一个时钟周期的中间发生改变。
这使得Mealy 机比Moore 机,对输入变化的响应要早一个时钟周期,一旦输入信号或状态发生变化,输出信号随着输入信号变化。
• 实现同样功能,Moore 机要比Mealy 机需要更多的状态。
通过分析本次实验,利用Mealy 机更加容易理解,并且使用Moore 会使用更多的状态,所以本次实验使用Mealy 型有限状态机。
2 Soda Machine机的设计2.1 Soda Machine机的状态转换图Soda Machine 机的状态转换图如图四所示。
Soda Machine图四Soda Machine 机的状态转换图图中共有10个状态,为ST0 — ST9。
有现状态机设计实验报告
湖南科技学院综合设计性实验报告实验名称:有限状态机的设计实验项目性质:设计性所涉及课程:微机原理与接口技术计划课时:2课时系别:电子与信息工程系班级:通信工程1302班学生姓名:许露平(201308002216)指导教师:蒋恩松湖南科技学院电子与信息工程系一、实验目的掌握Verilog HDL描述有限状态机的设计方法,能够进行简单的数字系统设计。
二、实验原理有限状态机是由寄存器组和组合逻辑构成的硬件时序电路,其状态(即由寄存器组的1和0的组合状态所构成的有限个状态)只可能在同一时钟跳变沿的情况下才能从一个状态转向另一个状态,究竟转向哪一状态还是留在原状态不但取决于各个输入值,还取决于当前所在状态。
三、实验内容“110101”序列检测码,在连续输入的一串数据中,判断是否包含“110101”序列。
要求:画出状态转移图,编码实现,功能仿真。
1、分析检测110101如果采取进行每位二进制数检测的话则需要列出6种状态,并且由于这种检测的关键在于正确码的收到必须是连续的,这就要求必须记住前一次的正确码及正确序列,直到在连续的检测中所收到的每一位码都与与预置数的对应码相同。
在检测过程中,任何一位不相等都将回到初始状态重新开始检测,检测工作比较繁忙。
如果把110101拆成11、01、01,则只有2种状态,若考虑00总共有3种状态,即S0=00,S1=11,S2=01。
用Z记录检测到110101序列的个数,用A,B表示输入的序列,则可根据分析的设计思路画出状态图如下所示:2、Verilog HDL设计代码如下:module jiance(S,clk,Z,reset);input reset,clk;input [1:0] S;output Z;reg Z;parameter S0=2'b00,S1=2'b11,S2=2'b01; reg [1:0] state;always @(posedge clk)beginif(reset)beginstate=S0;Z=0;endelsebegincase(state)S0:beginif(S==2'b11)beginstate=S1;Z=0;endelsebeginstate=S0;Z=0;endendS1:beginif(S==2'b01)beginstate=S2;Z=0;endelsebeginstate=S0;Z=0;endendS2:beginif(S==2'b01)beginstate=S2;Z=1;endelsebeginstate=S0;Z=0;endenddefault: beginstate=S0;Z=0;endendcaseendendendmodule四、实验结果实验结果:(1)给出仿真图形(最好打印)波形仿真如图所示:仿真状态机结果如下图所示:状态机图状态机电路图(2)根据仿真图形,给出你的结论。
工程实训报告-Modelsim实验四-有限状态机之自动售货机-(1)
实验项目名称:有限状态机指导教师:实验日期:实验概述:【实验目的及实验设备】实验目的:(1)掌握有限状态机的应用方法。
(2)掌握有限状态机的静态测试方法,能够进行程序设计。
(3)学习测试模块的编写,综合和不同层次的仿真。
(4)用有限状态机设计一个自动售货机(饮料价格为2.5元)。
实验设备及仪器名称:CPU型号:英特尔*****************************操作系统类型:Windows XP SP3仿真软件:MAX Plus 2软件、Modelsim SE-64 10.0c实验内容及步骤:【实验原理及电路图】系统能够根据用户输入的硬币,判断钱币是否足够,当所投硬币达到或者超过购买者所选面值时,则根据顾客的要求自动售货,并找回剩余的硬币,然后回到初始状态,当所投硬币面值不够时,则给出提示,并通过一个复位键退回所投硬币。
然后回到初始状态。
该实验输入有4个clk,reset,表示投一元币y,表示投五角币w。
输出有2个,表示饮料出现的out和找五角钱的w_out.该实验共5个状态,s0:表示投币为0的状态,s1:表示投入5角的,s2:表示投入1元,s3:表示投入1.5元,s4:表示投入2元。
当投入2.5时out输出1,状态回到s0,当投入3元时out 和w_out都输出1,状态回到s0.【实验方案】(实验步骤,记录)1、打开Modelsim SE-64 10.0c软件。
else beginout=0;w_out=0;s=s4;endendcaseendendmodule测试程序:module shou;wire y;reg w;reg reset;reg clk;paramerer clkperiod=100;shouhuoji shou(y,w,reset,clk)initial beginw=0;clk=0;reset=1;#150 reset=0;#100 reset=1;endalways#(clkperiod/2) clk=~clk;always#(clkperiod+30) $random;initial $monitor(Stime, “y=%b”,y);endmodule3、编译并调试程序,出现错误立即修改直至无错误出现。
生活中有限状态机实验报告
生活中的有限状态机——自动售货机
——骆晓芳
在百度百科中,有限状态机这样解释:有限状态机,(英语:Finite-state machine, FSM),又称有限状态自动机,简称状态机,是表示有限个状态以及在这些状态之间的转移和动作等行为的数学模型。
有限状态机是一种具有离散输入输出系统的模型,在任何时刻都处于一个特定的状态。
对于事件驱动的程序设计,它是非常有用的设计模型。
在某一个状态下有事件发生时,根据当前状态和输入事件的不同,选择如何处理该事件以及是否需要转换到下一个状态。
自动售货机我想从三个方面来分析它的有限状态机(以下是用例图):
一,从顾客来分析
顾客投币选择饮料
货币有0.5,1.0,机器可找零,每次投入一种硬币,机器可以输出货物,也可找零:
二.售货机器来分析
售货机根据顾客的投币来找零和出货,售货机对顾客的输入进行识别后出货并判断顾客投币是否足够是否需要找零:
补货员又分为两个部分,查看及取走钱币及查看及补充饮料:
自动售货机类图:。
数字系统设计及实验实验报告
数字系统设计及实验实验报告一、实验目的数字系统设计及实验课程旨在让我们深入理解数字逻辑的基本概念和原理,掌握数字系统的设计方法和实现技术。
通过实验,我们能够将理论知识应用于实际,提高解决问题的能力和实践动手能力。
本次实验的具体目的包括:1、熟悉数字电路的基本逻辑门、组合逻辑电路和时序逻辑电路的设计方法。
2、掌握使用硬件描述语言(如 Verilog 或 VHDL)进行数字系统建模和设计。
3、学会使用相关的电子设计自动化(EDA)工具进行电路的仿真、综合和实现。
4、培养团队合作精神和工程实践能力,提高解决实际问题的综合素质。
二、实验设备和工具1、计算机:用于编写代码、进行仿真和综合。
2、 EDA 软件:如 Quartus II、ModelSim 等。
3、实验开发板:提供硬件平台进行电路的下载和测试。
4、数字万用表、示波器等测量仪器:用于检测电路的性能和信号。
三、实验内容1、基本逻辑门电路的设计与实现设计并实现与门、或门、非门、与非门、或非门和异或门等基本逻辑门电路。
使用 EDA 工具进行仿真,验证逻辑功能的正确性。
在实验开发板上下载并测试实际电路。
2、组合逻辑电路的设计与实现设计一个 4 位加法器,实现两个 4 位二进制数的相加。
设计一个编码器和译码器,实现数字信号的编码和解码。
设计一个数据选择器,根据控制信号选择不同的输入数据。
3、时序逻辑电路的设计与实现设计一个同步计数器,实现模 10 计数功能。
设计一个移位寄存器,实现数据的移位存储功能。
设计一个有限状态机(FSM),实现简单的状态转换和控制逻辑。
四、实验步骤1、设计方案的确定根据实验要求,分析问题,确定电路的功能和性能指标。
选择合适的逻辑器件和设计方法,制定详细的设计方案。
2、代码编写使用硬件描述语言(如 Verilog 或 VHDL)编写电路的代码。
遵循代码规范,注重代码的可读性和可维护性。
3、仿真验证在 EDA 工具中对编写的代码进行仿真,输入不同的测试向量,观察输出结果是否符合预期。
2020年(OA自动化)电子设计自动化(eda)实验指导书
(OA自动化)电子设计自动化(eda)实验指导书电子设计自动化(EDA)实验指导书前言近些年来,电子设计自动化(EDA)技术发展迅速。
一方面,各种大容量、高性能、低功耗的可编程逻辑器件不断推出,使得专用集成电路(ASIC)的生产商感受到空前的竞争压力。
另一方面,出现了许多EDA设计辅助工具,这些工具大大提高了新型集成电路的设计效率,使更低成本、更短周期的复杂数字系统开发成为可能。
于是一场ASIC与FPGA/CPLD之争在所难免。
然而PLD器件具有先天的竞争优势,那就是可以反复编程,在线调试。
EDA技术正是这场较量的推动引擎之一。
一般来说,EDA技术就是以计算机为平台,以EDA软件工具为开发环境,以HDL为设计语言,以可编程器件为载体,以ASIC、SOC芯片为目标器件,以电子系统设计为应用方向的电子产品自动化设计过程。
设计者只需编写硬件描述语言代码,然后选择目标器件,在集成开发环境里进行编译,仿真,综合,最后在线下载调试。
整个过程,大部分工作由EDA软件完成。
全球许多著名的可编程器件提供商都推出了自己的集成开发工具软件,如Altera公司的MAX+PLUSⅡ、QuartusⅡ软件;Xilinx公司的Foundation、ISE软件,Lattice公司的ispExpert软件,Actel 公司的Libero软件等。
这些软件的推出,极大地促进了集算法设计、芯片编程、电路板设计于一体的EDA技术的发展。
另外,在以SOC 芯片为目标器件的电子系统设计要求下,可编程器件的内部开始集成高速的处理器硬核、处理器软核、DSP模块、大量的存储资源、高速的串行收发模块、系统时钟管理器、多标准的I/O接口模块,亦使得设计者更加得心应手,新一轮的数字革命由此引发。
EDA技术是一门实践性很强的学科,要培养出具有竞争力的一流IC设计人才,动手能力是关键。
只有通过理论学习,加上现场实验,在使用软件编程加硬件调试的过程中真正获得锻炼,增长技能。
实验四---用状态机实现ADC的采样电路设计
实验四用状态机实现ADC的采样电路设计一、实验目的1、用状态机实现ADC的采样控制电路2、熟悉QuartusⅡ软件应用环境,了解实验流程。
3、编写简单的Verilog代码,在QuartusⅡ中进行调试和验证,并在magic sopc 中下载代码和验证。
二、实验器材QutersII软件、magic sopc实验箱、电脑三、实验原理TLC549是一个8位的串行模数转换器,AD转换时间最大17微秒,I/O时钟可达1.1MHz。
如图21.1所示为TLC549的访问时序,从图中可以看由当CS/拉低时,ADC前一次的转换数据(A)的最高位A7立即出现在数据线DATA OUT上,之后的数据在时钟I/O CLOCK的下降沿改变,可在I/O CLOCK的上升沿读取数据。
读完8位数据后,ADC 开始转换这一次采样的信号(B),以便下一次读取。
转换时片选信号CS/要置高电平。
设计操作时序是要注意Tsu(CS)、Tconv及I/O CLOCK的频率几个参数。
Tsu(CS)为CS/拉低到I/O CLOCK 第一个时钟到来时间,至少要1.4 秒;Tconv 为ADC的转换时钟,不超过17微秒;由于ADC是8位的,所以采样的电压值为: V=(D/256)*Vref 其中V 为采样的电压值,D为ADC 转换后读取的8 位二进制数,Vref 为参考电压值,这里是2.5V。
四、实验步骤步骤1.新建一个文件夹打开vhdl文件步骤2:编写源程序并保存module scan_led(clk_1k,d,dig,seg); //模块名scan_ledinput clk_1k; //输入时钟input[31:0] d; //输入要显示的数据output[7:0] dig; //数码管选择输出引脚output[7:0] seg; //数码管段输出引脚reg[7:0] seg_r; //定义数码管输出寄存器reg[7:0] dig_r; //定义数码管选择输出寄存器reg[3:0] disp_dat; //定义显示数据寄存器reg[2:0]count; //定义计数寄存器assign dig = dig_r; //输出数码管选择assign seg = seg_r; //输出数码管译码结果always @(posedge clk_1k) //定义上升沿触发进程begincount <= count + 1'b1;endalways @(posedge clk_1k)begincase(count) //选择扫描显示数据3'd0:disp_dat <= d[31:28]; //第一个数码管3'd1:disp_dat <= d[27:24]; //第二个数码管3'd2:disp_dat <= d[23:20]; //第三个数码管3'd3:disp_dat <= d[19:16]; //第四个数码管3'd4:disp_dat <= d[15:12]; //第五个数码管3'd5:disp_dat <= d[11:8]; //第六个数码管3'd6:disp_dat <= d[7:4]; //第七个数码管3'd7:disp_dat <= d[3:0]; //第八个数码管default:disp_dat <= 0;endcasecase(count) //选择数码管显示位3'd0:dig_r <= 8'b11111111; //no选择第一个数码管显示3'd1:dig_r <= 8'b11111111; //no选择第二个数码管显示3'd2:dig_r <= 8'b11111111; //no选择第三个数码管显示3'd3:dig_r <= 8'b11111111; //no选择第四个数码管显示3'd4:dig_r <= 8'b11111111; //no选择第五个数码管显示3'd5:dig_r <= 8'b11111111; //no选择第六个数码管显示3'd6:dig_r <= 8'b11111101; //选择第七个数码管显示3'd7:dig_r <= 8'b11111110; //选择第八个数码管显示default:dig_r <= 8'b11111111;endcaseendalways @(disp_dat)begincase(disp_dat) //七段译码4'h0:seg_r = 8'hc0; //显示04'h1:seg_r = 8'hf9; //显示14'h2:seg_r = 8'ha4; //显示24'h3:seg_r = 8'hb0; //显示34'h4:seg_r = 8'h99; //显示44'h5:seg_r = 8'h92; //显示54'h6:seg_r = 8'h82; //显示64'h7:seg_r = 8'hf8; //显示74'h8:seg_r = 8'h80; //显示84'h9:seg_r = 8'h90; //显示94'ha:seg_r = 8'h88; //显示a4'hb:seg_r = 8'h83; //显示b4'hc:seg_r = 8'hc6; //显示c4'hd:seg_r = 8'ha1; //显示d4'he:seg_r = 8'h86; //显示e4'hf:seg_r = 8'h8e; //显示fdefault:seg_r = 8'hff;endcaseendendmodulemoduleadc(clock,reset,enable,sdat_in,adc_clk,cs_n,data_ready,data_out);//I/O口声明input clock; //系统时钟sys_clk_50MHz PIN=B13 , ON CORE BOARDinput reset; //复位,高电平有效input enable; //转换使能input sdat_in; //TLC549串行数据输入output adc_clk; //TLC549 I/O时钟output cs_n; //TLC549 片选控制output data_ready; //指示有新的数据输出output[7:0] data_out; //AD转换数据输出//I/O寄存器reg adc_clk_r;reg cs_n_r;reg data_ready_r;reg[7:0] data_out_r; //AD转换数据输出reg sdat_in_r; //数据输出锁存//内部寄存器reg[7:0]q; //移位寄存器,用于接收或发送数据reg[2:0]adc_state; //状态机ADCreg[2:0]adc_next_state;reg[5:0]bit_count; //移位计数器reg bit_count_rst; //ADC时钟计数器全能控制reg div_clk;reg[CLK_DIV_BITS-1:0] clk_count;//时钟分频计数器reg buf1,buf2;//内部信号wire ready_done; //cs_n拉低(大于1.4us)后的标志wire rec_done; //数据读取完毕的标志wire conv_done; //数据转换完毕的标志//计时器参数//以下参数值按50MHz时钟计算parameter CLK_DIV_VALUE = 31; //ADC时钟计数器(大于404nS)计数值parameter CLK_DIV_BITS = 5; //ADC时钟计数器位宽//状态机M1状态参数表parameter idle = 3'b000,adc_ready = 3'b001,adc_receive = 3'b011,adc_conversion = 3'b010,adc_data_load = 3'b110;//I/O寄存器输出assign adc_clk = adc_clk_r;assign cs_n = cs_n_r;assign data_out = data_out_r;assign data_ready = data_ready_r;//同步输入数据信号always @(posedge clock)beginsdat_in_r <= sdat_in;end //时钟分频计数器always @(posedge clock)beginif (reset == 1'b1)clk_count <= 5'd0;elsebeginif (clk_count < CLK_DIV_VALUE) beginclk_count <= clk_count + 1'b1;div_clk <= 1'b0;endelsebeginclk_count <= 5'd0;div_clk <= 1'b1;endendend //状态机ADCalways @(posedge clock)beginif (reset == 1'b1)adc_state <= idle;elseadc_state <= adc_next_state;end//ADC状态机转换逻辑always @(adc_state or ready_done or rec_done or conv_done or enable) begin//cs_n_r = 1'b0;bit_count_rst = 1'b0;data_ready_r = 1'b0;case (adc_state)idle: //初始状态begincs_n_r= 1'b0;bit_count_rst= 1'b1; //复位移位计数器 if (enable == 1'b1)adc_next_state = adc_ready;elseadc_next_state= idle;endadc_ready: //准备接收beginif(ready_done == 1'b1)adc_next_state = adc_receive;elseadc_next_state = adc_ready;endadc_receive: //接收数据beginif(rec_done == 1'b1)adc_next_state = adc_conversion;elseadc_next_state = adc_receive;endadc_conversion: //转换前的采样的数据begincs_n_r = 1'b1;if(conv_done == 1'b1)adc_next_state = adc_data_load;elseadc_next_state = adc_conversion;endadc_data_load:begindata_ready_r = 1'b1; //数据输出标志adc_next_state = idle;enddefault : adc_next_state = idle;endcaseend//位移位计数器always @(posedge clock)beginif (reset == 1'b1)bit_count <= 6'd0;else if (bit_count_rst == 1'b1)bit_count <= 6'd0;else if (div_clk == 1'b1)bit_count <= bit_count + 1'b1;endassign ready_done = (bit_count == 6'd4); //准备读取数据assign rec_done = (bit_count == 6'd19); //接收数据完毕assign conv_done = (bit_count == 6'd63); //ADC转换完毕//在接收位计数器4-20间8个adc clkalways @(bit_count)beginif ((bit_count < 6'd20) && (bit_count >= 6'd4))adc_clk_r <= ~bit_count[0];elseadc_clk_r <= 1'b0;endalways @(posedge clock)beginbuf1 <= adc_clk_r;buf2 <= buf1;end//读取数据always @(posedge clock)beginif(buf1 && ~buf2) //ADC时钟上升沿q <= {q[6:0],sdat_in_r};else if(data_ready_r == 1'b1) //输出读取的数据data_out_r <= q;endendmodule3.新建一个工程及进行工程设置4.打开并建立新工程管理窗口。
空调系统有限状态自动机的设计
1 引言1.1 课程设计的背景空调的发明已经列入20世纪全球十大发明之一,它首次向世界证明了人类对环境温度、湿度、通风和空气品质的控制能力。
19世紀,英国科学家及发明家麦克·法拉第(Michael Faraday),发现压缩及液化某种气体可以將空气冷冻,当时其意念仍流于理论化。
二十世纪六七十年代美国为解决干旱缺水地区的冷热源问题而率先研制出风冷式冷水机,用空气散热代替冷却塔,其英文名为 Air cool chiller, 简称Chiller。
之后,设备设计和制造技术在90年代被转让到中国[1] 。
随着人们生活水平的逐渐提高,空调产品也将由“生活奢侈品”逐渐转变为日常生活用品。
在空调健康、节能功能以及外观设计上,国内企业也经过引进、消化、吸收,技术水平及产品质量都在不断趋于完善,我国已经发展成为世界空调产业重要的研发和生产基地。
随着经济的发展,空调已成为必备的家用电器,对空调的设计更加重要。
随着社会需求的变化,空调朝着节能、环保及智能化方向发展。
1.2课程设计的目的本课程设计的目的是在掌握EDA实验开发系统的初步使用基础上,了解EDA 技术,对空调系统进一步了解,掌握其有限状态自动机工作原理。
通过本次课程设计更好地巩固和加深对基础知识的理解,学会设计中小型数字系统的方法,独立完成仿真过程,增强理论联系实际的能力,提高电路分析和理解能力。
为日后的学习和工作奠定基础。
1.3课程设计的任务本课程设计任务是通过设计空调系统有限状态自动机的基本方法学习硬件设计的基本思想和基本流程,采用Max+plus2等软件为开发工具。
通过对计算机硬件和软件解决方案的论证,对应用领域进行调查分析,参考各种资料和进行硬件开发实践。
在指导老师的帮助下,已经基本上成功地实现了设计任务书的要求。
1.4课程设计的内容本课程设计主要完成基于VHDL的空调系统的设计与实现。
本文运用有限状态自动机的方法,设计了状态机进程与信号控制进程相互配合。
有限状态机
Finite state machine
Input sequence inStr: 000 101 010 110 111 101 111 110 101 Output sequence outStr: 000 000 000 000 000 100 001 110 000 实现功能:当输入连续4个1时,输出为1
Experiment 2 Finite State Machine
Moore model
inputs comb. next memory current comb. outputs state state circuit elements circuit
Separate combinational and sequential circuits
reset S0 1/0 S1 1/0 S2 1/0 S3 1/1 S4 0/0 0/0 0/0 0/0ቤተ መጻሕፍቲ ባይዱ
1/1
Finite state machine
The test bench
module fsm_seq_tb; wire outStr; reg inStr; reg clk; reg reset; parameter ClkPeriod = 100; fsm_seq_3para my_fsm_seq (outStr, inStr, clk, reset); initial begin inStr = 0; clk = 0; reset = 0; #190 reset = 1; #100 reset = 0; end always #(ClkPeriod/2) clk = ~clk; always x = #(ClkPeriod+30) $random; initial $monitor($time, “outStr=%b", outStr); endmodule
《FPGA系统设计》实验报告》有限状态机的设计实验
《FPGA系统设计》实验报告》有限状态机的设计实验一 .实验目的(1)了解有限状态机的概念;(2)掌握Moore型有限状态机的特点和其VHDL语言的描述方法;(3)掌握Mealy型有限状态机的特点和其VHDL语言的描述方法;二.实验要求(1)状态机的介绍FPGA设计中,最重要的设计思想就是状态机的设计。
状态机的本质是对具有逻辑顺序和时序规律的事件的描述,它有三个要素:状态、输入、输出。
状态也叫做状态变量,根据状态机的涉及的状态是有限的还是无限的,可以将状态机分为有限状态机(Finite State Machine, FSM) 和无限状态机(Infinite StateMachine, ISM), 逻辑设计中一般都是有限状态机,如全自动洗衣机有浸泡、洗涤、排水、脱水,工作状态有四种,流程状态无需手动操作,只要条件满足就自动进入下一工作个状态,并且工作流程可以灵活设定。
这种控制功能完全可用有限状态机来实现;输出是指某-个状态的特定输出; 输入是状态机进入每个状态的条件。
状态机从输出方式出发,可以分为摩尔(Moore) 型和米里(Mealy)型;Moore型状态机:状态机的输出信号仅仅由当前状态决定。
Mealy型状态机:状态机的输出信号不仅与电路的当前状态有关,还与当前的输入有关。
用VHDL设计的状态机其结构由以下几部分组成:(1)说明部分状态变量(如现态和次态)应定义为信号,便于信息传递,使用TYPE语句定义新的数据类型,此数据类型为枚举型,例如:ARCHITECTURE... ISTYPE FSM ST IS (s0,s1,s2,s3);SIGNAL curent state.next state :FSM ST;...其中新定义的数据类型名为"FSM ST",其类型的元素分别为50、sI. S2、S3.表示状态机的四个状态。
定义信号SIGNAL的状态变量为euret state 和next state,它们的数据类型被定义为FSM ST.因此状态变量current state 和Inext state的取值范围在数据类型FSM ST所限定的四个元素中。
有限状态机的设计——LCD显示控制实验
实验四有限状态机的设计--LCD显示控制实验、实验目的1、了解LCD1602液晶显示器的工作原理。
2、了解时序电路FPGA勺实现。
3、学习用VHDL语言来描述时序电路的过程。
、硬件要求1、可变时钟源。
2、LCD1602液晶显示模块3、A/D转换芯片ADC08094、主芯片Cyclonell EP2C35F672C&三、实验原理该实验是利用FPGA空制LCD1602的时序,进行液晶显示。
LCD是一个可以显示两行字符或数字的液晶显示模块。
该芯片管脚如右图所示。
芯片引脚及其说明如下:160?1602采用标准的16脚接口,其中:第1脚:VSS为地电源第2脚:VDD接5V正电源第3脚:V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度第4脚:RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。
第5脚:RW为读写信号线,高电平时进行读操作,低电平时进行写操作。
当RS和RW共同为低电平时可以写入指令或者显示地址,当RS为低电平RW为高电切Master Time Bar 1355 m 打”Patter 21+5 ns 4.9 Start: End平时可以读忙信号,当RS为高电平RW为低电平时可以写入数据。
第6脚:E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。
第7〜14脚:D旷D7为8位双向数据线。
第15〜16脚:空脚1602液晶模块内部的字符发生存储器(CGROIM)经存储了160个不同的点阵字符图形,如表1所示,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码,比如大写的英文字母“A”的代码是01000001(41H),显示时模块把地址41H中的点阵字符图形显示出来,我们就能看到字母“ A”LCD1602的工作时序可查阅其他资料。
四、实验内容及步骤本实验的内容就是用FPGA莫拟产生LCD1602的时序,使其正常工作,显示字符,实验步骤如下:1、编写LCD1602时序的VHDL代码。
有限状态机编写(第4节)
比较,得驱动方程:
J 0 Q2n Q1n 、 K 0 1
J 1 Q 0n 、 K 1 Q2n Q0n n n n J 2 Q1 Q 0 、 K 2 Q1
Q
5
n 1
JQ K Q
n
& FF 0 1 1J C1 1K
n
& FF1 1J C1 1K &
20
电 路 图
Q0 Q0
X/Y S1 1/0 S2
设电路开始处于初始状态为S0。 第一次输入1时,由状态S0转入 状态S1,并输出0; 若继续输入1,由状态S1转入状 态S2,并输出0; 如果仍接着输入1,由状态S2转 入状态S3,并输出1; 此后若继续输入1,电路仍停 留在状态S3,并输出1。
电路无论处在什么状态, 只要输入0,都应回到初 始状态,并输出0,以便 重新计数。
01 0 0
11 × ×
10 0 0
X 0 1
00 0 0 (b)
01 0 1
11 × ×
10 0 1
Q0n 1 的卡诺图
Q1n 1 的卡诺图
24
n Q0 1 XQ1nQ0n
n Q1n 1 XQ0 Q1n XQ1n
Q0n 1 XQ1n Q0n 0 Q0n n 1 Q1 XQ0nQ1n XQ1n
1
0 0 1 1 0 0 1 1
0 1 0 1 0 1 0 1
1 1 1 1 0 0 0 0
0 0 0 0 1 1 0 0
9
4
排列顺序:
n n Q 2 Q1n Q0
画状态图、时序图
/Y /0 /0 000→001→011 /1↑ ↓/0 100←110←111 /0 /0 (a) 有效循环 (b) 010 /1 无效循环 /0 101
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验四有限状态机设计(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日)上课时交实验报告。
对于实验内容一,报告的内容应重在程序的完善上,对于实验内容二,报告的内容应重在对论文中源程序的分析和理解,以及仿真的波形图上。