EDA实验报告——序列检测器

合集下载

EDA实验报告实验三、序列检测器的设计

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实验报告四(状态机实现序列检测器的设计)

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、编译,如果有多个文件要把这个文件设为当前顶层实体,这样软件编译时就只编译这个文件。

序列检测器实验报告

序列检测器实验报告

序列检测器设计实验内容:设计一个1110010序列检测器,即检测器检测到序列1110010时,输出为1,否则输出为0。

输入信号:一个时钟输入信号clk;一个输入端x以输入序列来检测;一个输入y用来选择是检测序列1110010或是检测自己输入的序列;一个输入k(7..0)用来输入想要检测器检测的序列;输出信号:一个7位输出信号q,用来输出正在检测的7位序列;一个1位输出信号unlk,当被检测序列符合时,输出unlk为1否则为0;中间信号:再定义两个7位的中间信号a和combination;执行操作:在上升的时钟沿时候,将从x输入的序列赋给7位a,在y等于1的情况下,令中间信号combination为1110010,否则,在y等于0的情况下,令中间信号combination为从k输入的七位长序列。

最后把a的值赋给q,如果a与combination输出unlk等于1否则等于0。

(1)序列检测器语言设计:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;USE IEEE.STD_LOGIC_ARITH.ALL;entity xulie2 isport (clk,x:in std_logic;y:in std_logic;k:in std_logic_vector(7 downto 1);unlk:out std_logic;q:out std_logic_vector(7 downto 1)); end xulie2;architecture art of xulie2 issignal a:std_logic_vector(7 downto 1);signal combination: std_logic_vector(7 downto 1);beginprocess(clk)beginif clk'event and clk='1' thena<=a(6 downto 1)&x;if y='1' thencombination<="1110010";else combination<=k;end if;end if;q<=a;end process;unlk<='1' when(a=combination) else '0';end art;序列检测器波形图:其中ENDTIME=10.0us GRIDSIZE=100.0ns波形图分析:如图,选择输入端y输入为1时,q对应着输出从x输入的7位序列,如果从x输入的待检测的7位序列为1110010时,unlk为1,否则为0,当选择输入端y输入为0时,q依旧对应着输出从x输入的待检测的当前7为序列,但是只有当从x输入的7为序列与从k输入的7位序列一致时,输出端unlk才为1,否则为0。

EDA实验报告——序列检测器

EDA实验报告——序列检测器

七、状态图输入法实现序列检测器1、基本知识点序列检测器原理。

状态图输入法。

2、实验设备(1)PC机一台。

(2)DDA系列数字系统实验平台。

(3)QuartusⅡ配套软件。

3、实验概述序列检测器序列检测器是用于从二进制码流中检测出一组特定序列信号的时序电路。

接收的序列号与检测器预设值比较,相同则输出为1,否则输出为0.4、实验内容及步骤用状态图输入法实现序列检测器。

1,新建工程,工程文件夹名称为exp_detect3,工程名称和顶层实体名称均为exp_detect3,选择目标器件为EPF10K20TI144-4.2,状态图输入:选择菜单File——New——State Machine File命令,打开State Machine Editor窗口,选择Tools——State MachineWizard命令,弹出如下状态机创建向导对话框:点击OK,进入下一个页面,如下所示:在上图中选择复位Reset信号为异步,高电平有效,输出端午寄存器,点击Next,进入下图:在四个选框里分别如上图填入名称和控制信号。

进入下一个页面:如上设置后,进入下一个页面,点击finish,完成。

关闭状态机向导,生成所需的状态机,做适当调整,如下图所示:3,保存该设计文件为exp_detect3.smf,并添加到工程文件夹。

4,选择菜单Tools——Generate HDL File命令,打开对话框,选择VHDL,点击OK,分析成功后则自动生成exp_detect3.vhd。

