FPGA实验报告_第1页
FPGA实验报告_第2页
FPGA实验报告_第3页
FPGA实验报告_第4页
FPGA实验报告_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、实验报告课程名称: FPGA技术 实验名称: 用状态机实现序列检测器的设计 姓 名: 学 号: 班 级: 指导教师: 2实验题目一、 实验原理1、实验目的:用状态机实现序列检测器的设计,并对其进行仿真和硬件测试。2、实验内容:应用有限状态机设计思路,检测输入的串行数据是否是“010000”,本次实验由顶层文件、串行检测、并行数据转串行、数码管显示四个模块组成。 图3.1整体模块方块图3、序列检测器的原理说明:序列检测器可用于检测一组或多组由二进制码组成的脉冲序列信号,当序列检测器连续收到一组串行二进制码后,如果这组码与检测器中预先设置的码相同,则输出A,否则输出b。由于这种检测的关键在于正确码

2、的收到必须是连续的,这就要求检测器必须记住前一次的正确码及正确序列,直到在连续的检测中所收到的每一位码都与预置数的对应码相同。在检测过程中,任何一位不相等都将回到初始状态重新开始检测。例3-1描述的电路完成对特定的序列数"100101"的检测的部分HDL代码。当这一串序列数高位在前(左移)串行进入检测器后,若此数与预置的密码数相同,则输出“A”,否则仍然输出“b”。4、 系统共包括4个模块: 4.1、并行数据转串行数据模块(xulie.v) 1)、输入端口:clk-系统时钟,由按键K2通过消抖模块后提供。din6-6bits输入数据,需在时钟控制下,串行输出。reset-系

3、统复位信号,当reset=1b1时,系统输出复位,否则系统正常工作。 2)、输出端口:din-1bit输出信号 3)、操作要求及功能描述:1、异步复位,在时钟控制下,将并行输入数据din65:0,按照din5,din4,din3,din2, din1,din0的顺序输出至串行检测模块的输入端口din。2、根据设计要求,先画出并行数据转串行数据模块的状态转移图,在此基础上写出HDL代码。3、比较实验指导书提供并行数据转串行数据模块(xulie.v)的参考代码,总结有限状态机的HDL设计方法 4.2、串行检测模块(schk.v) 1)、输入信号: DIN-1bit的串行输入数据 CLK-同步输入时

4、钟 CLR -异步清零信号,当CLR=1,系统输出置0,否则,系统正常工作 2)、输出信号: AB-4bits数据,如果系统检测到6b100101的串行输入,AB=4b1010,否则,AB=4b1011。3) 、操作要求及功能描述: 1、根据设计要求,画出串行检测模块(schk.v)的状态转移图,并自行设计HDL源代码。 2、用Verilog HDL设计数码管驱动电路、系统顶层电路。 3、注意顶层系统中,应加入消抖模块,对K2输入的时钟clk进行消抖处理。 注:剩下两个模块在第二次实验中都已经运用过,在这里不另做说明。二、 实验步骤(1) 新建一个工程,为工程命名、指定存储路径和目标芯片等。(

5、在 E 盘或者 DATA 盘的根目录下, 以自己的学号为文件名建立工程)。建议工程名、路径名中不要使用中文,file->New Project。(2) 选择 Top-level 的类型是 HDL。 图3.2 Top-level操作界面(3) 做好器件、EDA工具的正确选择,才能使得正常完成锁定引脚、下载的操作。本次实验中仍采用ISE自带的综合和仿真工具。 图3.3器件和 EDA 工具选择界面(4) 建立新Verilog HDL模块编辑窗口,添加文件,选择Verilog Module,建立工程后建立工程后,开始分别设计:1) 并行数据转串行数据模块(xulie.v) 程序代码如下:modu

6、le xulie(clk, din6, reset, din);input clk;input5:0 din6;input reset;output din;parameter s0 = 3'b000, s1 = 3'b001, s2 = 3'b010, s3 = 3'b011, s4 = 3'b100, s5 = 3'b101;reg2:0 cur_state,next_state;reg din;always (posedge clk or posedge reset) if(reset) cur_state <= s0; else c

7、ur_state <= next_state;always (cur_state or din6 or din )begin case (cur_state) s0 : begin din <= din65; next_state <= s1; end s1 : begin din <= din64; next_state <= s2; end s2 : begin din <= din63; next_state <= s3; end s3 : begin din <= din62; next_state <= s4; end s4 :

8、begin din <= din61; next_state <= s5; end s5 : begin din <= din60; next_state <= s0; end default : begin din <= 1'b0; next_state <= s0; endendcaseendendmodule2) 串行检测模块(schk.v) 程序代码如下: module schk(din,clk,reset,AB);input din;input clk;input reset;output3:0AB;reg 3:0AB;reg2:0 cur

9、_state,next_state;parameter s0 = 3'b000, s1 = 3'b001, s2 = 3'b010, s3 = 3'b011, s4 = 3'b100, s5 = 3'b101,s6 = 3'b110;always (posedge clk or posedge reset) if(reset) cur_state <= s0; else cur_state <= next_state;always (cur_state or din)begincase(cur_state)s0:begin A

