用状态机实现序列检测器实验报告.docx

上传人:龙*** 文档编号:1094352 上传时间:2018-12-05 格式:DOCX 页数:10 大小:149KB
下载 相关 举报
用状态机实现序列检测器实验报告.docx_第1页
第1页 / 共10页
用状态机实现序列检测器实验报告.docx_第2页
第2页 / 共10页
用状态机实现序列检测器实验报告.docx_第3页
第3页 / 共10页
用状态机实现序列检测器实验报告.docx_第4页
第4页 / 共10页
用状态机实现序列检测器实验报告.docx_第5页
第5页 / 共10页
点击查看更多>>
资源描述

1、实验报告用状态机实现序列检测器实验1、实验目的1.用 Verilog HDL描述有限状态机电路。2.IPCORE的概念与设计。2、实验内容1.应用有限状态机的设计思路,检测从 FPGA片上 ROM读出的串行数据是否是特定的数据。2.每个人需要检测的数据是所用的电脑编号+200 后转换的 8位二进制数。3、实验要求1.拟用按键、拨动开关实现系统的时钟,复位信号的输入。2.一个 7段数码显示译码器作为检测结果的输出显示,如果串行序列为”100101”,显示 A,否则显示 b(系统需要设计一个 7段数码显示译码器模块)仍使用消抖模块,对由按键输入的时钟进行消抖处理。3.读取的串行数据为 rom中固化

2、的一个宽度为 1bit,深度为 16bits的数据。4、设计思路软件的设计框图如下,该实验可以分为几个模块,rom 数据读出模块,串行检测模块,数码管显示模块,顶层模块。输入的 clk 为按键消抖后输出的数据,按下一次检测一次,在时钟的上升沿读出数据,时钟的下降沿检测数据,串行模块输出的 4bits 的数据,直接送给数码管译码模块,译码输出。5、设计原理1.ROM IP核的生成首先在 ISE自己的工程中新建一个块内存,Block Memory Generator,配置深度为16,宽度为 1bit,选择生成的类型为单端 ROM,然后选择一个已经编写好的 memory初始化文件。Memory 初始

3、化文件,编写 coe 文件:这里我要写入的是 226,所以二进制是11100010,写入的内容如下,:memory_initialization_radix=10;memory_initialization_vector=1 1 1 0 0 0 1 1 1 0 1 0 1 0 1 0;保存并选择载入。2. 读取 rom 中的数据根据时钟上升沿读取数据,所以可以写出 rom 读的代码,代码如下:module read_rom(clk,da,rst);input clk;input rst;output da;reg3:0 counter;always(posedge clk or posedge

4、 rst) beginif(rst)counter=1b0;else counter=counter+1b1;enddata_rom u1(.clka(clk), / input clka.addra(counter), / input 3 : 0 addra.douta(da) / output 0 : 0 douta);编写仿真激励文件,得到如下波形,分析可以知道,时钟上升沿数据被读取,读取的数据与我们在配置文件中写入的相同。3. 串行检测本人的编号为 226,转换为二进制数为 11100010,根据二进制数,画出状态转移图,状态转移图如下:根据状态转移图,编写 verilog 代码,代码

5、如下:/检测:11100011module ser_read(input clk,input r_bit,input rst,output reg out_flag);reg3:0 status;always(negedge clk,posedge rst)beginif(rst=1)beginstatus=4b0;out_flag=1b0;end else begincase(status)4d0:beginif(r_bit)status=4d1;out_flag=1b0;end4d1:if(r_bit)status=4d2;elsestatus=4d0;4d2:if(r_bit)statu

6、s=4d3;else status=4d0;4d3:if(!r_bit)status=4d4;4d4:if(!r_bit)status=4d5;/11100elsestatus=4d0;4d5:if(!r_bit)status=4d6;/111000else status=4d0;/1110014d6:if(r_bit)status=4d7;/1110001else status=4d0;/11100004d7:if(r_bit)beginstatus=4d0;/11100011out_flag=1b0;end else beginstatus=4d0;/11100010out_flag=1b

7、1;endendcaseendendEndmodule编写仿真激励文件,得到如下波形,因为 rom 数据是上升沿读取,所以串行检测是在下降沿完成的,通过波形可以看出,当检测到 11100010 是,out_flag 输出为高,反之输出为低,满足要求。4. 数码管显示数码管显示代码如下:(静态数码管)module decled(ledin,ledout);input ledin;output6:0ledout;reg6:0ledout;always(ledin)begin case(ledin)1b1: ledout=7b1110111;/b1b0: ledout=7b0011111;/adef