代码如下:LIBRARY ieee;USE ieee.std_logic_1164.all;ENTITY exp_detect3 ISPORT (clock : IN STD_LOGIC;reset : IN STD_LOGIC := '0';din : IN STD_LOGIC := '0';z : OUT STD_LOGIC);END exp_detect3;ARCHITECTURE BEHAVIOR OF exp_detect3 ISTYPE type_fstate IS (s0,s1,s2,s3,s4,s5,s6);SIGNAL fstate : type_fstate;SIGNAL reg_fstate : type_fstate;BEGINPROCESS (clock,reset,reg_fstate)BEGINIF (reset='1') THENfstate <= s0;ELSIF (clock='1' AND clock'event) THENfstate <= reg_fstate;END IF;END PROCESS;PROCESS (fstate,din)BEGINz <= '0';CASE fstate ISWHEN s0 =>IF ((din = '1')) THENreg_fstate <= s1;ELSIF (NOT((din = '1'))) THENreg_fstate <= s0;-- Inserting 'else' block to prevent latch inferenceELSEreg_fstate <= s0;END IF;WHEN s1 =>IF ((din = '1')) THENreg_fstate <= s2;ELSIF (NOT((din = '1'))) THENreg_fstate <= s0;-- Inserting 'else' block to prevent latch inferenceELSEreg_fstate <= s1;END IF;WHEN s2 =>IF ((din = '1')) THENreg_fstate <= s3;ELSIF (NOT((din = '1'))) THENreg_fstate <= s0;-- Inserting 'else' block to prevent latch inference ELSEreg_fstate <= s2;END IF;WHEN s3 =>IF ((din = '1')) THENreg_fstate <= s3;ELSIF (NOT((din = '1'))) THENreg_fstate <= s4;-- Inserting 'else' block to prevent latch inference ELSEreg_fstate <= s3;END IF;WHEN s4 =>IF ((din = '1')) THENreg_fstate <= s1;ELSIF (NOT((din = '1'))) THENreg_fstate <= s5;-- Inserting 'else' block to prevent latch inference ELSEreg_fstate <= s4;END IF;WHEN s5 =>IF ((din = '1')) THENreg_fstate <= s6;ELSIF (NOT((din = '1'))) THENreg_fstate <= s0;-- Inserting 'else' block to prevent latch inference ELSEreg_fstate <= s5;END IF;WHEN s6 =>IF ((din = '1')) THENreg_fstate <= s2;ELSIF (NOT((din = '1'))) THENreg_fstate <= s0;-- Inserting 'else' block to prevent latch inferenceELSEreg_fstate <= s6;END IF;IF (NOT((din = '1'))) THENz <= '1';-- Inserting 'else' block to prevent latch inferenceELSEz <= '0';END IF;WHEN OTHERS =>z <= 'X';report "Reach undefined state";END CASE;END PROCESS;END BEHAVIOR;5,对代码进行编译。

EDA序列检测器设计

EDA序列检测器设计

8-1 序列检测器设计一、实验目的:用状态机实现序列检测器的设计,了解一般状态机的设计。

二、实验原理:序列检测器可用于检测一组或多组由二进制码组成的脉冲序列信号,当序列检测器连续收到一组串行二进制码后,如果这组码与检测器中预先设计的码相同,则输出1,否则输出0。

由于这种检测的关键在于正确码的收到必须是连续的,这就要检测器必须记住前一次的正确码及正确序列,直到在连续的检测中所收到的每一位码都与预置数的对应码相同。

在检测过程中任何一位不相等都将回到初始状态重新开始检测。

三、实验程序:实验一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 behav OF SCHK ISSIGNAL Q:INTEGER RANGE 0 TO 8;SIGNAL D:STD_LOGIC_VECTOR(7 DOWNTO 0);BEGIND<="11100101";PROCESS(CLK,CLR)BEGINIF CLR='1' THEN Q<=0;ELSIF CLK'EVENT AND CLK='1' THENCASE 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";ELSE AB<="1011";END IF;END PROCESS;END behav;实验二LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY SCHK1 ISPORT( CLK,CLR : IN STD_LOGIC;DIN : IN STD_LOGIC;AB : OUT INTEGER RANGE 0 TO 15 ); END SCHK1;ARCHITECTURE behav OF SCHK1 ISTYPE FSM_ST IS(S0,S1,S2,S3,S4,S5,S6,S7,S8);SIGNAL current_state, next_state: FSM_ST;BEGINREG:PROCESS ( CLK ,CLR )BEGINIF CLR = '1' THEN current_state <= S0;ELSIF CLK='1' AND CLK'EVENT THENcurrent_state <= next_state ;END IF ;END PROCESS ;COM:PROCESS( current_state, next_state)BEGINCASE current_state ISWHEN S0 => AB<= 11;IF DIN = '1' THEN next_state<=S1 ;ELSE next_state<=S0;END IF;WHEN S1 => AB<= 11;IF DIN = '1' THEN next_state<=S2 ;ELSE next_state<=S0;END IF;WHEN S2 => AB<= 11;IF DIN = '1' THEN next_state<=S3 ;ELSE next_state<=S0;END IF;WHEN S3 => AB<= 11;IF DIN = '0' THEN next_state<=S4 ;ELSE next_state<=S0;END IF;WHEN S4 => AB<= 11;IF DIN = '0' THEN next_state<=S5 ;ELSE next_state<=S0;END IF;WHEN S5 => AB<= 11;IF DIN = '1' THEN next_state<=S6 ;ELSE next_state<=S0;END IF;WHEN S6 => AB<= 11;IF DIN = '0' THEN next_state<=S7 ;ELSE next_state<=S0;END IF;WHEN S7 => AB<= 11;IF DIN = '1' THEN next_state<=S8 ;ELSE next_state<=S0;END IF;WHEN S8 => AB<= 10;IF DIN = '0' THEN next_state<=S0 ;ELSE next_state<=S0;END IF;END CASE ;END PROCESS;END behav;实验三LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY SCHK2 ISPORT( CLK,CLR : IN STD_LOGIC;DIN : IN STD_LOGIC;DT : IN STD_LOGIC_VECTOR(7 DOWNTO 0);AB : OUT INTEGER RANGE 0 TO 15 );END SCHK2;ARCHITECTURE behav OF SCHK2 ISTYPE FSM_ST IS(S0,S1,S2,S3,S4,S5,S6,S7,S8);SIGNAL C_ST: FSM_ST;SIGNAL D : STD_LOGIC_VECTOR(7 DOWNTO 0);BEGINREG:PROCESS ( CLK ,CLR )BEGINIF CLR = '1' THEN D <= DT;C_ST <= S0;AB <= 11;ELSIF CLK='1' AND CLK'EVENT THEN--current_state <= next_state ;--END IF ;--END PROCESS ;--COM:PROCESS( current_state, next_state) --BEGINCASE C_ST ISWHEN S0 => AB<= 11;IF DIN = D(7) THEN C_ST<=S1 ;ELSE C_ST<=S0;END IF;WHEN S1 => AB<= 11;IF DIN = D(6) THEN C_ST<=S2 ;ELSE C_ST<=S0;END IF;WHEN S2 => AB<= 11;IF DIN = D(5)THEN C_ST<=S3 ;ELSE C_ST<=S0;END IF;WHEN S3 => AB<= 11;IF DIN = D(4) THEN C_ST<=S4 ;ELSE C_ST<=S0;END IF;WHEN S4 => AB<= 11;IF DIN = D(3)THEN C_ST<=S5 ;ELSE C_ST<=S0;END IF;WHEN S5 => AB<= 11;IF DIN = D(2) THEN C_ST<=S6 ;ELSE C_ST<=S0;END IF;WHEN S6 => AB<= 11;IF DIN = D(1) THEN C_ST<=S7 ;ELSE C_ST<=S0;END IF;WHEN S7 => AB<= 11;IF DIN = D(0) THEN C_ST<=S8 ;ELSE C_ST<=S0;END IF;WHEN S8 => AB<= 10;IF DIN = D(0) THEN C_ST<=S0 ;ELSE C_ST<=S0;END IF;END CASE ;END IF;END PROCESS;END behav;实验四LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY SCHK3 ISPORT(DIN,CLK,CLR:IN STD_LOGIC;DATAIN:IN STD_LOGIC_VECTOR(7 DOWNTO 0);AB:OUT STD_LOGIC_VECTOR(3 DOWNTO 0)) ; END SCHK3;ARCHITECTURE f3 OF SCHK3 ISTYPE ST_TYPE1 IS (s0,s1,s2,s3,s4,s5,s6,s7,s8);SIGNAL C_ST:ST_TYPE1;SIGNAL Q:STD_LOGIC;BEGINPROCESS(CLR,CLK)BEGINIF CLR='1' THEN C_ST<=s0;Q<='0';ELSIF CLK='1' AND CLK'EVENT THENCASE C_ST ISWHEN s0 => IF DATAIN(7)=DIN THEN C_ST<=s1;ELSIF C_ST<=s0;END IF;WHEN s1 => IF DATAIN(6)=DIN THEN C_ST<=s2;ELSIF C_ST<=s0;END IF;WHEN s2 => IF DATAIN(5)=DIN THEN C_ST<=s3;ELSIF C_ST<=s0;END IF;WHEN s3 => IF DATAIN(4)=DIN THEN C_ST<=s4;ELSIF C_ST<=s0;END IF;WHEN s4 => IF DATAIN(3)=DIN THEN C_ST<=s5;ELSIF C_ST<=s0;END IF;WHEN s5 => IF DATAIN(2)=DIN THEN C_ST<=s6;ELSIF C_ST<=s0;END IF;WHEN s6 => IF DATAIN(1)=DIN THEN C_ST<=s7;ELSIF C_ST<=s0;END IF;WHEN s7 => IF DATAIN(0)=DIN THEN C_ST<=s8;ELSIF C_ST<=s0;END IF;WHEN s8 => Q<='1';END CASE;END IF;END PROCESS;IF Q='1' THEN AB<="1010";ELSIF AB<="1011";END IF;END f3;四、仿真结果:实验一实验二实验三实验四五、硬件分配:实验一F-7键7 键6 键2、键1 数码管6CLR CLK DIN AB(3) AB(2) AB(1) AB(0) PIO11 PIO9 PIO10 PIO39 PIO38 PIO37 PIO36 Pin4 Pin 2 Pin3 Pin160 Pin159 Pin158 Pin141 实验二同上实验三同上实验四同上六、实验结论:实验一是moore型状态机,其优点是其输出仅与当前的状态有关,是同步输出状态机。

EDA序列检测器实验报告

EDA序列检测器实验报告

《实验七序列检测器实验》实验报告杨丽斌计科二班学号:20080810218一、实验内容及相关描述:设计一个1110010 序列检测器,即检测器连续收到一组串行码“1110010”后,输出检测标志1,否则输出0。

代码序列检测器是一种同步时序电路,它用于搜索,检测输入的二进制代码串中是否出现指定的代码序列,001 序列检测器的原理图如下:CPX 0 1 0 0 1 0 1 0 1 1 0 1Y 0 0 0 0 1 0 0 0 0 0 0 0二、设计思路:本实验依然采用模块化的设计方法,用VHDL语言设计每一个模块,在顶层图上用图形化模式调用相应模块,组成相关的功能总共用到的模块有:1、分频器:将时钟信号进行十分频2、串行并出序列检测器3、串行并行并出序列检测器4、时钟信号扫描端口:用于扫描时钟信号,并根据信号使能相应的数码管5、数码管驱动模块:用于选择数码管6、其他小模块三、相关主要子模块的设计:1、分频器(clk_div):将时钟信号进行十分频:(1)、VHDL语言(2)、波形仿真:波形仿真参数设置:网格时间:100ns,总时间:3us;时钟信号长度:100ns2、串行并出序列检测器:用时序电路设计方法,先做出其状态转移表,再根据状态转移表编写VHDL程序(1)、状态转移表:(2)VHDL语言程序:功能说明:根据所画的状态转移表,编写状态转移的VHDL语言,当输入的串行序列为:1110010时。

在时钟上升沿,输出Q变为1,并行输出的序列sequence为串行序列的并行输出(3)、波形仿真:波形仿真参数设置:网格时间:100ns,总时间:3us;时钟信号长度:100ns3、并入置数的序列检测器:设计说明;该序列检测器使用的是比较器的原理,(1)VHDL语言:功能描述:该序列检测器使用的是比较器的原理,在使能端en有效时,当输入序列为1110010时,输出Q=1,其他情况下Q=0(2)波形仿真图波形仿真参数设置:网格时间:100ns,总时间:3us;时钟信号长度:100ns4、时钟信号扫描模块:(1)VHDL语言:功能描述:用高频时钟信号作为扫描信号,将时钟信号通过计数器计数之后,以7个信号作为一次循环,从而将信号每次一位din扫描到数码管上(2)、波形仿真:波形仿真参数设置:网格时间:100ns,总时间:3us;时钟信号长度:100ns5、数码管驱动模块用于将时钟信号计数,从而选择驱动相应的数码管(1)VHDL语言:功能说明:通过设置7个状态,以时钟信号为标记,时钟信号到来时在每一个状态,选择驱动相应的数码管(2)波形仿真:波形仿真参数设置:网格时间:100ns,总时间:3us;时钟信号长度:100ns7、其他小模块:(1)、序列寄存器功能说明:在串行比较时将序列用用寄存器存储,并通过时钟信号的驱动依次输出波形仿真:波形仿真参数设置:网格时间:100ns,总时间:3us;时钟信号长度:100ns(2)、串行、并行检测器选择模块:VHDL语言:波形仿真:波形仿真参数设置:网格时间:100ns,总时间:3us;时钟信号长度:100ns四、顶层图:1、顶层图电路设计:功能描述及主要管脚说明:重要的管脚输入:din[6..0]:并行输入数据的序列比较En:串行输入数据Clk:数据输入时钟信号(低频)Clk2:扫描时钟信号(高频)Cho:串行、并行选择(0为串行,1为并行)输出:A-G:数码管管脚S[6..0]:连接相应数码管Q:序列检测结果(1为检测到序列1110010,0为没有检测到)2、波形仿真(注:由于时间端总长过小,仿真时会将分频模块先去掉以便能很好的观察到仿真结果,在器件测试时再加上分频模块):波形仿真参数设置:网格时间:100ns,总时间:3us;时钟信号长度:100ns五、实验总结:这次实验的设计、以及相应的编写VHDL语言有以前做计算器的经验,很多模块还是很相似的,因此编写VHDL语言及相关的模块设计除了花了一点时间、并没有遇到多大的阻碍,但是在器件验证过程中却出现了一些问题:主要是高低频时钟信号选择的问题,在这个问题上花了比较多的时间。

EDA实验报告 计数器及序列检测器

EDA实验报告 计数器及序列检测器

EDA实验报告通信工程二班李桐20100820212实验目的:1.计数器的原理及应用。

2.混合模式的工程设计法的应用。

3.数码管扫描电路的应用。

4.序列检测器原理。

5.Mealy型与Moore型状态机原理。

6.状态图输入法。

实验原理:1.计数器是一种常用的可统计时钟脉冲个数的时序逻辑器件。

计数器中的“数”是触发器的状态组合,即编码。

计数器循环一次所包含的状态总数就称作模。

本次试验采用VHDL语言直接构建一个202进制计数器。

2.状态机是由一组状态、一个初始状态、输入输出和状态转换函数组成的时序电路。

状态机主要用来控制电路的状态转移,针对不同类型的状态机,输出可以由现态确定,也可以由现态及次态共同确定。

按状态机的信号输出方式分类,可分为Mealy型状态机和Moore型状态机。

Mealy型状态机,次态和输出均取决于现态和当前输入;Moore型状态机,下一状取决于当前状态和当前输入,但其输出仅取决于当前状态。

序列检测器是用于从二进制码流中检测出一组特定序列信号的时序电路。

接受的序列信号与检测器预设值变焦,相同则输出为1,否则输出为 0。

实验具体步骤:1.202进制加法计数器(1).VHDL结构式描述顶层(调用了202进制加法计数器与七段译码器)library ieee;use ieee.std_logic_1164.all;entity cnt212_7seg isport( clk,clrn,en,scan_clk:in std_logic;cout:out std_logic;seg7:out std_logic_vector(6 downto 0);wei:out std_logic_vector(2 downto 0));end cnt212_7seg;architecture arch of cnt212_7seg iscomponent cnt212 isport( clk,clrn,En:in std_logic;cout:out std_logic;b,s,g:out std_logic_vector(3 downto 0));end component;component scan_led3_vhd isport(scan_clk,cnt_aclr:in std_logic;datab,datas,datag:in std_logic_vector(3 downto 0);seg7:out std_logic_vector(6 downto 0);wei:out std_logic_vector(2 downto 0));end component;signal wdatab,wdatas,wdatag:std_logic_vector(3 downto 0);begincnt_212:cnt212 port map(clk,clrn,En,cout,wdatab,wdatas,wdatag);scan_led3:scan_led3_vhd port map(scan_clk,(not clrn),wdatab,wdatas,wdatag,seg7,wei); end arch;(2).VHDL语言描述学号计数器(调用了10进制加法计数器)library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use ieee.std_logic_arith.all;entity cnt212 isport( clk,clrn,En:in std_logic;cout:out std_logic;b,s,g:out std_logic_vector(3 downto 0));end cnt212;architecture arch of cnt212 iscomponent exp_cnt10 isport(clk,clrn,En:in std_logic;cq:out std_logic_vector(3 downto 0);cout:out std_logic);end component;component dffport(d,clk,clrn:in std_logic;q:out std_logic);end component;signal couts,coutg,coutb,q1,q2,lkaclr:std_logic;signal regb,regs,regg:std_logic_vector(3 downto 0);begincntg:exp_cnt10 port map(clk,(clrn and lkaclr),En,regg,coutg);dff1:dff port map(coutg,clk,clrn,q1); --利用D触发器实现进位cnts:exp_cnt10 port map(q1,(clrn and lkaclr),En,regs,couts);dff2:dff port map((couts and coutg),clk,clrn,q2); --利用D触发器实现进位cntb:exp_cnt10 port map(q2,(clrn and lkaclr),En,regb,coutb);lkaclr<= '0' when ( regb=x"2" and regs=x"1" and regg=x"2") else --在此实现清零'1' ;cout<= '1' when ( regb=x"2" and regs=x"1" and regg=x"1") else --在此使进位为'1''0';b<=regb;s<=regs;g<=regg;end arch;(3).VHDL语言描述10进制加法计数器library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity exp_cnt10 isport(clk,clrn,En:in std_logic;cq:out std_logic_vector(3 downto 0);cout:out std_logic);end exp_cnt10;architecture arch of exp_cnt10 issignal cqi:std_logic_vector(3 downto 0);beginprocess(En,clk,clrn,cqi)beginif clrn='0' thencqi<="0000";elsif clk'event and clk='1' thenif En='1' thenif cqi<9 thencqi<=cqi+1;elsecqi<="0000";end if;end if;end if;if cqi=9 thencout<='1';elsecout<='0';end if;cq<=cqi;end process;end arch;(4).VHDL语言描述七段译码器library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity scan_led3_vhd isport(scan_clk,cnt_aclr:in std_logic;datab,datas,datag:in std_logic_vector(3 downto 0);seg7:out std_logic_vector(6 downto 0);wei:out std_logic_vector(2 downto 0));end scan_led3_vhd;architecture rtl of scan_led3_vhd issignal seg_wire:std_logic_vector(3 downto 0);signal wei_wire:std_logic_vector(2 downto 0);type st is (k_L,k_R,ad_L);signal st_nxt:st;beginscan_st:process(scan_clk,cnt_aclr,st_nxt)beginif cnt_aclr='1' thenst_nxt<=k_L;elsif(scan_clk'event and scan_clk='1') thencase st_nxt iswhen k_L=> st_nxt<=k_R;when k_R=> st_nxt<=ad_L;when ad_L=> st_nxt<=k_L;end case;end if;end process;scan_o:process(st_nxt,datab,datas,datag)begincase st_nxt iswhen k_L=>seg_wire<=datab;wei_wire<="100";when k_R=>seg_wire<=datas;wei_wire<="010";when ad_L=>seg_wire<=datag;wei_wire<="001";end case;end process;seg7<="1111110" when seg_wire=x"0" else"0110000" when seg_wire=x"1" else"1101101" when seg_wire=x"2" else"1111001" when seg_wire=x"3" else"0110011" when seg_wire=x"4" else"1011011" when seg_wire=x"5" else"1011111" when seg_wire=x"6" else"1110000" when seg_wire=x"7" else"1111111" when seg_wire=x"8" else"1111011" when seg_wire=x"9" else"1110111" when seg_wire=x"a" else"0011111" when seg_wire=x"b" else"0001101" when seg_wire=x"c" else"0111101" when seg_wire=x"d" else"1001111" when seg_wire=x"e" else"1000111" when seg_wire=x"f" else"0000000" ;wei<=wei_wire;end rtl;(5).顶层RTL电路(6).202进制加法计数器RTL电路(7).顶层功能仿真波形图(8).202进制加法计数器功能仿真波形图如图所示成功实现了202进制(9).管脚分配及下载验证2.序列检测器(1).1110010序列检测器的VHDL设计状态转换表现态输入0时次态/输出输入1时次态/输出S0 S0/0 S1/0S1 S0/0 S2/0S2 S0/0 S3/0S3 S4/0 S3/0S4 S5/0 S1/0S5 S0/0 S6/0S6 S0/1 S2/0(2).用状态图输入法实现序列检测器选择复位reset信号为异步,高电平有效,输出端无寄存器。

