FPGA课程设计报告

  • 格式:doc
  • 大小:1.53 MB
  • 文档页数:27

下载文档原格式

  / 27
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

FPGA课程设计报告

专业:通信工程

班级:班

姓名:

学号:

指导老师:祝*

制作日期:11.10—11.20

设计课题1:设计一个可控的100进制可逆计数器,要求用DE2-115

开发板下载。

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

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

(3)有一个复位端clr和两个控制端plus和minus,在这些控制信号的作用下,计数器具有复位、增或减计数、暂停功能。

设计步骤

第一步:参考书中的60进制计数器设计出100进制的加法计数器,

用时30分钟;

第二步:仿照100进制的加法可以设计出100进制的减法计数器,用

时45分钟;

第三步:将两段程序拼凑起来,利用两个控制端控制加减和暂停功能,

用时15分钟。

关键词

可逆;暂停;循环计数。

内容摘要

计数器具有复位、增减计数和暂停功能,可循环计数,可用作平时的

计数器用。

总体方案

顶层逻辑电路图

上图为100进制可逆计数器的封装图,sw[0]控制计数脉冲的频率大小,sw[1]控制清零端,sw[2]和sw[3]为两个控制端plus和minus,hex1和hex0分别显示100进制的十位和个位。

底层功能模块设计

100进制可逆加减的程序代码:

module count100(qout,//输出的数字

cout,//进位

data,//置位数字

load,//置位端

clr,//清零端

clk,//时钟脉冲

plus,//控制端

minus//控制端);

input load,clk,clr,plus,minus;input[7:0] data;//输入output [7:0] qout;

reg[7:0] qout;output cout;//输出

always @(posedge clk)//脉冲

begin

if(!clr) qout<=0;//如果清零端为0,将输出清零

else if(load) qout<=data;//如果置数端为1,将置数端数字给输出

else if(plus&!minus&qout[3:0]==9&qout[7:4]==9) qout<=0;//当plus为1且minus为0时如果计数到99时回到00

else if(plus&!minus) //plus为1,minus为0,递增计数

begin

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

begin

qout[3:0]<=0;

if(qout[7:4]==9) qout[7:4]<=0;

else

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

end

else qout[3:0]<=qout[3:0]+1;

end

else if(!plus&minus) //plus为0,minus为1,递减计数

begin

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;

end

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

end

else if(plus&minus) // qout<=qout;//plus为1,minus为1,暂停计数

else qout<=0; //为其他时清零

end

assign cout=(qout==8'd99)?1:0; //为99时进位端进endmodule

注释:利用plus和minus的几种组合可控制加减和暂停计数。利用清零端可将计数清零,以便计数。

各模块功能仿真波形显示的结果:

当plus为1,minus为0时,递增计数到99时下一刻为00。当clk为0时,计数器清零。

当plus为0,minus为1时,递减计数,00时下一秒变为99。

当plus为1,minus为1,暂停计数。

设计中遇到问题及解决方法

在设计时,我用的是让其自己加减的方法,在仿真时可以做出正确的结果,但是在下载板中显示时,个位一直从0加到了F才向十位进位,我感觉到可能是程序出错了,我没有将十位和个位分开,而是写在了一起,导致默认为十六位计数,于是我将程序改为分开计数,最后终于成功了。

心得体会

从第一个简单的实验中我感觉到,看起来简单的事,可能自己亲手做的时候就会发现很多问题,这些问题都要自己去解决,后面的两个实验更难,我需要更多的去开动脑筋,多多查阅资料,力争做好。

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

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

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

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

4个状态:

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

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

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

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

设计步骤

第一步:在程序内部转载一个计数器,从70递减计数到00,如此循环。用时15分钟。

第二步:设计主干道的计时器,从40到00,主干道绿灯亮,最后