实验三 序列信号检测器的设计
序列信号检测器
南昌大学实验报告学生姓名:学号:专业班级:实验类型:□验证□综合 设计□创新实验日期:实验成绩:实验三序列信号发生检测器一、实验目的1、学会运用VHDL语言设计方法构建具有一定逻辑功能的模块,并能运用图形设计方法完成顶层原理图的设计。
2、掌握脉冲序列检测器的主要功能二、实验要求1、设计一个序列信号发生器,用以产生输入序列“1101010011010101”由左开始。
2、设计一个序列检测器,用以检测输入序列,检测序列为100113、运用QuartusⅡ软件中的仿真功能对所设计的序列检测器的各个模块及顶层电路的功能进行仿真分析。
三、设计过程1,序列信号检测器设计原理:序列检测器可用于检测一组或多组由二进制码组成的脉冲序列信号,当序列检测器连续收到一组串行二进制码后,如果这组码与检测器中预先设置的相同,则输出 1,否则输出 0。
由于这种检测的关键在于正确码的收到必须是连续的,这就要求检测器必须记住前一次的正确码及正确序列,直到在连续的检测中所收到的每一位码与预置数的对应码相同。
设计中一般采用状态机来实现。
2,模块设计:根据层次化设计理论以及序列信号检测器的基本原理,本次设计的序列检测器采用自顶向下的思路可分为时钟输入模块、序列发生模块、序列检测模块、数码管动态扫描显示模块及LED状态转换显示模块,系统框图如下序列信号检测器系统框图3、使用文本设计底层文件,并生成相应元器件,再使用原理图设计顶层文件四、实验步骤1、顶层文件的设计顶层原理图设计可以依据系统框图进行,时钟输入模块(clkdiv)、序列发生模块(fsq)、序列检测模块(jcq)、数码管动态扫描显示模块及LED状态转换显示模块(scan_led)、序列信号译码模块(czb)2,各模块设计文件①时钟clkdiv:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY DIV ISPORT(CLK : IN STD_LOGIC;CLK_DIV : OUT STD_LOGIC);END DIV;ARCHITECTURE RT1 OF DIV ISSIGNAL DA TA:INTEGER RANGE 0 TO 500;SIGNAL CLK_TEMP:STD_LOGIC;BEGINPROCESS(CLK)BEGINIF RISING_EDGE(CLK) THENIF(DA TA=500) THENDA TA<=0;CLK_TEMP<=NOT CLK_TEMP;ELSEDA TA<=DATA+1;END IF;END IF;CLK_DIV<=CLK_TEMP;END PROCESS;END RT1;②序列发生器FSQ:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY FSQ ISPORT(CLK,CLEA:IN STD_LOGIC;Z :OUT STD_LOGIC);END FSQ ;ARCHITECTURE RTL OF FSQ ISTYPE STA TE_TYPE IS(S0,S1,S2,S3,S4,S5,S6,S7,S8,S9,S10,S11,S12,S13,S14,S15);SIGNAL CURRENT_STATE,NEXT_STA TE:STATE_TYPE;BEGINPROCESS(CLK,CLEA)BEGINIF(CLEA='1')THEN CURRENT_STATE<=S0;ELSEIF(CLK'EVENT AND CLK='1')THENCURRENT_STATE<=NEXT_STATE;END IF;END IF;END PROCESS;STATE_TRANS:PROCESS(CURRENT_STATE) BEGINCASE CURRENT_STATE ISWHEN S0=> NEXT_STATE<=S1; Z<='1';WHEN S1=> NEXT_STATE<=S2; Z<='1';WHEN S2=> NEXT_STATE<=S3; Z<='0';WHEN S3=> NEXT_STATE<=S4; Z<='1';WHEN S4=> NEXT_STATE<=S5; Z<='0';WHEN S5=> NEXT_STATE<=S6; Z<='1';WHEN S6=> NEXT_STATE<=S7; Z<='0';WHEN S7=> NEXT_STATE<=S8; Z<='0';WHEN S8=> NEXT_STATE<=S9; Z<='1';WHEN S9=> NEXT_STATE<=S10; Z<='1';WHEN S10=> NEXT_STA TE<=S11; Z<='0';WHEN S11=> NEXT_STA TE<=S12; Z<='1';WHEN S12=> NEXT_STA TE<=S13; Z<='0';WHEN S13=> NEXT_STA TE<=S14; Z<='1';WHEN S14=> NEXT_STA TE<=S15; Z<='0';WHEN S15=> NEXT_STA TE<=S0; Z<='1';END CASE;END PROCESS;END RTL;③序列检测器JCQLIBRARY IEEE ;USE IEEE.STD_LOGIC_1164.ALL;ENTITY JCQ ISPORT(SIN, CLK, CLR : IN STD_LOGIC;PUT : OUT std_logic_vector(0 downto 0));END JCQ;ARCHITECTURE one OF JCQ ISTYPE STA is (S5,S4,S3,S2,S1,S0);SIGNAL Qe : STA ;SIGNAL D : STD_LOGIC_VECTOR(4 DOWNTO 0); BEGIND <= "11010" ;PROCESS( CLK, CLR )BEGINIF CLR = '1' THEN Qe <= S0 ;ELSIF CLK'EVENT AND CLK='1' THENCASE Qe ISWHEN S0=> IF SIN = D(4) THEN Qe <= S1 ; ELSE Qe <= S0 ; END IF ; WHEN S1=> IF SIN = D(3) THEN Qe <= S2 ; ELSE Qe <= S0 ; END IF ; WHEN S2=> IF SIN = D(2) THEN Qe <= S3 ; ELSE Qe <= S2 ; END IF ; WHEN S3=> IF SIN = D(1) THEN Qe <= S4 ; ELSE Qe <= S0 ; END IF ; WHEN S4=> IF SIN = D(0) THEN Qe <= S5 ; ELSE Qe <= S2 ; END IF ; WHEN OTHERS => Qe <= S0 ;END CASE ;END IF ;END PROCESS ;PROCESS( Qe )BEGINIF Qe = S5 THEN PUT <= "1";ELSE PUT <= "0";END IF ;END PROCESS ;END one ;④序列译码CZBLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY czb ISPORT(clk,din:in std_logic;dout:out std_logic_vector(4 downto 0));end entity czb;architecture behave of czb isbeginprocess(clk)variable i:integer range 0 to 5;variable t:std_logic_vector(4 downto 0);beginif clk='1' thent(4 downto 0):=t(3 downto 0)&din;i:=i+1;dout<=t;if i=5 theni:=0;end if;end if;end process;end architecture behave;⑤数码管及LED显示SCAN_LED:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY scan_led ISPORT(clk : IN STD_LOGIC;data: IN STD_LOGIC_VECTOR(4 DOWNTO 0);data0: IN STD_LOGIC_VECTOR(0 DOWNTO 0);scan : OUT STD_LOGIC_VECTOR(6 DOWNTO 0);choose: OUT STD_LOGIC_VECTOR(2 DOWNTO 0)); END ENTITY;ARCHITECTURE one OF scan_led ISSIGNAL cout8:STD_LOGIC_VECTOR(2 DOWNTO 0);SIGNAL A :STD_LOGIC_VECTOR(3 DOWNTO 0); BEGINP1:PROCESS(cout8)BEGINCASE cout8 ISWHEN "000" => choose <= "000"; A <= "000"&data(4);WHEN "001" => choose <= "001"; A <= "000"&data(3);WHEN "010" => choose <= "010"; A <= "000"&data(2);WHEN "011" => choose <= "011"; A <= "000"&data(1);WHEN "100" => choose <= "100"; A <= "000"&data(0);WHEN "101" => choose <= "101"; A <= "1000";WHEN "110" => choose <= "110"; A <= "1000";WHEN "111" => choose <= "111"; A <= "000"&data0;WHEN OTHERS => NULL;END CASE;END PROCESS P1;P2:PROCESS(clk)BEGINIF clk'EVENT AND clk ='1' THEN cout8 <= cout8+1;END IF;END PROCESS P2;P3:PROCESS(A)BEGINCASE A ISWHEN "0000"=> scan <="0111111";WHEN "0001"=> scan <="0000110";WHEN "1000"=> scan <="1000000";WHEN OTHERS=> NULL;END CASE;END PROCESS P3;END;3、编译1)输入完程序之后逐个编译2)逐个编译无错之后进行全程编译4、将以上模块生成元器件,连接成实验电路图5、系统仿真1)建立新的波形激励文件2)在波形编辑器窗口添加节点3)通过Edit->End Time 来设定仿真结束时间4)在CLOCK窗口中设置clk的时钟周期为60s5)点击save保存6) 通过Tools下的Simulator Tools项进行仿真,然后观察输出波形。
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)机两种。
序列信号检测器的设计与实现 实验报告
数字电路与逻辑设计实验实验名称:序列信号检测器的设计与实现学院: 信息与通信工程学院班级: xxxxxxxxxx学号: xxxxxxxxxx班内序号: xx姓名大学霸一、实验课题序列信号检测器的设计与实现二、实验任务及设计要求(1) 熟悉用VHDL语言设计时序逻辑电路的方法。
(2) 熟悉序列信号检测器的设计方法(3) 了解状态机的设计方法用VHDL语言设计实现一个序列信号检测器,当检测到“101”时,输出为“1”;其他情况时,输出为“0”,仿真验证其功能,并下载到实验板测试。
三、设计思路与过程实验需要4个端口,时钟输入clk,数据输入d_in,输出f。
根据老师的要求后面还加入了时钟显示clk_out来保证数据输入在时钟上升沿之前1、设计思路序列检测器有输入信号d_in和输出信号f。
输入输出的的逻辑关系为:当外部输入x第一个为“1”,外部输出Z为“0”;当外部输入x第二个为“0”,外部输出Z为“0”;当外部输入x第三个为“1”,外部输出Z才为“1”。
要判断输入序列中的一段是否为“101”,电路需要用不同的状态来标记。
假设电路的初始状态A,d_in输入第一个“1”,检测器状态由A转换到B,B代表101序列中的第一个“1”,输出为f=0,如果之后继续输入“1”还会保持在这个状态;d_in输入“0”,检测器由B转换到C,C代表101序列中的“0”,输出f=0;d_in输入第三个值“1”时检测到完整的101序列,输出f=1,同时因为输入为“1”,状态由C又转换回B;如果d_in输入第三个值为“0”,状态由C退回到初始状态A,输出f=0。
以上为序列检测器的功能分析。
由此可以画出序列检测器的状态图状态表如下:2、实验过程(1) 用计算机QuartusII 9.0软件新建工程,新建VHDL,写入程序代码,运行调试直至编译成功。
(2) 新建波形仿真软件,设置endtime,输入输出信号,运行,观察仿真结果确认无误。
实验三 序列信号检测器的设计
实验三序列信号检测器的设计一、实验目的: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”序列的基本编程思路。
序列信号检测实验报告
一、实验目的1. 理解序列信号检测的基本原理。
2. 掌握序列信号检测的方法和步骤。
3. 通过实验验证序列信号检测的准确性。
4. 分析实验结果,探讨影响序列信号检测准确性的因素。
二、实验原理序列信号检测是数字信号处理中的一个重要领域,主要研究如何从含有噪声的信号中检测出特定的序列信号。
本实验采用模拟信号检测的方法,通过设计序列信号发生器和检测器,实现对特定序列信号的检测。
三、实验器材1. 信号发生器2. 数据采集器3. 计算机及软件(如MATLAB等)4. 信号分析仪四、实验步骤1. 设计序列信号发生器:- 根据实验要求,设计特定的序列信号,如“1101”。
- 使用信号发生器产生该序列信号。
2. 设计序列信号检测器:- 设计一个检测器,用于检测序列信号。
- 检测器可以采用状态机或有限状态机(FSM)实现。
3. 实验设置:- 将信号发生器产生的序列信号输入到数据采集器。
- 将数据采集器采集到的信号输入到计算机进行后续处理。
4. 信号处理:- 使用MATLAB等软件对采集到的信号进行预处理,如滤波、去噪等。
- 对预处理后的信号进行序列信号检测。
5. 结果分析:- 分析实验结果,比较检测器检测到的序列信号与原始序列信号是否一致。
- 分析影响序列信号检测准确性的因素,如噪声水平、信号带宽等。
五、实验结果与分析1. 实验结果:- 通过实验,成功检测到了设计的序列信号“1101”。
- 检测到的序列信号与原始序列信号基本一致。
2. 结果分析:- 实验结果表明,所设计的序列信号检测器能够有效地检测出特定序列信号。
- 影响序列信号检测准确性的因素主要包括:- 噪声水平:噪声水平越高,检测难度越大。
- 信号带宽:信号带宽越窄,检测难度越大。
- 序列长度:序列长度越长,检测难度越大。
六、实验结论1. 序列信号检测实验验证了序列信号检测的基本原理和方法。
2. 通过实验,掌握了序列信号检测的步骤和技巧。
3. 实验结果表明,所设计的序列信号检测器能够有效地检测出特定序列信号。
实验三_用状态机实现序列检测器的设计
实验三_用状态机实现序列检测器的设计引言:序列检测器是一类常用的电子设计电路,它在接收到特定的输入序列时,会产生特定的输出序列。
在许多应用场景中,如通信系统、数字信号处理和自动控制等领域,序列检测器都发挥着重要的作用。
本实验将利用状态机的概念,设计并实现一个简单的序列检测器。
一、序列检测器的设计原理序列检测器的设计原理基于状态机的思想。
状态机是一种抽象的计算模型,它由一组状态、一组输入和一组转移动作组成。
在序列检测器中,输入序列被连续地输入,状态也会根据输入进行不断变化。
当状态机检测到了预设的特定输入序列时,就会产生相应的输出序列。
二、序列检测器的设计步骤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”。
实验三:状态机实现序列检测器设计
《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. 生成下载配置文件,下载到开发板进行经行验证。
实验三_用状态机实现序列检测器的设计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、真实应用比较状态机,设计一个校验器,用于检测序列是否符合一定的校验规则。
序列信号检测器的设计与实现 数电实验报告
数字电路与逻辑计实验报告序列信号检测器的设计与实现一、课题名称:序列信号检测器的设计与实现二、实验目的:(1)熟悉用VHDL语言设计时序逻辑电路的方法;(2)熟悉序列信号检测器的设计方法;(3)了解状态机的设计方法。
三、实验所用仪器及元器件:(1)计算机(2)直流稳压电源(3)数字系统与逻辑设计实验开发板四、实验内容:用VHDL语言设计实现一个序列信号检测器,当检测到“101”时,输出为“1”;其他情况时,输出为“0”,仿真验证其功能,并下载到实验板测试。
五、设计思路与过程:第1步,画出原始状态图和状态表。
根据任务书要求,设计的序列检测器有一个外部输入x和一个外部输出Z。
输入和输出的逻辑关系为:当外部输入x第一个为“1”,外部输出Z为“0”;当外部输入x第二个为“0”,外部输出Z为“0”;当外部输入x第三个为“1”,外部输出Z才为“1”。
假定有一个外部输入x序列以及外部输出Z为:输入x: 0 1 0 1 1 1 0 1 1 1 1 0 1输出Z: 0 0 0 1 0 0 0 1 0 0 0 0 1要判别序列检测器是否连续接收了“101”,电路必须用不同的状态记载外部输入x的值。
假设电路的初始状态为A,x输入第一个值“1”,检测器状态由A装换到B,用状态B记载检测器接受了101序列的第一个值“1”,这时外部输出Z=0;x输入“0”,检测器状态由B装换到C,用状态C记载检测器接受了101序列的第二个值“0”,外部输出Z=0;x输入第三个值“1”,检测器状态由C装换到D,外部输出Z=1。
然后再根据外部输入及其他情况时的状态转移,写出相应的输出。
以上分析了序列检测器工作,由此可画出图一所示的原始状态图。
根据原始状态图可列出原始状态表,如表一所示。
0/0图一原始状态图表一:原始状态表第2步,在对原状态表进行简化,从状态表就可以看出B 、D 两个状态为等价状态。
从而可得简化后的状态表表二和状态图图二:图二 简化状态图表二:简化后的状态表第3步,状态分配:给A 分配编码00,B 分配01,C 分配11,则可得状态转移表三:表三:简化后的状态转移表第4步,选择存储器的类型,确定存储电路的激励输入: 选择使用D 触发器来完成此任务。
序列检测器设计实践报告
序列检测器设计实践报告一、引言序列检测器是现代通信系统中的关键组件之一,它能够检测出接收到的数据序列是否符合特定规则或模式。
在本次实践中,我们通过使用Verilog HDL 语言和ModelSim 软件,成功设计了一个基于有限状态机的序列检测器。
本报告将详细介绍设计实践的目标、设计思路、实现过程以及结果与分析。
二、设计目标本次实践的设计目标是设计一个序列检测器,其输入为一串二进制数据序列,输出为判断该数据序列是否符合预定的模式。
具体要求如下:1. 输入数据序列长度为N。
2. 设计的状态机模型能够正确判断数据序列是否匹配给定的模式。
3. 能够根据实际需要,设计一个可重用的序列检测器。
三、设计思路为了实现序列检测器,我们采用了有限状态机(Finite State Machine)的设计方法。
基于有限状态机的序列检测器通常包含以下几个关键部分:1. 状态寄存器(State Register):用于保存当前状态的寄存器。
2. 状态转移逻辑(State Transition Logic):用于根据当前状态和输入决定下一状态。
3. 输出逻辑(Output Logic):用于根据当前状态和输入决定输出。
在本次实践中,我们根据识别特定序列的要求设计了一个有限状态机模型。
具体步骤如下:1. 根据给定的数据序列模式,分析出可能的状态数以及状态转移条件。
2. 基于状态数和状态转移条件,设计状态转移表和状态转移条件的真值表。
3. 使用Verilog HDL语言,将状态寄存器、状态转移逻辑和输出逻辑实现为模块。
4. 将各个模块组合在一起,以实现完整的序列检测器。
四、实现过程1. 建立状态转移表和真值表根据给定的数据序列模式,我们设定了以下状态:- `S0`:初始状态;- `S1`:序列开始状态;- `S2`:序列匹配状态;- `S3`:序列不匹配状态。
根据分析,我们得到以下状态转移表和状态转移条件的真值表:状态/输入0 1S0 S1 S0S1 S2 S0S2 S2 S3S3 S1 S0状态/输入输出-S2 1S3 02. 实现Verilog HDL模块我们根据状态转移表和真值表,用Verilog HDL语言实现了状态寄存器、状态转移逻辑和输出逻辑。
序列检测器 实验报告
序列检测器实验报告序列检测器是一种常见的信号处理技术,广泛应用于通信、雷达、生物医学和金融等领域。
本文将介绍序列检测器的原理、实验设计和实验结果,并对其应用进行讨论。
一、序列检测器的原理序列检测器是一种用于检测和识别输入信号序列的设备或算法。
它通过对输入信号进行观测和分析,判断信号是否符合特定的模式或规律。
常见的序列检测器包括有限状态机、卷积神经网络和隐马尔可夫模型等。
有限状态机是一种基本的序列检测器,它由一组状态和状态之间的转移规则组成。
在每个时刻,输入信号会触发状态之间的转移,最终达到一个终止状态。
通过定义状态和转移规则,可以实现对输入信号序列的检测和识别。
二、实验设计本实验旨在设计并实现一个简单的序列检测器,用于检测二进制信号序列中是否存在特定的模式。
实验使用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"的存在。
序列信号发生器和序列信号检测器
南昌大学实验报告学生姓名:学号:专业班级:实验类型:□验证□综合□设计□创新实验日期:实验成绩:实验三序列信号检测器设计(一)实验目的1.进一步熟悉PH-1V型实验装置和QuartusⅡ软件的使用方法;2.学习有限状态机法进行数字系统设计;3.学习使用原理图输入法进行设计。
(二)设计要求完成设计、仿真、调试、下载、硬件测试等环节,在PH-1V型EDA实验装置上实现一个串行序列信号发生器和一个序列信号检测器的功能,具体要求如下:1.先用原理图输入法设计0111010011011010序列信号发生器;2.其最后8BIT数据用LED显示出来;3.再设计一个序列信号检测器,检测上述序列信号,若检测到串行序列“11010”则输出为“1”,否则输出为“0”;(三)主要仪器设备1.微机 1台2.QuartusII集成开发软件1套3.PH-1V型EDA实验装置1套(四)实验总体设计本实验要求先设计一个信号发生器,采用原理图设计方法,要求产生0111010011011010序列,16位,便可采用74161计数器和74151选择器,161计数输出QD,QC,QB,QA从0000计至1111,然后将161计数输出低三位QC,QB,QA分别接到151的C,B,A端,高位QD用来控制151两片的片选,即两片151分别实现序列的高八位和低八位的输出。
最后将二片151的输出相或便可得到最后要产生的序列。
序列检测器即为一个状态机,首先画出状态转移图,根据状态转移图设计出序列检测器,当检测到预置的序列,则RESULT输出1,否则输出0 (五)实验重难点设计1. 用原理输入法设计序列信号发生器(1)打开Quartus II软件,进入编辑环境。
(2)创建新的原理图BDF文件,命名为FASHENGQI,根据其总体设计思路设计出如下原理图:1. 用文本输入法设计序列信号检测(1)打开Quartus II软件,进入编辑环境。
(2)创建新的文本文件VHDL,命名为ztj,根据状态机总体设计思路设计出如(3)下语句程序:library ieee;use ieee.std_logic_1164.all;entity ztj isport (clk,reset: in std_logic;x: in std_logic;result: out std_logic);end ztj;architecture behav of ztj istype m_state is(s0,s1,s2,s3,s4,s5);signal present_state,next_state:m_state;signal temp:std_logic;beginprocess(reset,clk)beginif reset ='1' thenpresent_state<=s0;elsif clk='1' and clk'event thenresult<=temp;present_state<=next_state;end if;end process;(4)经编译成功后,点击File---Creat/Update---Creat Simbol Files For Current File 后生成STAKE模块如下:(1)打开Quartus II软件,进入编辑环境。
序列检测器的设计实验报告
序列检测器的设计实验报告一、实验目的本次实验的目的是设计一个能够检测特定序列的数字逻辑电路,即序列检测器。
通过设计和实现这个电路,深入理解数字电路的基本原理和设计方法,掌握状态机的概念和应用,提高逻辑分析和电路设计的能力。
二、实验原理序列检测器是一种能够在输入数据流中检测特定序列的电路。
它通常由状态机实现,状态机根据输入的变化在不同的状态之间转移,并在特定的状态下输出检测结果。
以检测序列“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”时,输出为高电平,表示检测成功;当输入其他序列时,输出为低电平,表示未检测到目标序列。
序列信号发生器和检测器
南昌大学实验报告学生姓名:赖硕秋学号: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设计好发生器和检测器,顶层用原理图连线。
序列信号检测器的设计
绪论随着世界经济的不断发展,电子技术日新月异,一日千里。
随着第一支晶体三极管于1947年问世,开创了电子技术的新领域,随后60年代初,模拟和数字集成电路相继上市,到七十年代末,微处理器的问世,电子器件的应用出现了新的局面。
随着微电子技术的发展,将会有更多的的电子产品陆续问世。
微电子技术的进步主要表现在大规模集成电路加工技术即半导体工艺技术的发展上,现代电子设计技术的核心日趋转向基于计算机的电子设计自动化技术,即EDA技术。
电子设计自动化即EDA技术是指包括电路设计、系统仿真、设计综合、PCB版图设计和制版的一套自动化流程。
依赖功能强大的计算机,在EDA工具软件平台上,对以硬件描述语言HDL为系统逻辑描述手段完成的设计文件,自动完成逻辑编译、化简、分割、综合、布局布线以及逻辑优化和仿真调试,直至实现既定的电子线路系统功能。
EDA代表了当今电子设计技术的最新发展方向,系统的关键电路用一片或几片专用集成电路(ASIC)实现,然后采用硬件描述语言(VHDL)完成系统行为级设计,最后通过综合器和适配器生成最终的目标器件。
EDA技术主要包括大规模可编程逻辑、硬件描述语言、软件开发工具等内容。
目前,使用最为广泛的大规模可编程逻辑CPLD、FPGA属高密度可编程逻辑器件,已成为现代高层次电子设计方法的实现载体。
硬件描述语言HDL是EDA技术的重要组成部分,而VHDL在现在EDA设计中使用最多,是一种全方位的硬件描述语言,包括系统行为级、寄存器传输级和逻辑门级多个设计层次,VHDL几乎覆盖了以往各种硬件描述语言的功能,VHDL的设计不依赖于特定的器件,方便了工艺的转换,具有良好的适应性,是设计者可以专心于其功能的实现,不需要对不影响功能的与工艺有关的因素花费过多的时间与精力。
1 QuartusII简介Quartus II 是Altera公司的综合性PLD开发软件,支持原理图、VHDL、VerilogHDL以及AHDL(Altera Hardware Description Language)等多种设计输入形式,内嵌自有的综合器以及仿真器,可以完成从设计输入到硬件配置的完整PLD设计流程。
实验三-序列信号发生器与检测器设计
实验三序列信号发生器与检测器设计一、实验目的1.学习一般有限状态机的设计;2.实现串行序列的设计。
二、设计要求1.先设计序列信号发生器;2.再设计一个序列信号检测器,若系统检测到串行序列11010则输出为“1”,否则输出为“0”,并对其进行仿真和硬件测试。
三、实验设备PC机,Quartu eⅱ软件,实验箱四、实验原理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;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;B E G I NP 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 NC A S E C N T I SW H E N"0000"=>Z R E G<='1';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<='0';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<='1';W H E N"1000"=>Z R E G<='0';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<='0';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<='1';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;E N D o n e;2)对其进行波形仿真,如下图:3)将其转换成可调用元件如图: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 <= "10010" ;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 <= 1 ; END IF ;WHEN 2=> IF DIN = D(2) THEN Q <= 3 ; ELSE Q <= 1 ; 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 <= 1 ; 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.管脚邦定六、实验心得1.首先用VHDL语言设计序列信号发生器和序列信号检测器模块。
实验三_用状态机实现序列检测器的设计
实验三_⽤状态机实现序列检测器的设计实验三⽤状态机实现序列检测器的设计⼀、实验⽬的:⽤状态机实现序列检测器的设计,并对其进⾏仿真和硬件测试。
⼆、原理说明:序列检测器可⽤于检测⼀组或多组由⼆进制码组成的脉冲序列信号,当序列检测器连续收到⼀组串⾏⼆进制码后,如果这组码与检测器中预先设置的码相同,则输出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、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验三序列信号检测器的设计一、实验目的: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”序列的基本编程思路。
图中的s0为复位状态,s1为检测到首个…0‟状态,s2为检测到“01”状态,s3为检测到一个“011”序列的状态。
(3)完成(1)所示的顶层原理图并进行全编译。
最终的设计使用的资源为:最大运行频率为:(4)设计testbench文件并进行时序仿真。
Testbench文件如下:LIBRARY altera ;LIBRARY cycloneiii ;LIBRARY ieee ;USE altera.altera_primitives_components.all ;USE cycloneiii.cycloneiii_components.all ;USE ieee.std_logic_1164.all ;ENTITY ste_tb ISEND ;ARCHITECTURE ste_tb_arch OF ste_tb ISSIGNAL output : STD_LOGIC ;SIGNAL clk : STD_LOGIC :='0' ;SIGNAL reset : STD_LOGIC :='0' ;COMPONENT stePORT (output : out STD_LOGIC ;clk : in STD_LOGIC ;reset : in STD_LOGIC );END COMPONENT ;BEGINDUT : stePORT MAP (output => output ,clk => clk ,reset => reset ) ;clk<=not clk after 0.5us;reset<='1','0' after 11.5us;END ;时序仿真图如下:四、思考题请设计检测“0101”序列的信号检测器,并进行仿真验证。
实验四按键计数器的设计一、实验目的:1、掌握开发板调试的基本步骤;2、掌握PLL锁相环的使用;3、理解按键的硬件消抖动工作原理。
二、实验原理:系统可以对用户的按键次数进行统计,并在一位数码管上显示出来。
系统主要由时钟发生模块clk_gen、按键消抖动电路、计数电路和译码显示电路组成。
三、实验内容(1)最终的顶层设计原理图如下:图中的clk_gen的时钟输入脚为22脚,输入频率为50MHz,输出时钟c0的频率为0.01MHz。
c0经过inst2分频为1KHz,作为inst3和inst4组成的移位寄存器的时钟。
移位寄存器实现对按键输入clkin的采样,inst7在连续采样两次的信号相同时输出1,并允许经过inst5输出稳定的按键电平。
Inst负责对输入的按键进行统计,inst1负责对计数结果进行译码产生可以控制共阳极数码管的显示信号。
此处,按键消抖动的原理是,每隔1ms对按键输入采样一次,连续两次采样为同样的信号说明信号稳定了。
相关详细的说明可以参考《EDA技术与应用》一书的4.6 Signal Tap II的使用一节。
锁相环PLL的设置和使用可以参考《EDA技术与应用》一书的5.2.5 构建PID模块一节中的相关内容。
开发板电路管脚锁定的相关内容可以参考《EDA技术与应用》一书附录 A YCIT_SOPC_V1.0实验开发板简介。
(2)创建十进制计数器bcd_counter3,可以直接使用实验二中的十进制计数器程序.(3)创建译码器模块led_encode,程序如下:library ieee;use ieee.std_logic_1164.all;use ieee.numeric_std.all;entity led_encode isport(din : in std_logic_vector(3 downto 0);dout : out std_logic_vector(7 downto 0));end entity;architecture rtl of led_encode isbeginprocess(din) isbegincase din isWHEN "0000" => dout<="11000000";WHEN "0001" => dout<="11111001";WHEN "0010" => dout<="10100100";WHEN "0011" => dout<="10110000";WHEN "0100" => dout<="10011001";WHEN "0101" => dout<="10010010";WHEN "0110" => dout<="10000010";WHEN "0111" => dout<="11111000";WHEN "1000" => dout<="10000000";WHEN "1001" => dout<="10010000";WHEN OTHERS => NULL;end case;end process;end rtl;(4)依据上图设计顶层原理图。
(5)管脚锁定:(6)修改特殊管脚为一般管脚,如图所示:(7)全编译通过后下载到开发板进行验证。
四、思考题1、请尝试给出本次实验的时序仿真的测试向量文件和时序波形图。
2、请尝试根据动态扫描的原理,修改设计,实现四位数码管的动态扫描显示计数结果。