序列检测器_实验报告

序列检测器_实验报告

一、实验目的1. 理解序列检测器的工作原理和设计方法;2. 掌握时序电路的经典设计方法;3. 学习使用Verilog HDL语言进行状态机的设计;4. 通过实验验证序列检测器的功能。

二、实验原理序列检测器是一种同步时序电路,用于检测输入的一串二进制编码。

当输入序列与预设的编码相匹配时,输出高电平;否则,输出低电平。

序列检测器在数字通信、安全防盗、密码认证等领域有着广泛的应用。

序列检测器的基本工作原理如下:1. 预设一个编码序列,称为目标序列;2. 当输入序列与目标序列相匹配时,输出高电平;3. 当输入序列与目标序列不匹配时,输出低电平。

三、实验器材1. PC机一台;2. EDA教学实验系统一台;3. 下载电缆一根(已接好);4. 导线若干。

四、实验步骤1. 设计序列检测器的Verilog代码;2. 在EDA教学实验系统上编译、仿真和下载Verilog代码;3. 连接实验电路,下载Verilog代码;4. 通过逻辑分析仪观察输出波形,验证序列检测器的功能。

五、实验内容1. 设计一个长度为4位的序列检测器,目标序列为1001;2. 设计一个长度为8位的序列检测器,目标序列为11001001;3. 通过实验验证序列检测器的功能。

