您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 实验三序列信号检测器的设计
实验三序列信号检测器的设计一、实验目的: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模块为检测模块,给予状态机的结构编写的,具体如下:libraryieee;useieee.std_logic_1164.all;entityget_serisport(clk:instd_logic;input:instd_logic;reset:instd_logic;serout:outstd_logic_vector(1downto0);output:outstd_logic);endentity;architecturertlofget_seris--Buildanenumeratedtypeforthestatemachinetypestate_typeis(s0,s1,s2,s3);--Registertoholdthecurrentstatesignalstate:state_type;beginserout=('0'&input);--Logictoadvancetothenextstateprocess(clk,reset)beginifreset='1'thenstate=s0;elsif(rising_edge(clk))thencasestateiswhens0=ifinput='0'thenstate=s1;elsestate=s0;endif;whens1=ifinput='1'thenstate=s2;elsestate=s1;endif;whens2=ifinput='1'thenstate=s3;elsestate=s1;endif;whens3=ifinput='1'thenstate=s0;elsestate=s1;endif;endcase;endif;endprocess;--Outputdependssolelyonthecurrentstateprocess(state)begincasestateiswhens0=output='0';whens1=output='0';whens2=output='0';whens3=output='1';endcase;endprocess;endrtl;(2)理解状态机s0s1s2s3resetInput=‘0’Input=‘1’Input=‘1’Input=‘1’Input=‘0’Input=‘0’Input=‘0’Input=‘1’请根据上图对照get_str程序理解检测“011”序列的基本编程思路。图中的s0为复位状态,s1为检测到首个‘0’状态,s2为检测到“01”状态,s3为检测到一个“011”序列的状态。(3)完成(1)所示的顶层原理图并进行全编译。最终的设计使用的资源为:最大运行频率为:(4)设计testbench文件并进行时序仿真。Testbench文件如下:LIBRARYaltera;LIBRARYcycloneiii;LIBRARYieee;USEaltera.altera_primitives_components.all;USEcycloneiii.cycloneiii_components.all;USEieee.std_logic_1164.all;ENTITYste_tbISEND;ARCHITECTUREste_tb_archOFste_tbISSIGNALoutput:STD_LOGIC;SIGNALclk:STD_LOGIC:='0';SIGNALreset:STD_LOGIC:='0';COMPONENTstePORT(output:outSTD_LOGIC;clk:inSTD_LOGIC;reset:inSTD_LOGIC);ENDCOMPONENT;BEGINDUT:stePORTMAP(output=output,clk=clk,reset=reset);clk=notclkafter0.5us;reset='1','0'after11.5us;END;时序仿真图如下:四、思考题请设计检测“0101”序列的信号检测器,并进行仿真验证。实验四按键计数器的设计一、实验目的:1、掌握开发板调试的基本步骤;2、掌握PLL锁相环的使用;3、理解按键的硬件消抖动工作原理。二、实验原理:系统可以对用户的按键次数进行统计,并在一位数码管上显示出来。系统主要由时钟发生模块clk_gen、按键消抖动电路、计数电路和译码显示电路组成。三、实验内容(1)最终的顶层设计原理图如下:图中的clk_gen的时钟输入脚为22脚,输入频率为50MHz,输出时钟c0的频率为0.01MHz。c0经过inst2分频为1KHz,作为inst3和inst4组成的移位寄存器的时钟。移位寄存器实现对按键输入clkin的采样,inst7在连续采样两次的信号相同时输出1,并允许经过inst5输出稳定的按键电平。Inst负责对输入的按键进行统计,inst1负责对计数结果进行译码产生可以控制共阳极数码管的显示信号。此处,按键消抖动的原理是,每隔1ms对按键输入采样一次,连续两次采样为同样的信号说明信号稳定了。相关详细的说明可以参考《EDA技术与应用》一书的4.6SignalTapII的使用一节。锁相环PLL的设置和使用可以参考《EDA技术与应用》一书的5.2.5构建PID模块一节中的相关内容。开发板电路管脚锁定的相关内容可以参考《EDA技术与应用》一书附录AYCIT_SOPC_V1.0实验开发板简介。(2)创建十进制计数器bcd_counter3,可以直接使用实验二中的十进制计数器程序.(3)创建译码器模块led_encode,程序如下:libraryieee;useieee.std_logic_1164.all;useieee.numeric_std.all;entityled_encodeisport(din:instd_logic_vector(3downto0);dout:outstd_logic_vector(7downto0));endentity;architecturertlofled_encodeisbeginprocess(din)isbegincasedinisWHEN0000=dout=11000000;WHEN0001=dout=11111001;WHEN0010=dout=10100100;WHEN0011=dout=10110000;WHEN0100=dout=10011001;WHEN0101=dout=10010010;WHEN0110=dout=10000010;WHEN0111=dout=11111000;WHEN1000=dout=10000000;WHEN1001=dout=10010000;WHENOTHERS=NULL;endcase;endprocess;endrtl;(4)依据上图设计顶层原理图。(5)管脚锁定:(6)修改特殊管脚为一般管脚,如图所示:(7)全编译通过后下载到开发板进行验证。四、思考题1、请尝试给出本次实验的时序仿真的测试向量文件和时序波形图。2、请尝试根据动态扫描的原理,修改设计,实现四位数码管的动态扫描显示计数结果。
本文标题:实验三序列信号检测器的设计
链接地址:https://www.777doc.com/doc-2531073 .html