实验三:状态机实现序列检测器设计
EDA实验报告实验三、序列检测器的设计
实验三、序列检测器的设计一、预习内容1、预习序列发生器和检测器的基本工作原理;2、画出实验原理草图;3、写出实验的基本步骤和源程序。
二、实验目的1、掌握序列检测器的工作原理;2、学会用状态机进行数字系统设计。
三、实验器材PC机一台、EDA教学实验系统一台、下载电缆一根(已接好)、导线若干四、实验要求1、检测连续4个‘1’的状态机,画出状态转移图,并写出VHD代码;(必做部分)2、了解试验箱,完成数据分配器的硬件实验。
(实验一的硬件操作,首次使用请谨慎使用试验箱!)3、检测“10001110”序列,当检测到该序列后输出为‘1’。
(此部分选作)五、实验原理和实验内容1、序列发生器原理(此部分选作)在数字信号的传输和数字系统的测试中,有时需要用到一组特定的串行数字信号,产生序列信号的电路称为序列信号发生器。
本实验要求产生一串序列“10001110”。
该电路可由计数器与数据选择器构成,其结构图如图6-1所示,其中的锁存输出的功能是为了消除序列产生时可能出现的毛刺现象:图6-1 序列发生器结构图2、序列检测器的基本工作过程:序列检测器用于检测一组或多组由二进制码组成的脉冲序列信号,在数字通信中有着广泛的应用。
当序列检测器连续收到一组串行二进制码后,如果这组码与检测器中预先设置的码相同,则输出1,否则输出0。
由于这种检测的关键在于正确码的收到必须是连续的,这就要求检测器必须记住前一次的正确码及正确序列,直到在连续的检测中所收到的每一位码都与预置的对应码相同。
在检测过程中,任何一位不相等都将回到初始状态重新开始检测。
状态图如图6-2所示:图6-2 序列检测器状态图3、状态机的基本设计思想:在状态连续变化的数字系统设计中,采用状态机的设计思想有利于提高设计效率,增加程序的可读性,减少错误的发生几率。
同时,状态机的设计方法也是数字系统中一种最常用的设计方法。
一般来说,标准状态机可以分为摩尔(Moore)机和米立(Mealy)机两种。
EDA实验报告四(状态机实现序列检测器的设计)
实验四:状态机实现序列检测器的设计一、实验目的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、理解序列信号检测器的工作原理;2、掌握原理图和文本输入的混合设计输入方法;3、理解状态划分;4、掌握状态机程序的编写方法;二、实验原理:序列检测器是时序数字电路中非常常见的设计之一。
它的主要功能是:将一个指定的序列从数字码流中识别出来。
接下来的设计就是针对“011”这个序列的检测器。
设input为数字码流输入,output为检出标记输出,高电平表示“发现指定序列”,低电平表示“没有发现指定的序列”。
设输入的码流为“001101101111011111...”,在时钟2~4中,码流input里出现指定序列“011”,对应输出output在第4个时钟变为高电平“1”,表示发现指定"011”,以此类推。
序列发生器模块采用的是M(n=4)序列发生器,详细可以参考《EDA技术与应用》一书的4.4团队协作及逻辑锁定。
三、实验内容(1)最终的顶层设计原理图如下:左侧的四个D触发器组成的电路为M序列信号发生器模块,它可以产生15位随机的二进制码流。
发生器产生的二进制码流每隔15个时钟周期重复出现一次。
详细的可以在最终的时序仿真图中看出来。
右侧的get_str模块为检测模块,给予状态机的结构编写的,具体如下:library ieee;use ieee.std_logic_1164.all;entity get_ser isport(clk : in std_logic;input : in std_logic;reset : in std_logic;serout : out std_logic_vector(1 downto 0);output : out std_logic);end entity;architecture rtl of get_ser is-- Build an enumerated type for the state machine type state_type is (s0, s1, s2, s3);-- Register to hold the current statesignal state : state_type;beginserout <= ('0'&input);-- Logic to advance to the next stateprocess (clk, reset)beginif reset = '1' thenstate <= s0;elsif (rising_edge(clk)) thencase state iswhen s0=>if input = '0' thenstate <= s1;elsestate <= s0;end if;when s1=>if input = '1' thenstate <= s2;elsestate <= s1;end if;when s2=>if input = '1' thenstate <= s3;elsestate <= s1;end if;when s3 =>if input = '1' thenstate <= s0;elsestate <= s1;end if;end case;end if;end process;-- Output depends solely on the current state process (state)begincase state iswhen s0 =>output <= '0';when s1 =>output <= '0';when s2 =>output <= '0';when s3 =>output <= '1';end case;end process;end rtl;(2)理解状态机请根据上图对照get_str程序理解检测“011”序列的基本编程思路。
序列检测器之状态机设计
序列检测器之状态机设计一、实验目的8位序列数“110110011”的检测,当这一串序列数高位在前(左移)串行进入检测器后,若此数与预置的“密码”数相同,则输出1,否则仍然输出0。
二、实验原理(1)状态机用于序列检测器的设计比其他方法更能显示其优越性。
(2)序列检测器可用于检测一组或多组由二进制码组成的脉冲序列信号,当序列检测器连续收到一组串行二进制码后,如果这组码与检测器中预先设置的码相同,则输出1,否则输出0。
由于这种监测器必须记住前一次的正确码的收到必须是连续的,这就要求检测器必须记住前一次的正确码及正确序列,直到在连续的检测中所收到的每一位码都与预置数的对应码相同。
在检测的过程中,任何一位不相等都将回到初始状态重新开始检测。
三、实验步骤(1)检测数据110110011,高位在前的程序LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY SCHK ISPORT(DIN,CLK, RST : IN STD_LOGIC;--串行输入数据位/工作时钟/复位信号 SOUT : OUT STD_LOGIC);--检验结果输出END SCHK;ARCHITECTURE behav OF SCHK ISTYPE states IS (S0, S1, S2, S3,S4, S5, S6, S7, S8);--定义各种状态SIGNAL ST, NST: states :=s0 ;--设定现态变量和次态变量BEGINCOM: PROCESS(ST, DIN) BEGIN --组合进程,规定各状态转换方式CASE ST IS --11010011WHEN s0 => IF DIN = '1' THEN NST <= s1 ; ELSE NST<=s0 ; END IF ; WHEN s1 => IF DIN = '0' THEN NST <= s2 ; ELSE NST<=s0 ; END IF ; WHEN s2 => IF DIN = '0' THEN NST <= s3 ; ELSE NST<=s0 ; END IF ; WHEN s3 => IF DIN = '1' THEN NST <= s4 ; ELSE NST<=s0 ; END IF ; WHEN s4 => IF DIN = '1' THEN NST <= s5 ; ELSE NST<=s0 ; END IF ; WHEN s5 => IF DIN = '0' THEN NST <= s6 ; ELSE NST<=s0 ; END IF ; WHEN s6 => IF DIN = '1' THEN NST <= s7 ; ELSE NST<=s0 ; END IF ; WHEN s7 => IF DIN = '0' THEN NST <= s8 ; ELSE NST<=s0 ; END IF ; WHEN s8 => IF DIN = '0' THEN NST <= s3 ; 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=s8 ELSE '0' ;END behav ;(2)生成的RTL电路图如下所示:图(1)(3)生成symbol如图所示:图(2)(4)对其进行波形仿真得到波形如下所示:图(3)四、结果分析图(3)的波形显示,当有正确序列进入时,到了状态S8时,输出正确标志SOUT=1。
实验三_用状态机实现序列检测器的设计
实验三_⽤状态机实现序列检测器的设计实验三⽤状态机实现序列检测器的设计⼀、实验⽬的:⽤状态机实现序列检测器的设计,并对其进⾏仿真和硬件测试。
⼆、原理说明:序列检测器可⽤于检测⼀组或多组由⼆进制码组成的脉冲序列信号,当序列检测器连续收到⼀组串⾏⼆进制码后,如果这组码与检测器中预先设置的码相同,则输出a,否则输出b。
由于这种检测的关键在于正确码的收到必须是连续的,这就要求检测器必须记住前⼀次的正确码及正确序列,直到在连续的检测中所收到的每⼀位码都与预置数的对应码相同。
在检测过程中,任何⼀位不相等都将回到初始状态重新开始检测。
例3-1描述的电路完成对序列数"11100101"的。
当这⼀串序列数⾼位在前(左移)串⾏进⼊检测器后,若此数与预置的密码数相同,则输出“a”,否则仍然输出“b”。
【例3-1】//顶层⽂件:module XULIEQI(clk,reset,din8,LED7S);input clk;input reset;input [7:0] din8;output [6:0] LED7S;wire [3:0] AB;xulie u1 (clk, din8, reset, din);schk u2 (din,clk,reset,AB);decl7s u3 (AB,LED7S);endmodule//串⾏检测:module schk(DIN,CLK,CLR,AB);input DIN,CLK,CLR;output[3:0] AB;reg [7:0] Q;reg [3:0] AB;parameteridle = 8'b00000000,a = 8'b00000001,b = 8'b00000010,c = 8'b00000100,d = 8'b00001000,g = 8'b01000000,h = 8'b10000000;parameter data=8’b11100101;always @(posedge CLK or negedge CLR) if(!CLR) beginQ <= idle;endelsebegincase(Q)idle:beginif(DIN==data[7]) Q<=a;else Q<=idle;enda:beginif(DIN== data[6]) Q<=b;else Q<=idle;endb:beginif(DIN== data[5]) Q<=c;else Q<=idle;endc:beginif(DIN== data[4]) Q<=d;else Q<=idle;endd:beginif(DIN== data[3]) Q<=e;e:beginif(DIN== data[2]) Q<=f;else Q<=idle;endf:beginif(DIN== data[1]) Q<=g;else Q<=idle;endg:beginif(DIN== data[0]) Q<=h;else Q<=idle;enddefault :Q<=idle;endcaseendalways @(Q)beginif(Q==h) AB <= 4'b1010 ;else AB <= 4'b1011 ;endendmodule//前端预置8位数据输⼊:module xulie(clk, din8, reset, din); input clk;input[7:0] din8;input reset;output din;parameters0 = 3'b000,s3 = 3'b011,s4 = 3'b100,s5 = 3'b101,s6 = 3'b110,s7 = 3'b111;reg[2:0] cur_state,next_state;reg din;always @ (posedge clk or negedge reset) if(!reset) cur_state <= s0;elsecur_state <= next_state;always @ (cur_state or din8 or din ) begincase (cur_state)s0 : begindin <= din8[7];next_state <= s1;ends1 : begindin <= din8[6];next_state <= s2;ends2 : begindin <= din8[5];next_state <= s3;ends3 : begindin <= din8[4];next_state <= s4;ends4 : begindin <= din8[3];next_state <= s5;endnext_state <= s6;ends6 : begindin <= din8[1];next_state <= s7;ends7 : begindin <= din8[0];next_state <= s0;enddefault : begindin <= 1'b0;next_state <= s0;endendcaseendendmodule提⽰:1.若对于D <= "11100101 ",电路需记忆:初始状态、1、11、111 、1110 、11100、111001、1110010、11100101共9种状态。
实验三_用状态机实现序列检测器的设计
实验三_用状态机实现序列检测器的设计引言:序列检测器是一类常用的电子设计电路,它在接收到特定的输入序列时,会产生特定的输出序列。
在许多应用场景中,如通信系统、数字信号处理和自动控制等领域,序列检测器都发挥着重要的作用。
本实验将利用状态机的概念,设计并实现一个简单的序列检测器。
一、序列检测器的设计原理序列检测器的设计原理基于状态机的思想。
状态机是一种抽象的计算模型,它由一组状态、一组输入和一组转移动作组成。
在序列检测器中,输入序列被连续地输入,状态也会根据输入进行不断变化。
当状态机检测到了预设的特定输入序列时,就会产生相应的输出序列。
二、序列检测器的设计步骤1.确定输入和输出序列:首先确定所需检测的输入序列和对应的输出序列,这将决定状态机的状态转移条件。
2.绘制状态转移图:根据输入和输出序列,绘制状态转移图,即用状态变量和状态转移条件表示状态转移关系。
3.设计状态机的状态转移表:根据状态转移图,将所有可能的状态转移关系整理为一个状态转移表。
4.实现状态机的代码逻辑:根据状态转移表,编写代码实现状态机的逻辑功能。
三、设计实例在本实验中,我们以一个简单示例为例,演示序列检测器的设计流程。
假设输入序列为0101,当检测到该输入序列时,输出序列为011.确定输入和输出序列:输入序列为0101,输出序列为012.绘制状态转移图:根据输入和输出序列,绘制状态转移图如下:0/00,S0,1/1/1说明:状态S0表示未检测到特定输入序列,状态S1表示检测到特定输入序列。
3.设计状态机的状态转移表:根据状态转移图,得到状态转移表如下:输当前状态,0,1S0,S0,S1S1,S0,S14.实现状态机的代码逻辑:根据状态转移表,编写代码实现状态机的逻辑功能,伪代码如下:if (当前状态 == S0)if (输入 == 0)当前状态=S0;输出=0;} else if (输入 == 1)当前状态=S1;输出=0;}} else if (当前状态 == S1)if (输入 == 0)当前状态=S0;输出=1;} else if (输入 == 1)当前状态=S1;输出=1;}}四、实验总结本实验利用状态机的思想,设计并实现了一个简单的序列检测器。
(整理)实验三序列发生器与序列检测器实验报告.
南昌大学实验报告姓名: 学号:6100210173 专业班级:中兴通信101实验类型:验证□综合■设计□创新□实验日期:2012、11、16实验四序列信号发生器与检测器设计一、实验目的1、.学习VHDL文本输入法2、学习有限状态机的设计3、设计序列信号发生器和检测器二.实验内容与要求1. 设计序列发生器,完成序列为0111010011011010的序列生成器2.用有限状态机设计序列检测器,实现串行序列11010的检测器3. 若检测到符合要求的序列,则输出显示位为“1”,否则为“0”4. 对检测到的次数计数三.设计思路1.设计分频器因为最终要把待检测序列的检测次数在数码管上显示出,所以必须设计一个分频器,将起始频率作为数码管的扫描频率,而将分频后的频率作为序列发生器的移位频率,所以在程序中设置10KHZ进行分频分成1HZ脉冲(10KHZ的扫描频率是为了让数码管的动态显示更加清晰)2.设计序列发生器在这次的设计序列发生器时没有用状态转移的方法来来形成一个16位的序列,而是通过直接设计一串16位的序列,通过对最高位的输出与并置来形成一串循环的16位序列,这样设计简单方便,易于操作与控制,也减少了在状态转移产生的误差,其主要的核心程序为:architecture bhv of p2 issignal bs: std_logic_vector(15 downto 0):="0111010011011010";beginxlout<=bs(15);process (clk1hz)beginif (clk1hz'event and clk1hz='1') thenbs<= bs(14 downto 0)&bs(15);先将序列最高位输出至序列检测器中,然后在一个脉冲作用下,将此时最高位变成最低位,其余14位不变,使序列循环移动,最终形成一个16位循环序列。
实验三用状态机实现序列检测器的设计
仿真,分析结果
4、锁引脚
1)根据DE2_pin_assignments文件内容、格式制作 本设计引脚对应文件的引脚锁定文件: XUELIEQI.csv
• 由Processing->generate functional simulation netlist,提取功能仿真的网表
• 由processing -> start simulation 进行功能仿 真,并对结果进行分析。
• 时序仿真
• 由assignments->settings,更改仿真器的设置为 时序仿真:timing
• 双击波形文件下的空白区,得到如下对话框,点 击Noder Finder
弹出下面的对话框,单击List,选中AB、CLK、CLR 、DIN、Q几个端口,单击>_后,点击OK
• 由edit->end time ,设定仿真终止时间为 1us, 选中CLK点击 设置周期是10ns,
并对CLR,DIN作相应设置
• 由assigments->settings,对仿真工具设定为功 能仿真,并将激励文件调入
• 由Processing->generate functional simulation netlist,提取功能仿真的网表
• 由processing -> start simulation 进行功能仿
实验三 用状态机实现序列检测器的设计
任务分析
• 本次实验的核心是:应用有限状态机设计思路, 检测输入的串行数据是否是”11100101”。
实验三_用状态机实现序列检测器的设计1
实验三_用状态机实现序列检测器的设计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、真实应用比较状态机,设计一个校验器,用于检测序列是否符合一定的校验规则。
2021年序列检测器的设计实验报告
BEGIN
output1 <= '0';
CASE fstate IS
WHEN st1 =>
IF (((input1 = '1') AND (input2 = '1'))) THEN
reg_fstate <= st2;
ELSE
reg_fstate <= st0;
设计原理图及源程序
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITYAAIS
PORT ( CLK ,DIN,RST : IN STD_LOGIC;
SOUT: OUT STD_LOGIC;
ENDAA;
ARCHITECTURE behav OFAAIS
TYPE states IS (s0, s1, s2, s3,s4,s5,s6,s7,s8);
SIGNAL ST,NST: states:=s0;
BEGIN
COM : PROCESS(ST,DIN) BEGIN
CASE ST IS
WHEN s0 => IF DIN = '1' THENNST <= s1;ELSE NST<=s0;END IF;
WHEN s1=> IF DIN = '0' THENNST <= s2;ELSE NST<=s0;END IF;
WHEN s8=> IF DIN = '0' THENNST <= s2;ELSE NST<=s0;END IF;
WHEN OTHERS =>NST <= st0;
序列检测器的设计杭电
《EDA技术》实验报告实验名称:序列检测器的设计姓名:班级:学号:实验日期:指导教师:一、实验设计要求用状态机实现序列检测器的设计,了解一般状态机的设计与应用。
例8-11描述的电路完成对序列数“11100101”的检测,当这一串序列数高位在前(左移)串行进入检测器后,若此数与预置的密码数相同,则输出“A”,否则仍然输出“B”。
完成对序列对文本编辑输入,仿真测试并给出仿真波形,了解控制信号的时序。
二、设计原理二序列检测器可用于检测一组或多组由二进制码组成的脉冲序列信号,当序列检测器连续收到一组串行二进制码后,如果这组码与检测器中预先设置的码相同,则输出1,否则输出0。
由于这种检测的关键在于正确码的收到必须是连续的,这就要求检测器必须记住前一次的正确码及正确序列,直到在连续的检测中所收到的每一位码都与预置数的对应码相同。
在检测过程中,任何一位不相等都将回到初始状态重新开始检测。
电路结构图或原理图电路功能描述定义了序列检测器顶层设计元件端口信号,输入端口:DIN, CLK,CLR,数据类型被定义为STD_LOGIC;输出端口:AB 定义的数据类型STD_LOGIC_VECTOR(3 DOWNTO 0) ; 定义信号SIGNAL Q: INTEGER RANGE 0 TO 8; 和SIGNAL D: STD_LOGIC_VECTOR(7 DOWNTO 0); 若DIN这一串序列数与预置数D相同,则输出“A”,否则仍然输出“B”。
三、实验程序程序1:序列检测器描述四、编译及仿真结果仿真结果显示:该设计是成功的。
完成对序列数“11100101”的检测,当这一串序列数高位在前(左移)串行进入检测器后,若此数与预置的密码数相同,则输出“A”,否则仍然输出“B”。
五、总结。
序列检测器
序列检测器一.实验目的1.了解状态机的设计方法。
2.设计序列检测器。
二.实验仪器及设备计算机、Quartus II。
三.实验原理序列检测器在数据通信,雷达和遥测等领域中用于检测同步识别标志。
如下图所示。
当检测器收到一串序列{101}之后,输出标志1,否则输出标志0。
如上图所示,使用状态机设计,可以实现序列检测功能。
每检测到一个正确的比特,状态机就进行状态的翻转,直到序列结束。
四.实验内容及注意事项1.使用VHDL编写源代码。
library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity ztj isport( clk:in std_logic;reset:in std_logic;din:in std_logic;true:out std_logic);end ztj;architecture arc of ztj istype state_type is(s1,s2,s3); signal din_d:std_logic; signal statc:state_type; beginprocess(clk)beginif clk'event and clk='1' then din_d<=din;end if;end process;-----process(clk,reset)beginif reset='1'thentrue<='0';statc<=s1;elsif clk'event and clk='1' then case statc iswhen s1=>if din_d='1' thenstatc<=s2;elsestatc<=s1;end if;true<='0';when s2=>if din_d='0' thenstatc<=s3;elsestatc<=s2;end if;true<='0';when s3=>if din_d='1' thenstatc<=s1;true<='1';elsestatc<=s3;true<='0';end if;when others=>statc<=statc;end case;end if;end process;-----------end arc;2.仿真完成后,将VHDL文件转换为状态机转换图。
实验三:状态机实现序列检测器设计
实验三:状态机实现序列检测器设计《FPGA》课程报告设计题目:状态机实现序列检测器设计学生班级:学生学号:学生姓名:指导教师:时间:成绩:一、实验目的:1.理解有限状态机的概念;2. 掌握有限状态机的状态图的画法及其含义二、实验原理:本次实验的内容是:应用有限状态机设计思路,检测输入的串行数据是否是”11100101”,本次实验由顶层文件、串行检测、并行数据转串行、数码管显示四个模块组成。
1.并行数据转串行数据模块功能是:可以异步复位,可以在时钟控制下,将并行输入数据din[7:0],按照din[7],din[6],din[5],din[4],din[3],din[2],din[1],din[0]的顺序输出至串行检测模块的输入端口din。
2.串行检测模块:输入信号:DIN-----1bit的串行输入数据CLK-----同步输入时钟CLR ------异步清零信号,当CLR=1,系统输出置0,否则,系统正常工作输出信号: AB--------4bits数据,如果系统检测到“11100101”这8bit的输入,AB=4’b1010,否则,AB=4’b1011.三、实验过程:1.首先建立一个新的工程,添加一个新的Verilog Module文件,然后写入并行数据转串行数据模块的代码,代码如下:然后执行综合,确认无误后,新建一个Test Bench WaveForm文件,进行仿真,仿真图如下:2.再新建一个Verilog Module文件,在其中写入串行检测模块的代码,代码如下:然后执行综合,确认无误后,新建一个Test Bench WaveForm文件,进行仿真,仿真图如下:3. 再新建一个Verilog Module文件,数码管显示模块的代码,代码如下:然后执行综合,确认无误后,新建一个Test Bench WaveForm文件,进行仿真,仿真图如下:4.编写顶层文件,将上面三个模块例化在一起,代码如下:然后将新的顶层文件经行综合,确认无误后,新建一个Test Bench WaveForm文件,进行仿真,仿真图如下:5.添加消抖模块,然后编写新的顶层文件,将消抖模块与上面的模块例化在一起,代码如下:保存后生成新的顶层文件:6.完成以上操作后,执行综合确认无误,经行锁引脚操作:锁引脚完成后,编辑、修改约束文件:7. 生成下载配置文件,下载到开发板进行经行验证。
实验三序列信号发生器与检测器设计
实验三序列信号发生器与检测器设计
一、实验目的
1.学习一般有限状态机的设计;
2.实现串行序列的设计。
二、设计要求
1.先设计0111010011011010序列信号发生器;
2.再设计一个序列信号检测器,若系统检测到串行序列11010则输出为“1”,否则输出为“0”,并对其进行仿真和硬件测试。
三、实验设备
PC机,Quartu eⅱ软件,实验箱
四、实验原理
1、序列信号发生器
复位信号CLRN。
当CLRN=0时,使CNT=0000,当CLRN=1时,不影响程序运行,每来一个CLK脉冲CNT加一。
2、序列信号检测器
状态转移图:
五、实验步骤(实验程序来源:豆丁文库)
1、信号发生器
1)建立工作库文件夹,输入设计项目VHDL代码,如下:
2)对其进行波形仿真,如下图:
波形分析:由ZOUT项可以得出ZOUT的输出值为0111010011011010,为理想输出值,即信号发生器的程序是对的。
3)将其转换成可调用元件如图:
2、信号检测器
1)建立工作库文件夹,输入设计项目VHDL代码,如下:
3)将其转换成可调用元件如图:
3.序列信号检测器顶层文件
1)调用序列信号发生器和序列信号检测器元件,建立工作库文件夹,输入设计项目原理图如下图:
2)对总体进行波形仿真,如下图:
波形分析:在15个时钟周期内ss有2个1,就代表出现了2个11010信号,实现了信号的检测,达到了预期的检测效果。
4.管脚邦定。
序列信号发生器和检测器
南昌大学实验报告学生姓名:赖硕秋学号:6100208060 专业班级:电子081实验类型:□验证□综合■设计□创新实验日期:2010.11.12 实验成绩:实验三序列信号发生器与检测器设计一、实验目的(1)掌握产生特定序列信号的方法;(2)学会用状态机方法来实现VHDL编程设计;(3)进一步巩固分层设计的方法.二、实验内容与要求用状态机设计实现串行序列检测器,先设计序列信号发生器,产生序列“0111010011011011010”;再设计检测器,若检测到串行序列11010则输出计数器计入个数,并对其进行仿真和硬件测试。
三、设计原理本实验中,采用分层设计的思想,底层分别用VHDL文本来描述序列发生器和序列检测器,顶层用原理图法连线好元件化的器件。
对于序列发生器(特定序列)设计比较多样,可以采用并行case语句来实现产生特定的周期性序列;序列检测器采用状态机的设计方法,在不同状态下检测特定的序列信号,最后通过一个计数器计入所检测到的序列个数,并且通过并行移位来显示有限个产生信号。
根据所检测的序列“11010”,可以得到以下的状态转移图:四、实验程序方法一:VHDL文本法,不分层(独立编写)LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY XULIE ISPORT(CLK,CLR,RESET:IN STD_LOGIC;M:OUT STD_LOGIC;COUT1,COUT2:OUT STD_LOGIC_VECTOR(3 DOWNTO 0));END ENTITY;ARCHITECTURE ONE OF XULIE ISTYPE M_STATE IS(ST0,ST1,ST2,ST3,ST4);SIGNAL STA:M_STATE;SIGNAL SHUZI:STD_LOGIC_VECTOR(4 DOWNTO 0);SIGNAL A:STD_LOGIC;SIGNAL CC:STD_LOGIC_VECTOR(7 DOWNTO 0);BEGINSHUZI<="11010";PROCESS(CLK,CLR,RESET,A,CC)V ARIABLE N:INTEGER RANGE 16 DOWNTO 1;BEGINIF RESET='1' THEN N:=1; --序列发生器"0111010011011010"ELSIF CLK'EVENT AND CLK='1'THEN CASE N ISWHEN 1=>A<='0';N:=N+1;WHEN 2=>A<='1';N:=N+1;WHEN 3=>A<='1';N:=N+1;WHEN 4=>A<='1';N:=N+1;WHEN 5=>A<='0';N:=N+1;WHEN 6=>A<='1';N:=N+1;WHEN 7=>A<='0';N:=N+1;WHEN 8=>A<='0';N:=N+1;WHEN 9=>A<='1';N:=N+1;WHEN 10=>A<='1';N:=N+1;WHEN 11=>A<='0';N:=N+1;WHEN 12=>A<='1';N:=N+1;WHEN 13=>A<='1';N:=N+1;WHEN 14=>A<='0';N:=N+1;WHEN 15=>A<='1';N:=N+1;WHEN 16=>A<='0';N:=1;WHEN OTHERS=>NULL;END CASE;END IF;IF CLR='1' THEN STA<=ST0;CC<=(OTHERS=>'0'); --序列检测器"11010"ELSIF CLK'EVENT AND CLK='0' THENCASE STA ISWHEN ST0=> IF A=SHUZI(4) THEN STA<=ST1;ELSE STA<=ST0;END IF;WHEN ST1=> IF A=SHUZI(3) THEN STA<=ST2;ELSE STA<=ST0;END IF;WHEN ST2=> IF A=SHUZI(2) THEN STA<=ST3;ELSE STA<=ST2;END IF;WHEN ST3=> IF A=SHUZI(1) THEN STA<=ST4;ELSE STA<=ST0;END IF;WHEN ST4=> IF A=SHUZI(0) THEN STA<=ST0;IF CC(3 DOWNTO 0)=9 THEN CC<=CC+7;ELSE CC<=CC+1;END IF;ELSE STA<=ST2;END IF;END CASE;END IF;M<=A;COUT1<=CC(3 DOWNTO 0);COUT2<=CC(7 DOWNTO 4);END PROCESS;END ARCHITECTURE;方法二:采用底层+顶层的设计方法,先用VHDL设计好发生器和检测器,顶层用原理图连线。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《FPGA》课程报告
设计题目:状态机实现序列检测器设计学生班级:
学生学号:
学生姓名:
指导教师:
时间:
成绩:
一、实验目的:
1.理解有限状态机的概念;
2. 掌握有限状态机的状态图的画法及其含义
二、实验原理:
本次实验的内容是:应用有限状态机设计思路,检测输入的串行数据是否是”11100101”,本次实验由顶层文件、串行检测、并行数据转串行、数码管显示四个模块组成。
1.并行数据转串行数据模块功能是:可以异步复位,可以在时钟控制下,将并行输入数据din[7:0],按照din[7],din[6],din[5],din[4],din[3],din[2],din[1],din[0]的顺序输出至串行检测模块的输入端口din。
2.串行检测模块:
输入信号:DIN-----1bit的串行输入数据
CLK-----同步输入时钟
CLR ------异步清零信号,当CLR=1,系统输出置0,否则,系统正常工作
输出信号:AB--------4bits数据,如果系统检测到“11100101”这8bit 的输入,AB=4’b1010,否则,AB=4’b1011.
三、实验过程:
1.首先建立一个新的工程,添加一个新的Verilog Module文件,然后写入并行数据转串行数据模块的代码,代码如下:
进行仿真,仿真图如下:
2.再新建一个Verilog Module文件,在其中写入串行检测模块的代码,代码如下:
进行仿真,仿真图如下:
3. 再新建一个Verilog Module文件,数码管显示模块的代码,代码如下:
然后执行综合,确认无误后,新建一个Test Bench WaveForm文件,进行仿真,仿真图如下:
4.编写顶层文件,将上面三个模块例化在一起,代码如下:
然后将新的顶层文件经行综合,确认无误后,新建一个Test Bench WaveForm文件,进行仿真,仿真图如下:
5.添加消抖模块,然后编写新的顶层文件,将消抖模块与上面的模块例化在一起,代码如下:
保存后生成新的顶层文件:
6.完成以上操作后,执行综合确认无误,经行锁引脚操作:
锁引脚完成后,编辑、修改约束文件:
7. 生成下载配置文件,下载到开发板进行经行验证。
四、思考题:
说明本设计的代码表达的是什么类型的状态机,它的优点是什么?详述其功能和对序列数检测的逻辑过程
答:本实验代码表达的是Mealy型状态机,Mealy有限状态机的输出不单与当前状态有关,而且与输入信号的当前值有关,Mealy有限状态机的输出直接受输入信号的当前值影响,而输入信号可能在一个时钟周期内任意时刻变化,这使得Mealy有限状态机对输入的响应发生在当前时钟周期。