六、实验代码```verilogmodule seqdet(input clk, // 时钟信号input rst, // 复位信号input [3:0] din, // 输入序列output reg out // 输出信号);// 定义状态localparam [1:0] IDLE = 2'b00,MATCH = 2'b01,NOMATCH = 2'b10;// 状态寄存器reg [1:0] state, nextstate;// 输出函数always @(posedge clk or posedge rst) beginif (rst) beginstate <= IDLE;out <= 1'b0;end else beginstate <= nextstate;out <= (state == MATCH) ? 1'b1 : 1'b0; endend// 激励函数always @() begincase (state)IDLE: beginif (din == 4'b1001) beginnextstate = MATCH;end else beginnextstate = NOMATCH;endendMATCH: beginnextstate = IDLE;endNOMATCH: beginnextstate = IDLE;enddefault: beginnextstate = IDLE;endendcaseendendmodule```七、实验结果与分析1. 长度为4位的序列检测器:当输入序列为1001时,输出高电平;当输入序列不为1001时,输出低电平。

状态机实现序列检测器

状态机实现序列检测器

EDA专用周实验报告课题名称:用状态机实现序列检测器班级:通信技术09—1 姓名:指导老师:日期: 2011.2.21—3.5目录一、实验目的 (3)二、实验内容 (3)三、实验原理 (3)四、实验步骤 (4)五、实验程序及现象 (5)六、实训总结 (16)七、参考资料 (19)一、实验目的掌握利用有限状态机实现一般时序逻辑分析的方法,了解一般状态机的设计与应用。

二、实验内容设计一序列检测器并在SmartSOPC实验箱上进行硬件测试。

利用Quartus ||软件进行设计、仿真验证,最后进行引脚锁定并完成硬件测试。

用KEY5控制复位,KEY6控制状态机的时钟,KEY1~KEY4控制输入待检预置数和检测预置数(检测密码),并在数码管1\2和4\5上显示。

三、实验原理(1)序列检测器可用于检测由二进制码组成的脉冲序列信号。

当序列检测器连续收到一组串行二进制码后,如果这组序列码与检测器中预先设置的序列码相同,则输出1,否则输出0.这种检测的关键是必须收到连续的正确码,所以要求检测器必须对前一次接受到的序列码做记忆分析,直到在连续检测中所收到的每一位二进制码都与预置序列码对应相同。

在检测过程中,只要有一位不相等都将回到初始状态重新开始检测。

不考虑重叠的可能。

(2)为了配合硬件测试,本实验提供了一个测试模块(schk_test),该模块主要产生序列检测器所需的时钟、复位、串行输入序列码及预置数等信号。

对莫模块的各端口说明如下:Clock 系统时钟输入(48MHz)key[5..0] 按键输入disp[3..0] 序列检测器检测结果输入(显示于数码管8)sda 串行序列码输出clkout 序列检测器状态机时钟输出rstout 序列检测器复位信号输出dat[7..0] 检测预置数输出led7..0] LED输出seg[7..0] 数码管段输出dig[7..0] 数码管位输出四、实验步骤(1)启动Quartus||建立一个空白工程,然后命名为schk_top.qpf。

EDA设计实验_序列检测器-

EDA设计实验_序列检测器-

实验题目:设计串行数据检测器实验说明:设计一个“1101”串行数据检测器。

使得但输出序列中出现“1001”时,结果中就输出1。

输入/输出如下所示:输入x:000 101 110 011 011 101 101 110 101输出z:000 000 000 010 010 000 001 000 000实验分析:初始状态设为s0,此时检测数据序列为“0000”,当再检测到一个0时,仍为s0,当检测到1时,进入下一个状态s1,此时序列为“0001”;当在状态s1检测到0时,进入到状态s2,此时序列为“0010”,当检测到1时,仍为s1;当在状态s2检测到0时,进入到状态s3,此时序列为“0100”,当检测到1时,进入s1;当在状态s3检测到0时,进入s0,当检测到1时,进入状态s4,此时序列为“1001”,结果输出为1;当在s4检测到0时,进入状态s2,当检测到1时,进入状态s1。

状态图如下:实验代码:module sjjcq10_3(x,z,clk,reset,state);input x,clk,reset;output z;output[2:0]state;reg[2:0]state;reg z;parameter s0='d0,s1='d1,s2='d2,s3='d3,s4='d4;always@(posedge clk)beginif(reset)begin state<=s0;z<=0;endelsecasex(state)s0: beginif(x==0) begin state<=s0;z<=0;endelse begin state<=s1;z<=0;endends1: beginif(x==0) begin state<=s2;z<=0;endelse begin state<=s1;z<=0;endends2:beginif(x==0) begin state<=s3;z<=0;endelse begin state<=s1;z<=0;endends3:beginif(x==0) begin state<=s0;z<=0;endelse begin state<=s4;z<=1;endends4:beginif(x==0) begin state<=s2;z<=0;endelse begin state<=s1;z<=0;endenddefault: state<=s0;endcaseendendmodule实验仿真波形:分析:每当到达状态四即s4,此时检测序列为“1101”,输出即为1.。

EDA实验报告实验三:序列信号发生器与检测器设计++++

EDA实验报告实验三:序列信号发生器与检测器设计++++

Nb大学实验报告学生姓名:EDA教父学号:6100xxxx99 专业班级:通信实验类型:□验证□综合□设计□创新实验日期:2012-10-15 实验成绩:实验三序列信号发生器与检测器设计一、实验目的1、进一步熟悉EDA实验装置和QuartusⅡ软件的使用方法;2、学习有限状态机法进行数字系统设计;3、学习使用原理图输入法进行设计二、设计要求完成设计、仿真、调试、下载、硬件测试等环节,在EDA实验装置上实现一个串行序列信号发生器和一个序列信号检测器的功能,具体要求如下:1、先用原理图输入法设计0111010011011010序列信号发生器,其最后6BIT数据用LED显示出来;2、再设计一个序列信号检测器,检测上述序列信号,若检测到串行序列“11010”则输出为“1”,否则输出为“0”;三、主要仪器设备1、微机1台2、QuartusII集成开发软件1套3、EDA实验装置1套四、实验原理1、序列信号发生器复位信号CLRN。

当CLRN=0时,使CNT=0000,当CLRN=1时,不影响程序运行,每来一个CLK脉冲CNT加一。

