实验十 串行数据序列检测器
- 格式:doc
- 大小:9.16 MB
- 文档页数:4
EDA 实验报告实验一:组合电路的设计实验内容是对2选1多路选择器VHDL 设计,它的程序如下:ENTITY mux21a ISPORT ( a, b : IN BIT; s : IN BIT; y : OUT BIT ); END ENTITY mux21a;ARCHITECTURE one OF mux21a IS SIGNAL d,e : BIT; BEGIN d <= a AND (NOT S) ; e <= b AND s ; y <= d OR e ;END ARCHITECTURE one ;Mux21a 仿真波形图以上便是2选1多路选择器的VHDL 完整描述,即可以看成一个元件mux21a 。
mux21a 实体是描述对应的逻辑图或者器件图,图中a 和b 分别是两个数据输入端的端口名,s 为通道选择控制信号输入端的端口名,y 为输出端的端口名。
Mux21a 结构体可以看成是元件的内部电路图。
最后是对仿真得出的mux21a 仿真波形图。
Mux21a 实体Mux21a 结构体实验二:时序电路的设计实验内容D触发器的VHDL语言描述,它的程序如下:LIBRARY IEEE ;USE IEEE.STD_LOGIC_1164.ALL ;ENTITY DFF1 ISPORT (CLK : IN STD_LOGIC ;D : IN STD_LOGIC ;Q : OUT STD_LOGIC );END ;D触发器ARCHITECTURE bhv OF DFF1 ISBEGINPROCESS (CLK)BEGINIF CLK'EVENT AND CLK = '1'THEN Q <= D ;END IF;END PROCESS ;END bhv;D触发器的仿真波形图最简单并最具代表性的时序电路是D触发器,它是现代可编程ASIC设计中最基本的时序元件和底层元件。
串行数据检测电路1010串行数据检测电路通常用于检测串行数据流中特定模式的出现,比如检测1010这样的序列。
这种电路可以应用在许多领域,比如通信系统、计算机总线、传感器接口等。
首先,让我们从电路的角度来看。
串行数据检测电路通常由几个基本部分组成,输入缓冲器、状态机和比较器。
输入缓冲器用于接收串行数据流并将其转换为并行数据,然后传递给状态机。
状态机用于检测特定的模式,比如1010,一旦检测到该模式,状态机会发出信号。
比较器用于比较接收到的数据和期望的模式,如果匹配则输出相应的信号。
其次,从应用的角度来看,串行数据检测电路可以应用在许多场景。
在通信系统中,它可以用于检测特定的控制序列或数据帧的开始和结束标记。
在计算机总线中,它可以用于检测特定的命令或数据传输模式。
在传感器接口中,它可以用于检测传感器发送的特定数据模式。
此外,从性能和设计角度来看,串行数据检测电路的设计需要考虑到数据传输速率、噪声容忍度、功耗和集成度等因素。
高速数据传输需要更快的状态机和比较器,而在噪声环境下需要更强的抗干扰能力。
此外,集成度和功耗也是设计时需要考虑的因素,特别是在移动设备和嵌入式系统中。
最后,从未来发展的角度来看,随着通信和计算机系统的不断发展,对于串行数据检测电路的需求也会不断增加。
未来的串行数据检测电路可能会更加智能化,能够实现更复杂的数据模式检测和处理,同时也会更加注重低功耗和高集成度的设计。
总的来说,串行数据检测电路是一种在现代数字系统中非常重要的功能模块,它在通信、计算机和控制系统中有着广泛的应用前景,同时也面临着不断增加的性能和设计挑战。
序列检测器设计实验内容:设计一个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。
摘要分析了时序逻辑电路设计中的状态化简问题,指出了状态化简不会改变电路的逻辑功能,不可能使电路产生错误输出。
讨论了串行数据检测器的米里型电路设计和摩尔型电路设计,提出了一种在输入数据稳定的区段进行检测、确定电路状态,在输入数据改换为下一位时输出状态信息,确保系统正常工作的米里型电路设计方法,这种方法对米里型电路的设计有通用性。
时序逻辑也叫时态逻辑(temporal logic),是计算机科学里一个很专业很重要的领域。
时序逻辑被用来描述为表现和推理关于时间限定的命题的规则和符号化的任何系统,主要用于形式验证。
20世纪60年代Arthur Prior提出介入的基于模态逻辑的特殊的时间逻辑系统,这一理论后来被艾米尔伯努利等逻辑学家进一步发展。
关键词:串行数据检测电路;逻辑电路;调试目录1.绪论 (1)2.设计方案 (2)3.电路的原理及其设计 (3)4.安装与调试 (11)5.结论 (13)参考文献 (14)1.绪论本次试验所需要的选择器有着很重要的应用意义。
在当今社会各个领域都发挥着重要的作用,因为它能在触发后产生相应的反应,可以应用在报警器、抢答器等电子产品中,它为人们本次课设所设计的数据选择器在现实生活中带来许多方便之处。
接收到本课设时想到的相关内容非常之多:首先是想到了是要有连续的序列脉冲信号输入;其次是要进行以触发器为基础的同步时序电路设计或是以中大规模集成电路为基础的时序电路的设计;最后还应检测一下电路能否自启动。
若以X为输入信号出现,Y为输出信号出现时:以触发器为基础的同步时序电路设计,还要在原始状态图上补充X不是1111码的各种输入的对应状态及其转换关系,建立完整的原始状态图,然后进行状态化简,求触发器的级数、类型以及驱动方程,最后画出逻辑电路;以中大规模集成电路为基础的时序电路设计,则需要将X序列的串行码按连续4位为1组转换成并行码,这样就可以用组合电路检测并行码是否正好是1111。
EDA实验报告通信工程二班李桐20100820212实验目的:1.计数器的原理及应用。
2.混合模式的工程设计法的应用。
3.数码管扫描电路的应用。
4.序列检测器原理。
5.Mealy型与Moore型状态机原理。
6.状态图输入法。
实验原理:1.计数器是一种常用的可统计时钟脉冲个数的时序逻辑器件。
计数器中的“数”是触发器的状态组合,即编码。
计数器循环一次所包含的状态总数就称作模。
本次试验采用VHDL语言直接构建一个202进制计数器。
2.状态机是由一组状态、一个初始状态、输入输出和状态转换函数组成的时序电路。
状态机主要用来控制电路的状态转移,针对不同类型的状态机,输出可以由现态确定,也可以由现态及次态共同确定。
按状态机的信号输出方式分类,可分为Mealy型状态机和Moore型状态机。
Mealy型状态机,次态和输出均取决于现态和当前输入;Moore型状态机,下一状取决于当前状态和当前输入,但其输出仅取决于当前状态。
序列检测器是用于从二进制码流中检测出一组特定序列信号的时序电路。
接受的序列信号与检测器预设值变焦,相同则输出为1,否则输出为 0。
实验具体步骤:1.202进制加法计数器(1).VHDL结构式描述顶层(调用了202进制加法计数器与七段译码器)library ieee;use ieee.std_logic_1164.all;entity cnt212_7seg isport( clk,clrn,en,scan_clk:in std_logic;cout:out std_logic;seg7:out std_logic_vector(6 downto 0);wei:out std_logic_vector(2 downto 0));end cnt212_7seg;architecture arch of cnt212_7seg iscomponent cnt212 isport( clk,clrn,En:in std_logic;cout:out std_logic;b,s,g:out std_logic_vector(3 downto 0));end component;component scan_led3_vhd isport(scan_clk,cnt_aclr:in std_logic;datab,datas,datag:in std_logic_vector(3 downto 0);seg7:out std_logic_vector(6 downto 0);wei:out std_logic_vector(2 downto 0));end component;signal wdatab,wdatas,wdatag:std_logic_vector(3 downto 0);begincnt_212:cnt212 port map(clk,clrn,En,cout,wdatab,wdatas,wdatag);scan_led3:scan_led3_vhd port map(scan_clk,(not clrn),wdatab,wdatas,wdatag,seg7,wei); end arch;(2).VHDL语言描述学号计数器(调用了10进制加法计数器)library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use ieee.std_logic_arith.all;entity cnt212 isport( clk,clrn,En:in std_logic;cout:out std_logic;b,s,g:out std_logic_vector(3 downto 0));end cnt212;architecture arch of cnt212 iscomponent exp_cnt10 isport(clk,clrn,En:in std_logic;cq:out std_logic_vector(3 downto 0);cout:out std_logic);end component;component dffport(d,clk,clrn:in std_logic;q:out std_logic);end component;signal couts,coutg,coutb,q1,q2,lkaclr:std_logic;signal regb,regs,regg:std_logic_vector(3 downto 0);begincntg:exp_cnt10 port map(clk,(clrn and lkaclr),En,regg,coutg);dff1:dff port map(coutg,clk,clrn,q1); --利用D触发器实现进位cnts:exp_cnt10 port map(q1,(clrn and lkaclr),En,regs,couts);dff2:dff port map((couts and coutg),clk,clrn,q2); --利用D触发器实现进位cntb:exp_cnt10 port map(q2,(clrn and lkaclr),En,regb,coutb);lkaclr<= '0' when ( regb=x"2" and regs=x"1" and regg=x"2") else --在此实现清零'1' ;cout<= '1' when ( regb=x"2" and regs=x"1" and regg=x"1") else --在此使进位为'1''0';b<=regb;s<=regs;g<=regg;end arch;(3).VHDL语言描述10进制加法计数器library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity exp_cnt10 isport(clk,clrn,En:in std_logic;cq:out std_logic_vector(3 downto 0);cout:out std_logic);end exp_cnt10;architecture arch of exp_cnt10 issignal cqi:std_logic_vector(3 downto 0);beginprocess(En,clk,clrn,cqi)beginif clrn='0' thencqi<="0000";elsif clk'event and clk='1' thenif En='1' thenif cqi<9 thencqi<=cqi+1;elsecqi<="0000";end if;end if;end if;if cqi=9 thencout<='1';elsecout<='0';end if;cq<=cqi;end process;end arch;(4).VHDL语言描述七段译码器library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity scan_led3_vhd isport(scan_clk,cnt_aclr:in std_logic;datab,datas,datag:in std_logic_vector(3 downto 0);seg7:out std_logic_vector(6 downto 0);wei:out std_logic_vector(2 downto 0));end scan_led3_vhd;architecture rtl of scan_led3_vhd issignal seg_wire:std_logic_vector(3 downto 0);signal wei_wire:std_logic_vector(2 downto 0);type st is (k_L,k_R,ad_L);signal st_nxt:st;beginscan_st:process(scan_clk,cnt_aclr,st_nxt)beginif cnt_aclr='1' thenst_nxt<=k_L;elsif(scan_clk'event and scan_clk='1') thencase st_nxt iswhen k_L=> st_nxt<=k_R;when k_R=> st_nxt<=ad_L;when ad_L=> st_nxt<=k_L;end case;end if;end process;scan_o:process(st_nxt,datab,datas,datag)begincase st_nxt iswhen k_L=>seg_wire<=datab;wei_wire<="100";when k_R=>seg_wire<=datas;wei_wire<="010";when ad_L=>seg_wire<=datag;wei_wire<="001";end case;end process;seg7<="1111110" when seg_wire=x"0" else"0110000" when seg_wire=x"1" else"1101101" when seg_wire=x"2" else"1111001" when seg_wire=x"3" else"0110011" when seg_wire=x"4" else"1011011" when seg_wire=x"5" else"1011111" when seg_wire=x"6" else"1110000" when seg_wire=x"7" else"1111111" when seg_wire=x"8" else"1111011" when seg_wire=x"9" else"1110111" when seg_wire=x"a" else"0011111" when seg_wire=x"b" else"0001101" when seg_wire=x"c" else"0111101" when seg_wire=x"d" else"1001111" when seg_wire=x"e" else"1000111" when seg_wire=x"f" else"0000000" ;wei<=wei_wire;end rtl;(5).顶层RTL电路(6).202进制加法计数器RTL电路(7).顶层功能仿真波形图(8).202进制加法计数器功能仿真波形图如图所示成功实现了202进制(9).管脚分配及下载验证2.序列检测器(1).1110010序列检测器的VHDL设计状态转换表现态输入0时次态/输出输入1时次态/输出S0 S0/0 S1/0S1 S0/0 S2/0S2 S0/0 S3/0S3 S4/0 S3/0S4 S5/0 S1/0S5 S0/0 S6/0S6 S0/1 S2/0(2).用状态图输入法实现序列检测器选择复位reset信号为异步,高电平有效,输出端无寄存器。
一、实验目的1. 理解序列检测器的工作原理和设计方法;2. 掌握时序电路的经典设计方法;3. 学习使用Verilog HDL语言进行状态机的设计;4. 通过实验验证序列检测器的功能。
二、实验原理序列检测器是一种同步时序电路,用于检测输入的一串二进制编码。
当输入序列与预设的编码相匹配时,输出高电平;否则,输出低电平。
序列检测器在数字通信、安全防盗、密码认证等领域有着广泛的应用。
序列检测器的基本工作原理如下:1. 预设一个编码序列,称为目标序列;2. 当输入序列与目标序列相匹配时,输出高电平;3. 当输入序列与目标序列不匹配时,输出低电平。
三、实验器材1. PC机一台;2. EDA教学实验系统一台;3. 下载电缆一根(已接好);4. 导线若干。
四、实验步骤1. 设计序列检测器的Verilog代码;2. 在EDA教学实验系统上编译、仿真和下载Verilog代码;3. 连接实验电路,下载Verilog代码;4. 通过逻辑分析仪观察输出波形,验证序列检测器的功能。
五、实验内容1. 设计一个长度为4位的序列检测器,目标序列为1001;2. 设计一个长度为8位的序列检测器,目标序列为11001001;3. 通过实验验证序列检测器的功能。
六、实验代码```verilogmodule seqdet(input clk, // 时钟信号input rst, // 复位信号input [3:0] din, // 输入序列output reg out // 输出信号);// 定义状态localparam [1:0] IDLE = 2'b00,MATCH = 2'b01,NOMATCH = 2'b10;// 状态寄存器reg [1:0] state, nextstate;// 输出函数always @(posedge clk or posedge rst) beginif (rst) beginstate <= IDLE;out <= 1'b0;end else beginstate <= nextstate;out <= (state == MATCH) ? 1'b1 : 1'b0; endend// 激励函数always @() begincase (state)IDLE: beginif (din == 4'b1001) beginnextstate = MATCH;end else beginnextstate = NOMATCH;endendMATCH: beginnextstate = IDLE;endNOMATCH: beginnextstate = IDLE;enddefault: beginnextstate = IDLE;endendcaseendendmodule```七、实验结果与分析1. 长度为4位的序列检测器:当输入序列为1001时,输出高电平;当输入序列不为1001时,输出低电平。
数字系统设计与PLD应用实验报告实验名称:实验5序列检测器学院:大数据与信息工程学院专业:电子信息工程姓名:李晓雪学号:1108040198年级:大四任课教师:尉学军2014 年 12 月 7 日实验5 序列检测器一.实验目的(1)了解用状态机的方法设计序列检测器(2)实验一个11010串行序列检测器,用VHDL语言描述该电路二、实验原理序列检测器的示意图如图一所示11010序列检测器的状态转换图如图二所示三、实验内容(1)用VHDL语言编写11010序列检测器源程序。
给出正确仿真波形图。
(2)用VHDL分别设计一个包含(11010)和不包含的序列发生器。
(3)将上述两个序列发生器分别和序列检测器结合成一个文件(级联),并编译、模拟获得正确的仿真波形。
四、实验结果1、序列检测器(检测11010)根据状态转换通过VHDL语言实现序列检测器:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY jc11010 ISPORT(DIN,CLK,RST:IN STD_LOGIC;SOUT:OUT STD_LOGIC);END jc11010 ;ARCHITECTURE BEHA V OF jc11010 ISTYPE STATES IS (S0,S1,S2,S3,S4);SIGNAL ST,NST:STA TES:=S0;BEGINCOM:PROCESS(ST,DIN) BEGINCASE ST ISWHEN S0=>IF DIN='1'THEN NST<=S1;ELSE NST<=S0;END IF; WHEN S1=>IF DIN='1'THEN NST<=S2;ELSE NST<=S0;END IF; WHEN S2=>IF DIN='1' THEN NST<=S2;ELSE NST<=S3;END IF; WHEN S3=>IF DIN='1' THEN NST<=S4;ELSE NST<=S0;END IF; WHEN S4=>IF DIN='1' THEN NST<=S2;ELSE NST<=S0;END IF; WHEN OTHERS=>NST<=S0;END CASE;END PROCESS;REG:PROCESS (CLK,RST)BEGINIF RST='1' THEN ST<=S0;ELSIF CLK'EVENT AND CLK='1' THEN ST<=NST;END IF;END PROCESS REG;SOUT<='1' WHEN ST=S4 ELSE '0';END BEHA V;波形仿真结果:2.采用状态机方法设计序列发生器11010序列产生器的VHDL语言:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY csq11010 ISPORT(CLK:IN STD_LOGIC;Z :OUT STD_LOGIC);END csq11010 ;ARCHITECTURE RTL OF csq11010 ISTYPE STATE_TYPE IS(S0,S1,S2,S3,S4,S5);SIGNAL CURRENT_STATE,NEXT_STATE:STATE_TYPE; BEGINSYNCH: PROCESSBEGINWAIT UNTIL CLK'EVENT AND CLK='1'; CURRENT_STATE<=NEXT_STATE;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<=S0;Z<='1';END CASE;END PROCESS;END RTL;仿真波形结果:(产生的11010序列串)3、随机序列产生器(产生序列1100101)VHDL语言:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY SY4 ISPORT(CLK:IN STD_LOGIC;Z :OUT STD_LOGIC);END SY4 ;ARCHITECTURE RTL OF SY4 ISTYPE STATE_TYPE IS(S0,S1,S2,S3,S4,S5,S6);SIGNAL CURRENT_STATE,NEXT_STA TE:STA TE_TYPE; BEGINSYNCH: PROCESSBEGINWAIT UNTIL CLK'EVENT AND CLK='1';CURRENT_STATE<=NEXT_STA TE;END PROCESS;STA TE_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<='0';WHEN S4=>NEXT_STATE<=S5;Z<='1';WHEN S5=>NEXT_STATE<=S6;Z<='0';WHEN S6=>NEXT_STATE<=S0;Z<='1';END CASE;END PROCESS;END RTL;波形仿真结果:3、11010序列产生器与11010序列检测器级联后的电路图:波形仿真结果:4、不包含11010的任意序列产生器与11010序列检测器级联后的电路图:波形仿真结果:。
实验题目:设计串行数据检测器实验说明:设计一个“1101”串行数据检测器。
使得但输出序列中出现“1001”时,结果中就输出1。
输入/输出如下所示:输入x:000 101 110 011 011 101 101 110 101输出z:000 000 000 010 010 000 001 000 000实验分析:初始状态设为s0,此时检测数据序列为“0000”,当再检测到一个0时,仍为s0,当检测到1时,进入下一个状态s1,此时序列为“0001”;当在状态s1检测到0时,进入到状态s2,此时序列为“0010”,当检测到1时,仍为s1;当在状态s2检测到0时,进入到状态s3,此时序列为“0100”,当检测到1时,进入s1;当在状态s3检测到0时,进入s0,当检测到1时,进入状态s4,此时序列为“1001”,结果输出为1;当在s4检测到0时,进入状态s2,当检测到1时,进入状态s1。
状态图如下:实验代码:module sjjcq10_3(x,z,clk,reset,state);input x,clk,reset;output z;output[2:0]state;reg[2:0]state;reg z;parameter s0='d0,s1='d1,s2='d2,s3='d3,s4='d4;always@(posedge clk)beginif(reset)begin state<=s0;z<=0;endelsecasex(state)s0: beginif(x==0) begin state<=s0;z<=0;endelse begin state<=s1;z<=0;endends1: beginif(x==0) begin state<=s2;z<=0;endelse begin state<=s1;z<=0;endends2:beginif(x==0) begin state<=s3;z<=0;endelse begin state<=s1;z<=0;endends3:beginif(x==0) begin state<=s0;z<=0;endelse begin state<=s4;z<=1;endends4:beginif(x==0) begin state<=s2;z<=0;endelse begin state<=s1;z<=0;endenddefault: state<=s0;endcaseendendmodule实验仿真波形:分析:每当到达状态四即s4,此时检测序列为“1101”,输出即为1.。
Lab 10 0101序列检测器仿真集成1101班1.实验目的熟悉用Modelsim进行波形仿真的方法。
掌握用Verilog HDL 语言描述0101序列检测器的方法。
熟悉用Verilog HDL 语言编写testbench。
2.实验内容a)理解并掌握状态机与testbench的描述方法。
b)使用Modelsim软件得到仿真波形。
c)使用DE0开发板下载。
3.代码分析状态机描述定义模块名与输入输出,clk为时钟信号,rst为控制信号,seq 为待检测信号;输出是det.同时定义了四个状态(独热码)s0,s1,s2,s3;和reg型变量state,next_state.module seqdet(clk,rst,seq,det);input clk;input rst;input seq;output det;parameter s0=4'h1;parameter s1=4'h2;parameter s2=4'h4;parameter s3=4'h8; // 独热码reg det;reg [3:0] state, next_state状态转移:当rst=1时,state初始化为s0状态;当rst=0时,state的状态随着驱动变化。
always@(posedge clk) beginif(rst)state <= s0;elsestate <= next_state;end状态驱动:随着待检测信号的变化,状态在s0,s1,s2,s3之间变化,最终影响输出。
a lways @(posedge clk) begincase(state)s0: next_state=((seq==1)?s0:s1);s1: next_state=((seq==1)?s2:s1);s2: next_state=((seq==1)?s0:s3);s3: next_state=((seq==1)?s0:s1);default: next_state=((seq==1)?s0:s1);endcaseend输出:当现态state=s3时,det=1,即检测到一个0101序列。
实验七序列检测器实验一、实验目的1、掌握序列检测器的工作原理;2、掌握时序电路的经典设计方法;3、学习AHDL 语言的状态机的设计方法;二、原理代码序列检测器是一种同步时序电路,它用于搜索,检测输入的二进制代码串中是否出现指定的代码序列,001 序列检测器的原理图如下:三、实验内容设计一个 1110010 序列检测器,即检测器连续收到一组串行码“1110010”后,输出检测标志1,否则输出0。
要求用图形输入法完成:①作状态图和状态表;②状态化简,建立最简状态表;③写出状态编码;画出状态编码表;④建立激励函数,输出函数真值表;⑤写出激励函数和输出函数表达式;⑥画出逻辑电路测试图;⑦逻辑功能仿真,记录仿真波形并加以说明;⑧下载验证(两种以上的方式)根据实验要求,得到实验所需要的是八个状态,包括初始状态。
根据实验要求检现态S 次态/输出 S/QD=0 D=1初始状态 S0 S0 /0 S1/0接收到1 S1 S0 /0 S2/0接收到11 S2 S0 /0 S3/0接收到111 S3 S4 /0 S3/0接收到1110 S4 S5 /0 S0/0接收到11100 S5 S0 /0 S6/0接收到111001 S6 S7 /1 S2/0接收到1110010 S7 S0 /0 S1/0确定各种不同状态的的表示并且做出状态表根据所得到的状态表写出真值表达式D0*=D0D2’X’+D0D1’D2+D0’D1D2X’D1*=D0D1D2+D1D2’X+XD0’D1+D0’D2X+D1’D2X00 01 11 1000 101 1 111 1 110 1D2*= D0D2’X’+D0’D2’X+XD0’D1+D1D2X根据得到的函数方程,画出电路图如下得到序列波形图输出一个时钟信号以方便下载的时候能够比较方便的对输入的序列进行调试手动调整输入的序列已达到要求,方便检测。
同时在始终是下跳沿的是后调整输入,这样的话不会出现不能及时的出现z为1时的值Sel为q[2..0]的输出,通过它的值来选择7个输入的值的有效性,并确定result的值,使清零端有(无)效,以此来得到最后的输出为一还是为0实验心得:这次的实验收获颇多,一直没有自己用D触发器设计过元件,但是这次自己设计了一个,虽然在刚刚开始的时候听了同学的讲解,但是最终自己是弄懂了,并会连接和设计,在实验过程中,由于连线很复杂,容易将线结在一起,所以在连线时要尽量的化简,务必使线少一点,整个图清晰明了,然后检验时也会少去许多不必要的麻烦在对整个设计的进行状态分析时,要选择好做需要的状态过程,并且分析,不然在最后得方程画图时,会出现不了期望的结果。
上海电力大学
《FPGA应用开发》实验报告
实验题目:串行数据序列检测器
专业:电子科学与技术
班级2017142 学号20171719 姓名李国福
时间2019.12.16
一、实验目的
(1)掌握根据设计要求编写源代码。
(2)掌握根据仿真要求编写测试代码。
(3)掌握在Quartus II中调用ModelSim进行仿真。
二、实验任务及要求
1.设计要求
检测输入的串行数据序列,当检测到输入序列为LED 灯一直熄灭。
完成源代码和测试代码编写,并进行软件仿真和
2.设计提示
(1)引脚分布图或者基本框图如图 4-70 所示。
图 4-70 串行数据序列检测器引脚分布图
(2)输入/输出引脚列表如表 4-15 如所示。
表 4-15 串行数据序列检测器输入/输出引脚列表
输入信号
序号信号名称位
宽
端口类
型
备注
1 clk 1 I 系统时钟
2 rst 1 I 复位信号
3 load 1 I 加载并行数据信号
4 in 4 I 并行输入的 4 位
序列
输出信号
1 led 1 O 检测到序列为
1011
(3)输入/输出的关系
Input:clk,rst,load,in
Output:led
In(3:0)为一个并行输入的 4 位序列,当 load 信号有效时,并行输入被存入移位寄存器 shift_register,接着产生串行序列输出serial_out, 检测到序列 1011 时 led 点亮。
三、实验内容及步骤
输入序列 1011 测试能否正确检测,同时验证输入控制键 load 是否工作。
附:仿真波形图与说明如图 4-71 所示。
四、实验总结
由于采用并行数据输入,若 load 信号采用按键,加载数据时为避免加入多个输入的并行数据,可以将系统时钟 clk 进行分频得到一个合适的时钟 q(例如周期为 0.1s)。