quartus设计状态机实现序列检测器
- 格式:doc
- 大小:2.91 MB
- 文档页数:2
实验四:状态机实现序列检测器的设计一、实验目的1、了解和学习Quartus II 7.2软件设计平台。
2、了解EDA的设计过程。
3、通过实例,学习和掌握Quartus II 7.2平台下的文本输入法。
4、学习和掌握状态机的工作和设计原理。
5、掌握用VHDL 实现状态机的方法6、利用状态机设计一个序列检测器二、实验仪器PC机,操作系统为Windows7/XP,本课程所用系统均为WindowsXP(下同),Quartus II 7.2设计平台。
三、实验步骤1、创建工程,在File菜单中选择New Project Wizard,弹出对话框如下图所示在这个窗口中第一行为工程保存路径,第二行为工程名,第三行为顶层文件实体名,和工程名一样。
2、新建设计文本文件,在file中选择new,出现如下对话框:选择VHDL File 点击OK。
3、文本输入,在文本中输入如下程序代码: LIBRARY IEEE;USE IEEE. STD_LOGIC_1164. ALL;ENTITY fsm ISport(clk,x:IN STD_LOGIC;z:OUT STD_LOGIC);END fsm;ARCHITECTURE bhv OF fsm ISTYPE STATE IS(S0,S1,S2,S3);SIGNAL present_state:state;BEGINPROCESS(clk)BEGINIF(clk'EVENT AND clk='1')THENCASE present_state ISWHEN S0=>IF x='1'THENpresent_state<=S1;ELSE present_state<=S0;END IF;WHEN S1=>IF x='0'THEN present_state<=S2;ELSE present_state<=S0;END IF;WHEN S2=>IF x='1'THEN present_state<=S3; ELSE present_state<=S0;END IF;WHEN S3=>IF x='1'THEN present_state<=S0; END IF;END CASE;END IF;END PROCESS;z<='1'WHEN present_state<=S3ELSE '0';END bhv;然后保存到工程中,结果如下图所示:4、编译,如果有多个文件要把这个文件设为当前顶层实体,这样软件编译时就只编译这个文件。
实验报告用状态机实现序列检测器实验一、实验目的1.用Verilog HDL描述有限状态机电路。
2.IPCORE的概念与设计。
二、实验内容1.应用有限状态机的设计思路,检测从FPGA片上ROM读出的串行数据是否是特定的数据。
2.每个人需要检测的数据是所用的电脑编号+200后转换的8位二进制数。
三、实验要求1.拟用按键、拨动开关实现系统的时钟,复位信号的输入。
2.一个7段数码显示译码器作为检测结果的输出显示,如果串行序列为”100101”,显示A,否则显示b(系统需要设计一个7段数码显示译码器模块)仍使用消抖模块,对由按键输入的时钟进行消抖处理。
3.读取的串行数据为rom中固化的一个宽度为1bit,深度为16bits的数据。
四、设计思路软件的设计框图如下,该实验可以分为几个模块,rom数据读出模块,串行检测模块,数码管显示模块,顶层模块。
输入的clk为按键消抖后输出的数据,按下一次检测一次,在时钟的上升沿读出数据,时钟的下降沿检测数据,串行模块输出的4bits的数据,直接送给数码管译码模块,译码输出。
五、设计原理1.ROM IP核的生成首先在ISE自己的工程中新建一个块内存,Block Memory Generator,配置深度为16,宽度为1bit,选择生成的类型为单端ROM,然后选择一个已经编写好的memory初始化文件。
Memory初始化文件,编写coe文件:这里我要写入的是226,所以二进制是11100010,写入的内容如下,:memory_initialization_radix=10;memory_initialization_vector=1 1 1 0 0 0 1 1 1 0 1 0 1 0 1 0;保存并选择载入。
2.读取rom中的数据根据时钟上升沿读取数据,所以可以写出rom读的代码,代码如下:module read_rom(clk,da,rst);input clk;input rst;output da;reg[3:0] counter;always@(posedge clk or posedge rst) beginif(rst)counter<=1'b0;else counter<=counter+1'b1;enddata_rom u1(.clka(clk), // input clka.addra(counter), // input [3 : 0] addra.douta(da) // output [0 : 0] douta);编写仿真激励文件,得到如下波形,分析可以知道,时钟上升沿数据被读取,读取的数据与我们在配置文件中写入的相同。
实验5 采用状态机实现序列检测器一、实验目的1.掌握利用有限状态机实现一般时序逻辑分析的方法;2.掌握利用Verilog编写可综合的有限状态机的标准模板。
二、仪器设备计算机、Quartus II 9.0 开发软件。
三、实验内容与步骤:1.实验内容建立一个序列检测器设计文件,当检测到3个及3个以上1时输出为1。
2.实验步骤1)新建工程文件夹;2)启动Quartus II3)选择File->New Project Wizard,建立新工程;4)File->New->Verilog HDL File建立设计文件;5)选择Processing->Start->Start Analysis&Synthesis进行电路综合;6)选择Tools->Netlist Viewers->RTL Viewer,查看综合后得到的电路;7)选择Tools->Netlist Viewers->State Machine Viewer,查看综合后得到的有限状态机;8)选择Processing->Start->Start Fitter进行电路适配;9)选择Tools->Netlist Viewers->Technology Map Viewer,查看适配后得到的电路。
四、实验数据写出程序代码,及状态转换图。
五、讨论写出三段式有限状态机的建模方式。
六、其它实验原理要求说明:1.什么是有限状态机;2.什么是Moore有限状态机与Mealy有限状态机;3.说明用Verilog HDL设计有限状态机的一般步骤。
附:程序部分代码module seq_111(clk,clr,x,z);input clk,clr,x;output reg z;reg[1:0] state,next_state;parameter S0=2'b00,S1=2'b01,S2=2'b10,S3=2'b11;/*状态编码*/always @(posedge clk or posedge clr) /*该过程定义当前状态*/ begin if(clr) state<=S0; //异步复位,s0为起始状态else state<=next_state;endalways @(state or x) /*该过程定义次态*/begincase (________ )S0:begin case (x)1:next_state=S1;0:next_state=S0;endcaseendS1:begin if(x) next_state=S2;else next_state=S0; endS2:beginif(x) next_state=S3;else next_state=S0; endS3:begin if(x) next_state=S3;else next_state=S0; enddefault:next_state=S0; /*default语句*/endcaseendalways @(________) /*该过程产生输出逻辑*/begin case(state)S3: z=1'b1;default:z=1'b0;endcaseendendmodule。
课程设计任务书学生姓名:李鹤健专业班级:电子1002班指导教师:韩屏工作单位:信息工程学院题目: D/A接口一、初始条件:可用仪器:PC机(Quartus II软件)硬件:EDA-IV型实验箱。
二、要求完成的主要任务:1设计一个有限状态机,用以检测输入序列“1110101101”由左开始。
(1)画出状态转换图;(2)使用VHDL语言编程;(3)使用EP1C3T144C8芯片。
2将所设计的整个系统写入CPLD 器件中,加上需要的外围电路在实验箱上实现整个系统的硬件搭建,并调试出结果。
3查阅至少5篇参考文献。
按《武汉理工大学课程设计工作规范》要求撰写设计报告书。
全文用A4纸打印,图纸应符合绘图规范。
三、时间安排:1、2012 年12月17日集中,作课程设计的任务布置。
2、2012 年12月18日至2012 年12月21日,进行课程设计,软件编程、仿真和调试。
3、2012 年12月22日,机房检查仿真结果,验证设计的可行性和正确性。
4、2012 年12月23日,熟悉实验平台和试验箱。
5、2012 年12月24日至2012年12月26日,进行设计的硬件调试。
6、2012 年12月27日至2012年12月28日,实验室检查设计成果,现场演示硬件实物,提交设计说明书及答辩。
指导教师签名:年月日系主任(或责任教师)签名:年月日目录摘要 (I)Abstract (II)绪论 (1)1 QuartusII简介 (2)2 设计内容及要求 (3)2.1设计的目的及主要任务 (3)2.1.1设计的目的 (3)2.1.2 设计任务及主要技术指标 (3)2.2设计思想 (3)3 设计原理与模块分析 (4)3.1 序列检测器介绍 (4)3.2 序列检测器设计原理 (4)3.3 序列检测器模块 (4)3.3.1 分频器模块 (5)3.3.2 序列输入模块 (5)3.3.3 序列检测模块 (5)3.4顶层文件 (7)4 电路仿真与分析....................................................................................... 错误!未定义书签。
实验7序列发生器和检测器的设计与实现
一、实验目的
本实验旨在通过设计和实现序列发生器和检测器来熟悉现代无线通信
系统以及其中所使用的发送数据的方法。
二、实验环境
实验要求使用FPGA软硬件设计结合Quartus II软件进行设计实现,
使用ALTERA DE2开发板实现序列发生器和检测器。
三、实验原理
1.序列发生器的原理
序列发生器是一种非常重要的工具,它可以产生一个特定序列的数字
信号。
序列发生器最常用于调试电子系统以及测试它们的性能。
序列发生
器利用一个特定的算法来生成多个等号数字序列,这些序列可以用于传输,接收和解码信息。
2.检测器的原理
检测器是一种对接收到的数据流进行分析的功能,它能够检测出一些
有用的信息,因此它扮演着非常重要的角色。
检测器通常包括一个可以对
收到的数据流进行解码的模块。
检测器为用户提供其中一种特定的输出,
以及相应的信息,这样用户就能够更好地分析系统的行为。
四、实验设计
1.序列发生器的设计
序列发生器的设计主要是利用ALTERA DE2开发板上的FPGA芯片,包括Cyclone IV,搭建序列发生器的设计结构。
在这个结构里,必须实现一个控制器,用于启动和停止发送序列,还要实现一个定时器,定时发送序列。
实验三_用状态机实现序列检测器的设计1实验三_用状态机实现序列检测器的设计1实验三:用状态机实现序列检测器的设计引言:序列检测器是一种通过检测输入序列中的特定模式来实现特定功能的电路。
在本实验中,将使用状态机来设计和实现一个简单的序列检测器,以此来加深对状态机概念的理解。
一、实验目的:1.理解状态机的基本概念和工作原理2.学习使用状态转移图设计状态机3.设计并实现一个简单的序列检测器二、实验原理:1.状态机概念状态机是由有限个状态和输入信号、输出信号及状态转移函数所确定的一种特殊的信息处理系统。
它根据输入信号的变化,通过状态转移函数切换状态,根据当前状态和输入信号来确定输出信号。
2.状态转移图状态转移图是一种图示方法,用于描述状态机的状态、输入和输出之间的关系。
它由状态节点和状态转移边组成。
状态节点表示状态,状态转移边表示状态之间的转移条件。
三、实验内容:1.确定序列检测器的功能和输入输出规格在本实验中,我们设计一个序列检测器来检测输入序列"101"。
当检测到输入序列为"101"时,输出信号为1,否则输出信号为0。
2.设计状态转移图根据输入输出规格,设计状态转移图。
状态转移图应包括初始状态、输入信号、输出信号和状态转移条件。
假设状态为S0、S1和S2,其中S0为初始状态。
输入信号为X,输出信号为Y。
状态转移条件如下:-从S0状态到S1状态,当输入信号X为1时-从S1状态到S2状态,当输入信号X为0时-从S2状态到S0状态,当输入信号X为1时状态转移图如下所示:```01S0→S1→S2↑______```3.实现状态机电路根据状态转移图,可以实现状态机电路。
使用触发器来存储状态。
每个触发器的输出连接到其他触发器的输入。
根据状态转移图,配置触发器的输入和输出。
配置表如下所示:```状态XY下一个状态S000S0S010S1S100S2S110S1S201S0S210S1```根据配置表,配置触发器的输入和输出。
实验三_用状态机实现序列检测器的设计
一、实验目的
①了解序列检测器的基本原理;
②使用状态机模型设计序列检测器;
③理解状态机的工作原理,以及应用状态机设计逻辑电路的思想与方法。
二、实验原理
序列检测器,又称序列检测器或序列检测装置,是将输入的序列信号,与一个事先给定的序列模式进行比较,以判断输入信号是否与给定的模式
相匹配。
当输入信号与给定模式完全匹配时,则检测出一个正确的模式序列。
如果输入的信号不与模式相匹配,则认为出错,并给出错误信号。
序列检测器有很多的组成部分,包括输出寄存器,状态寄存器,比较
状态机,其中比较状态机是序列检测器最重要的组成部分。
它主要功能是:获取模式序列,比较模式和输入序列,并根据比较结果生成对应的输出信号。
具体来说,比较状态机包括:输入处理模块,状态比较模块,指令控
制模块和输出触发模块。
三、实验内容
1、设计一个比较状态机,用于检测并确定序列是否与给定的模式序
列相同。
2、使用VHDL绘制比较状态机的模型,并编写代码实现。
3、真实应用比较状态机,设计一个校验器,用于检测序列是否符合一定的校验规则。
实验八用状态机实现序列检测器的设计1、实验目的:用状态机实现序列检测器的设计,并对其进行仿真和硬件测试。
2、实验仪器:PC机,操作系统为Windows2000/xp,Quartus II 5.1 设计平台,GW48系列SOPE/EDA实验开发系统。
3、实验原理:序列检测器可用于检测一组或多组由二进制码组成的脉冲序列信号,当序列检测器连续收到一组串行二进制码后,如果这组码与检测器中预先设置的码相同,则输出1,否则输出0。
由于这种检测的关键在于正确码的收到必须是连续的,这就要求检测器必须记住前一次的正确码及正确序列,直到在连续的检测中所收到的每一位码都与预置数的对应码相同。
在检测过程中,任何一位不相等都将回到初始状态重新开始检测。
例6-27描述的电路完成对序列数"11100101"的。
当这一串序列数高位在前(左移)串行进入检测器后,若此数与预置的密码数相同,则输出“A”,否则仍然输出“B”。
LIBRARY IEEE ;USE IEEE.STD_LOGIC_1164.ALL;ENTITY SCHK ISPORT( DIN,CLK,CLR:IN STD_LOGIC; --串行输入数据位/工作时钟/复位信号AB:OUT STD_LOGIC_VECTOR(3 DOWNTO 0)); --检测结果输出END SCHK;ARCHITECTURE behave OF SCHK ISSIGNAL Q : INTEGER RANGE 0 TO 8 ;SIGNAL D : STD_LOGIC_VECTOR(7 DOWNTO 0); --8位待检测预置数BEGIND <= "11100101" ; --8位待检测预置数PROCESS( CLK, CLR )BEGINIF CLR = '1' THEN Q <= 0 ;ELSIF CLK'EVENT AND CLK='1' THEN --时钟到来时,判断并处理当前输入的位CASE Q ISWHEN 0=> IF DIN = D(7) THEN Q <= 1 ; ELSE Q <= 0 ; END IF ;WHEN 1=> IF DIN = D(6) THEN Q <= 2 ; ELSE Q <= 0 ; END IF ;WHEN 2=> IF DIN = D(5) THEN Q <= 3 ; ELSE Q <= 0 ; END IF ;WHEN 3=> IF DIN = D(4) THEN Q <= 4 ; ELSE Q <= 0 ; END IF ;WHEN 4=> IF DIN = D(3) THEN Q <= 5 ; ELSE Q <= 0 ; END IF ;WHEN 5=> IF DIN = D(2) THEN Q <= 6 ; ELSE Q <= 0 ; END IF ;WHEN 6=> IF DIN = D(1) THEN Q <= 7 ; ELSE Q <= 0 ; END IF ;WHEN 7=> IF DIN = D(0) THEN Q <= 8 ; ELSE Q <= 0 ; END IF ;WHEN OTHERS => Q <= 0 ;END CASE ;END IF ;END PROCESS ;PROCESS( Q ) --检测结果判断输出BEGINIF Q = 8 THEN AB <= "1010" ; --序列数检测正确,输出 "A" ELSE AB <= "1011" ; --序列数检测错误,输出"B"END IF ;END PROCESS ;END behave ;提示:若对于D <= "11100101 ",电路需记忆:初始状态、1、11、111 、 1110 、11100、111001、1110010、11100101 共9种状态。
八位序列检测器设计班级:1302012学号:姓名:郭春晖一、设计说明使用quartus软件进行仿真和验证,并且还可以检测其他的序列,只需要修改一部分代码就可以实现。
二、方案工作原理:基于FPGA的多路脉冲序列检测器的设计方案,使用VHDL语言设计时序逻辑电路,先设计序列发生器产生序列:01010;再设计序列检测器,检测序列发生器产生序列,若检测到信号与预置待测信号相同,则输出“1”,否则输出“0”,并且将检测到的信号的显示出来。
三、单元模块设计1、序列信号发生器序列信号是指在同步脉冲作用下循环地产生一串周期性的二进制信号。
利用状态机设计,首先定义一个数据类型FSM_ST它的取值为st0到st15的16个状态。
序列信号发生器的代码如下:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY SHK ISPORT (CLK,RST :IN STD_LOGIC; CO :OUT STD_LOGIC );END SHK;ARCHITECTURE behav OF SHK ISTYPE FSM_ST IS (s0,s1,s2,s3,s4,s5,s6,s7,s8,s9,s10,s11,s12,s13,s14,s15);SIGNAL REG:FSM_ST;SIGNAL Q:STD_LOGIC;BEGINPROCESS(CLK,RST)BEGINIF RST ='1' THEN REG<=s0;Q<='0';ELSIF CLK'EVENT AND CLK='1' THENCASE REG ISWHEN s0=> Q<='1'; REG<=s1; WHEN s1=> Q<='0';REG<=s2;WHEN s2=> Q<='1';REG<=s3; WHEN s3=> Q<='1';REG<=s4;WHEN s4=> Q<='0';REG<=s5; WHEN s5=> Q<='1';REG<=s6;WHEN s6=> Q<='0';REG<=s7; WHEN s7=> Q<='0';REG<=s8;WHEN s8=> Q<='0';REG<=s9; WHEN s9=> Q<='1';REG<=s10;WHEN s10=> Q<='1';REG<=s11; WHEN s11=> Q<='0';REG<=s12;WHEN s12=> Q<='1';REG<=s13; WHEN s13=> Q<='0';REG<=s14;WHEN s14=> Q<='1';REG<=s15; WHEN s15=> Q<='0';REG<=s0;WHEN OTHERS=>REG<=s0;Q<='0';END CASE;END IF;END PROCESS; CO<=Q;END behav;转化成可调用的元件:波形仿真如下:2、序列检测器脉冲序列检测起可用于检测一组或多组二进制码组成的脉冲序列信号,当序列检测器连续接收到一组穿行二进制码后,如果这组码与检测器中预先设置的码相同,则输出1,否则输出0。
用状态机实现序列检测器的设计
一、原理
序列检测器可用于检测一组或多组由二进制码组成的脉冲序列信号,当序列检测器连续收到一组串行二进制码后,如果与检测器预先设置的码相同,则输出为1,否则输出为0。
二、内容与步骤:
1、状态转换图
2、设计一个序列检测器,对1110010进行检测,编写实验程序。
3、对程序进行仿真测试并给出仿真波形。
4、仿真通过后进行引脚锁定,再进行一次全编译,并下载到实验箱上进行验证。
三、状态机源程序:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY STATEMACHINE IS
PORT(DIN,CLK,RST:IN STD_LOGIC;
SOUT:OUT STD_LOGIC);
END STATEMACHINE;
ARCHITECTURE BEHA V OF STATEMACHINE IS
TYPE STATES IS (S0,S1,S2,S3,S4,S5,S6,S7);
SIGNAL ST,NST:STATES:=S0;
BEGIN
COM:PROCESS(ST,DIN) BEGIN
CASE ST IS
WHEN S0=>IF DIN='1' THEN NST<=S1;ELSE NST<=S0;END IF;
WHEN S1=>IF DIN='1' THEN NST<=S2;ELSE NST<=S0;END IF;
WHEN S2=>IF DIN='1' THEN NST<=S3;ELSE NST<=S0;END IF;
WHEN S3=>IF DIN='1' THEN NST<=S3;ELSE NST<=S4;END IF;
WHEN S4=>IF DIN='1' THEN NST<=S1;ELSE NST<=S5;END IF;
WHEN S5=>IF DIN='1' THEN NST<=S6;ELSE NST<=S0;END IF;
WHEN S6=>IF DIN='1' THEN NST<=S2;ELSE NST<=S7;END IF;
WHEN S7=>IF DIN='1' THEN NST<=S1;ELSE NST<=S0;END IF;
WHEN OTHERS=>NST<=S0;
END CASE;
END PROCESS;
REG:PROCESS (CLK,RST)
BEGIN
IF RST='1' THEN ST<=S0;
ELSIF CLK'EVENT AND CLK='1' THEN ST<=NST;END IF; END PROCESS REG;
SOUT<='1' WHEN ST=S7 ELSE '0';
END BEHAV;。