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

合集下载

序列检测器实验报告

序列检测器实验报告

序列检测器设计实验内容:设计一个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。

7位序列检测机设计

7位序列检测机设计

VHDL数字系统设计与测试实验报告(一)——有限序列检测器一、设计功能与要求1、实验要求:利用状态机原理设计一个7位序列检测器(1110010)。

2、功能分析:序列检测器一般有一个输入X和一个输出Y。

输入信号在不断变化,从而形成一个与时间相关的输入序列。

序列检测器就是当输入序列中包含特定串时,设置输出信号Y为高电平,表示检测到了特定串。

本设计中需要检测的序列是“1110010”。

二、设计思路序列检测器是一种同步时序电路,它用于搜索,检测输入的二进制代码串中是否出现指定的代码序列,1110010 序列检测器的原理图如下:CPX Y 0111010010010首先,要从一串二进制编码中检测出一个已预置的七位二进制码1110010,每增加一位相当于增加一个状态,再加上一个初始态,用八个状态可以实现。

状态机初始状态为S1;当自动机接收到一个“1”时,自动机进入S2状态;如果在S2状态接收到“1”时,自动机进入到S3状态;如果在S3状态接收到“1”时,自动机进入到S4状态;如果在S4状态接收到“0”时,自动机进入到S5状态;如果在S5状态接收到“0”时,自动机进入到S6状态;如果在S6状态接收到“1”时,自动机进入到S7状态;如果在S7状态接收到“0”时,自动机进入到S8状态;如果自动机处于S8状态,则表示接收到了一个连续的串“1110010”,此时可以设置输出信号为高电平。

