FPGA用状态机实现序列检测器的设计.doc
文本预览下载声明
****大学
实验报告
课程名称: FPGA技术
实验名称: 基于原理图的十进制计数器设计
姓 名: ***
学 号: ***************
班 级: 电子1202
指导教师:**************
西南科技大学信息工程学院制
实验三 用状态机实现序列检测器的设计
实验原理
序列检测器可用于检测一组或多组由二进制码组成的脉冲序列信号,当序列检测器连续收到一组串行二进制码后,如果这组码与检测器中预先设置的码相同,则输出A,否则输出b。由于这种检测的关键在于正确码的收到必须是连续的,这就要求检测器必须记住前一次的正确码及正确序列,直到在连续的检测中所收到的每一位码都与预置数的对应码相同。在检测过程中,任何一位不相等都将回到初始状态重新开始检测。例3-1描述的电路完成对特定的序列数100101的检测的部分HDL代码。当这一串序列数高位在前(左移)串行进入检测器后,若此数与预置的密码数相同,则输出“A”,否则仍然输出“b”。
本实验由四个模块组成:
实验步骤
建立工程,名为“shiyan3”,在建立第一个verilog HDL的编辑窗口,并保存为“xulie”,即并行数据转串行数据模块;并根据所画的状态转移图,来编写相关代码,代码截图如下:
Testbench截图如下:
仿真截图如下:
另外再建立一个名为“schk”的Verilog HDL的编辑窗口,根据其状态转换图,可以有如下截图所示代码:
再建立一个数码管显示模块,命名为“led_xian”,代码截图如下:
最后是顶层文件“zongde”的建立,在这个里面,还要加上消抖模块,具体代码设计如下:
写好约束文件,并进行综合编译;
拿到板子,点击Generate和Configure,进行下载;
实验结果及分析
理论上应该显示b,但由于诸多问题,结果数码管显示的好像不对,而且我的座位号是8号,那换成六位二进制数应该是001000,但最后在硬件上实现时,却跟理论不一样。
实验思考题解答(实验指导书要求的思考题)
说明代码表达的是什么类型的状态机,它的优点是什么?详述其功能和对序列数检测的逻辑过程。
答:由于状态机输出AB与输入DIN有关,有一定的延时,所以该状态机为Mealy状态机。状态机在系统时钟的控制下,电路按照预先设定的状态运行,有良好的同步时序,较好的解决了竞争冒险和毛刺现象。状态的的结构使其在一个时钟周期内可以完成许多并行的运算和控制操作。
体会
这次实验比上两次实验都有些进步,我拿到了板子,并按照下载步骤将程序下载进去了,但令人失望的是结果是错的,经过仔细分析以后,发现是自己的代码的原因,但因为时间关系,我无法在实验室修改并完善了。经过这么几次实验,我觉得我们在每次实验之前一定要预习到位,不能随便预习,随便看看就行了,这样的话我们根本无法往下走,做出实验结果来。
2
显示全部