序列信号检测器的设计与实现 实验报告

合集下载

序列信号检测器

序列信号检测器

南昌大学实验报告学生姓名:学号:专业班级:实验类型:□验证□综合 设计□创新实验日期:实验成绩:实验三序列信号发生检测器一、实验目的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项进行仿真,然后观察输出波形。

实验三 序列信号检测器的设计

实验三  序列信号检测器的设计

实验三序列信号检测器的设计一、实验目的: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、学习AHDL 语言的状态机的设计方法;二、实验内容设计一个1110010 序列检测器,即检测器连续收到一组串行码“1110010”后,输出检测标志1,否则输出0。

要求用图形输入法完成:①作状态图和状态表;②状态化简,建立最简状态表;③写出状态编码;画出状态编码表;④建立激励函数,输出函数真值表;⑤写出激励函数和输出函数表达式;⑥画出逻辑电路测试图;⑦逻辑功能仿真,记录仿真波形并加以说明;⑧下载验证(两种以上的方式)。

三、实验平台及实验方法用电路图输入法完成序列检测器,对其进行逻辑功能运用MaxplusII软件进行波形仿真再结合FPGA(即对试验箱的芯片进行编译)下载验证。

四、实验原理代码序列检测器是一种同步时序电路,它用于搜索,检测输入的二进制代码串中是否出现指定的代码序列,001 序列检测器的原理图如下:实验设计(每收到一次信号时钟必须有一次上升沿)状态编码状态命名输入(x)0 1000 收到1个0 S0 000(s0)/0 001(s1)/0 001 收到1个1 S1 000(s0)/0 011(s2)/0 011 收到11 S2 000(s0)/0 010(s3)/0 010 收到111 S3 110(s4)/0 010(s3)/0 110 收到1110 S4 100(s5)/0 001(s1)/0 100 收到11100 S5 000(s0)/0 101(s6)/0 101 收到111001 S6 111(s7)/1 011(s2)/0 111 收到1110010 S7 000(s0)/0 001(s1)/0卡诺图化简Q1* Q2*00 01 11 10 00 0 0 1 0 01 0 1 0 0 11 0 0 0 0 1011Q3* 00 01 11 10 00 0 0 1 1 01 0 1 1 1 11 0 0 1 0 1013212133132321313212321321321''*''''''*''''''*Q Q Q XQ XQ Q Q XQ Q XQ Q Q Q Q XQ Q Q Q Q Q Q XQ Q Q Q X Q Q X Q ++=++++=++= D 触发器 OR5五、实验操作门电路图实验过程:1.启动MaxplusII 软件;2.新建一个逻辑图编辑界面,点Max+plus II Grahic Editor ,根据逻辑原理图编辑逻辑图;00 01 11 10 00 0 0 0 0 01 0 1 1 1 11 0 0 0 1 1011XQ1Q2Q3Q2Q3XQ1Q2Q3 XQ13.编译。

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,对代码进行编译。

实验三_用状态机实现序列检测器的设计

实验三_用状态机实现序列检测器的设计

实验三_用状态机实现序列检测器的设计引言:序列检测器是一类常用的电子设计电路,它在接收到特定的输入序列时,会产生特定的输出序列。

在许多应用场景中,如通信系统、数字信号处理和自动控制等领域,序列检测器都发挥着重要的作用。

本实验将利用状态机的概念,设计并实现一个简单的序列检测器。

一、序列检测器的设计原理序列检测器的设计原理基于状态机的思想。

状态机是一种抽象的计算模型,它由一组状态、一组输入和一组转移动作组成。

在序列检测器中,输入序列被连续地输入,状态也会根据输入进行不断变化。

当状态机检测到了预设的特定输入序列时,就会产生相应的输出序列。

二、序列检测器的设计步骤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;}}四、实验总结本实验利用状态机的思想,设计并实现了一个简单的序列检测器。

序列检测器_实验报告

序列检测器_实验报告

一、实验目的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时,输出低电平。

11001序列检测器设计实训报告

11001序列检测器设计实训报告

电子技术设计实训报告指导教师:**小组成员:*201458244**201458244**201458244**201458244*成绩评定:教师签名:评定时间设计1.题目:“11001”序列检测器。

原始条件:逻辑器件:CMOS门电路集成芯片:74SL20 74LS00 74LS1122.要求完成设计的主要任务:1)能够运用数字逻辑的理论和方法,把时序逻辑电路设计和组合逻辑电路设计相结合,设计一个有实际应用的数字逻辑电路。