10、B<=4'b1011;next_state<=(din=0)?s1:s0;ends1:begin AB<=4'b1011;next_state<=(din=1)?s2:s1;ends2:begin AB<=4'b1011;next_state<=(din=0)?s3:s0;ends3:begin AB<=4'b1011;next_state<=(din=0)?s4:s2;ends4:begin AB<=4'b1011;next_state<=(din=0)?s5:s2;ends5:begin i

11、f(din=0)begin AB<=4'b1010;next_state<=s6;endelse begin AB<=4'b1011;next_state<=s0;end ends6:begin AB<=4'b1011;next_state<=(din=0)?s1:s0;endendcaseendendmodule 3)数码管显示模块(decled7s .v) 程序代码如下:module decled7s(IN,OUT);input 3:0IN;output 6:0OUT;reg 6:0OUT;wire 3:0IN;always (I

12、N)begincase(IN) 4'b1010: OUT<=7'b0001000; 4'b1011: OUT<=7'b0000011; default: OUT<=0; endcase end Endmodule 4)消抖模块(debounce_module.v) 程序代码如下: module debounce_module ( CLK, RSTn, Pin_In, Pin_Out); input CLK;input RSTn;input Pin_In;output Pin_Out; wire H2L_Sig;wire L2H_Sig; det

13、ect_module U1 ( .CLK( CLK ), .RSTn( RSTn ), .Pin_In( Pin_In ), / input - from top .H2L_Sig( H2L_Sig ), / output - to U2 .L2H_Sig( L2H_Sig ) / output - to U2 );delay_module U2 ( .CLK( CLK ),.RSTn( RSTn ), .H2L_Sig( H2L_Sig ), / input - from U1 .L2H_Sig( L2H_Sig ), / input - from U1.Pin_Out( Pin_Out )

14、 / output - to top );endmodule(5) 按照前述子模块的相同的设计步骤完成,用Verilog HDL将并行数据转串行数据模块(xulie.v)串行检测模块(schk.v)数码管显示模块(decled7s .v)组合为一个模块XULIEQI .v。 编写顶层文件将以上模块进行组合,程序代码如下:timescale 1ns / 1psmodule XULIEQI(CLK,RESET,din6, din, AB,LED7S);input CLK,RESET;input 5:0 din6;output 6:0 LED7S;output 3:0 AB;output din;w

15、ire din;wire 3:0 AB;xulie u1(CLK, din6, RESET, din);schk u2(din,CLK,RESET,AB);decled7s u3(AB,LED7S);endmodule(6) 对XULIEQI .v进行综合,功能仿真,时序仿真。 (7) 将XULIEQI .v文件和消抖模块,用Verilog HDL组合起来,建立顶层模块top.v, 该顶层模块不需要仿真。程序代码如下:timescale 1ns / 1psmodule XULIEQI(CLK_50M,CLK,RESET,din6, din, AB,LED7S);input CLK_50M,CL

16、K,RESET;input 5:0 din6;output 6:0 LED7S;output 3:0 AB;output din;wire din;wire Pin_Out;wire 3:0 AB;debounce_module u0( CLK_50M, RESET, CLK, Pin_Out);xulie u1(Pin_Out, din6, RESET, din);schk u2(din,Pin_Out,RESET,AB);decled7s u3(AB,LED7S);Endmodule(八)进行引脚锁定,然后验证程序后,下载,连接输入信号到FPGA,改变相应的拨动开关和按键,观察结果。3、

17、实验结果及分析(1) 、完成并行数据转串行数据模块(xulie.v)程序代码的编写之后,保存文件,然后对此模块进行综合。方法为在sources窗口选中待综合模块(xulie.v),在process窗口双击Synthesize-XST,综合完后可以双击Synthesize-XST下的View RTL Schematic,得到综合后的电路图为: 图1、模块(xulie.v)的综合电路图(2) 、完成串行检测模块(schk.v)程序代码的编写之后,然后对此模块进行综合。由(一)同理可得:综合后的(schk.v)模块电路图为: 图2、模块(schk.v)的综合电路图激励信号波形如下(序列号为01000

18、0): 添加Test Bench WaveForm文件,进行仿真仿真图如下: 根据激励波形和输出波形可得。当序列号为010000时,输出波形为1010,显示“A”,其他结果显示“B”,所以结果正确。(3) 、完成数码管显示模块(decled7s .v)程序代码的编写之后,然后对此模块进行综合。由(一)同理可得:综合后的(decled7s .v)模块电路图为: 图3、模块(decled7s .v)的综合电路图添加Test Bench WaveForm文件,进行仿真仿真图如下: (4) 、完成消抖模块(debounce_module.v)程序代码的编写之后,然后对此模块进行综合。由(一)同理可得:综合后的(debounce_module.v)模块电路图为: 图4、模块(debounce_module.v)的综合电路图(5) 、将XULIEQI .v文件和消抖模块,用Verilog HDL组合起来,建立顶层模块top.v,然后进行整体综合,即

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论