实验四序列发生器.docx

上传人:夺命阿水 文档编号:909171 上传时间:2024-01-12 格式:DOCX 页数:11 大小:229.10KB
返回 下载 相关 举报
实验四序列发生器.docx_第1页
第1页 / 共11页
实验四序列发生器.docx_第2页
第2页 / 共11页
实验四序列发生器.docx_第3页
第3页 / 共11页
实验四序列发生器.docx_第4页
第4页 / 共11页
实验四序列发生器.docx_第5页
第5页 / 共11页
点击查看更多>>
资源描述

《实验四序列发生器.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=,OTHENNIif

10、M=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+1;ELSECQI:=OOOO”;ENDIF;ENDIF;ENDIF;IFCQI=15THENCOU

11、T=,;ELSECOUT=,0;ENDIF;Qchoose=000,;Achoose=(,00;Achoose=010;Achoose=01,;Achoose=,100,Achoose,10Achoose=110M;Achoose=,llANULL;ENDCASE;ENDPROCESSPl;P2:PRoCESS(CIk)BEGINIFClk1EVENTANDelk=THENcout8scanscanscanscanscanscanscanscanscanscanscanscanscanscanscanscanNULL;ENDCASE;ENDPROCESSP3;END;2 .包装元件入库。编译通

12、过后,单击FiIefCreatCDCfaUltSynIbol,当前文件变成了一个包装好的自己的单一元件,并被放置在工程路径指定的目录中以备后用。3 .保存各个模块的原理图单击FiIefSaVeas按扭,出现对话框,选择自己的目录(如c:myeda),适宜名称保存刚刚输入的原理图,原理图的扩展名为.bdf,4 .设置工程文件(PrOjeCt)以EXP4为工程名命名5 .选择目标器件6 .放置元件7 .添加连线将以上各器件连接成实验原理图如下:图6原理图设计8 .编译(COmPiler)单击-*QuartusIICompiler,跳出COmPiIer窗口,此编译器的功能包括网表文件的提取、设计文件

13、的排错、逻辑综合、逻辑分配、适配(结构综合)、时序仿真文件提取和编程下载文件装配等。单击Start,开始编译!如果发现有错,排除错误后再次编译。7.仿真,测试工程的正确性(仅对计数模块进行仿真测试)D建立新的波形鼓励文件2)在波形编辑器窗口添加节点3)通过Edit-EndTime来设定仿真结束时间为IlnS4)在CLOCK窗口中设置Clk的时钟周期为IOnS时间设置如下:5)点击SaVe保存,输入波形如下:6)通过TOoIS下的SinlUlatOrTOoIS项进行仿真,然后观察输出波形。当RST=O时,序列输出端 CO=O,不产生序列,且计 数器保持原始计数对序列发生清零端进行考察:对计数器的

14、考察:由上可知,仿真结果与要求一致!六、引脚锁定和编程下载1 .Assignments-.device-引脚锁定,参照下载实验板IKlOO的引脚号说明书,选择适当的引脚2 .引脚锁定后,保存,必须重新进行一次全程编译,编译通过后才能编程下载。3、编程下载,用下载线将计算机并口和试验箱上的JTAG口接起来,接通电源。选择ToolsProgrammer菜单,翻开programmer窗口。在mode中选中JTAG,将PrograIn/Configure下的笑方框选中4在开始编程之前,必须正确设置编程硬件。点击“HardwareSetup按钮,翻开硬件设置口。点击rtAddHardwarez,翻开硬件

15、添加窗口,在Hardwaretype*下拉框中选择wByteBlasterMVorByteBlasterIK,Port”下拉框中选择uLPTK,点击OK按钮确认,关闭HardWareSetUP窗口,完成硬件设置。5、点击“Start按钮,开始编程下载图(14)下载成功七、硬件测试结果(1)序列发生器测试结果,实验中产生了序列CQl0000000100100011010001010110OlllQ01110100CQl1000100110101011110011011110IlllQ11011010而且产生的原理即为:看到的现象即为Q连接的数码管从O到15计数时,c。连接的二极管会依次出现:灭、

16、亮、亮、亮、灭、亮、灭、灭、亮、亮、灭、亮、亮、灭、亮、灭(2)序列检测器测试结果当产生的序列为IIoIO时,与N相连的Ied灯亮,其余时刻灭。即说明检测到一个目标序列。(3)计数器的测试结果当Ied灯亮一次时,数码管以模16进行计数,通过数码管可以知道检测到多少个目标序列。(4)使能端、复位键的测试结果当拨下计数清零端时,数码管重新计数:当拨下序列发生清零端时,重新产生序列。综上,实验现象与软件仿真以及程序分析的结果一致,可知实验很成功!八、试验心得通过木次实验我更加熟悉状态机的使用,还有移位显示输出的设计,加深了我对序列信号检测器根本原理的理解,并对状态机的使用环境和方法有了进一步的了解,

17、掌握了用状态机设计模块的根本方法和思路。然而在设计时也遇到了一些问题,刚开始状态转换没设置好,结果导致状态转换出了问题,使得无论输入是否为有效序列,输出检测计数错误的问题,后经仔细排查,终于将问题解决。本次实验的目的在于学习一般有限状态机的设计。状态机包括时序逻辑局部(存储局部)和组合逻辑局部(控制局部),其内部和输出经过一可预测的状态序列。因此设计状态机一般先根据具体问题明确控制输入、条件转换,再画出状态图,做出状态列表。利用VHDL设计状态机般包括时序进程和组合进程两个主要局部常常使用CASE语句,条件的转换那么可用CASE中的IF语句。通过此次实验,我对设计所用到的软件有了更加深刻地了解,这对我们以后的工作和学习的帮助都很有用处。在以后的学习中应该多多的注意实践知识的训练和积累。在以后的学习生活中要不断的开拓自己的动手能力,不断的训练自己的动手能力。感谢老师一直细心地提问,使我明白了一些知识上的漏洞!九、参考资料EDA技术实用教程潘松黄继业EDA实验指导书丁杰朱启标

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 在线阅读 > 生活休闲


备案号:宁ICP备20000045号-1

经营许可证:宁B2-20210002

宁公网安备 64010402000986号