FPGA实验报告

时间:2024.4.7

实验报告

课程名称:         FPGA技术             

实验名称: 用状态机实现序列检测器的设计 

姓    名:                          

学    号:                       

班    级:                    

指导教师:                          

     


实验题目

一、        实验原理

1实验目的:用状态机实现序列检测器的设计,并对其进行仿真和硬件测试

2实验内容:应用有限状态机设计思路,检测输入的串行数据是否是“010000”,本次实验由顶层文件、串行检测、并行数据转串行、数码管显示四个模块组成。

       

图3.1整体模块方块图

3、序列检测器的原理说明:

序列检测器可用于检测一组或多组由二进制码组成的脉冲序列信号,当序列检测器连续收到一组串行二进制码后,如果这组码与检测器中预先设置的码相同,则输出A,否则输出b。由于这种检测的关键在于正确码的收到必须是连续的,这就要求检测器必须记住前一次的正确码及正确序列,直到在连续的检测中所收到的每一位码都与预置数的对应码相同。在检测过程中,任何一位不相等都将回到初始状态重新开始检测。例3-1描述的电路完成对特定的序列数"100101"的检测的部分HDL代码。当这一串序列数高位在前(左移)串行进入检测器后,若此数与预置的密码数相同,则输出“A”,否则仍然输出“b”。

4、系统共包括4个模块:

     4.1、并行数据转串行数据模块xulie.v

      1)、输入端口

clk-----系统时钟,由按键K2通过消抖模块后提供。

din6-----6bits输入数据,需在时钟控制下,串行输出。

reset----系统复位信号,当reset=1’b1时,系统输出复位,否则系统正常工作。

       2)、输出端口:

din----------1bit输出信号

       3)、操作要求及功能描述:

1、异步复位,在时钟控制下,将并行输入数据din6[5:0],按照din[5],din[4],din[3],din[2], din[1],din[0]的顺序输出至串行检测模块的输入端口din。

2、根据设计要求,先画出并行数据转串行数据模块的状态转移图,在此基础上写出HDL代码。

3、比较实验指导书提供并行数据转串行数据模块(xulie.v)的参考代码,总结有限状态机的HDL设计方法

      4.2、串行检测模块schk.v

        1)、输入信号:

         DIN-----1bit的串行输入数据

 CLK-----同步输入时钟

 CLR ------异步清零信号,当CLR=1,系统输出置0,否则,系统正常工作

        2、输出信号:

 AB--------4bits数据,如果系统检测到6’b100101的串行输入,AB=4’b1010,否则,AB=4’b1011。

3)操作要求及功能描述:

 1、根据设计要求,画出串行检测模块(schk.v)的状态转移图,并自行设计HDL源代码。

 2、用Verilog HDL设计数码管驱动电路、系统顶层电路。

 3、注意顶层系统中,应加入消抖模块,对K2输入的时钟clk进行消抖处理。

      注:剩下两个模块在第二次实验中都已经运用过,在这里不另做说明。

二、        实验步骤

(一)新建一个工程,为工程命名、指定存储路径和目标芯片等。(在 E 盘或者 DATA 盘的根目录下, 以自己的学号为文件名建立工程)。建议工程名、路径名中不要使用中文,file->New Project。

(二)选择 Top-level 的类型是 HDL。

         

                         图3.2 Top-level操作界面

(三)做好器件、EDA工具的正确选择,才能使得正常完成锁定引脚、下载的操作。本次实验中仍采用ISE自带的综合和仿真工具。

        

                             图3.3器件和 EDA 工具选择界面

(四)建立新Verilog HDL模块编辑窗口,添加文件,选择Verilog Module,建立工程后建立工程后,开始分别设计:

1)并行数据转串行数据模块(xulie.v)

     程序代码如下

module xulie(clk, din6, reset, din);

input clk;

input[5: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;

reg[2:0]  cur_state,next_state;

reg din;

always @ (posedge clk or posedge reset)

    if(reset)

       cur_state <= s0;

    else

       cur_state <= next_state;

always @ (cur_state or din6 or din )

       begin

        case (cur_state)

         s0 : begin

               din <= din6[5];

               next_state <= s1;

              end

         s1 : begin

                din <= din6[4];

               next_state <= s2;

              end

         s2 : begin

                din <= din6[3];

               next_state <= s3;

              end

         s3 : begin

                din <= din6[2];

               next_state <= s4;

              end

         s4 : begin

                din <= din6[1];

               next_state <= s5;

              end

         s5 : begin

                din <= din6[0];

               next_state <= s0;

              end

          default : begin

              din <= 1'b0;

              next_state <= s0;

              end

       endcase

       end

       endmodule

2)串行检测模块schk.v

     程序代码如下

       module schk(din,clk,reset,AB);

