FPGA课程设计报告
- 格式:doc
- 大小:1.53 MB
- 文档页数:27
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,主干道绿灯亮,最后