文档库

最新最全的文档下载
  • 求职/职场
  • 总结/汇报
  • 工作bob网页登录网址
  • 教学研究
  • 资格考试
  • 外语考试
  • 高等教育
  • 高中教育
  • 初中教育
  • 小学教育
  • 幼儿教育
  • 表格/模板
  • 人文社科
  • 当前位置:文档库 > FPGA课程设计报告

    FPGA课程设计报告

    FPGA课程设计报告

    FPGA课程设计

    专业班级:10通信工程2班

    姓名:许同洲

    学号:100103021110

    指导老师:祝宏

    日期:2012年12月21日

    实验一:设计一个可控的100进制可逆计数器

    一、实验要求

    用DE2-115开发板下载。

    (1)计数器的时钟输入信号周期为200ns。

    (2)以十进制形式显示。

    (3)有一个复位端clr和两个控制端plus和minus,在这些控制信号的作用

    FPGA课程设计报告

    二、关键词

    可控制、可逆、100进制、复位、暂停、递增、递减

    三、内容摘要

    module updown_count(qout,reset,clk,plus,minus);

    output[7:0] qout;/*定义一个8位的输出,其目的是

    低四位和高四位分别表示计数器的个位和十位。*/

    input clk,plus,minus,reset;//定义四个输入,时钟,加计数,减计数和清零

    reg[7:0] qout;//qout的数据类型为寄存器型

    always @(posedge clk)//当clk上升沿到来时执行一遍下列程序

    begin

    if(!reset) qout<=0;//当reset为低电平时,计数器执行清零功能,否则跳过else

    begin

    case({minus,plus})//case语句模块,包含加,减和暂停四个模块

    2'b10:

    if (qout[3:0]==0)//判断个位是否为零,若不为零,跳到个位减一begin

    qout[3:0]<=9;//给个位赋值

    if(qout[7:4]==0) qout[7:4]<=9;//判断十位是否为零,并且给十位赋值

    else

    qout[7:4]<=qout[7:4]-1;//由于个位赋9,相当于向十位借一,因而十位减一end

    else

    qout[3:0]<=qout[3:0]-1;//个位减一

    /*这一部分是减计数模块,其思路是:首先判断个位是否为零,若为零,则执行后面的程序,个位直接赋9,并且十位减一;否则个位减一*/ 2'b01:

    if (qout[3:0]==9)//判断个位是否为9,否则跳到个位加一begin

    FPGA课程设计报告

    qout[3:0]<=0;//若上面个位为9判断成立,则给个位赋值

    if(qout[7:4]==9) qout[7:4]<=0;//判断十位是否为9,若为9,则赋0

    else

    qout[7:4]<=qout[7:4]+1;//若十位不为9,十位加一

    end

    else

    qout[3:0]<=qout[3:0]+1;//个位加一

    /*这一部分是加计数模块,首先判断个位是否为9,若不为9,个位加1;否侧,再判断十位是否为9,

    若为9,十位赋0,否侧十位加1。*/

    2'b11:

    qout[7:0]<= qout[7:0];//暂停计数模块

    endcase/*整个case语句模块,当minus为1plus为0时,执行减计数;minus 为0plus为1时;

    执行加计数;minus为1plus为1时,暂停。*/

    end

    end

    endmodule

    四、建立工程文件

    (1)指定工程文件名

    在图二所示窗口中,选择File→New Project Wizard,弹出如图四的对话框,在此对话框中分别输入新建工程所在的文件夹名称(keni100)、工程名称(keni100)和顶层实体名称(keni100)。QuartusII要求工程文件名与顶层实体名一致。

    FPGA课程设计报告

    QuartusII软件界面

    (2)添加文件和库

    工程文件夹名、工程名以及顶层实体名设置完后,点击Next按钮,弹出如图四所示的对话框,在此对话框中可以设置添加的文件或者库,按提示操作。完成后,单击Next按钮,进入目标器件选择对话框。

    FPGA课程设计报告

    (3)选择目标器件

    在图所示的目标器件选择对话框中,在Family下拉列表中选择器件的种类(Cyclone II系列),在target device选项组中选择Specific device selected in “Avaiable devices”list,为用户制定目标器件。在Show in “Available device”list选项组中,通过限制封装(Package选择FPGA)、引脚数(Pin count选择672)、速度等级(Speed grade选择6)条件,快速查找所需器件,选择型号为EP2C70F672C6的主芯片。

    FPGA课程设计报告

    目标器件选择对话框

    单击Next按钮,进入如图六所示的第三方EDA工具选择对话框。

    (4)选择第三方EDA工具

    在图所示对话框中,依据提示用户可以选择所用的第三方工具如Modelsim、Synplify等。如不需要第三方工具,则单击Next按钮,进入如图所示的工程创建结束对话框。

    FPGA课程设计报告

    FPGA课程设计报告

    (5)工程创建结束

    在图所示的结束对话框中,查看设置信息是否正确,正确,则单击Next,弹出如图所示窗口,在QuartusII资源管理器中可以看到新建的工程名称。

    FPGA课程设计报告

    五、设计输入(原理图法)

    (1)选择输入文件类型

    在图所示窗口中,选择Flie→New,弹出如图所示的新建文件类型选择对话框。在本对话框中有8中设计文件输入方式,分别对应相应的编译器。本节要介绍的是原理图输入法,选择Verilog HDL File并单击OK按钮,弹出如图所示的图形编辑器对话框。

    FPGA课程设计报告

    文件编辑器

    (2)分析综合

    选择菜单Processing→start→start analysis&synthesis,弹出QurtusII的分析综合窗口,点击“start”按钮,开始分析综合,在下面的Message窗口会显示各种信息,包括警告和出错信息,如有错,则需要依据错误提示信息返回并修改电路,

    再次重新分析综合直至无错误提示信息和提示成功。

    FPGA课程设计报告

    (3)设置顶级实体

    单击Files,选择工程文件名counter60.v,单击右键并选中Set as top-level Entity。

    FPGA课程设计报告

    六、仿真功能验证

    FPGA课程设计报告

    建立波形文件,单击工具栏中的图标,弹出如图所示的新建文件对话框。选择Vector Waveform File并单击OK按钮。

    (1)添加引脚节点

    ①在Name下方的空白处双击鼠标左键,弹出如图的Insert Node or Bus对话框,点击该对话框中的Node Finder按钮,弹出的Node Finder对话框。

    FPGA课程设计报告

    FPGA课程设计报告

    FPGA课程设计报告

    添加节点或总线对话框

    ②在图中,在Filter下拉列表中选择Pins,其他选项取默认值,单击List按钮,在Node Found中列出设计中的所有引脚,然后点击该图中的按钮,将所有的引脚复制到右侧的Selected Nodes中。

    FPGA课程设计报告

    选择输入、输出引脚

    ③点击图中的OK按钮,返回到添加节点的对话框。该对话框中的Name、Type、Bus width、Start index中的内容变为Multiple Items。单击OK按钮,繁华波形编辑窗口,此时选中的输入、输出引脚被调价到波形编辑窗口。

    FPGA课程设计报告

    FPGA课程设计报告

    FPGA课程设计报告

    添加对话框

    FPGA课程设计报告

    FPGA课程设计报告

    FPGA课程设计报告

    (2)参数设置

    在波形编辑前,有两个重要参数需要设置:仿真结束时间、仿真网格大小。

    ①仿真时间系统默认值为1us,但是在某些电路的仿真在1us内完成不了,因此需要在仿真前事先确定仿真时间,避免仿真时间不够的现象发生。选择菜单栏Edit→End Time,弹出End Time对话框,在设置波形仿真时间长度为100us。

    ②选择菜单栏中的Edit→Grid Size,弹出网格大小设置对话框,系统默认的网格大小为10.0ns,需将其该为200ns,否则仿真后的仿真图中输出信号相对输入信号的延时比例偏大。一半我们将网格大小设置为200ns。

    (3)编辑波形

    在图中选中Name下方的clk,使其变为蓝色高亮状态,然后选择左侧波形

    FPGA课程设计报告

    编辑工具栏中的按钮,弹出如图的时钟设置对话框,设置时钟信号的周期、相位和占空比。网格大小在设置参数时已设置为200ns,则时钟周期默认为200ns。设置完后,单击OK按钮,返回波形编辑窗口。如图。

    FPGA课程设计报告

    时钟设置对话框

    (4)仿真

    保存好图好后便可进行仿真。QuartusII软件的仿真分为功能仿真和时序仿真。功能仿真是忽略了延时,按逻辑关系仿真,而时序仿真因加入了延时而更贴近实际情况。QuartusII仿真软件可以仿真整个设计,也可以指定工程中的任何设计实体为顶层设计实体,并仿真顶层实体及其所有其他附属实体。开始仿真前,必须先生成合适的仿真网表,选择菜单栏中的Processing→Generate Functional Simulation Netlist,生成仿真网表成功时如下图。此外,建立并指定一个向量源文件为仿真输入向量的源。Simulator使用向量源文件所包含的输入向量,来仿真同意条件下编辑器件将要产生的输出信号。

    功能仿真

    A::选择菜单栏中的Assignments→Settings,弹出如图的仿真设置窗口,单击Simulator Settings选项后,在右侧的Simulation mode下拉列表中选择Functional,其他按默认设置,单击OK按钮完成设置。

    B: 选择Processing→Generate Functional Simulation Netlist,自动创建功能仿真网表,完成后在相应弹出的提示框中,单击“确定”按钮即可。

    C: 单击工具栏中的仿真按钮,进行功能仿真,仿真结果如图二十四。由仿真波形图可以看出,当clr为0时,清零;当plus为0,minus为1时,做减计数;当plus为1,minus为0时,做加计数;当plus为1,minus为1时,保持不变。验证可逆计数器的逻辑功能正确。

    七、封装下载

    (1)点击file→选择Creat Symbol File for Current File,将可逆计数器进行封装,如图所示:

    FPGA课程设计报告

    同理将div分频模块和decode4_7是译码模块也进行封装,封闭图分别如图所

    示:

    FPGA课程设计报告

    FPGA课程设计报告

    分频模块封装图译码模块封装图

    FPGA课程设计报告

    (2)封装完毕之后,打开Quartus11.0,打开上面建好的工程。点击File→New 选择Block Diagram /Schematic File。双击文本框,将封闭图和元器件导入文本框中,连接好后如图所示:

    FPGA课程设计报告

    100进制可逆计数器电路原理图

    (3)修改器件的种类,选择Hierarchy,双击Cyclone II:EP2C70F672C6弹出如图二十九的示的对话框,选择器件的种类(Cyclone IV E系列)限制封装(Package选择FPGA)、引脚数(Pin count选择780)、速度等级(Speed grade 选择7)条件,快速查找所需器件,选择型号为EP4CE115F29C7的主芯片。

    FPGA课程设计报告

    器件的种类修改图

    (4)导入管脚,选择菜单栏中的Assignments→Import Assignments。弹出如图所示的对话框,选择所要用到的管脚。相关管脚见后面的附录。

    FPGA课程设计报告

    FPGA课程设计报告

    FPGA课程设计报告

    导入管脚

    (5)单击Processing→Start Compilation,进行编译。没有错误时弹出如所示的对话框。

    FPGA课程设计报告

    (6)将硬件电路板连接到电脑上,所用的电路板子是DE2-115开发板。

    (7)下载。单击Tools→Programmer,在弹出的对话框中,单击Hardware弹出一个对话框,选择USB-Blaster[USB-0],点击Start,开始进行下载。

    八、硬件相关截图及分析

    当plus(即sw2)为1,minus(即sw3)为0时,做加计数,当从0 加到99时,将sw2置为1,sw3 置为1时,此时保持99不变,如图三十四所示。

    FPGA课程设计报告

    FPGA课程设计报告

    FPGA课程设计报告

    下一时刻,数码管显示为0,重新开始递增计数如图三十五所示。

    FPGA课程设计报告

    此时将sw2置为0,sw3置为1,开始从99递减计数。当clr(即sw1)置为0时,则清零。

    实验二:交通灯控制系统

    一、实验要求

    用DE2-115开发板下载。

    (1)设计一个十字路口交通信号灯的定时控制电路。要求红、绿灯按一定的规律亮和灭,绿灯亮时,表示该车道允许通行;红灯亮时,该车道禁止通行。并在亮灯期间进行倒计时,并将运行时间用数码管显示出来。

    (2)要求主干道每次通行时间为40秒,支干道每次通行时间为30秒。每次变换运行车道前绿灯闪烁,持续时间为5秒。即车道要由主干道转换为支干道时,主干道在通行时间只剩5秒钟时,绿灯闪烁5秒显示,支干道仍为红灯,以便主干道上已过停车线的车继续通行,未过停车线的车停止通行。同理,当车道由支干道转换为主干道时,支干道绿灯闪烁显示5秒钟,主干道仍为红灯。

    (3)定时器要求采用递减计时方式进行计时。

    两个定时时间:绿灯闪烁和绿灯停止闪烁

    4个状态:

    S0:主干道绿灯亮,支干道红灯亮。

    S1:主干道绿灯闪烁,支干道红灯亮。

    S2:支干道绿灯亮,主干道红灯亮。

    S3:支干道绿灯闪烁,主干道红灯亮。

    二、关键词

    定时控制、按规律亮和灭、闪烁显示、数码管显示、递减计时

    FPGA课程设计报告

    三、实验源代码

    module jtd(clk,zhu,zhi,qout);

    input clk;

    reg s0,s1;//中间变量,倒计时的循环暂存 casa语句上下两个循环

    output reg[1:0] zhu, zhi;//主干道和枝干道输出,当主干道是红灯的时候支干道是绿灯二进制红灯绿灯

    output reg[7:0] qout;//显示器是八进制输出

    always @(posedge clk)

    begin

    case({s0,s1})

    4'b00:

    begin

    begin

    zhu<=2'b01;//把b01给zhu

    zhi<=2'b10;//把b10给zhi

    end

    begin

    if(qout[3:0]<1)

    begin qout[3:0]<=9;

    if(qout[7:0]<1)

    qout[7:4]<=3;//40秒倒计时

    else qout[7:4]<=qout[7:4]-1;

    end

    else

    begin

    if(qout[3:0]<=6&&qout[7:4]==0)

    begin

    zhu[0]<=~zhu[0];//主干道绿灯当还有5秒的时候灯闪烁

    qout[3:0]<=qout[3:0]-1;

    if(qout[3:0]<=1&&qout[7:4]==0)

    begin

    qout[3:0]<=qout[3:0]-1;

    s0<=1'b0;//把b0给s0

    s1<=1'b1;//把b1给s1

    end

    end

    else

    qout[3:0]<=qout[3:0]-1;

    end

    end

    end

    4'b01:

    FPGA课程设计报告

    begin

    begin

    zhu<=2'b10;

    zhi<=2'b01;

    end

    begin

    if(qout[3:0]<1)

    begin qout[3:0]<=9;

    if(qout[7:0]<1)

    qout[7:4]<=2;//30秒倒计时

    else qout[7:4]<=qout[7:4]-1;

    end

    else

    begin

    if(qout[3:0]<=6&&qout[7:4]==0)

    begin

    zhi[0]<=~zhi[0];//支干道绿灯当还有5秒的时候灯闪烁

    qout[3:0]<=qout[3:0]-1;

    if(qout[3:0]<=1&&qout[7:4]==0)

    begin

    qout[3:0]<=qout[3:0]-1;

    s0<=1'b0;

    s1<=1'b0;

    end

    end

    else

    qout[3:0]<=qout[3:0]-1;

    end

    end

    end

    endcase

    end

    endmodule

    四、总体方案

    相关的实验过程同课题一,在此就不再重复了!

    将上面的代码进行封装之后如下图所示,同时同课题一一样,将div分频模块和decode4_7是译码模块也进行封装,然后连接成电路原理图如图所示

    FPGA课程设计报告

    FPGA课程设计报告

    FPGA课程设计报告

    FPGA课程设计报告

    交通灯控制系统原理图

    五、各模块功能仿真波形分析(数据分析)及结论

    FPGA课程设计报告

    由波形仿真图可以看出,主干道的绿灯亮40秒,最后5秒闪烁,支干道的红灯亮40秒;主干道的红灯亮30秒,支干道的绿灯亮30秒,最后5秒闪烁。验证了交通灯的逻辑功能正确。

    FPGA课程设计报告

    实验三:多功能数字钟系统(层次化设计)

    一、实验要求

    用DE2-115开发板下载。

    (1)基本功能:60秒—60分—24小时。

    (2)扩展功能:①报时;每小时59分51,53,55,57秒低频报时,59秒高频报时。

    ②校时校分;

    ③时段控制;6点—18点输出灯不亮,其它时间灯亮。

    ④独立设计除上述3种功能以外的扩展功能,可加分。

    二、关键词

    多功能、报时、闪烁、校时校分、时段控制

    三、内容摘要

    1、小时计时模块:

    module m24(H,CPH,RD);

    output[7:0] H;

    input CPH,RD;

    reg[7:0] H;

    always @ (negedge RD or posedge CPH)

    begin

    if (!RD) H[7:0]<=0;

    else

    begin

    if((H[7:4]==2)&&(H[3:0]==3))

    begin H[7:0]<=0; end

    else

    begin

    if(H[3:0]==9)

    begin H[3:0]<=0;H[7:4]<=H[7:4]+1;

    else

    H[3:0]<=H[3:0]+1;

    end

    end

    end

    endmodule

    2、分钟计时模块:

    module m60(M,CP60M,CPM,RD);

    output[7:0] M;

    output CP60M;

    input CPM;

    input RD;

    reg [7:0] M;

    wire CP60M;

    always @ (negedge RD or posedge CPM)

    FPGA课程设计报告

    begin

    if(!RD)

    begin M[7:0]<=0;end

    else

    begin

    if((M[7:4]==5)&&(M[3:0]==9))

    begin

    M[7:0]<=0;

    end

    else

    if(M[3:0]==9)

    begin

    M[3:0]<=0;

    if(M[7:4]==5)

    begin M[7:4]<=0;end

    else

    M[7:4]<=M[7:4]+1;一

    end

    else

    M[3:0]<=M[3:0]+1;

    end

    end

    assign CP60M=~(M[6]&M[4]&M[3]&M[0]);

    endmodule

    3、秒计时模块:

    module s60(S,CP60S,CPS,RD);

    output[7:0] S;

    output CP60S;

    input CPS;

    input RD;

    reg [7:0] S;

    wire CP60S;

    always @ (negedge RD or posedge CPS)

    begin

    if(!RD)//RD

    begin S[7:0]<=0;end

    else

    begin

    if((S[7:4]==5)&&(S[3:0]==9))

    begin

    S[7:0]<=0;

    end

    else

    if(S[3:0]==9)

    begin

    S[3:0]<=0;

    if(S[7:4]==5)赋0

    begin S[7:4]<=0;end

    FPGA课程设计报告

    else

    FPGA课程设计报告

    S[7:4]<=S[7:4]+1;

    end

    else

    S[3:0]<=S[3:0]+1;

    end

    end

    assign CP60S=~(S[6]&S[4]&S[3]&S[0]);

    endmodule

    4、校时校分模块:

    module jiaoshi (CPM,CPH,CPS,CP60M,CP60S,SWM,SWH);

    output CPM,CPH; input SWH,SWM;

    input CPS,CP60S,CP60M;

    reg CPM,CPH;

    always @ (SWH or SWM or CPS or CP60S or CP60M) begin

    case({SWM,SWH})

    2'b01: begin CPM<=CPS;CPH<=CP60M;end

    2'b10: begin CPM<=CP60S;CPH<=CPS;end

    default: begin CPM<=CP60S;CPH<=CP60M;end

    endcase

    end

    endmodule

    四、总体方案

    相关的实验过程同课题一,在此就不再重复了!

    将上面的代码进行封装之后如下图所示,同时同课题一一样,将div分频模块和decode4_7是译码模块也进行封装,然后连接成电路原理图如图所示

    封装图:

    FPGA课程设计报告

    FPGA课程设计报告