input din;

input clk;

input reset;

output[3:0]AB;

reg [3:0]AB;

reg[2:0]  cur_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)

begin

case(cur_state)

s0:begin AB<=4'b1011;next_state<=(din==0)?s1:s0;end

s1:begin AB<=4'b1011;next_state<=(din==1)?s2:s1;end

s2:begin AB<=4'b1011;next_state<=(din==0)?s3:s0;end

s3:begin AB<=4'b1011;next_state<=(din==0)?s4:s2;end

s4:begin AB<=4'b1011;next_state<=(din==0)?s5:s2;end

s5:begin if(din==0)begin AB<=4'b1010;next_state<=s6;end

else begin AB<=4'b1011;next_state<=s0;end  end

s6:begin AB<=4'b1011;next_state<=(din==0)?s1:s0;end

endcase

end

endmodule

    3)数码管显示模块decled7s .v

     程序代码如下:

module decled7s(IN,OUT);

input [3:0]IN;

output [6:0]OUT;

reg [6:0]OUT;

wire [3:0]IN;

always @(IN)

begin

case(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;

 detect_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 ) // output - to top

 );

endmodule

(五)按照前述子模块的相同的设计步骤完成,用Verilog HDL将并行数据转串行数据模块(xulie.v)串行检测模块(schk.v)数码管显示模块(decled7s .v)组合为一个模块XULIEQI .v。

 编写顶层文件将以上模块进行组合,程序代码如下

`timescale 1ns / 1ps

module XULIEQI(CLK,RESET,din6, din, AB,LED7S);

       input CLK,RESET;

       input  [5:0] din6;

       output [6:0] LED7S;

       output [3:0] AB;

       output din;

       wire   din;

       wire   [3:0] AB;

       xulie u1(CLK, din6, RESET, din);

       schk u2(din,CLK,RESET,AB);

       decled7s u3(AB,LED7S);

endmodule

(六)对XULIEQI .v进行综合,功能仿真,时序仿真

(七)将XULIEQI .v文件和消抖模块,用Verilog HDL组合起来,建立顶层模块top.v, 该顶层模块不需要仿真。

程序代码如下:

`timescale 1ns / 1ps

module XULIEQI(CLK_50M,CLK,RESET,din6, din, AB,LED7S);

       input CLK_50M,CLK,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,改变相应的拨动开关和按键,观察结果。

三、实验结果及分析

(一)、完成并行数据转串行数据模块(xulie.v)程序代码的编写之后,保存文件,然后对此模块进行综合。

方法为在sources窗口选中待综合模块(xulie.v),在process窗口双击Synthesize-XST,综合完后可以双击Synthesize-XST下的View RTL Schematic,得到综合后的电路图为:

                

                           图1模块xulie.v综合电路图

(二)、完成串行检测模块(schk.v)程序代码的编写之后,然后对此模块进行综合。由(一)同理可得:综合后的(schk.v)模块电路图为:

                

                          图2、模块schk.v的综合电路图

激励信号波形如下(序列号为010000):

      

添加Test Bench WaveForm文件,进行仿真仿真图如下:

   

根据激励波形和输出波形可得。当序列号为010000时,输出波形为1010,显示“A”,其他结果显示“B”,所以结果正确

(三)、完成数码管显示模块(decled7s .v)程序代码的编写之后,然后对此模块进行综合。由(一)同理可得:综合后的(decled7s .v)模块电路图为:

                  

                             图3、模块decled7s .v的综合电路图

添加Test Bench WaveForm文件,进行仿真仿真图如下:

          

(四)、完成消抖模块(debounce_module.v)程序代码的编写之后,然后对此模块进行综合。由(一)同理可得:综合后的(debounce_module.v)模块电路图为:

                    

                       图4、模块debounce_module.v的综合电路图

(五)、将XULIEQI .v文件和消抖模块,用Verilog HDL组合起来,建立顶层模块top.v,然后进行整体综合,即综合后的整体模块电路图为:

                             

                                  图5、整体模块电路图

(六)进行引脚锁定,然后验证程序后,下载,连接输入信号到FPGA,改变相应的拨动开关和按键,观察结果。按下K5键,再连续点击K2键六下,发现在第六次按下之后,才开始显示的B变成了A,其设计结果正确。

四、实验思考题解答(实验指导书要求的思考题)

      1、说明代码表达的是什么类型的状态机,它的优点是什么?详述其功能和对序列数检测的逻辑过程:

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

状态图如下:

     

                                图6.状态图

体会

