FPGA课程设计报告学部:信息科学与技术学部专业:通信工程班级:10级1班学号:************姓名:***指导老师:***合作伙伴:张紫君2012.12.13一.《任务书》:实验一100进制的可逆计数器(11——12周)实验二交通灯控制系统(15周)实验三多功能数字钟系统(14-15周)二.实验书写格式:一:题目要求二:程序代码三:操作步骤及运行结果截图四:心得体会三.实验附录:一:老师提供的资源二:关于实验所用EP4CE115F29板的简介实验一100进制的可逆计数器一、设计一个可控的100进制可逆计数器,要求用实验箱下载。
(1)计数器的时钟输入信号周期为200ns。
(2)以十进制形式显示。
(3)有一个复位端clr和两个控制端plus和minus,在这些控制信号的作用下,计数器具有复位、增或减计数、暂停功能。
二、程序如下:module keni100(CLR,CLK,PLUS,MINUS,OUT); //100进制的可逆计数器input CLR,PLUS,MINUS,CLK;output [7:0]OUT;reg [7:0]OUT;always@(posedge CLK)beginif(!CLR) //如果CLR为零,输出为零;反之,运行else程序OUT[7:0]<=0;elsebeginif(PLUS==0 && MINUS==1) //100进制的递减计数beginif (OUT[3:0]==0)beginOUT[3:0]<=9;if (OUT[7:4]==0) OUT[7:4]<=9;elseOUT[7:4]<=OUT[7:4]-1;endelse OUT[3:0]<=OUT[3:0]-1;endif(PLUS==1 && MINUS==0) //100进制的递增计数beginif (OUT[3:0]==9)beginOUT[3:0]<=0;if (OUT[7:4]==9) OUT[7:4]<=0;elseOUT[7:4]<=OUT[7:4]+1;endelse OUT[3:0]<=OUT[3:0]+1;endif(PLUS==1 && MINUS==1) OUT<=OUT; //若PLUS和MINUS都为1,暂停计数if(PLUS==0 && MINUS==0) OUT<=0; //若都为零,输出为零endendendmodule三、运行程序1、在quarters II9.1输入程序打开quarters II界面,点击file→New,在出现的对话框,如图1.1所示,选择Text File,点击OK.——图1.1 在出现的输入界面内输入程序,点击file→save as,在出现的对话框中点击Yes,然后在出现的new project Wizard对话框中点击next,在Family&Device Settings 对话框中选择如下图1.2所示的选项,在选择第三方软件的对话框中的选项选为none后点击next,在随后出现的对话框中,点击finish。
设置完成。
——图1.22、点击project→Set as Top-Level Entity,指向所输入的文件。
3、点击Processing→Start→Start Analysis & Synthesis。
——图1.34、点击File→New出现上面第一步时出现的对话框,如图1.1,选择Vector Waveform File。
5、点击View→Utility Windows→Node Finder,在出现的对话框中点击List,如下图1.4所示——图1.4选择所需要的节点,将其拉到后面的Name栏中,并设置输入数据6、选择End Time:点击Edit→End Time,设置参数,如下图1.5所示——图1.57、输入参数的数据设置完成后,保存,仿真图形如下图1.6所示:——图1.68.点击Assigment→Settings,在出现的对话框(如图1.7所示)中,选择Simulator Settings,在Simulation mode中选择Functional,进行功能编译。
——图1.78、点击Processing→Generate Functional Simulation Netlist9、点击Processing→Start Simulation,进行仿真。
四、仿真结果:——图1.8如上图1.8所示,当CLR为0时,OUT清零;当CLR为1时,OUT 开始输出,当PLUS=1,MINUS=0时,OUT开始递加;——图1.9如图 1.9所示,当PLUS=1,MINUS=1时,OUT暂停计数;当PLUS=0,MINUS=1时,OUT开始递减。
五、封装在quartus II11.0中点击file→open project,在弹出的对话框中选择counter100文件,单击右键选择Creat Symbol File for Current File——图1.10上图1.10为counter100的封装图,在quartus中打开此图,双击,将会看到counter100的程序.六、试验箱下载将编好的程序应用于硬件上进行验证,所用的电路板子是:EP4CE115F29C7 外观如下图1.11所示:——图1.111.安装硬件在安装向导中选择如下图1.12所示的安装路径,点击确定。
——图1.122、硬件安装完毕后,在quartus11.0中封装图连接,如下图图1.13——图1.13封装模块div和decode4_7是辅助模块,div是分频模块,decode4_7是译码部分。
(相关程序在报告后面的附件)3、图形连接完毕后,单击File→Save as,确定,修改设置,如下图图1.14所示:——图1.144、单击Processing→Start Compilation,进行编译,没有错误后进行下一步。
编译结果如下图1.15所示。
——图1.155、单击Tools→Programmer,在弹出的对话框中,单击Hardware 弹出一个对话框,选择USB-Blaster[USB-0],如下图1.16所示6、点击Start,开始运行。
——图1.16七、硬件部分照片截图——图1.17如图1.17所示Clk(sw[3])与Clr(sw[0])置为1时,将Plus (sw[1])置为1,Minus(sw[2])置为0,开始从0递增,图为到99时,将Plus与Minus都置为1,暂停计数为99;——图1.18如图1.18,1.19所示,下一时刻,数码管显示为0,重新开始递增计数;——图.1.19将Plus(sw[1])置为0,Minus(sw[2])置为1,开始从99递减计数。
八.实验总结:此次实验,花费的时间有些长,主要是因为代码的编写方面以及封装及连接图方面的不太的熟练,在他人的指导及自己的反复操作练习下,终于完整的完成了第一个实验,很开心。
这次实验,我收获的是对FPGA软件的运用和熟练,也收获了代码编写的积累与熟悉,充分感受到了代码与软件运用,与硬件器件所展现的知识与实践的相统一,体味到了实验的趣味性。
实验二交通灯控制系统一、交通灯控制系统,要求用实验箱下载。
(1)设计一个十字路口交通信号灯的定时控制电路。
要求红、绿灯按一定的规律亮和灭,绿灯亮时,表示该车道允许通行;红灯亮时,该车道禁止通行。
并在亮灯期间进行倒计时,并将运行时间用数码管显示出来。
(2)要求主干道每次通行时间为40秒,支干道每次通行时间为30秒。
每次变换运行车道前绿灯闪烁,持续时间为5秒。
即车道要由主干道转换为支干道时,主干道在通行时间只剩5秒钟时,绿灯闪烁5秒显示,支干道仍为红灯,以便主干道上已过停车线的车继续通行,未过停车线的车停止通行。
同理,当车道由支干道转换为主干道时,支干道绿灯闪烁显示5秒钟,主干道仍为红灯。
(3)定时器要求采用递减计时方式进行计时。
两个定时时间:绿灯闪烁和绿灯停止闪烁4个状态:S0:主干道绿灯亮,支干道红灯亮。
S1:主干道绿灯闪烁,支干道红灯亮。
S2:支干道绿灯亮,主干道红灯亮。
S3:支干道绿灯闪烁,主干道红灯亮。
二.程序如下:module traffic00 (clk,en,lampar,fag,lampbr,fbg,numa,numb);input clk,en;output [7:0]numa,numb;reg [7:0]numa,numb;//计时显示output fag,fbg,lampar,lampbr; //fag:flash a greenreg lampar,lampag,lampbr,lampbg;//表示主路?路共四个灯reg tempa,tempb; //装入计数reg [2:0] counta,countb;//灯亮的顺序reg [7:0] ared,agreen,bred,bgreen;always @(en)if(!en)begin // 设置各种灯的预置数ared <=8'b00110000;agreen <=8'b01000000;bred <=8'b01000000;bgreen <=8'b00110000;endalways @(posedge clk)beginif(en)beginif(!tempa)begin tempa<=1;case(counta) //控制灯亮的顺序0: begin numa<=agreen;lampag<=1;lampar<=0;counta<=1; end1: begin numa<=ared; lampag<=0;lampar<=1;counta<=0; enddefault: lampar<=1;endcaseendelse begin //倒计时if(numa>8'b00000001)begin if(numa[3:0]==0)begin numa[3:0]<=4'b1001; numa[7:4]<=numa[7:4]-1;endelse numa[3:0]<=numa[3:0]-1;endif(numa==8'b0000010) tempa<=0;endendelse begin lampar<=1;lampag<=0;counta<=0;tempa<=0; endEnd三.运行程序步骤与实验一的步骤基本相同,可参照实验一的步骤。