2、序列信号检测器状态转移图:五、实验步骤1、信号发生器1)建立工作库文件夹,输入设计项目VHDL代码,如下:L I B R A R Y I E E E;U S E I E E E.S T D_L O G I C_1164.A L L;U S E I E E E.S T D_L O G I C_A R I T H.A L L;U S E I E E E.S T D_L O G I C_U N S I G N E D.A L L;E N T I T Y X L S I G N A L16_1I SP O R T(C L K,C L R N:I N S T D_L O G I C;L E D:B U F F E R S T D_L O G I C_V E C T O R(5D O W N T O0);L E D O U T:O U T S T D_L O G I C_V E C T O R(5D O W N T O0);Z O U T:O U T S T D_L O G I C);E N D X L S I G N A L16_1;A R C H I T E C T U R E o n e O F X L S I G N A L16_1I SS I G N A L C N T:S T D_L O G I C_V E C T O R(3D O W N T O0);S I G N A L Z R E G:S T D_L O G I C;--S I G N A L C N T8:S T D_L O G I C_V E C T O R(2D O W N T O0);B E G I Np r o c e s s(c l K)b e g i nc a s e c n t i sW H E N"1000"=>L E D<="101001";W H E N"1001"=>L E D<="010011";W H E N"1010"=>L E D<="100110";W H E N"1011"=>L E D<="001101";W H E N"1100"=>L E D<="011011";W H E N"1101"=>L E D<="110110";W H E N"1110"=>L E D<="101101";W H E N"1111"=>L E D<="011010";W H E N"0000"=>L E D<="110100";W H E N"0001"=>L E D<="101001";W H E N"0010"=>L E D<="010011";W H E N"0011"=>L E D<="100111";W H E N"0100"=>L E D<="001110";W H E N"0101"=>L E D<="011101";W H E N"0110"=>L E D<="111010";W H E N"0111"=>L E D<="110100";W H E N O T H E R S=>L E D<=N U L L;E N D C A S E;E N D P R O C E S S;P R O C E S S(C L K,C L R N)B E G I NI F(C L R N='0')T H E N C N T<="0000";E L S EI F(C L K'E V E N T A N D C L K='1')T H E NC N T<=C N T+'1';E N D I F;E N D I F;E N D P R O C E S S;P R O C E S S(C N T)B E G I NW H E N"0000"=>Z R E G<='0';W H E N"0001"=>Z R E G<='1';W H E N"0010"=>Z R E G<='1';W H E N"0011"=>Z R E G<='1';W H E N"0100"=>Z R E G<='0';W H E N"0101"=>Z R E G<='1';W H E N"0110"=>Z R E G<='0';W H E N"0111"=>Z R E G<='0';W H E N"1000"=>Z R E G<='1';W H E N"1001"=>Z R E G<='1';W H E N"1010"=>Z R E G<='0';W H E N"1011"=>Z R E G<='1';W H E N"1100"=>Z R E G<='1';W H E N"1101"=>Z R E G<='0';W H E N"1110"=>Z R E G<='1';W H E N"1111"=>Z R E G<='0';W H E N O T H E R S=>Z R E G<='0';E N D C A S E;E N D P R O C E S S;Z O U T<=Z R E G;L E D O U T<=L E D;e n d o n e;2)对其进行波形仿真,如下图:2、信号检测器1)建立工作库文件夹,输入设计项目VHDL代码,如下:LIBRARY IEEE ;USE IEEE.STD_LOGIC_1164.ALL;ENTITY SCHK ISPORT(DIN, CLK, CLR : IN STD_LOGIC;ss : OUT STD_LOGIC_VECTOREND SCHK;ARCHITECTURE behav OF SCHK ISSIGNAL Q : INTEGER RANGE 0 TO 5 ;SIGNAL D : STD_LOGIC_VECTOR(5 DOWNTO 0);BEGIND <= "11010" ;PROCESS( CLK, CLR )BEGINIF CLR = '1' THEN Q <= 0 ;ELSIF CLK'EVENT AND CLK='1' THENCASE Q ISWHEN 0=> IF DIN = D(4) THEN Q <= 1 ; ELSE Q <= 0 ; END IF ;WHEN 1=> IF DIN = D(3) THEN Q <= 2 ; ELSE Q <= 0 ; END IF ;WHEN 2=> IF DIN = D(2) THEN Q <= 3 ; ELSE Q <= 2 ; END IF ;WHEN 3=> IF DIN = D(1) THEN Q <= 4 ; ELSE Q <= 0 ; END IF ;WHEN 4=> IF DIN = D(0) THEN Q <= 5 ; ELSE Q <= 2 ; END IF ;WHEN OTHERS => Q <= 0 ;END CASE ;END IF ;END PROCESS ;PROCESS( Q )BEGINIF Q = 5 THEN ss <= "1" ;ELSE ss <= "0" ;END IF ;END PROCESS ;END behav ;3)将其转换成可调用元件如图:3.序列信号检测器顶层文件1)调用序列信号发生器和序列信号检测器元件,建立工作库文件夹,输入设计项目原理图如下图:2)对总体进行波形仿真,如下图:4.管脚邦定六、实验心得只能copy到这,后面的自己写吧!DSFKLSD;GKJLSJDFG;LKSD;LG。

序列检测器实验报告

序列检测器实验报告

序列检测器实验报告序列检测器实验报告概述:序列检测器是一种用于判断输入序列是否符合特定规则的工具。

在本次实验中,我们使用了一种基于深度学习的序列检测器模型,并对其进行了性能评估和优化。

1. 实验背景序列检测器在许多领域中都有着广泛的应用,如自然语言处理、语音识别、图像处理等。

本次实验旨在通过搭建一个序列检测器模型,探索其在序列数据处理中的效果和潜力。

2. 实验设计我们选择了一组包含数字序列的数据集作为实验样本。

数据集中的每个序列都由一系列数字组成,我们的目标是通过训练序列检测器模型,使其能够准确地判断输入序列是否符合某种规则。

3. 模型搭建我们采用了一种基于循环神经网络(RNN)的模型来构建序列检测器。

RNN是一类特殊的神经网络,可以有效地处理序列数据。

我们使用了长短期记忆(LSTM)单元作为RNN的基本构建块,以提高模型对长期依赖关系的建模能力。

4. 实验步骤首先,我们将数据集划分为训练集和测试集,其中训练集用于模型的训练和参数优化,测试集用于评估模型的性能。

接下来,我们对训练集进行预处理,将每个数字序列转换为对应的数值表示。

然后,我们构建了一个包含多个LSTM 层的序列检测器模型,并通过反向传播算法对其进行训练。

5. 实验结果经过多次实验和参数调整,我们得到了一个性能较好的序列检测器模型。

在测试集上的评估结果显示,该模型能够以高准确率和较低的误判率判断输入序列是否符合规则。

此外,我们还对模型的训练时间和资源消耗进行了分析,发现其在处理大规模序列数据时表现出较好的效率。

6. 优化探索为了进一步提升序列检测器的性能,我们尝试了一些优化策略。

首先,我们增加了模型的深度,即增加了LSTM层的数量。

实验结果显示,增加模型深度可以提高模型的准确率,但也会增加训练时间和资源消耗。

其次,我们尝试了不同的优化算法和学习率调度策略,以寻找更好的模型参数配置。

最后,我们还尝试了集成学习的方法,将多个序列检测器模型的预测结果进行集成,以进一步提升模型的性能。

EDA实验四:序列

EDA实验四:序列

南昌大学实验报告学生姓名:沈巧巧学号:6102113086 专业班级:中兴通信131班实验类型:□验证□综合█设计□创新实验日期:实验成绩:实验四序列检测器的设计一、实验目的1、了解序列检测器的工作原理。

2、掌握时序电路设计中状态积的应用。

3、进一步掌握用V HDL 语言实现复杂时序电路的设计过程。

二、实验原理序列检测器在很多数字系统中都不可缺少,有其是在通信系统当中。

序列检测器的作用就是从一系列的码流中找出用户希望出现的序列,序列可长可段。

比如在通信系统中,数据流帧头的检测就属于一个序列检测器。

逐比特比较的序列检测器是在输入一个特定波特率的二进制码流中,每进一个二进制码,预期望的序列相比较。

首先比较第一个码,如果第一个码与期望的序列的第一个码相同,那么下一个进来的二进制码再和期望的序列的第二个码相比较,依次比较下去,直到所有的码都和期望的序列相一致,就认为检测到一个期望的序列。

如果检测过程中出现一个码与期望的序列当中对应的码不一样,则从头开始比较。

三、实验步骤1、新建一个工程,建完工程之后,再新建一个V HDL File,打开V HDL编辑器对话框,编写V HDL程序。