2)使用同步时序逻辑电路的设计方法,设计“11001”序列检测器。

写出设计中的过程。

画出课程设计图。

3)在试验设备上,使用74SL20 74LS00 74LS112集成电路连接、调试和测试“11001”序列检测器电路。

3.小组成员分工*设计序列*电子版实验报告,化简卡诺图*:画电路图、仿真电路图*:检查设计失误、物理机电路连线电路分析设计过程4.逻辑抽象:初始状态SS:11:11S2:110S3S:11004:11001S5根据任务书要求,设计的序列检测器有一个外部输入A 和一个外部输出 Y。

输入和输出的逻辑关系为:正常情况下Y=0,出现A=11001时,Y=15.状态转换图6.状态转换表表1由表1可知,S1和S5是等价状态,故可以合并。

下图为化简后的状态转换图。

''0101*1Q Q Q AQ Q +=7. 卡若图化简规定电路状态编码,电路需要5个状态。

需要3(2n-1<状态数≦2n )个触发器。

现取Q 2Q 1Q 0=001表示S 1,Q 2Q 1Q 0=010表示S 2,Q 2Q 1Q 0=011表示S 3,Q 2Q 1Q 0=100表示S 4 ,即可得到:S 0:000 S 1:001 S 2:010 S 3 :011 S 4:100由上述转换表可以转化为卡诺图下面即可分解卡诺图⎪⎩⎪⎨⎧++=+=0111*01010*1)''(''Q AQ AQ Q A Q Q Q Q AQ Q '''201201*2Q Q Q A Q Q Q A Q +=''''011001*0Q Q A Q AQ Q AQ Q ++=''0101*1Q Q Q AQ Q +='''201201*2Q Q Q A Q Q Q A Q +=''''011001*0Q Q A Q AQ Q AQ Q ++=2AQ Y =8. 逻辑函数式由上述的卡诺图得到状态方程和输出方程⎪⎩⎪⎨⎧2AQ Y =化简得到上式与JK 触发器的特性方程对照比较可以得出(Q *=JQ ’+K ’Q ))'()'(.....'''1001012.1101012AQ K Q K Q Q A K AQ Q A J AQ J Q Q A J ===⎪⎩⎪⎨⎧+=== 2AQ Y =9.JK 触发器具体实现电路图由上述的式子我们可以画出模拟电路图(完整电路图附页说明)10. 仿真软件仿真效果(截图说明)下面进行仿真实验,X3灯是为了显示0、1输入,X2灯是显示脉冲输入情况。

序列检测器实验报告

序列检测器实验报告

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

序列信号检测器的设计与实现 数电实验报告

序列信号检测器的设计与实现   数电实验报告

数字电路与逻辑计实验报告序列信号检测器的设计与实现一、课题名称:序列信号检测器的设计与实现二、实验目的:(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 触发器来完成此任务。

序列检测器设计-modelsim-verilog-实验报告

序列检测器设计-modelsim-verilog-实验报告

实验四-序列检测一、实验目的:1.实验目的:通过学习硬件编程语言,掌握一般时序逻辑分析的方法。

2.学会使用Verilog语言编写实现任意序列检测。

3.学会使用Verilog编写测试文件testbech的方法并在Modelsim中实现时序仿真。

二、实验设备1.PC机一台2.Modelsim软件三、实验内容:序列检测器是能够与从二进制码流中检测出一组特定序列的信号的时序电路。

通过接受的序列号与检测其预设值比较,当检测到输入信号匹配时,输出响应的指示。

设计序列检测器,要求能够识别序列“10010”。

din为数字码流的输入,z是检测标记的输出,高电平表示“发现指定序列”,低电平表示“没有发现指定的序列”。

1.打开Modelsim软件,切换目录至常用位置,这里选择D:\seqdet。

(注,在D:\seqdet 目录下一保存有序列检测文件seqdet.v和测试文件seqdet_tb.v,源程序在附录里)2.然后新建工程,File ->New->Project,建立工程工程为seqdet,设置如下,并在接下来的步骤中添加序列检测文件seqdet.v和测试文件seqdet_tb.v。

4.编译文件编译无误后,进行仿真5.文件仿真在弹出的窗口中选择Design->work->seqdet_tb,默认选中优化选项。

选择OK6.添加信号到wave视图中。

在仿真状态下,切换到左侧导航窗口到object视图下,添加信号T,clk,rst,x,z,q到wave窗口中,添加完成后如图所示:7.运行仿真至1000ns,,波形图显示如图所示:8.结果分析:对上述图形分析如下,用蓝色表示的为第一次检测到匹配序列“10010”,黄色表示为第二次匹配序列,紫色表示为第三次匹配序列。

z分别在这三处匹配时输出高电平,其他为低电平,实现了序列检测的功能。

四,程序:①源程序模块seqdet.v :module seqdet(input wire x, //信号输入input wire clk, //时钟信号input wire rst,output wire z,output reg [4:0] q //序列输出);wire [4:0] q_next;assign q_next ={q[3:0],x};assign z = (q_next== 5'b10010) ? 1'b1:1'b0;always @ (posedge clk,negedge rst)if(!rst)q <= 5'd0;elseq <= q_next;endmodule②测试程序模块seqdet_tb.v`timescale 1ns/1nsmodule seqdet_tb;localparam T =20;reg clk,rst;reg [23:0] data;wire z,x;wire [4:0] q;assign x = data[23];initialbeginclk =0;rst =1;#2 rst =0;#30 rst =1;data =20'b1100_1001_0000_1001_0100;#(T*1000) $stop;endalways #T clk = ~clk;always @ (posedge clk)#2 data = {data[22:0],data[23]};seqdet U1(.x(x),.z(z),.clk(clk),.q(q),.rst(rst));endmodule五、实验总结:通过本次实验,对Verilog硬件描述语言有了进一步认识,学会编写verilog语言的文本设计方法,并学会编写testbench测试程序。

序列检测器设计实践报告

序列检测器设计实践报告

序列检测器设计实践报告一、引言序列检测器是现代通信系统中的关键组件之一,它能够检测出接收到的数据序列是否符合特定规则或模式。

在本次实践中,我们通过使用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语言实现了状态寄存器、状态转移逻辑和输出逻辑。

EDA实验七八实验报告(1)

EDA实验七八实验报告(1)

实验七序列检测器的VHDL设计(1)实验目的:用状态机实现序列检测器的设计,了解一般状态机的设计与应用。

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

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

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

书上P168例5-11 描述的电路完成对序列数”11100101”的检测,当这一串序列数高位在前(左移)串行进入检测器后,若此数与预置的密码数相同,则输出”A”,否则仍然输出”B”。

(3)实验内容 1:用VHDL状态机设计一个8位序列信号检测器。

实验程序如下:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY SCHK ISPORT (DIN,CLK,CLR: IN STD_LOGIC;AB : OUT STD_LOGIC_VECTOR(3 DOWNTO 0));END ENTITY SCHK;ARCHITECTURE ONE 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 ARCHITECTURE ONE;实验步骤如下:1 将源程序以SCHK.vhd的形式存入D盘名为liulin的文件夹中2 全程编译3 时序仿真4 引脚锁定和下载引脚锁定如下:CLR-PIN34;CLK-PIN32;DIN- PIN33;AB[0]- PIN77、 AB[1]- PIN78、AB[2]- PIN83、 AB[3]- PIN84;5 实际测试时序仿真波形如下图:实验分析:选择电路模式 No.8 。

序列检测器 实验报告

序列检测器 实验报告

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

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

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

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

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

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

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

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

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

实验使用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、确定输入序列和输出信号的定义在设计序列检测器之前,首先需要明确输入序列和输出信号的定义。

例如,输入序列为0和1的连续序列,输出信号为检测到序列的结果。

2、定义状态集合根据输入序列的定义,确定系统的状态集合。

例如,系统的状态可以有两个:A和B。

3、定义状态转换条件根据输入序列的定义和状态集合,确定状态转换条件。

例如,当输入为0时,系统从状态A转换到状态B;当输入为1时,系统保持在状态A。

4、确定初始状态确定系统的初始状态。

例如,初始状态可以为A。

5、确定输出信号根据输入序列的定义和状态转换条件,确定状态对应的输出信号。

例如,当检测到输入序列时,系统输出检测到的信号。

6、绘制状态转换图根据状态集合、状态转换条件和输出信号,绘制系统的状态转换图。

状态转换图表示系统在不同状态之间的转换关系。

7、实现状态转换逻辑将状态转换图转化为状态转换表,然后根据状态转换表实现状态转换逻辑。

状态转换逻辑可以使用编程语言来实现,例如使用C、C++或Verilog等。

8、测试和验证使用合适的输入序列对设计的状态机进行测试和验证。

根据实际运行结果判断系统是否工作正常。

序列信号检测器报告

序列信号检测器报告

序列信号检测器一、基本知识点1、掌握时序电路的设计方法和步骤2、掌握触发器的设计与应用3、熟悉集成电路的引脚排列4、掌握芯片的逻辑功能及使用方法5、了解序列产生及检测器的组成及工作原理6、会在Multisim软件上进行仿真二实验器件1、 JK触发器 2个2、 74LS161 1片3、 74LS152 1片4、电源 2个5、地线 2个6、与门,同或门若干个7、时钟脉冲 1个三设计思路1 作原始状态表。

根据给定的电路设计条件构成原始状态表和状态转化图2 状态表的简化。

原始状态表通常不是最小化状态表,它往往包括多余的状态,因此必须首先对它进行简化。

3 状态分配。

即对简化后的状态给以编码。

这就要根据状态数确定触发器的数量并对每个状态指定一个二进制数构成的编码。

4 根据给定的电路设计条件选择触发器根据5 作激励函数和输出函数。

根据选用的触发器激励表和电路的状态表,综合出电路中各触发器的激励函数和电路的输出函数。

6 画逻辑图,并检查自启动功能四设计过程(一)00010111信号发生器的设计设计产生一个8位的序列信号00010111(时间顺序为自左向右),可用一个8进制计数器和一个8选1数据选择器组成,如图1所示。

图1其中8进制计数器取自74LS161(4位2进制计数器)的低三位,74LS151是8选1数据选择器。

表1CP顺序 QC QB QA(C B A)/Y0 0 0 0 /D0(0)1 0 0 1 /D1(0)2 0 1 0 /D2(0)3 0 1 1 /D3(1)4 1 0 0 /D4(0)5 1 0 1 /D5(1)6 1 1 0 /D6(1)7 1 1 1 /D7(1)8 0 0 0 /D0(0)当CP信号连续不断地加到计数器上时,QC、QB、QA的状态(也就是加到74LS151上的地址输入代码C、B、A)便按照表1所示的顺序不断循环,/D0至/D7的状态就循环不断地依次出现在/Y端。

只要令D0=D1=D2=D4=1、D3=D5=D6=D7=0,便可在/Y端得到不断循环的序列信号00010111。

序列检测器实验报告

序列检测器实验报告

#### 实验目的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”,输出信号与仿真结果一致。

序列信号发生器和序列信号检测器

序列信号发生器和序列信号检测器

南昌大学实验报告学生姓名:学号:专业班级:实验类型:□验证□综合□设计□创新实验日期:实验成绩:实验三序列信号检测器设计(一)实验目的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”时,输出为高电平,表示检测成功;当输入其他序列时,输出为低电平,表示未检测到目标序列。

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

数字电路与逻辑设计实验
实验名称:序列信号检测器的设计与实现
学院: 信息与通信工程学院
班级: 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,输入输出信号,运行,观察仿真结果确认无误。

(3) 将实验板与计算机相连,设置管脚后再次编译工程。

(4) 下载至实验板,检查其功能准确无误。

四、VHDL代码
单进程状态机
P1:process(clk_tmp)—分频过后的时钟信号
begin
if (clk_tmp'event and clk_tmp='1')then
case state is
when A=>if(d_in='1')then state<=B;--A状态
else state<=A;
end if;
f<='0';
when B=>if(d_in='1')then state<=B;--B状态
else state<=C;
end if;
f<='0';
when C=>if(d_in='1')then state<=B;f<='1';--C状态
else state<=A;f<='0';
end if;
end case;
end if;
end process;
分频器:实验板提供的2Hz低频信号感觉还是有点快,所以自己加入了上节课用到的50M分频器,将时钟信号调整成1Hz,同时将时钟信号显示在实验板上,方便观测
p2:process(clk)
begin
if (clk'event and clk='1') then
if cnt=24999999 then
cnt<=0;
clk_tmp<= not clk_tmp;
else
cnt<=cnt+1;
end if;
end if;
end process;
clk_out<=clk_tmp;
完整的结构体定义
architecture mealy of d_101 is
type state_type is(A,B,C);
signal state:state_type;
signal cnt : integer range 0 to 24999999; signal clk_tmp : std_logic;
begin
P1:process(clk_tmp)
begin
if (clk_tmp'event and clk_tmp='1')then
case state is
when A=>if(d_in='1')then state<=B;
else state<=A;
end if;
f<='0';
when B=>if(d_in='1')then state<=B;
else state<=C;
end if;
f<='0';
when C=>if(d_in='1')then state<=B;f<='1'; else state<=A;f<='0';
end if;
end case;
end if;
end process;
p2:process(clk)
begin
if (clk'event and clk='1') then
if cnt=24999999 then
cnt<=0;
clk_tmp<= not clk_tmp;
else
cnt<=cnt+1;
end if;
end if;
end process;
clk_out<=clk_tmp;
end mealy;
五、仿真波形图及其分析
分析如下
如图所示,当输入信号序列d_in为010101101001010时,能检测到101的有010101101001010,其中第四个值“1”,为两个“101”信号所共用。

此时输出信号检测的结果f为000101001000010,在第4,6,9,14个时钟周期检测到目标信号,仿真结果准确无误,说明实现了题目的要求,完成对101信号的检测。

由于时钟是上升沿触发,检测器的状态不受干扰,工作稳定。

六、故障及问题分析
故障1、波形仿真的输出波形全是0
原因:输入信号与时钟信号之间没有匹配
解决方法:
要想让输入信号与时钟信号对应,适当的修改设定周期,使其满足一定的关系。

把输入信号d_in周期设置成时钟信号clk周期的两倍,但发现输入信号为0101010……,不满足随机序列的形式,需要自己手动将d_in的一些部分单独置1或0,这样能更全面直观地检测其功能。

故障2、下载到实验板后出错
原因:设置管脚后没有编译
解决方法:在QuartusII9.0软件中设置管脚之后,再次编译工程无误后,下载到实验开发板上。

故障3、拨码输入信号跟不上时钟信号
原因:实验板提供的2Hz信号翻转太快
解决方法:我在原来设计的VHDL程序里加入50M分频器,让实际的时钟信号变为1Hz,这样拨动拨码开关的速度就能跟得上时钟改变了。

实验中还用了发光二极管来显示当前时钟的状态,亮灭分别表示高低电平,可以根据二极管状态来判定时钟的上升沿,输入信号d_in仅在上升沿有效
七、总结和结论
总结了之前的两次VHDL实验得到的经验,这次小的综合实验感觉还挺顺利的。

这次的实验需要我们了解有限状态机的相关知识,在实验之前我预习了实验教程P72~80关于状态机的设计步骤与实例,然后按照步骤完成实验的设计,掌握了这部分的知识,了解到状态机包括时序逻辑电路(存储部分)以及组合逻辑电路(控制部分)
进行VHDL实验,理论分析是十分重要的一环,只有逻辑分析透彻无误,才能用语言进行描述,进而用硬件实现。

比如这个实验中,三个状态与转换关系的设计是实验的关键,用到了在数电理论课上学到的一般时序电路的设计知识,只有明白了实验背后的逻辑思想,才进行VHDL语言编写,仿真等等在这次实验中,我也发现了一些我的缺点,比如不够细心,VHDL代码调试中出现些小错误,自己发现不了,如果下次能细心点,就完全可以避免,在以后的实验中,我会尽量减少实验中的错误,顺利完成实验任务。

同时我也发现了每学一门新知识的重要性,只有当所学的知识可以用来解决实际问题的时候,才是学到精处。

通过不断的练习与应用,加深自己的理解,提高能力,学为所用
八、对本课程的建议
完成了本学期四次数电基础实验课程之后,学到了很多知识,掌握了Quartus II软件的使用,完成了一些简单的实验,感觉每节课自己都有一些收获。

同时为下学期的数电综合实验及以后一些硬件设计打下了基础。

在实验课结束之际有一些自己的建议。

1、希望这门课能像电子电路实验那样进行周末实验预约,对一些想要在课后单独练习的同学提供机会。

2、实验的进度要与理论课的进度一致,记得做第三次实验时序逻辑电路设计时,我们才正学习这部分知识,虽然实验完成了,但对其中的原理还不是非常的了解。

3、我发现每节课都有部分剩余的时间,如果有可能的话,可以利用这些时间讲一些这个学科前沿的内容,丰富我们的视野。

相关文档
最新文档