8、ault: ledout=7b0011111;endcaseendendmodule5. 顶层设计顶层设计,按照之前的原理框图进行连接,连接完成后的代码如下:module top(clk_50m,reset,data,clk_key);input clk_50m,reset,clk_key;output 6:0data;wire Pin_Out;wire flag_out;debounce_module uut1 (.CLK(clk_50m), .RSTn(reset), .Pin_In(clk_key), .Pin_Out(Pin_Out);/消抖decled uut2 (.ledin(fl

9、ag_out), .ledout(data);/数码管显示read_rom uut3 (.clk(Pin_Out), .da(da),.rst(reset);/数据读取schk uut4 (.r_bit(da), .clk(Pin_Out), .rst(reset), .out_flag(flag_out);/检测endmodule编写仿真激励文件,得到如下波形,可以看到当,按键按下 8 次后,数码管输出 a,当数码管又按下 16 次后,数码管输出 b,满足要求。6. 引脚锁定1.选择一个拨动开关为复位信号输入。2.选择一个按键作为时钟输入。3.50MHZ 板上时钟为消抖计时时钟,引脚锁定是

10、V10。引脚锁定代码如下:NET “clk_key“ LOC = “G9“ | CLOCK_DEDICATED_ROUTE = FALSE ;NET “clk_50m“ LOC = V10;NET “reset“ LOC = D14;NET “data6“ LOC = U5;NET “data5“ LOC = V5;NET “data4“ LOC = R5;NET “data3“ LOC = T5;NET “data2“ LOC = U8;NET “data1“ LOC = V8;NET “data0“ LOC = N6;6、 思考题1、 什么是 IPCORE?本次设计中 ROM 模块是如何进

11、行设计输入的?IP(Intellectual Property)在嵌入式 FPGA 设计中,指的是某些设计好的模块,分为软件模块和硬件模块。这些模块,一般都是已经测试好,所有功能完善的,由一些用户自己设计的。有些模块是免费的,也有收费的模块。所有用户都可以将这些 IP 核(IP Core)导入到自己的工程中,同样,所有用户也都可以定制自己的 IP 核。本次设计中的rom 的输入是通过.coe 文件在配置 ip 核的使用进行指定的,编写规则按照 xilinx 官方给出的文档进行定义。2、说明状态机代码表达的是什么类型的状态机,它的优点是什么?详述其功能和对序列数检测的逻辑过程;由于状态机输出与输

12、入有关,所以该状态机为 Mealy 状态机。状态机在系统时钟的控制下,电路按照预先设定的状态运行,有良好的同步时序,较好的解决了竞争冒险和毛刺现象。状态的的结构使其在一个时钟周期内可以完成许多并行的运算和控制操作,与 Moore 有限状态机不同,Mealy 有限状态机的输出不单与当前状态有关,而且与输入信号的当前值有关,Mealy 有限状态机的输出直接受输入信号的当前值影响,而输入信号可能在一个时钟周期内任意时刻变化,这使得 Mealy 有限状态机对输入的响应发生在当前时钟周期,比 Moore 有限状态机对输入信号的响应要早一个周期。 7、 实验体会通过用状态机实现序列检测器的设计实验,初步熟

13、悉和掌握了 IPCORE 的使用。同时运用状态机实现序列检测器的设计,进一步掌握了课堂上所学到的知识,但同时充分的感觉到了自己的不足之处,今后一定要加强自己弱势方面的学习,用心学好 EDA 教科书上的知识,并抽时间在课外进行深入地学习,相信下次试验情况会有很大程度的改观。附录顶层模块激励文件如下:module test_top;/ Inputsreg clk_50m;reg reset;reg clk_key;/ Outputswire 6:0 data;/ Instantiate the Unit Under Test (UUT)top uut (.clk_50m(clk_50m), .reset(reset), .data(data), .clk_key(clk_key);initial begin/ Initialize Inputsclk_50m = 0;reset = 0;clk_key = 0;#10 reset = 1;#10 reset = 0;/ Wait 100 ns for global reset to finish#10 clk_50m = 0;clk_key = 1;forever begin#10 clk_key=clk_key;end/ Add stimulus hereendendmodule

展开阅读全文
相关资源
相关搜索
资源标签

当前位置:首页 > 学术论文资料库 > 毕业论文

Copyright © 2018-2021 Wenke99.com All rights reserved

工信部备案号浙ICP备20026746号-2  

公安局备案号:浙公网安备33038302330469号

本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。