《实验四序列发生器.docx》由会员分享,可在线阅读,更多相关《实验四序列发生器.docx(11页珍藏版)》请在优知文库上搜索。
1、南昌大学实验报告学生姓名:学号:专业班级:中兴IOl班实验类型:口验证口综合设计口创新实验日期:2023、11、口成绩:实验四序列信号发生器与检测器设计一、实验目的1、学习VHDL文本输入法2、学习有限状态机的设计3、利用状态机实现串行序列的输出与序列的检测4、继续学习优化设计二.实验内容与要求2 .用有限状态机设计序列检测器,实现串行序列IIolO的检测器3 .假设检测到符合要求的序列,那么输出显示位为“1”,否那么为“04 .对检测到的次数计数5 .整个工程采用顶层文件+底层模块的原理图或文本的设计思路三、实验仪器PC机、QUartUSH软件、EDA实验箱四、实验思路1 .设计序列发生器根
2、本思想为一个信号CQI计数,给另一个信号CO(代表序列的每一位)赋值的方法:先设定端口CQ1用于产生序列时计数,因为序列共16位,因此端口CQ1为标准逻辑矢量,位宽为4,设另一个端口M代表序列的每一位,CQI每计一个数,就给M赋一个值,这样产生一个16位的序列。由于端口不能参与相关运算,因此在结构体中我分别定义了信号CQl(标准逻辑矢量,位宽4),信号Q与相应的端口CQ1CO对应,在进程中参与相应的运算,在程序的最后再用端口接收信号:C0BIockDiagram-SchematicFile,z项。点击“OK,在主界面中将翻开“BkCkEditOr”窗口。(1)分频器模块实体名为DIV)本设计使
3、用的FPGA开发板中使用的芯片是CycloneIIEP2C35F672C8,使用的是IOkHz的时钟脉冲输入,根据电路的具体设计需要,对其进行分频设计。如图1所示为系统的分频模块,其中模块Clockout管脚输出为0.5hz的时钟脉冲,得出序列发生器和序列检测器模块正常工作的时钟信号,在ClOCkin管脚输出为一个IkhZ的时钟脉冲,作用与动态扫描模块的正常工作。输入管脚:Clockin为Ikhz脉冲输入;输出管脚:CloCkOUt为0.5hz脉冲输出;图1一时间:2023年11月10号-版本:7.2一功能:分频器2000分频)分频模块DIV源代码div.vhd如下:分频程序,从IKHZ中得到
4、0.5HZ的计数频率,2000分频LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;-这3个程序包足发应付大局部的VHDL程序设计USEIEEE.STD_LOGIC_Arith.ALL;USEIEEE.STD_LOGIC_Unsigned.ALL;ENTITYDIVISGENERlC(N:Integer:=20000);-此处定义了一个默认值N=100O0,即电路为IOooO分频电路;Port(ClockinJNSTD.LOGIC;ClockOutiOUTSTD_LOGIC);END;ARCHITECTUREDeviderOFDIVISSIGNALCounteriI
5、ntegerRANGE0TON-1;SIGNALTempi:STD_LOGIC;一信号的声明在结构体内,进程外部BEGINPRoCESS(CIockin)BEGINIFRISING-EDGE(Clockin)THENIFCounter=N-ITHENcounter=0;Templ=NotTemp1;ELSECounter=Counter+1;IFCounter=(N2-l)THENTemp1=NOTTemp1;ENDIF;ENDIF;ENDIF;ENDPROCESS;ClockOuK=Templ;END;(2)序列发生器模块,(实体名为C_OUT)序列发生器模块如图2所示,其中:输入管脚:CL
6、K为0.5hz的时钟脉冲;RST为复位信号;输出管脚:CO序列发生器设计时用于计数,实现模16计数,以产生16位的序列图2一时间:2023年11月10号一版本:7.2一功能:产生一个十六位的指定序列C_OUT-LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIeLUNSlGNED.ALL;-为了重载ENTITYC_OUTISPORT(CLK,RST:INSTD_LOGIC;定义时钟和复位信号Co:OUTSTD.LOGIC);-序列发生器设计时用于计数,实现模16计数,以产生16位的序列ENDC-OUT;ARCHITECTUREbeha
7、vOFC_OUTISSIGNALCQ1:STD_LOGIC_VECTOR(3DOWNTO0);-定义信号进行计数.实现模16计数,对应依次产生序列的位。到位15;SIGNALQ:STD_LOGIC;BEGINPROCESS(CLK,RST,Q)BEGINIFRST=1THENCQ1=OOOO;Q=,0;-如果复位,那么计数器清0,M也清0ELSiFClkeventandclk=thenCQ1QQQQQQQQQQQQQQQQ=,0;ENDCASE;ENDIF;ENDPRoCESSL序歹IJ发生器到此结束CO=Q;ENDbehav;(3)序列检测模块:(实体名为SCHK)序列检测模块如图3所示,其
8、中:输入管脚:CLK为0.5hz的时钟脉冲;EN为使能端,为1才正常工作;M为显示当前产生的位;输出管脚:N为显示满足序列要求时,产生T,即为标志位。图3一时间:2023年11月10号一版本:7.2一功能:检测指定的序列SCHKLIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGlCJJNSlGNED.ALL;为了重载ENTITYSCHKISPORT(CLK,EN,M:INSTD_LOGIC;-EN为使能端,为1才正常工作;M为显示当前产生的位N:OUTSTD_LOGIC);-N为显示满足序列要求时,产生T,即为标志位ENDSCHK;AR
9、CHITECTUREbehavOFSCHKISTYPESTATEIS(SO52$35455);状态机的定义,5个状态SIGNALS:STATE;SIGNALA1,A2,A3,A4,A5:STD_LOGIC;-SIGNALQ:INTEGERRANGE0TO5;-SIGNALD:STD_LOGIC_VECTOR(4DOWNTO0);SIGNALN1:STD_LOGIC;BEGINPRoCESS(CLK,S,N1,EN)一序列检测器进程BEGINIFEN=OTHENS=SO;NI=,0;A5=0;A4=0;A3=0;A2=0;A1=0,;ELSIFCLKtEVENTANDCLK=,OTHENNIifM=TthenS=SIjelseSifM-thenS=S2;elseSifM=0thenS=S3;elseSifM-thenS=S4;elseSifM=O,thenS=S5;-生成一个IlOlO序列Nl=l,;elseSS=SO;ENDCASE;A5=A4;一移位输出显示在led上以便观看A4=A3;A3=A2;A2=A1;A1=M;-将最近生产的序列赋给最前端的Al位endif;N0);ELSIFCLK,EVENTANDCLK=THENIFEN=TTHENIFCQK15THENCQL=CQI