module xulie(clk,rst,Q,led,z);input clk,rst;output Q,led,z;reg Q,z;reg [15:0]q;reg [4:0]led;reg[6:0]ST;parameter s0=0,s1=1,s2=2,s3=3,s4=4,s5=5;always@(posedge clk)beginif(!rst)beginq<=16'b0111010010011010;endelse beginq[0]<=q[15];Q<=q[15];q[15:1]<=q[14:0];endendalways @(posedge clk)beginif(ST==s4&&Q==0)begin z<=1;led<=5'b10010;endelse begin z<=0;led<=5'b00000;endendalways@(posedge clk or negedge rst)beginif(!rst)beginST<=s0;endelse begincasex(ST)s0: if(Q==1'b1) ST<=s1; else ST<=s0;s1: if(Q==1'b0) ST<=s2; else ST<=s1;s2: if(Q==1'b0) ST<=s3; else ST<=s1;s3: if(Q==1'b1) ST<=s4; else ST<=s0;s4: if(Q==1'b0) ST<=s5; else ST<=s1;s5: if(Q==1'b0) ST<=s0; else ST<=s1;default:ST<=s0;endcaseend endendmodule2.选目标器件CycloneII中的EP2C35F672C8并编译。

序列检测器 实验报告

序列检测器 实验报告

序列检测器实验报告序列检测器是一种常见的信号处理技术,广泛应用于通信、雷达、生物医学和金融等领域。

本文将介绍序列检测器的原理、实验设计和实验结果,并对其应用进行讨论。

一、序列检测器的原理序列检测器是一种用于检测和识别输入信号序列的设备或算法。

它通过对输入信号进行观测和分析,判断信号是否符合特定的模式或规律。

常见的序列检测器包括有限状态机、卷积神经网络和隐马尔可夫模型等。

有限状态机是一种基本的序列检测器,它由一组状态和状态之间的转移规则组成。

在每个时刻,输入信号会触发状态之间的转移,最终达到一个终止状态。

通过定义状态和转移规则,可以实现对输入信号序列的检测和识别。

二、实验设计本实验旨在设计并实现一个简单的序列检测器,用于检测二进制信号序列中是否存在特定的模式。

实验使用MATLAB软件进行仿真,并基于有限状态机的原理进行设计。

1. 实验步骤(1)定义有限状态机的状态和转移规则;(2)生成一组随机的二进制信号序列作为输入;(3)根据状态和转移规则,对输入信号进行观测和分析;(4)判断输入信号是否符合特定的模式,并输出检测结果。

2. 实验参数为了简化实验设计,我们假设输入信号序列中的模式为"110"。

具体的状态和转移规则如下:(1)初始状态为S0;(2)当输入为"1"时,状态转移为S1;(3)当输入为"0"时,状态转移为S0;(4)当当前状态为S1且输入为"0"时,状态转移为S2;(5)当当前状态为S2且输入为"1"时,状态转移为S3;(6)当当前状态为S3且输入为"0"时,状态转移为S0。

三、实验结果经过实验设计和仿真,我们得到了以下实验结果:1. 输入信号序列:1011010110112. 检测结果:存在模式"110"通过对输入信号序列进行观测和分析,我们成功地检测到了模式"110"的存在。

EDA测试序列检测器

EDA测试序列检测器

EDA实验报告实验目的:设计一个含数码管显示的七位二进制序列发生器。

实验内容:1.原理说明:多位数码显示电路由显示字符的段选线和选通数码管的位选线控制。

各位数码管共用8位段选线的电路结构使得同一时刻选通的各位数码管显示相同字符。

通过采用动态扫描显示方式,利用人眼视觉暂留效应及数码管余辉特性,可以“同时”显示出多位数码管的字符。

2.工程结构框架:移位寄存器(序列发生器)→7SEG译码器→控制a b c d e f g 七段实验流程:1设计移位寄存器2设计7SEG译码器3完成顶层电路图连接,构成完整序列发生器4完成仿真,下载测试实验具体步骤:1、设计移位寄存器(序列发生器)序列发生器是产生一组0、1二进制码按特定顺序排列的串行信号的仪器。

利用移位寄存器设计一个七位二进制序列发生器。

创建工程文件:单击界面左上角的file,执行file--->New Project Wizard 命令,打开工程导向,在第一页中分别输入新建工程所在路径,工程名称和顶层实体名称(同名)器件选择:如上图,在Family中选择MAXII,如需修改可以选择菜单Assignments->Device命令,弹出Device设置对话框修改Device family和A vailable devices选项。

创建设计文件:利用lpm定制移位寄存器,在对话框左侧列表中选择Installed Plug-Ins—>Storage —>lpm_shiftreg项在参数设置中,设置移位方向为左移,数据并入并出端和串入串出端,异步清零。

定制完成后生成的VHDL程序:-- megafunction wizard: %LPM_SHIFTREG%-- GENERA TION: STANDARD-- VERSION: WM1.0-- MODULE: lpm_shiftreg-- ============================================================ -- File Name: xulie.vhd-- Megafunction Name(s):-- lpm_shiftreg---- Simulation Library Files(s):-- lpm-- ============================================================ -- ************************************************************-- THIS IS A WIZARD-GENERA TED FILE. DO NOT EDIT THIS FILE!---- 9.0 Build 184 04/29/2009 SP 1 SJ Web Edition-- ************************************************************--Copyright (C) 1991-2009 Altera Corporation--Y our use of Altera Corporation's design tools, logic functions--and other software and tools, and its AMPP partner logic--functions, and any output files from any of the foregoing--(including device programming or simulation files), and any--associated documentation or information are expressly subject--to the terms and conditions of the Altera Program License--Subscription Agreement, Altera MegaCore Function License--Agreement, or other applicable license agreement, including,--without limitation, that your use is for the sole purpose of--programming logic devices manufactured by Altera and sold by--Altera or its authorized distributors. Please refer to the--applicable agreement for further details.LIBRARY ieee;USE ieee.std_logic_1164.all;LIBRARY lpm;USE lpm.all;ENTITY xulie ISPORT(aclr : IN STD_LOGIC ;clock : IN STD_LOGIC ;data : IN STD_LOGIC_VECTOR (6 DOWNTO 0);load : IN STD_LOGIC ;shiftin : IN STD_LOGIC ;q : OUT STD_LOGIC_VECTOR (6 DOWNTO 0);shiftout : OUT STD_LOGIC);END xulie;ARCHITECTURE SYN OF xulie ISSIGNAL sub_wire0 : STD_LOGIC_VECTOR (6 DOWNTO 0);SIGNAL sub_wire1 : STD_LOGIC ;COMPONENT lpm_shiftregGENERIC (lpm_direction : STRING;lpm_type : STRING;lpm_width : NA TURAL);PORT (load : IN STD_LOGIC ;aclr : IN STD_LOGIC ;clock : IN STD_LOGIC ;q : OUT STD_LOGIC_VECTOR (6 DOWNTO 0);data : IN STD_LOGIC_VECTOR (6 DOWNTO 0);shiftout : OUT STD_LOGIC ;shiftin : IN STD_LOGIC);END COMPONENT;BEGINq <= sub_wire0(6 DOWNTO 0);shiftout <= sub_wire1;lpm_shiftreg_component : lpm_shiftregGENERIC MAP (lpm_direction => "RIGHT",lpm_type => "LPM_SHIFTREG",lpm_width => 7)PORT MAP (load => load,aclr => aclr,clock => clock,data => data,shiftin => shiftin,q => sub_wire0,shiftout => sub_wire1);END SYN;-- ============================================================ -- CNX file retrieval info-- ============================================================ -- Retrieval info: PRIV A TE: ACLR NUMERIC "1"-- Retrieval info: PRIV A TE: ALOAD NUMERIC "0"-- Retrieval info: PRIV A TE: ASET NUMERIC "0"-- Retrieval info: PRIV A TE: ASET_ALL1 NUMERIC "1"-- Retrieval info: PRIV A TE: CLK_EN NUMERIC "0"-- Retrieval info: PRIV A TE: INTENDED_DEVICE_FAMILY STRING "FLEX10K" -- Retrieval info: PRIV A TE: LeftShift NUMERIC "0"-- Retrieval info: PRIV A TE: ParallelDataInput NUMERIC "1"-- Retrieval info: PRIV A TE: Q_OUT NUMERIC "1"-- Retrieval info: PRIV A TE: SCLR NUMERIC "0"-- Retrieval info: PRIV A TE: SLOAD NUMERIC "1"-- Retrieval info: PRIV A TE: SSET NUMERIC "0"-- Retrieval info: PRIV A TE: SSET_ALL1 NUMERIC "1"-- Retrieval info: PRIV A TE: SYNTH_WRAPPER_GEN_POSTFIX STRING "0"-- Retrieval info: PRIV A TE: SerialShiftInput NUMERIC "1"-- Retrieval info: PRIV A TE: SerialShiftOutput NUMERIC "1"-- Retrieval info: PRIV A TE: nBit NUMERIC "7"-- Retrieval info: CONSTANT: LPM_DIRECTION STRING "RIGHT"-- Retrieval info: CONSTANT: LPM_TYPE STRING "LPM_SHIFTREG"-- Retrieval info: CONSTANT: LPM_WIDTH NUMERIC "7"-- Retrieval info: USED_PORT: aclr 0 0 0 0 INPUT NODEFV AL aclr-- Retrieval info: USED_PORT: clock 0 0 0 0 INPUT NODEFV AL clock-- Retrieval info: USED_PORT: data 0 0 7 0 INPUT NODEFV AL data[6..0]-- Retrieval info: USED_PORT: load 0 0 0 0 INPUT NODEFV AL load-- Retrieval info: USED_PORT: q 0 0 7 0 OUTPUT NODEFV AL q[6..0]-- Retrieval info: USED_PORT: shiftin 0 0 0 0 INPUT NODEFV AL shiftin-- Retrieval info: USED_PORT: shiftout 0 0 0 0 OUTPUT NODEFV AL shiftout -- Retrieval info: CONNECT: @clock 0 0 0 0 clock 0 0 0 0-- Retrieval info: CONNECT: q 0 0 7 0 @q 0 0 7 0-- Retrieval info: CONNECT: @shiftin 0 0 0 0 shiftin 0 0 0 0-- Retrieval info: CONNECT: shiftout 0 0 0 0 @shiftout 0 0 0 0-- Retrieval info: CONNECT: @load 0 0 0 0 load 0 0 0 0-- Retrieval info: CONNECT: @aclr 0 0 0 0 aclr 0 0 0 0-- Retrieval info: CONNECT: @data 0 0 7 0 data 0 0 7 0-- Retrieval info: LIBRARY: lpm lpm.lpm_components.all-- Retrieval info: GEN_FILE: TYPE_NORMAL xulie.vhd TRUE-- Retrieval info: GEN_FILE: TYPE_NORMAL xulie.inc FALSE-- Retrieval info: GEN_FILE: TYPE_NORMAL xulie.cmp TRUE-- Retrieval info: GEN_FILE: TYPE_NORMAL xulie.bsf TRUE-- Retrieval info: GEN_FILE: TYPE_NORMAL xulie_inst.vhd FALSE-- Retrieval info: LIB_FILE: lpm2、设计7SEG译码器7seg译码器VHDL程序library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity seg_7 isport(scan_clk,cnt_aclr:in std_logic;z0,z1,z2,z3,z4,z5,z6:in std_logic;seg7:out std_logic_vector(6 downto 0);wei:out std_logic_vector(6 downto 0));end seg_7;architecture rtl of seg_7 issignal seg_wire:std_logic;signal wei_wire:std_logic_vector(6 downto 0);type st is (k_0,k_1,k_2,k_3,k_4,k_5,k_6);signal st_nxt:st;beginscan_st:process(scan_clk,cnt_aclr,st_nxt)beginif cnt_aclr='1' thenst_nxt<=k_0;elsif(scan_clk'event and scan_clk='1') thencase st_nxt iswhen k_0=> st_nxt<=k_1;when k_1=> st_nxt<=k_2;when k_2=> st_nxt<=k_3;when k_3=> st_nxt<=k_4;when k_4=> st_nxt<=k_5;when k_5=> st_nxt<=k_6;when k_6=> st_nxt<=k_0;end case;end if;end process;scan_o:process(st_nxt,z0,z1,z2,z3,z4,z5,z6) begincase st_nxt iswhen k_0=>seg_wire<=z0;wei_wire<="0000001";when k_1=>seg_wire<=z1;wei_wire<="0000010";when k_2=>seg_wire<=z2;wei_wire<="0000100";when k_3=>seg_wire<=z3;wei_wire<="0001000";when k_4=>seg_wire<=z4;wei_wire<="0010000";when k_5=>seg_wire<=z5;wei_wire<="0100000";when k_6=>seg_wire<=z6;wei_wire<="1000000";end case;end process;seg7<="1111110" when seg_wire='0' else"0110000" when seg_wire='1';wei<=wei_wire;end rtl; 、3、完成顶层电路图连接创建子模块的符号文件:在7SEG译码器VHDL程序文件中选择菜单File—>Create/update—>Create Symbol File for Current File命令并连接完成顶层电路图:各模块功能说明:设定发生序列,发生序列设为1010101;利用LPM定制的移位寄存器,完成序列发生功能,利用shiftout端发生内定序列1010101。

