欢迎来到天天文库
浏览记录
ID:9178884
大小:147.77 KB
页数:10页
时间:2018-04-20
《用状态机实现序列检测器实验报告》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、实验报告用状态机实现序列检测器实验一、实验目的1.用VerilogHDL描述有限状态机电路。2.IPCORE的概念与设计。二、实验内容1.应用有限状态机的设计思路,检测从FPGA片上ROM读出的串行数据是否是特定的数据。2.每个人需要检测的数据是所用的电脑编号+200后转换的8位二进制数。三、实验要求1.拟用按键、拨动开关实现系统的时钟,复位信号的输入。2.一个7段数码显示译码器作为检测结果的输出显示,如果串行序列为””,显示A,否则显示b(系统需要设计一个7段数码显示译码器模块)仍使用消抖模块,对由按键输入的时钟进行消抖处理。3.读取的串行数据
2、为rom中固化的一个宽度为1bit,深度为16bits的数据。四、设计思路软件的设计框图如下,该实验可以分为几个模块,rom数据读出模块,串行检测模块,数码管显示模块,顶层模块。输入的clk为按键消抖后输出的数据,按下一次检测一次,在时钟的上升沿读出数据,时钟的下降沿检测数据,串行模块输出的4bits的数据,直接送给数码管译码模块,译码输出。三、设计原理1.ROMIP核的生成首先在ISE自己的工程中新建一个块内存,BlockMemoryGenerator,配置深度为16,宽度为1bit,选择生成的类型为单端ROM,然后选择一个已经编写好的memo
3、ry初始化文件。Memory初始化文件,编写coe文件:这里我要写入的是226,所以二进制是,写入的内容如下,:memory_initialization_radix=10;memory_initialization_vector=1110001110101010;保存并选择载入。2.读取rom中的数据根据时钟上升沿读取数据,所以可以写出rom读的代码,代码如下:moduleread_rom(clk,da,rst);inputclk;inputrst;outputda;reg[3:0]counter;always@(posedgeclkorpos
4、edgerst)beginif(rst)counter<=1'b0;elsecounter<=counter+1'b1;enddata_romu1(.clka(clk),//inputclka.addra(counter),//input[3:0]addra.douta(da)//output[0:0]douta);编写仿真激励文件,得到如下波形,分析可以知道,时钟上升沿数据被读取,读取的数据与我们在配置文件中写入的相同。2.串行检测本人的编号为226,转换为二进制数为,根据二进制数,画出状态转移图,状态转移图如下:根据状态转移图,编写veril
5、og代码,代码如下://检测:moduleser_read(inputclk,inputr_bit,inputrst,outputregout_flag);reg[3:0]status;always@(negedgeclk,posedgerst)beginif(rst==1)beginstatus<=4'b0;out_flag<=1'b0;endelsebegincase(status)4'd0:beginif(r_bit)status<=4'd1;out_flag<=1'b0;end4'd1:if(r_bit)status<=4'd2;else
6、status<=4'd0;4'd2:if(r_bit)status<=4'd3;elsestatus<=4'd0;4'd3:if(!r_bit)status<=4'd4;4'd4:if(!r_bit)status<=4'd5;//11100elsestatus<=4'd0;4'd5:if(!r_bit)status<=4'd6;//elsestatus<=4'd0;//4'd6:if(r_bit)status<=4'd7;//elsestatus<=4'd0;//4'd7:if(r_bit)beginstatus<=4'd0;//out_flag
7、<=1'b0;endelsebeginstatus<=4'd0;//out_flag<=1'b1;endendcaseendendEndmodule编写仿真激励文件,得到如下波形,因为rom数据是上升沿读取,所以串行检测是在下降沿完成的,通过波形可以看出,当检测到是,out_flag输出为高,反之输出为低,满足要求。2.数码管显示数码管显示代码如下:(静态数码管)moduledecled(ledin,ledout);inputledin;output[6:0]ledout;reg[6:0]ledout;always@(ledin)begincas
8、e(ledin)1'b1:ledout<=7'b;//b1'b0:ledout<=7'b;//adefault:ledout<=7'b;
此文档下载收益归作者所有