实验三_用状态机实现序列检测器的设计
序列信号检测器的设计与实现 实验报告
数字电路与逻辑设计实验实验名称:序列信号检测器的设计与实现学院: 信息与通信工程学院班级: 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,输入输出信号,运行,观察仿真结果确认无误。
EDA实验报告四(状态机实现序列检测器的设计)
实验四:状态机实现序列检测器的设计一、实验目的1、了解和学习Quartus II 7.2软件设计平台。
2、了解EDA的设计过程。
3、通过实例,学习和掌握Quartus II 7.2平台下的文本输入法。
4、学习和掌握状态机的工作和设计原理。
5、掌握用VHDL 实现状态机的方法6、利用状态机设计一个序列检测器二、实验仪器PC机,操作系统为Windows7/XP,本课程所用系统均为WindowsXP(下同),Quartus II 7.2设计平台。
三、实验步骤1、创建工程,在File菜单中选择New Project Wizard,弹出对话框如下图所示在这个窗口中第一行为工程保存路径,第二行为工程名,第三行为顶层文件实体名,和工程名一样。
2、新建设计文本文件,在file中选择new,出现如下对话框:选择VHDL File 点击OK。
3、文本输入,在文本中输入如下程序代码: LIBRARY IEEE;USE IEEE. STD_LOGIC_1164. ALL;ENTITY fsm ISport(clk,x:IN STD_LOGIC;z:OUT STD_LOGIC);END fsm;ARCHITECTURE bhv OF fsm ISTYPE STATE IS(S0,S1,S2,S3);SIGNAL present_state:state;BEGINPROCESS(clk)BEGINIF(clk'EVENT AND clk='1')THENCASE present_state ISWHEN S0=>IF x='1'THENpresent_state<=S1;ELSE present_state<=S0;END IF;WHEN S1=>IF x='0'THEN present_state<=S2;ELSE present_state<=S0;END IF;WHEN S2=>IF x='1'THEN present_state<=S3; ELSE present_state<=S0;END IF;WHEN S3=>IF x='1'THEN present_state<=S0; END IF;END CASE;END IF;END PROCESS;z<='1'WHEN present_state<=S3ELSE '0';END bhv;然后保存到工程中,结果如下图所示:4、编译,如果有多个文件要把这个文件设为当前顶层实体,这样软件编译时就只编译这个文件。
实验三 序列信号检测器的设计
实验三序列信号检测器的设计一、实验目的:1、理解序列信号检测器的工作原理;2、掌握原理图和文本输入的混合设计输入方法;3、理解状态划分;4、掌握状态机程序的编写方法;二、实验原理:序列检测器是时序数字电路中非常常见的设计之一。
它的主要功能是:将一个指定的序列从数字码流中识别出来。
接下来的设计就是针对“011”这个序列的检测器。
设input为数字码流输入,output为检出标记输出,高电平表示“发现指定序列”,低电平表示“没有发现指定的序列”。
设输入的码流为“001101101111011111...”,在时钟2~4中,码流input里出现指定序列“011”,对应输出output在第4个时钟变为高电平“1”,表示发现指定"011”,以此类推。
序列发生器模块采用的是M(n=4)序列发生器,详细可以参考《EDA技术与应用》一书的4.4团队协作及逻辑锁定。
三、实验内容(1)最终的顶层设计原理图如下:左侧的四个D触发器组成的电路为M序列信号发生器模块,它可以产生15位随机的二进制码流。
发生器产生的二进制码流每隔15个时钟周期重复出现一次。
详细的可以在最终的时序仿真图中看出来。
右侧的get_str模块为检测模块,给予状态机的结构编写的,具体如下:library ieee;use ieee.std_logic_1164.all;entity get_ser isport(clk : in std_logic;input : in std_logic;reset : in std_logic;serout : out std_logic_vector(1 downto 0);output : out std_logic);end entity;architecture rtl of get_ser is-- Build an enumerated type for the state machine type state_type is (s0, s1, s2, s3);-- Register to hold the current statesignal state : state_type;beginserout <= ('0'&input);-- Logic to advance to the next stateprocess (clk, reset)beginif reset = '1' thenstate <= s0;elsif (rising_edge(clk)) thencase state iswhen s0=>if input = '0' thenstate <= s1;elsestate <= s0;end if;when s1=>if input = '1' thenstate <= s2;elsestate <= s1;end if;when s2=>if input = '1' thenstate <= s3;elsestate <= s1;end if;when s3 =>if input = '1' thenstate <= s0;elsestate <= s1;end if;end case;end if;end process;-- Output depends solely on the current state process (state)begincase state iswhen s0 =>output <= '0';when s1 =>output <= '0';when s2 =>output <= '0';when s3 =>output <= '1';end case;end process;end rtl;(2)理解状态机请根据上图对照get_str程序理解检测“011”序列的基本编程思路。
序列检测器之状态机设计
序列检测器之状态机设计一、实验目的8位序列数“110110011”的检测,当这一串序列数高位在前(左移)串行进入检测器后,若此数与预置的“密码”数相同,则输出1,否则仍然输出0。
二、实验原理(1)状态机用于序列检测器的设计比其他方法更能显示其优越性。
(2)序列检测器可用于检测一组或多组由二进制码组成的脉冲序列信号,当序列检测器连续收到一组串行二进制码后,如果这组码与检测器中预先设置的码相同,则输出1,否则输出0。
由于这种监测器必须记住前一次的正确码的收到必须是连续的,这就要求检测器必须记住前一次的正确码及正确序列,直到在连续的检测中所收到的每一位码都与预置数的对应码相同。
在检测的过程中,任何一位不相等都将回到初始状态重新开始检测。
三、实验步骤(1)检测数据110110011,高位在前的程序LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY SCHK ISPORT(DIN,CLK, RST : IN STD_LOGIC;--串行输入数据位/工作时钟/复位信号 SOUT : OUT STD_LOGIC);--检验结果输出END SCHK;ARCHITECTURE behav OF SCHK ISTYPE states IS (S0, S1, S2, S3,S4, S5, S6, S7, S8);--定义各种状态SIGNAL ST, NST: states :=s0 ;--设定现态变量和次态变量BEGINCOM: PROCESS(ST, DIN) BEGIN --组合进程,规定各状态转换方式CASE ST IS --11010011WHEN s0 => IF DIN = '1' THEN NST <= s1 ; ELSE NST<=s0 ; END IF ; WHEN s1 => IF DIN = '0' THEN NST <= s2 ; ELSE NST<=s0 ; END IF ; WHEN s2 => IF DIN = '0' THEN NST <= s3 ; ELSE NST<=s0 ; END IF ; WHEN s3 => IF DIN = '1' THEN NST <= s4 ; ELSE NST<=s0 ; END IF ; WHEN s4 => IF DIN = '1' THEN NST <= s5 ; ELSE NST<=s0 ; END IF ; WHEN s5 => IF DIN = '0' THEN NST <= s6 ; ELSE NST<=s0 ; END IF ; WHEN s6 => IF DIN = '1' THEN NST <= s7 ; ELSE NST<=s0 ; END IF ; WHEN s7 => IF DIN = '0' THEN NST <= s8 ; ELSE NST<=s0 ; END IF ; WHEN s8 => IF DIN = '0' THEN NST <= s3 ; ELSE NST<=s0 ; END IF ; WHEN OTHERS => NST<=s0;END CASE;END PROCESS;REG: PROCESS (CLK,RST) BEGIN ---时序进程IF RST='1' THEN ST <= s0;ELSIF CLK'EVENT AND CLK='1' THEN ST <= NST; END IF;END PROCESS REG;SOUT <= '1' WHEN ST=s8 ELSE '0' ;END behav ;(2)生成的RTL电路图如下所示:图(1)(3)生成symbol如图所示:图(2)(4)对其进行波形仿真得到波形如下所示:图(3)四、结果分析图(3)的波形显示,当有正确序列进入时,到了状态S8时,输出正确标志SOUT=1。
实验三_用状态机实现序列检测器的设计
实验三_⽤状态机实现序列检测器的设计实验三⽤状态机实现序列检测器的设计⼀、实验⽬的:⽤状态机实现序列检测器的设计,并对其进⾏仿真和硬件测试。
⼆、原理说明:序列检测器可⽤于检测⼀组或多组由⼆进制码组成的脉冲序列信号,当序列检测器连续收到⼀组串⾏⼆进制码后,如果这组码与检测器中预先设置的码相同,则输出a,否则输出b。
由于这种检测的关键在于正确码的收到必须是连续的,这就要求检测器必须记住前⼀次的正确码及正确序列,直到在连续的检测中所收到的每⼀位码都与预置数的对应码相同。
在检测过程中,任何⼀位不相等都将回到初始状态重新开始检测。
例3-1描述的电路完成对序列数"11100101"的。
当这⼀串序列数⾼位在前(左移)串⾏进⼊检测器后,若此数与预置的密码数相同,则输出“a”,否则仍然输出“b”。
【例3-1】//顶层⽂件:module XULIEQI(clk,reset,din8,LED7S);input clk;input reset;input [7:0] din8;output [6:0] LED7S;wire [3:0] AB;xulie u1 (clk, din8, reset, din);schk u2 (din,clk,reset,AB);decl7s u3 (AB,LED7S);endmodule//串⾏检测:module schk(DIN,CLK,CLR,AB);input DIN,CLK,CLR;output[3:0] AB;reg [7:0] Q;reg [3:0] AB;parameteridle = 8'b00000000,a = 8'b00000001,b = 8'b00000010,c = 8'b00000100,d = 8'b00001000,g = 8'b01000000,h = 8'b10000000;parameter data=8’b11100101;always @(posedge CLK or negedge CLR) if(!CLR) beginQ <= idle;endelsebegincase(Q)idle:beginif(DIN==data[7]) Q<=a;else Q<=idle;enda:beginif(DIN== data[6]) Q<=b;else Q<=idle;endb:beginif(DIN== data[5]) Q<=c;else Q<=idle;endc:beginif(DIN== data[4]) Q<=d;else Q<=idle;endd:beginif(DIN== data[3]) Q<=e;e:beginif(DIN== data[2]) Q<=f;else Q<=idle;endf:beginif(DIN== data[1]) Q<=g;else Q<=idle;endg:beginif(DIN== data[0]) Q<=h;else Q<=idle;enddefault :Q<=idle;endcaseendalways @(Q)beginif(Q==h) AB <= 4'b1010 ;else AB <= 4'b1011 ;endendmodule//前端预置8位数据输⼊:module xulie(clk, din8, reset, din); input clk;input[7:0] din8;input reset;output din;parameters0 = 3'b000,s3 = 3'b011,s4 = 3'b100,s5 = 3'b101,s6 = 3'b110,s7 = 3'b111;reg[2:0] cur_state,next_state;reg din;always @ (posedge clk or negedge reset) if(!reset) cur_state <= s0;elsecur_state <= next_state;always @ (cur_state or din8 or din ) begincase (cur_state)s0 : begindin <= din8[7];next_state <= s1;ends1 : begindin <= din8[6];next_state <= s2;ends2 : begindin <= din8[5];next_state <= s3;ends3 : begindin <= din8[4];next_state <= s4;ends4 : begindin <= din8[3];next_state <= s5;endnext_state <= s6;ends6 : begindin <= din8[1];next_state <= s7;ends7 : begindin <= din8[0];next_state <= s0;enddefault : begindin <= 1'b0;next_state <= s0;endendcaseendendmodule提⽰:1.若对于D <= "11100101 ",电路需记忆:初始状态、1、11、111 、1110 、11100、111001、1110010、11100101共9种状态。
序列检测器_实验报告
一、实验目的1. 理解序列检测器的工作原理和设计方法;2. 掌握时序电路的经典设计方法;3. 学习使用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时,输出低电平。
(整理)实验三序列发生器与序列检测器实验报告.
南昌大学实验报告姓名: 学号:6100210173 专业班级:中兴通信101实验类型:验证□综合■设计□创新□实验日期:2012、11、16实验四序列信号发生器与检测器设计一、实验目的1、.学习VHDL文本输入法2、学习有限状态机的设计3、设计序列信号发生器和检测器二.实验内容与要求1. 设计序列发生器,完成序列为0111010011011010的序列生成器2.用有限状态机设计序列检测器,实现串行序列11010的检测器3. 若检测到符合要求的序列,则输出显示位为“1”,否则为“0”4. 对检测到的次数计数三.设计思路1.设计分频器因为最终要把待检测序列的检测次数在数码管上显示出,所以必须设计一个分频器,将起始频率作为数码管的扫描频率,而将分频后的频率作为序列发生器的移位频率,所以在程序中设置10KHZ进行分频分成1HZ脉冲(10KHZ的扫描频率是为了让数码管的动态显示更加清晰)2.设计序列发生器在这次的设计序列发生器时没有用状态转移的方法来来形成一个16位的序列,而是通过直接设计一串16位的序列,通过对最高位的输出与并置来形成一串循环的16位序列,这样设计简单方便,易于操作与控制,也减少了在状态转移产生的误差,其主要的核心程序为:architecture bhv of p2 issignal bs: std_logic_vector(15 downto 0):="0111010011011010";beginxlout<=bs(15);process (clk1hz)beginif (clk1hz'event and clk1hz='1') thenbs<= bs(14 downto 0)&bs(15);先将序列最高位输出至序列检测器中,然后在一个脉冲作用下,将此时最高位变成最低位,其余14位不变,使序列循环移动,最终形成一个16位循环序列。
实验三用状态机实现序列检测器的设计
仿真,分析结果
4、锁引脚
1)根据DE2_pin_assignments文件内容、格式制作 本设计引脚对应文件的引脚锁定文件: XUELIEQI.csv
• 由Processing->generate functional simulation netlist,提取功能仿真的网表
• 由processing -> start simulation 进行功能仿 真,并对结果进行分析。
• 时序仿真
• 由assignments->settings,更改仿真器的设置为 时序仿真:timing
• 双击波形文件下的空白区,得到如下对话框,点 击Noder Finder
弹出下面的对话框,单击List,选中AB、CLK、CLR 、DIN、Q几个端口,单击>_后,点击OK
• 由edit->end time ,设定仿真终止时间为 1us, 选中CLK点击 设置周期是10ns,
并对CLR,DIN作相应设置
• 由assigments->settings,对仿真工具设定为功 能仿真,并将激励文件调入
• 由Processing->generate functional simulation netlist,提取功能仿真的网表
• 由processing -> start simulation 进行功能仿
实验三 用状态机实现序列检测器的设计
任务分析
• 本次实验的核心是:应用有限状态机设计思路, 检测输入的串行数据是否是”11100101”。
序列信号检测器的设计与实现 数电实验报告
数字电路与逻辑计实验报告序列信号检测器的设计与实现一、课题名称:序列信号检测器的设计与实现二、实验目的:(1)熟悉用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 触发器来完成此任务。
实验三_用状态机实现序列检测器的设计
设计参考
本实验由顶层文件、串行检测、并行数据转 串行、数码管显示四个模块组成
顶层模块
并行8bits数据 串行数据 4bits数据 7bits数据
并转串 模块
clk
串行检测 模块
数码管显 示模块
reset
系统任务要求
• 系统主要包括3个模块: 1)并行数据转串行数据模块(xulie.v) 2)串行检测模块(schk.v) 3)数码管显示模块(decled7s .v) 由于需要用按键V16作为时钟输入,按键 D18作为系统复位输入,所以需调用实验二 中应用的消抖模块,对两个按键输入信号 进行消抖。
设计输入
• 选择Verilog Module ,并输入合法文件名
• 在文本编辑窗口输入代码
设计输入
设计处理
• 设计处理环节进行综合、功能仿真、时序仿真Байду номын сангаас等处理
设计处理
1、综合:
• 在sources窗口选中待综 合模块cnt10,在process 窗口双击Synthesize-XST • 综合完后可以双击 Synthesize-XST下的View RTL Schematic,得到综 合后的电路图。
实验三
用状态机实现序列检测器的设计
• 上网查询资料,复习《数字电子技术》教 材,理解有限状态机的概念。 • 有限状态机的状态图的画法及其含义。
任务分析
• 本次实验的核心是:应用有限状态机设计思路,检测输 入的串行数据是否是”11100101”。 • 根据下载电路板的资源, 拟用SW3---SW0,J4接口的E8,F8,C7,D7作为系统输入( 系统由此需要设计一个8bits并行数据转串行的模块) 一个7段数码显示译码器作为检测结果的输出显示,如 果串行序列为”11100101”,显示a,否则显示b(系统需 要设计一个7段数码显示译码器模块) 为了显示可控,清晰,拟用V16,D18实现时钟,复位信 号的输入。
序列检测器设计实践报告
序列检测器设计实践报告一、引言序列检测器是现代通信系统中的关键组件之一,它能够检测出接收到的数据序列是否符合特定规则或模式。
在本次实践中,我们通过使用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语言实现了状态寄存器、状态转移逻辑和输出逻辑。
序列信号检测器的设计与实现数电实验报告
序列信号检测器的设计与实现数电实验报告序列信号检测器的设计与实现数电实验报告数字电路与逻辑计实验报告序列信号检测器的设计与实现一、课题名称:序列信号检测器的设计与实现二、实验目的:(1)熟悉用VHDL语言设计时序逻辑电路的方法;(2)熟悉序列信号检测器的设计方法;(3)了解状态机的设计方法。
三、实验所用仪器及元器件:(1)计算机(2)直流稳压电源(3)数字系统与逻辑设计实验开发板四、实验内容:用VHDL语言设计实现一个序列信号检测器,当检测到“”时,输出为“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要判别序列检测器是否连续接收了“”,电路必须用不同的状态记载外部输入x的值。
假设电路的初始状态为A,x输入第一个值“1”,检测器状态由A装换到B,用状态B记载检测器接受了序列的第一个值“1”,这时外部输出Z=0;x输入“0”,检测器状态由B 装换到C,用状态C记载检测器接受了序列的第二个值“0”,外部输出Z=0;x输入第三个值“1”,检测器状态由C 装换到D,外部输出Z=1。
然后再根据外部输入及其他情况时的状态转移,写出相应的输出。
以上分析了序列检测器工作,由此可画出图一所示的原始状态图。
根据原始状态图可列出原始状态表,如表一所示。
0/0A1/0B1/00/00/01/0CD1/10/0图一原始状态图表一:原始状态表SnSn?1 X=1 B B D B X=0 0 0 0 0 Z X=1 0 0 1 0 X=0 A C A C A B C D第2步,在对原状态表进行简化,从状态表就可以看出B、D 两个状态为等价状态。
序列检测器的设计杭电
《EDA技术》实验报告实验名称:序列检测器的设计姓名:班级:学号:实验日期:指导教师:一、实验设计要求用状态机实现序列检测器的设计,了解一般状态机的设计与应用。
例8-11描述的电路完成对序列数“11100101”的检测,当这一串序列数高位在前(左移)串行进入检测器后,若此数与预置的密码数相同,则输出“A”,否则仍然输出“B”。
完成对序列对文本编辑输入,仿真测试并给出仿真波形,了解控制信号的时序。
二、设计原理二序列检测器可用于检测一组或多组由二进制码组成的脉冲序列信号,当序列检测器连续收到一组串行二进制码后,如果这组码与检测器中预先设置的码相同,则输出1,否则输出0。
由于这种检测的关键在于正确码的收到必须是连续的,这就要求检测器必须记住前一次的正确码及正确序列,直到在连续的检测中所收到的每一位码都与预置数的对应码相同。
在检测过程中,任何一位不相等都将回到初始状态重新开始检测。
电路结构图或原理图电路功能描述定义了序列检测器顶层设计元件端口信号,输入端口:DIN, CLK,CLR,数据类型被定义为STD_LOGIC;输出端口:AB 定义的数据类型STD_LOGIC_VECTOR(3 DOWNTO 0) ; 定义信号SIGNAL Q: INTEGER RANGE 0 TO 8; 和SIGNAL D: STD_LOGIC_VECTOR(7 DOWNTO 0); 若DIN这一串序列数与预置数D相同,则输出“A”,否则仍然输出“B”。
三、实验程序程序1:序列检测器描述四、编译及仿真结果仿真结果显示:该设计是成功的。
完成对序列数“11100101”的检测,当这一串序列数高位在前(左移)串行进入检测器后,若此数与预置的密码数相同,则输出“A”,否则仍然输出“B”。
五、总结。
实验四 用状态机实现序列检测器的设计
EDA实验报告《EDA技术实用教程》实验报告实验四用状态机实现序列检测器的设计班级115学号200811512姓名日期2010.10.10一、实验目的1. 掌握用VHDL 实现状态机的方法2. 利用状态机设计一个序列检测器二.实验仪器EDA6000试验仪,PC机三、实验原理:序列检测器可用于检测一组或多组由二进制码组成的脉冲序列信号,当序列检测器连续收到一组串行二进制码后,如果这组码与检测器中预先设置的码相同,则输出1,否则输出0。
由于这种检测的关键在于正确码的收到必须是连续的,这就要求检测器必须记住前一次的正确码及正确序列,直到在连续的检测中所收到的每一位码都与预置数的对应码相同。
在检测过程中,任何一位不相等都将回到初始状态重新开始检测。
例6-27描述的电路完成对序列数"11100101"的。
当这一串序列数高位在前(左移)串行进入检测器后,若此数与预置的密码数相同,则输出“A”,否则仍然输出“B”。
四、试验步骤1、破解软件2、写出状态机的源程序,编译。
要求当检测到预置序列时,输出一个脉冲的高电平,其余时候输出为低电平。
选择芯片类型,这次选择“ACEX1K”3、进行仿真,看结果是否正确。
检测一组二进制脉冲序列信号, 当连续的脉冲序列与预先设定的码(d)相同时,显示字符“A”否则显示”E”.实验VHDL代码LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY EX4 ISPORT (din : IN STD_LOGIC; -- IO49clk : IN STD_LOGIC; -- IO48clr : IN STD_LOGIC; -- IO50d : IN STD_LOGIC_VECTOR(7 DOWNTO 0); -- IO47..IO40err : OUT STD_LOGIC_VECTOR(3 DOWNTO 0) -- IO03..IO00);END EX4;ARCHITECTURE behv OF EX4 ISSIGNAL q: INTEGER RANGE 0 TO 8;BEGINPROCESS(clk)BEGINIF clr = '1' THENq <= 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 THENerr <= "1010"; -- display "A"ELSEerr <= "1110"; -- display "E"END IF;END PROCESS;END behv;五、实验结果RTL结构图形A[3..0]B[3..0]OUTEQUALSEL[3..0]DATA[15..0]OUTMUXSEL[3..0]DATA[15..0]OUTMUXSEL[3..0]DATA[15..0]OUTMUXSEL[3..0]DATA[15..0]OUTMUXDQPREENACLREqual04' h8 --Mux19' h000 --3' h0 --Mux39' h000 --1' h0 --1' h0 --1' h0 --process0~0process0~1process0~2process0~3process0~4process0~5process0~6process0~7q[3..0]din clk clrd[7..0]err[3..0]1' h1 --2' h2 --Mux29' h000 --2' h0 --1' h0 --Mux08' h00 --7' h00 --时序仿真打开“assignments ”中的“assignments editor ”打开EDA,装入模式12.根据EDA 管脚进行指定在实验箱上观察结果。
实训八 用状态机实现序列检测器的设计
实训八用状态机实现序列检测器的设计一、实训目的1.掌握一种状态机的设计方法2.用状态机实现序列检测器的设计,并对其进行仿真和硬件测试二、实训器材1.EDA实验箱1台2.微型计算机1台3.MAX+PLUSII10.2软件1套4.下载电缆1条三、实训原理序列检测器可用于检测一组或多组由二进制码组成的脉冲序列信号,当序列检测器连续收到一组串行二进制码后,如果这组码与检测器中预先设置的码相同,则输出1,否则输出0。
由于这种检测的关键在于正确码的收到必须是连续的,这就要求检测器必须记住前一次的正确码及正确序列,直到在连续的检测中所收到的每一位码都与预置数的对应码相同。
在检测过程中,任何一位不相等都将回到初始状态重新开始检测。
例中描述的电路完成对序列数"11100101"的。
当这一串序列数高位在前(左移)串行进入检测器后,若此数与预置的密码数相同,则输出“A”,否则仍然输出“B”。
四、设计程序(参考程序)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); --8位待检测预置数BEGIND <= "11100101 " ; --8位待检测预置数PROCESS( CLK, CLR )BEGINIF CLR = '1' THEN Q <= 0 ;ELSIF CLK'EVENT AND CLK='1' THEN --时钟到来时,判断并处理当前输入的位CASE 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" ; --序列数检测正确,输出“A” ELSE AB <= "1011" ; --序列数检测错误,输出“B” END IF ;END PROCESS ;END behav ;提示:若对于D <= "11100101 ",电路需记忆:初始状态、1、11、111 、1110 、11100、111001、1110010、11100101 共9种状态。
序列检测器的设计实验报告
序列检测器的设计实验报告一、实验目的本次实验的目的是设计一个能够检测特定序列的数字逻辑电路,即序列检测器。
通过设计和实现这个电路,深入理解数字电路的基本原理和设计方法,掌握状态机的概念和应用,提高逻辑分析和电路设计的能力。
二、实验原理序列检测器是一种能够在输入数据流中检测特定序列的电路。
它通常由状态机实现,状态机根据输入的变化在不同的状态之间转移,并在特定的状态下输出检测结果。
以检测序列“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设计好发生器和检测器,顶层用原理图连线。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
4’b1010 4’b1011 4’b0000
7’b 0001000 7’b 0000011 7’b1000000
a b 0
提示:可以在default分支选用显示“0”。
• 3、创建顶层文件:
• 输入XULIEQI的Verilog文本并保为XULIEQI.v
设计参考
本实验由顶层文件、串行检测、并行数据转 串行、数码管显示四个模块组成
顶层模块
并行8bits数据 串行数据 7bits数据 4bits数据
并转串 模块
clk
串行检测 模块
数码管显 示模块
reset
• 1、构建一个工程名为schk的工程
• 由File->New Project Wizard,弹出对话框,设置文件夹目 录,Project名称。
• 将波形文件存盘为schk.vwf
• 设定schk.v是目前的顶层文件
• 由Processing->start->start annlysis & elaboration对 程序进行初步的分析
• 双击波形文件下的空白区,得到如下对话框,点 击Noder Finder
弹出下面的对话框,单击List,选中AB、CLK、CLR、 DIN、Q几个端口,单击>_后,点击OK
• 锁好引脚,进行全编译(compile),重新布局布线, 时序仿真 引脚锁定,仿真结果核对无误后,准备下载
5、下载
• 由tools-> programmer,下载到FPGA
• 下载好后,将SW0-SW7 依次设为11100101,按下 KEY1(reset)键,按KEY0键 8次,观察数码管的 显示情况,是否达到设计要求。 • 将SW0-SW7输入变化,按KEY0键,观察数码管的 显示情况。
注意, 1 )不能将文件 夹放置与软件安 装目录下,应放 在DATA盘上 2)要求以自己的 学号作为文件夹 名 3)项目名称为 XULIEQI,与后续 的顶层实体名相 对应。
• 暂无文件添加,按next,继续
• 根据DE2实验平台,选择FPGA目标器件为: Cyclone II 系列:EP2C35F672C6
4、锁引脚
1)根据DE2_pin_assignments文件内容、格式制作本 设计引脚对应文件的引脚锁定文件:XUELIEQI.csv 2) 由Assignments->Import Assignment,打开对话框 ,调入引脚对应文件XUELIEQI.csv即可。
引脚锁定说明
• 输入信号: 并行输入8bits信号,由拨动开关SW0—SW7完 成。 时钟和复位信号分别由按键KEY0,KEY1输入 • 输出信号: 显示由数码管HEX0 显示实现。
• 由File->new,弹出对话框,选择other files->Vector Waveform File
将波形文件存盘为XULIEQI.vwf
设定XULIEQI.v是目前的顶层文件
由Processing->start->start annlysis &elaboration对程 序进行初步的分析
• 由Processing->generate functional simulation netlist ,提取功能仿真的网表 • 由processing -> start simulation 进行功能仿真,并 对结果进行分析。
• 时序仿真
• 由assignments->settings,更改仿真器的设置为时序 仿真:timing • 由processing->start compile对设计进行全编译 • 再由processing -> start simulation 进行时序仿真, 分析结果
添加波形仿真端口
由edit->end time ,设定仿真终止时间为1us, 选中CLK 点击 设置周期是10ns;选中din8,单击 如下图 ,设置Start value:11100101;Increment by:0设置 好后确定。
• 由assigments->settings,对仿真工具设定为功能仿 真,并将激励文件调入
• 由edit->end time ,设定仿真终止时间为1us, 选中CLK点击 设置周期是10ns,并对 CLR,DIN作相应设置
• 由assigments->settings,对仿真工具设定为功能仿 真,并将激励文件调入
• 由Processing->generate functional simulation netlist, 提取功能仿真的网表 • 由processing -> start simulation 进行功能仿真,并对 结果进行分析。
• 仍然使用软件自带的综合仿真工具,所以按NEXT, 继续
• Project建立总结,按Finish完成
输入schk的Verilog文本
• 由File->New,得如下对话框,选择Verilog HDL File:
• 将设计的Verilog程序输入,并存盘名为schk.v
• 由File->new,弹出对话框,选择other files->Vector Waveform File
实验三
用状态机实现序列检测器的设计
任务分析
• 本次实验的核心是:应用有限状态机设计思路, 检测输入的串行数据是否是”11100101”。 • 根据DE2板的资源, 拟用SW0---SW7作为系统输入(系统由此需要设 计一个8bits并行数据转串行的模块) 一个7段数码显示译码器作为检测结果的输出显 示,如果串行序列为”11100101”,显示a,否则 显示b(系统需要设计一个7段数码显示译码器模 块) 为了显示可控,清晰,拟用key0,key1实现时钟, 复位信号的输入。
时序仿真 由assignments->settings,更改仿真器的设置为时序仿 真:timing
• 由processing->start compile对设计进行全编译 • 再由processing -> start simulation 进行时序仿真, 分析结果
• 2、仿照工程schk的设计方法,再分别设计 xulie和de果进行 分析。 • 注:编写数码管显示程序(decl7s.v)来显 示A或B状态。已知数码管为共阳级连接。