序列检测器实验报告

序列检测器实验报告

#### 实验目的1. 理解序列检测器的工作原理;2. 掌握时序电路的经典设计方法;3. 学习使用Verilog HDL语言进行状态机的设计;4. 验证序列检测器在实际电路中的性能。

#### 实验原理序列检测器是一种同步时序电路,用于检测特定的串行码序列。

它能够识别并响应特定长度的二进制序列,一旦检测到匹配序列,就会产生一个输出信号。

序列检测器在数字通信、数据存储和信号处理等领域有着广泛的应用。

#### 实验器材1. PC机一台;2. FPGA开发板;3. 下载电缆一根;4. 信号发生器;5. 示波器;6. 连接线若干。

#### 实验步骤1. 设计序列检测器:使用Verilog HDL语言设计一个序列检测器,该检测器能够检测到特定的序列,如“101”。

2. 实现状态机:将序列检测器设计为一个状态机,通过定义状态和状态转移图来实现序列检测功能。

3. 代码编写与仿真:在FPGA开发板上编写Verilog代码,并使用仿真软件进行功能验证。

4. 硬件实现:将Verilog代码下载到FPGA开发板上,通过信号发生器生成测试序列,并使用示波器观察输出信号。

5. 性能测试:测试序列检测器在实际电路中的性能,包括检测速度、误检率等。

#### 实验内容1. 状态机设计:根据序列检测器的要求,设计状态转移图,并定义状态编码。

2. Verilog代码编写:使用Verilog HDL语言编写序列检测器的代码,包括模块定义、信号定义、状态定义、状态转移和输出逻辑等。

3. 仿真验证:使用仿真软件对Verilog代码进行功能验证,确保序列检测器能够正确地检测到指定序列。

4. 硬件下载与测试:将Verilog代码下载到FPGA开发板上,生成测试序列,并使用示波器观察输出信号,验证序列检测器的实际性能。

#### 实验结果与分析1. 仿真结果:在仿真软件中,序列检测器能够正确地检测到指定序列“101”,输出信号符合预期。

2. 硬件测试结果:在FPGA开发板上,序列检测器能够正确地检测到指定序列“101”,输出信号与仿真结果一致。

序列检测器的设计实验报告

序列检测器的设计实验报告

序列检测器的设计实验报告一、实验目的本次实验的目的是设计一个能够检测特定序列的数字逻辑电路,即序列检测器。

通过设计和实现这个电路,深入理解数字电路的基本原理和设计方法,掌握状态机的概念和应用,提高逻辑分析和电路设计的能力。

二、实验原理序列检测器是一种能够在输入数据流中检测特定序列的电路。

它通常由状态机实现,状态机根据输入的变化在不同的状态之间转移,并在特定的状态下输出检测结果。

以检测序列“1011”为例,我们可以定义以下几个状态:状态 S0:初始状态,等待输入。

状态 S1:接收到“1”,等待下一个输入。

状态 S2:接收到“10”,等待下一个输入。

状态 S3:接收到“101”,等待下一个输入。

状态 S4:接收到“1011”,输出检测成功信号。

根据状态转移和输出的规则,可以画出状态转移图,并根据状态转移图设计相应的逻辑电路。

三、实验设备与器材1、数字电路实验箱2、逻辑门芯片(如与门、或门、非门等)3、示波器4、电源四、实验步骤1、分析设计要求,确定状态转移和输出规则,画出状态转移图。

2、根据状态转移图,列出状态转换表,确定每个状态下的输入和输出。

3、使用卡诺图或其他逻辑化简方法,对状态转换表进行化简,得到最简的逻辑表达式。

4、根据逻辑表达式,选择合适的逻辑门芯片,在实验箱上搭建电路。

5、连接电源和示波器,对电路进行测试。

输入不同的序列,观察输出是否符合预期。

五、实验电路设计以下是检测序列“1011”的逻辑电路设计:状态变量定义:设当前状态为 Q1Q0,其中 Q1 为高位,Q0 为低位。

状态转移方程:Q1(n+1) = Q1Q0 + XQ1' (其中 X 为输入)Q0(n+1) = XQ0' + Q1Q0输出方程:Y = Q1Q0X根据上述方程,使用与门、或门和非门搭建电路。

六、实验结果与分析在实验中,输入了不同的序列,包括“1011”以及其他随机序列。

通过示波器观察输出,当输入序列为“1011”时,输出为高电平,表示检测成功;当输入其他序列时,输出为低电平,表示未检测到目标序列。

EDA实验报告模版

EDA实验报告模版

《EDA技术》实验报告实验名称:序列检测器设计指导教师:XXX实验日期:X月XX号姓名:XXXXXX学号:XXXXXX班级:XXXXXX杭州电子科技大学一、实验设计要求:实验目的:用状态机实现序列检测器的设计,了解一般状态机的设计与应用。

实验内容:根据8.2.2节有关原理介绍,利用Quartus II对例8-4进行文本编辑输入、仿真并给出仿真波形,了解控制信号的时序,最后进行引脚锁定并完成硬件测试实验。