本次实验中,又对软件操作熟悉了一遍,操作过程更加熟悉了,加快实验的进展,不过在实验过程中,也遇到了很多问题,最主要的问题是在程序编写上面,特别是在编写序列检测时。要事先画状态图,根据状态图来进行编写关键检测部分,我觉得这是很关键的部分。


第二篇:FPGA实验报告——第二次


FPGA实验报告

第二次实验:

模块设计:新建模块文件

 模块连接:

创建下层文件:

时钟产生模块:

数据抽取模块:

数据选择操作模块:

创建VHDL文件:程序

library ieee;

Use ieee.std_logic_1164.all;

Use ieee.std_logic_arith.all;

Use ieee.std_logic_unsigned.all;

Entity DataGate is

Port(

Input : in std_logic_vector(7 downto 0);

Aclr , clk :in std_logic;

Output  : out std_logic_vector(7 downto 0)

);

End entity;

Architecture datagate_arch of DataGate is

Begin

  Process(aclr ,clk)

       Begin

              If aclr = '1'then

                     Output <= "ZZZZZZZZ";

              Else

                     If  clk'event and clk = '1' then

                            If (input < 7) then --smaller than 7

                                   Output <= "00000000";

                            Else

                                    If (input > 248) then --bigger than 248

                                      Output <= "11111111"

                              Else

                                      Output <= input;

                              End if;

                            End if;

                     End if;

              End if;

       End process;

End datagate_arch;

更多相关推荐:
我做的PHOTOSHOP实验报告参考

实验报告一实验目的与要求掌握Photoshop的各种基本操作技巧并能够灵活使用处理各种文字图像二实验原理工具Photoshop软件中的钢笔工具移动工具缩放工具等命令调整抠出图片大小调整图层位置抠出所需图片将图片...

photoshop图像处理实验报告

云南大学软件学院实验报告序号:31实验老师:**实验名称:图像处理课程名称:数字媒体技术实验学号:***姓名:**一.实验名称:图像处理:二.实验目的:◆认识图像处理的原理并初步使用常用的图像处理工具Photo…

实验报告ps

甘肃政法学院本科学生实验报告姓名景红玉学院计算机科学学院专业计算机科学与技术班级20xx专升本实验课程名称多媒体技术及应用指导教师及职称王云峰开课时间20xx20xx学年一学期甘肃政法学院教务处印制

ps实验报告

一Photoshop的基本操作学号20xx12103姓名王胜楠专业电子信息工程成绩实验目的学习了Photoshop软件的基本工具后能运用软件结合自己的设计理念制作一个综合性作品实验内容要求能从不同图片中选取所需...

photoshop实验报告

景德镇陶瓷学院设计艺术学院实验报告课程名称计算机辅导设计姓名陈泽宇学号20xx10113304专业班级11装潢3班成绩教师魏文卿实验项目名称Photoshop基础知识与基本操作基本功能高级功能高级编辑技巧实验学...

ps实验报告

实验报告理工类20xx至20xx学年度第1学期课程名称图像处理系别班级经济贸易系10电子商务2班学号1004131008姓名章亚建授课教师周艳燕指导教师周艳燕实验项目一奥运五环制作三基色调制同组者填写日期实验日...

photoshop实验报告

景德镇陶瓷学院设计艺术学院实验报告课程名称photoshop姓名韩璐学号20xx10113421专业班级装潢四班成绩教师魏文卿实验项目名称Photoshop基础知识与基本操作基本功能高级功能高级编辑技巧实验学时...

简易photoshop代码数字图像处理实验报告

一一个简单的photoshop软件二设计目的数字图像处理就是用数字计算机及其他有关数字技术对图像进行处理以达到预期的目的随着计算机的发展图像处理技术在许多领域得到了广泛应用数字图像处理已成为电子信息通信计算机自...

ps实验报告创建和编辑选区(此轮的绘制)

XXX学院XX系实验报告20xx20xx学年第一学期课程名称photoshop平面设计实验名称创建和编辑选区专业年级学号姓名指导教师实验日期

ps实验报告 认识photoshop cs3

教育信息技术与传媒学院InstituteofEducationalInformationTechnologyandCommunication平面设计PhotoShop实验报告学号姓名日期教师评语日期年月日

实验报告ps化妆品

海南软件职业技术学院学生实验报告说明1学生必须认真地按照教师和实验要求填写学生实验报告2指导教师评语一栏由指导教师填写成绩评定为优良合格不合格四个等级其余栏目由学生本人填写

迷宫问题和过河问题实验报告

天津外国语大学国际商学院本科生课程论文课程名称论文题目姓名学号专业班级任课教师数据结构实验报告杨丽文1407114036信息管理与信息系统14707王斌老师20xx年6月年级14级目录一研究问题4二研究思路4三...

ps实验报告(31篇)