EDA实验报告实验三:序列信号发生器与检测器设计
- 格式:docx
- 大小:98.36 KB
- 文档页数:6
实验三、序列检测器的设计一、预习内容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. 分析实验结果,探讨影响序列信号检测准确性的因素。
二、实验原理序列信号检测是数字信号处理中的一个重要领域,主要研究如何从含有噪声的信号中检测出特定的序列信号。
本实验采用模拟信号检测的方法,通过设计序列信号发生器和检测器,实现对特定序列信号的检测。
三、实验器材1. 信号发生器2. 数据采集器3. 计算机及软件(如MATLAB等)4. 信号分析仪四、实验步骤1. 设计序列信号发生器:- 根据实验要求,设计特定的序列信号,如“1101”。
- 使用信号发生器产生该序列信号。
2. 设计序列信号检测器:- 设计一个检测器,用于检测序列信号。
- 检测器可以采用状态机或有限状态机(FSM)实现。
3. 实验设置:- 将信号发生器产生的序列信号输入到数据采集器。
- 将数据采集器采集到的信号输入到计算机进行后续处理。
4. 信号处理:- 使用MATLAB等软件对采集到的信号进行预处理,如滤波、去噪等。
- 对预处理后的信号进行序列信号检测。
5. 结果分析:- 分析实验结果,比较检测器检测到的序列信号与原始序列信号是否一致。
- 分析影响序列信号检测准确性的因素,如噪声水平、信号带宽等。
五、实验结果与分析1. 实验结果:- 通过实验,成功检测到了设计的序列信号“1101”。
- 检测到的序列信号与原始序列信号基本一致。
2. 结果分析:- 实验结果表明,所设计的序列信号检测器能够有效地检测出特定序列信号。
- 影响序列信号检测准确性的因素主要包括:- 噪声水平:噪声水平越高,检测难度越大。
- 信号带宽:信号带宽越窄,检测难度越大。
- 序列长度:序列长度越长,检测难度越大。
六、实验结论1. 序列信号检测实验验证了序列信号检测的基本原理和方法。
2. 通过实验,掌握了序列信号检测的步骤和技巧。
3. 实验结果表明,所设计的序列信号检测器能够有效地检测出特定序列信号。
绪论本次课程设计通过利用quartusII软件实现序列发生器。
从而对EDA进一步的熟悉,了解,和掌握。
通过本课程的学习,可以了解硬件描述语言编程方法 ,掌握VHDL编程方法,掌握序列发生器的形成。
EDA是电子设计自动化(Electronic Design Automation)缩写,是90年代初从CAD(计算机辅助设计)、CAM(计算机辅助制造)、CAT(计算机辅助测试)和CAE(计算机辅助工程)的概念发展而来的。
EDA技术是以计算机为工具,根据硬件描述语言HDL( Hardware Description language)完成的设计文件,自动地完成逻辑编译、化简、分割、综合及优化、布局布线、仿真以及对于特定目标芯片的适配编译和编程下载等工作。
典型的EDA工具中必须包含两个特殊的软件包,即综合器和适配器。
综合器的功能就是将设计者在EDA平台上完成的针对某个系统项目的HDL、原理图或状态图形描述,针对给定的硬件系统组件,进行编译、优化、转换和综合,最终获得我们欲实现功能的描述文件。
综合器在工作前,必须给定所要实现的硬件结构参数,它的功能就是将软件描述与给定的硬件结构用一定的方式联系起来。
也就是说,综合器是软件描述与硬件实现的一座桥梁。
综合过程就是将电路的高级语言描述转换低级的、可与目标器件FPGA/CPLD 相映射的网表文件。
适配器的功能是将由综合器产生的王表文件配置与指定的目标器件中,产生最终的下载文件,如JED文件。
适配所选定的目标器件(FPGA/CPLD芯片)必须属于在综合器中已指定的目标器件系列。
硬件描述语言HDL是相对于一般的计算机软件语言,如:C、PASCAL而言的。
HDL语言使用与设计硬件电子系统的计算机语言,它能描述电子系统的逻辑功能、电路结构和连接方式。
设计者可利用HDL程序来描述所希望的电路系统,规定器件结构特征和电路的行为方式;然后利用综合器和适配器将此程序编程能控制FPGA和CPLD内部结构,并实现相应逻辑功能的的门级或更底层的结构网表文件或下载文件。
目录实验一全加器的设计 (1)一实验目的 (1)二实验要求 (1)三实验步骤: (1)四实验结果: (2)五实验注意: (2)六实验心得: (2)实验二模可变计数器的设计 (3)一实验要求 (3)二实验步骤 (3)三、实验心得: (6)实验三序列信号发生器与检测器设计 (7)一、实验目的 (7)二、设计要求 (7)三、主要仪器设备 (7)四、实验原理 (7)五、实验步骤 (8)六、实验心得 (13)实验四交通灯控制器设计 (14)一、实验目的 (14)二、设计要求 (14)三、主要仪器设备 (14)四、实验思路 (14)五、实验步骤 (15)六、实验现象及验证 (22)七、实验心得 (23)实验五多功能数字钟设计 (24)一、实验目的 (24)二、设计要求 (24)三、主要仪器设备 (24)四、实验思路 (24)五、实验步骤 (25)六、实验现象及验证 (31)七、实验心得 (31)实验六出租车计价器设计 (32)一、实验目的 (32)二、实验任务及要求 (32)三、主要仪器设备 (32)四、实验思路 (32)五、实验步骤 (33)六、实验现象及验证 (39)七、实验心得 (39)南昌大学实验报告学生姓名:xx 学号:61004100xx 专业班级:通信101实验类型:□验证□综合□设计□创新实验日期:2012-9-17 实验成绩:实验一全加器的设计一实验目的以一位二进制全加器为例熟悉利用QuartusII的原理图输入方法和文本输入法设计简单组合电路;学习多层次工程的设计方法。
二实验要求⑴用文本方法实现半加器,再采用层次设计法用原理图输入完成全加器的设计;⑵给出此项设计的仿真波形;⑶用发光LED指示显示结果。
三实验步骤:1.(1)建立工作库文件夹,建立半加器工程h_adder,输入半加器VHDL代码并存盘。
library ieee;use ieee.std_logic_1164.all;entity h_adder isport ( a, b :in std_logic;co,so :out std_logic);end entity h_adder;architecture fh1 of h_adder isbeginso<=not(a xor (not b));co<=a and b;end architecture fh1;编译后转换得到半加器的元件符号h_adder(2)在同一工作库文件夹下,建立全加器工程fa,采用层次设计法调用元件半加器h_adder和或门or2完成全加器的原理图文件。
七、状态图输入法实现序列检测器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,对代码进行编译。
《实验七序列检测器实验》实验报告杨丽斌计科二班学号: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语言及相关的模块设计除了花了一点时间、并没有遇到多大的阻碍,但是在器件验证过程中却出现了一些问题:主要是高低频时钟信号选择的问题,在这个问题上花了比较多的时间。
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信号为异步,高电平有效,输出端无寄存器。
南昌大学实验报告姓名: 学号: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位循环序列。
实验三序列信号发生器与检测器设计
一、实验目的
1.学习一般有限状态机的设计;
2.实现串行序列的设计。
二、设计要求
1.先设计0111010011011010序列信号发生器;
2.再设计一个序列信号检测器,若系统检测到串行序列11010则输出为“1”,否则输出为“0”,并对其进行仿真和硬件测试。
三、实验设备
PC机,Quartu eⅱ软件,实验箱
四、实验原理
1、序列信号发生器
复位信号CLRN。
当CLRN=0时,使CNT=0000,当CLRN=1时,不影响程序运行,每来一个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 S
P 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 S
S 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 N
P R O C E S S(C L K,C L R N)
B E G I N
I F(C L R N='0')T H E N C N T<="0000";E L S E
I F(C L K'E V E N T A N D C L K='1')T H E N
C 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 N
C A S E C N T I S
W H E N"0000"=>Z R E G<='0';
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<='1';
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<='0';
W H E N"1000"=>Z R E G<='1';
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<='1';
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<='0';
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 IS
PORT(DIN, CLK, CLR : IN STD_LOGIC;
ss : OUT STD_LOGIC_VECTOR
END SCHK;
ARCHITECTURE behav OF SCHK IS
SIGNAL Q : INTEGER RANGE 0 TO 5 ;
SIGNAL D : STD_LOGIC_VECTOR(5 DOWNTO 0);
BEGIN
D <= "11010" ;
PROCESS( CLK, CLR )
BEGIN
IF CLR = '1' THEN Q <= 0 ;
ELSIF CLK'EVENT AND CLK='1' THEN
CASE Q IS
WHEN 0=> IF DIN = D(4) THEN Q <= 1 ; ELSE Q <= 0 ; END IF ; WHEN 1=> IF DIN = D(3) THEN Q <= 2 ; ELSE Q <= 0 ; END IF ; WHEN 2=> IF DIN = D(2) THEN Q <= 3 ; ELSE Q <= 2 ; 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 <= 2 ; END IF ; WHEN OTHERS => Q <= 0 ;
END CASE ;
END IF ;
END PROCESS ;
PROCESS( Q )
BEGIN
IF Q = 5 THEN ss <= "1" ;
ELSE ss <= "0" ;
END IF ;
END PROCESS ;
END behav ;
3)将其转换成可调用元件如图:
3.序列信号检测器顶层文件
1)调用序列信号发生器和序列信号检测器元件,建立工作库文件夹,输入设计项目原理图如下图:
2)对总体进行波形仿真,如下图:
4.管脚邦定
六、实验心得
1.首先用VHDL语言设计序列信号发生器和序列信号检测器模块。
2 、为了使设计简化,顶层文件采用原理图法,直接将两个模块连接起来。
3、作检测器时要先画出其状态转移图,否则很容易出错。