其Moore型原始状态转移图如下:根据状态转移图可以得出Moore型原始状态转移表为:三、源代码library ieee;use ieee.std_logic_1164.all;entity checkerarray isport(din:in std_logic;clk,clr:in std_logic;z:buffer std_logic);end checkerarray;architecture arch_check of checkerarray is type StateType is(s1,s2,s3,s4,s5,s6,s7,s8);signal present_state,next_state:StateType; beginstate_comb:process(present_state,din)begincase present_state iswhen s1=>z<='0';if din='1'thennext_state<=s2;elsenext_state<=s1;end if;when s2=>z<='0';if din='1'thennext_state<=s3;elsenext_state<=s2;end if;when s3=>z<='0';if din='1'thennext_state<=s4;elsenext_state<=s1;end if;when s4=>z<='0';if din='1'thennext_state<=s4;elsenext_state<=s5;end if;when s5=>z<='0';if din='1'thennext_state<=s2;elsenext_state<=s6;end if;when s6=>z<='0';if din='1'thennext_state<=s7;elsenext_state<=s1;end if;when s7=>z<='0';if din='1'thennext_state<=s3;elsenext_state<=s8;end if;when s8=>z<='1';if din='1'thennext_state<=s2;elsenext_state<=s1;end if;end case;end process state_comb;state_clocked:process(clk,clr) beginif(clr='1')thenpresent_state<=s1;elsif(clk'event and clk='1')thenpresent_state<=next_state;end if;end process state_clocked;end arch_check;四、仿真结果与说明上图即为在modelsim中进行仿真的波形图像。

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序列检测器实验报告

《实验七序列检测器实验》实验报告杨丽斌计科二班学号: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语言及相关的模块设计除了花了一点时间、并没有遇到多大的阻碍,但是在器件验证过程中却出现了一些问题:主要是高低频时钟信号选择的问题,在这个问题上花了比较多的时间。

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

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

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

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

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

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

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

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

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

二、序列检测器的设计步骤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. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
ENTITY SM1 IS
PORT (
clock : IN STD_LOGIC;
reset : IN STD_LOGIC := '0';
input1 : IN STD_LOGIC := '0';
input2 : IN STD_LOGIC := '0';
output1 : OUT STD_LOGIC
);
WHEN s8=> IF DIN = '0' THENNST <= s2;ELSE NST<=s0;END IF;
WHEN OTHERS =>NST <= st0;
END CASE ;
END PROCESS;
REG: PROCESS (CLK,RST)
BEGIN
IFRST='1'THENST<=s0;
设计原理图及源程序
LIBRARY IEEE;
USE IEEE、STD_LOGIC_1164、ALL;
ENTITYAAIS
PORT ( CLK ,DIN,RST : IN STD_LOGIC;
SOUT: OUT STD_LOGIC;
ENDAA;
ARCHITECTURE behav OFAAIS
TYPE states IS (s0, s1, s2, s3,s4,s5,s6,s7,s8);
END SM1;
ARCHITECTURE BEHAVIOR OF SM1 IS
TYPE type_fstate IS (st1,st2,st3,st4,st5,st6,st7,st8,st0);
SIGNAL fstate : type_fstate;
SIGNAL reg_fstate : type_fstate;
(2)利用Quatus 软件生成状态转移图。
(3)对该检测器进行仿真,得到仿真波形。
2、采用状态图编辑方法设计序列检测器,检测序列为“”。具体要求为
(1)对电路进行仿真,得到仿真波形。
(2)将该电路图转化成VHDL语言形式。
设计思路
序列检测器可用于检测一组或多组由二进制码组成的脉冲序列信号,当序列检测器连续收到一组串行二进制码后,如果这组码与检测器中预先设置的码相同,则输出为1,否则输出为0、由于这种检测的关键在于正确码的收到必须就是连续的,这就要求检测器必须记住前一次的正确码及正确序列,直到在连续的检测中所收到的每一位码都与预置数的对应码相同。在检测过程中,任何一位不相等都将回到初始状态重新检测。
EDA实验报告书
姓名xxx学号xxxxxxx实验时间
课题名称
序列检测器的设计
实验目的
1、用状态机实现序列检测器的设计
2、了解一般状态机的设计与应用
设计要求
1、采用VHDL语言设计序列检测器,具体要求如下:
(1)检测序列为“”。该序列从左到右依次进入检测器,如果检测到完整序列,检测器输出为‘1’,反之输出为‘0’。
BEGIN
PROCESS (clock,reset,reg_fstate)
BEGIN
IF (reset='1') THEN
fstate <= st1;
ELSIF (clock='1' AND clock'event) THEN
fstate <= reg_fstate;
END IF;
END PROCESS;
SIGNAL ST,NST: states:=s0;
BEGIN
COM : PROCESS(ST,DIN) BEGIN
CASE ST IS
WHEN s0 => IF DIN = '1' THENNST <= s1;ELSE NST<=s0;END IF;
WHEN s1=> IF DIN = '0' THENNST <= s2;ELSE NST<=s0;END IF;
END IF;
output1 <= '0';
WHEN st2 =>
IF (((input1 = '1') AND (input2 = '1'))) THEN
reg_fstate <= st3;
ELSE
reg_fstate <= st0;
END IF;
output1 <= '0';
WHEN st3 =>
reg_fstate <= st5;
ELSE
reg_fstate <= st0;
END IF;
output1 <= '0';
WHEN st5 =>
IF (((input1 = '1') AND (input2 = '1'))) THEN
PROCESS (fstate,input1,input2)
BEGIN
output1 <= '0';
CASE fstate IS
WHEN st1 =>
IF (((input1 = '1') AND (input2 = '1'))) THEN
reg_fstate <= st2;
ELSE
reg_fstate <= st0;
ELSIF ( CLK'EVENT AND CLK='1') THENST<=NST;
END IF;
END PROCESS REG;
SOUT<='1'WHEN ST=s8 ELSE'0';
ENDbehav;
仿真波形图
实验结果
LIBRARY ieee;
USE ieee、logic_1164、all;
WHEN s2=> IF DIN = '1' THENNST <= s3;ELSE NST<=s0;END IF;
WHEN s3=> IF DIN = '0' THENNST <= s4;ELSE NST<=s0;END IF;
WHEN s4=> IF DIN = '1' THENNST <= s5;ELSE NST<=s0;END IF;
IF (((input1 = '1') AND (input2 = '1'))) THEN
reg_fstate <= st4;
ELSE
reg_fstate <= st0;
END IF;
output1 <= '0';
WHEN st4 =>
IF (((input1 = '1') AND (input2 = '1'))) THEN
WHEN s5=> IF DIN = '1' THENNST <= s6;ELSE NST<=s0;END IF;
WHEN s6=> IF DIN = '1' THENNST <= s7;ELSE NST<=s0;END IF;
WHEN s7=> IF DIN = '0' THENNST <= s8;ELSE NST<=s0;END IF;
相关文档
最新文档