由于本例中的状态机对于序列的检测不能连续,也就是一旦出现不符合的数字时就会全部归零处理,这样实际上并不是最完备的检测手段,请对例中的代码稍作修改来完成连续序列检测。

二、设计原理:2.1 状态机原理图:图2-1状态机状态转换图图2-2状态机模块示意图2.2 原理解释:状态转换图如上图所示,下面的是模块的示意图。

状态机有几个接口,分别是时钟端clk,数据输入端din,复位端rst和输出端out。

每个时钟上升沿读入外部的一位数据,根据读到的数据,状态机进行当前状态的改变,而复位端的功能是将状态机的状态恢复到初始态。

只有检测到11010011这个数据序列的时候状态机才会输出一个1即高电平信号。

如图的状态转换图可以看出,设计的状态机输入的数据是可重复的,即并不是每次都要依次输入规定的数据进入下一状态,否则就归回初始态;而是可以重复的。

比如要求是检测11010011序列的,可是输入刚开始是1后面一直是1,这时候不会不断地复位,而是会保持在”11”状态也就是第二状态,等待出现0进入下一状态。

三、实验程序:3.1 序列检测状态及电路程序:Input包括时钟clk、数据输入din、复位端rst;output包括一个out端,为了表示9个状态,声明了一个4位的寄存器,因为四位可以表示最多16个状态;为了保存次态的信息,又声明了一个4位的寄存器,用来存储次态的信息,为了下次上升沿读取。

主程序中包括两个过程语句,一个是用来对状态机的状态进行操作的,如果复位有效,下一个时钟上升沿就是将状态变成初始态;而如果不是就在下一个时钟上升沿将状态变成次态。

EDA实验报告 序列检测器 七段数码显示译码 数控分频 全加器

EDA实验报告 序列检测器  七段数码显示译码  数控分频 全加器

目录:实验一:序列检测器设计 (1)1.1 实验原理 (1)1.2 实现方案与仿真 (1)1.2.1 预置数确定 (1)1.2.2 预置数待定 (2)1.3 引脚锁定与下载 (3)1.3.1 预置数确定 (3)1.3.2 预置数待定 (3)1.4 实验结论与总结 (4)1.5 附录 (4)实验二七段数码显示译码器设计 (6)2.1 实验原理 (6)2.2 实现方案与仿真 (6)2.2.1 七段显示译码的方案与仿真 (6)2.2.2 4位二进制加法计数器的方案与仿真 (7)2.2.3 顶层文件的方案与仿真 (7)2.3 引脚锁定与下载 (8)2.3.1 七段显示译码的硬件测试 (8)2.3.2 4位二进制加法计数器的硬件测试 (8)2.3.3 顶层文件的硬件测试 (8)2.4 实验结论与总结 (9)2.5 附录 (9)实验三数控分频器的设计 (10)3.1 实验原理 (10)3.2 实现方案与仿真 (10)3.2.1 数控分频器的实现方案与仿真 (10)3.2.2数控分频器的RTl电路图 (11)3.3 引脚锁定与下载 (11)3.4 实验结论与总结 (12)实验四用原理图输入法设计8位全加器 (13)4.1 实验原理 (13)4.1.1 一位全加器的原理 (13)4.1.2 八位全加器的原理 (13)4.2 实现方案与仿真 (13)4.2.1 一位全加器的实现方案与仿真 (13)4.2.2 八位全加器的实现方案与仿真 (15)4.3 引脚锁定与下载 (16)4.3.1 一位全加器的引脚锁定与下载 (16)4.3.2 八位全加器的引脚锁定与下载 (16)4.4 实验结论与总结 (17)实验一:序列检测器设计摘要:本实验的主要任务是通过状态机来实现序列检测器的设计,其中,本实验采用了单进程Moore状态机和多进程Moore状态机两种方案来实现序列检测器,进而通过软件仿真和硬件测试来检验所设计的序列检测器。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

七、状态图输入法实现序列检测器
1、基本知识点
序列检测器原理。

状态图输入法。

2、实验设备
(1)PC机一台。

(2)DDA系列数字系统实验平台。

(3)QuartusⅡ配套软件。

3、实验概述
序列检测器
序列检测器是用于从二进制码流中检测出一组特定序列信号的时序电路。

接收的序列号与检测器预设值比较,相同则输出为1,否则输出为0.
4、实验内容及步骤
用状态图输入法实现序列检测器。

1,新建工程,工程文件夹名称为exp_detect3,工程名称和顶层实体名
称均为exp_detect3,选择目标器件为EPF10K20TI144-4.
2,状态图输入:选择菜单File——New——State Machine File命令,
打开State Machine Editor窗口,选择Tools——State Machine
Wizard命令,弹出如下状态机创建向导对话框:
点击OK,进入下一个页面,如下所示:
在上图中选择复位Reset信号为异步,高电平有效,输出端午寄存器,点击Next,进入下图:
在四个选框里分别如上图填入名称和控制信号。

进入下一个页面:
如上设置后,进入下一个页面,点击finish,完成。

关闭状态机向导,生成所需的状态机,做适当调整,如下图所示:
3,保存该设计文件为exp_detect3.smf,并添加到工程文件夹。

4,选择菜单Tools——Generate HDL File命令,打开对话框,选择VHDL,点击OK,分析成功后则自动生成exp_detect3.vhd。

代码如下:LIBRARY ieee;
USE ieee.std_logic_1164.all;
ENTITY exp_detect3 IS
PORT (
clock : IN STD_LOGIC;
reset : IN STD_LOGIC := '0';
din : IN STD_LOGIC := '0';
z : OUT STD_LOGIC
);
END exp_detect3;
ARCHITECTURE BEHAVIOR OF exp_detect3 IS
TYPE type_fstate IS (s0,s1,s2,s3,s4,s5,s6);
SIGNAL fstate : type_fstate;
SIGNAL reg_fstate : type_fstate;
BEGIN
PROCESS (clock,reset,reg_fstate)
BEGIN
IF (reset='1') THEN
fstate <= s0;
ELSIF (clock='1' AND clock'event) THEN
fstate <= reg_fstate;
END IF;
END PROCESS;
PROCESS (fstate,din)
BEGIN
z <= '0';
CASE fstate IS
WHEN s0 =>
IF ((din = '1')) THEN
reg_fstate <= s1;
ELSIF (NOT((din = '1'))) THEN
reg_fstate <= s0;
-- Inserting 'else' block to prevent latch inference
ELSE
reg_fstate <= s0;
END IF;
WHEN s1 =>
IF ((din = '1')) THEN
reg_fstate <= s2;
ELSIF (NOT((din = '1'))) THEN
reg_fstate <= s0;
-- Inserting 'else' block to prevent latch inference
ELSE
reg_fstate <= s1;
END IF;
WHEN s2 =>
IF ((din = '1')) THEN
reg_fstate <= s3;
ELSIF (NOT((din = '1'))) THEN
reg_fstate <= s0;
-- Inserting 'else' block to prevent latch inference ELSE
reg_fstate <= s2;
END IF;
WHEN s3 =>
IF ((din = '1')) THEN
reg_fstate <= s3;
ELSIF (NOT((din = '1'))) THEN
reg_fstate <= s4;
-- Inserting 'else' block to prevent latch inference ELSE
reg_fstate <= s3;
END IF;
WHEN s4 =>
IF ((din = '1')) THEN
reg_fstate <= s1;
ELSIF (NOT((din = '1'))) THEN
reg_fstate <= s5;
-- Inserting 'else' block to prevent latch inference ELSE
reg_fstate <= s4;
END IF;
WHEN s5 =>
IF ((din = '1')) THEN
reg_fstate <= s6;
ELSIF (NOT((din = '1'))) THEN
reg_fstate <= s0;
-- Inserting 'else' block to prevent latch inference ELSE
reg_fstate <= s5;
END IF;
WHEN s6 =>
IF ((din = '1')) THEN
reg_fstate <= s2;
ELSIF (NOT((din = '1'))) THEN
reg_fstate <= s0;
-- Inserting 'else' block to prevent latch inference
ELSE
reg_fstate <= s6;
END IF;
IF (NOT((din = '1'))) THEN
z <= '1';
-- Inserting 'else' block to prevent latch inference
ELSE
z <= '0';
END IF;
WHEN OTHERS =>
z <= 'X';
report "Reach undefined state";
END CASE;
END PROCESS;
END BEHAVIOR;
5,对代码进行编译。

6,选择Tools——Netlist viewers——State Machine Viewer,查看电路,如下RTL viewer图所示:
7,创建波形,设置好后对管脚进行分配,如下图所示
8,进行功能仿真,仿真结果为:
9,下载,验证。

4、实验体会
感觉良好。

相关文档
最新文档