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