FPGA毕业课程设计报告.docx
- 文档编号:3601521
- 上传时间:2022-11-24
- 格式:DOCX
- 页数:34
- 大小:3.75MB
FPGA毕业课程设计报告.docx
《FPGA毕业课程设计报告.docx》由会员分享,可在线阅读,更多相关《FPGA毕业课程设计报告.docx(34页珍藏版)》请在冰豆网上搜索。
FPGA毕业课程设计报告
(此文档为word格式,下载后您可任意编辑修改!
)
文华学院
FPGA
课
程
设
计
报
告
专业:
电子信息工程
班级:
电信三班
学号:
5
姓名:
雷帆
设计课题1:
设计一个可控的100进制可逆计数器,要求用实验箱下载。
计数器的时钟输入信号周期为200ns。
以十进制形式显示。
有一个复位端clr和两个控制端plus和minus,在这些控制信号的作用下,计数器具有复位、增或减计数、暂停功能。
clr
plus
minus
功能
0
×
×
复位为0
1
1
0
递增计数
1
0
1
递减计数
1
1
1
暂停计数
1、源程序(附注释):
(1)
modulecounter100(out,clk,clr,plus,minus);
output[7:
0]out;
inputclk,plus,minus,clr;
reg[7:
0]out;
always@(posedgeclk)
begin
if(!
clr)out<=0;若CLR为0将计数复位为0
else
begin
case({plus,minus})
2'b10:
begin若PLUS为1并且MINUS为0
if(out[3:
0]==9)若计数低四位为9
begin
out[3:
0]<=0;将低四位置0
if(out[7:
4]==9)out[7:
4]<=0;若高四位为9则将高四位置0
else
out[7:
4]<=out[7:
4]+1;否则将高四位加1
end
elseout[3:
0]<=out[3:
0]+1;若计数低四位不为9则加1
end
2'b01:
begin若PLUS为0并且MINUS为1
if(out[3:
0]==0)若低四位为0
begin
out[3:
0]<=9;低四位置9
if(out[7:
4]==0)out[7:
4]<=9;若高四位为0高四位置9
else
out[7:
4]<=out[7:
4]-1;否则高四位减1
end
elseout[3:
0]<=out[3:
0]-1;若计数低四位不为0则减1
end
2'b11:
out<=out;若PLUS和MINUS同时为1计数为原值不变
default:
out<=0;
endcase
end
end
endmodule
2、生成的波形图:
counter100:
(1)当clr为0时,复位为0;当PLUS为1,MILUS为0时按递增计时。
(2)当PLUS为1,MILUS为1时暂停计时。
(3)当PLUS为0,MILUS为1时按递减计时。
3、管脚分配:
4、下载过程等的截图和注解:
(1)为下载选择正确的实验板型号
(2)下载使用的BDF电路图:
(3)开始下载,选择Tools>Programmer,并单击Start.
设计课题2:
交通灯控制系统,要求用实验箱下载。
(1)设计一个十字路口交通信号灯的定时控制电路。
要求红、绿灯按一定的规律亮和灭,绿灯亮时,表示该车道允许通行;红灯亮时,该车道禁止通行。
并在亮灯期间进行倒计时,并将运行时间用数码管显示出来。
(2)要求主干道每次通行时间为40秒,支干道每次通行时间为30秒。
每次变换运行车道前绿灯闪烁,持续时间为5秒。
即车道要由主干道转换为支干道时,主干道在通行时间只剩5秒钟时,绿灯闪烁5秒显示,支干道仍为红灯,以便主干道上已过停车线的车继续通行,未过停车线的车停止通行。
同理,当车道由支干道转换为主干道时,支干道绿灯闪烁显示5秒钟,主干道仍为红灯。
(3)定时器要求采用递减计时方式进行计时。
注:
TimeH、TimeL分别表示计数器的高位和低位
HG、HR分别表示主干道的绿灯和红灯
CG、CR分别表示支干道的绿灯和红灯
两个定时时间:
绿灯闪烁和绿灯停止闪烁
源程序(附注释):
(1)
moduletraffic00(clk,en,lampar,fag,lampbr,fbg,numa,numb);
inputclk,en;
output[7:
0]numa,numb;
reg[7:
0]numa,numb;计时显示
outputfag,fbg,lampar,lampbr;fag:
flashagreen
reglampar,lampag,lampbr,lampbg;表示主路?
路共四个灯
regtempa,tempb;装入计数
reg[2:
0]counta,countb;灯亮的顺序
reg[7:
0]ared,agreen,bred,bgreen;
always@(en)
if(!
en)
begin设置各种灯的预置数
ared<=8'b;
agreen<=8'b;
bred<=8'b;
bgreen<=8'b;
end
always@(posedgeclk)
begin
if(en)
begin
if(!
tempa)
begintempa<=1;
case(counta)控制灯亮的顺序
0:
beginnuma<=agreen;lampag<=1;lampar<=0;counta<=1;end
1:
beginnuma<=ared;lampag<=0;lampar<=1;counta<=0;end
default:
lampar<=1;
endcase
end
elsebegin倒计时
if(numa>8'b)
beginif(numa[3:
0]==0)
beginnuma[3:
0]<=4'b1001;numa[7:
4]<=numa[7:
4]-1;end
elsenuma[3:
0]<=numa[3:
0]-1;
end
if(numa==8'b)tempa<=0;
end
end
elsebeginlampar<=1;lampag<=0;counta<=0;tempa<=0;end
end
always@(posedgeclk)该进程控制B方向的四种灯
begin
if(en)
begin
if(!
tempb)
begintempb<=1;
case(countb)
0:
beginnumb<=bred;lampbr<=1;lampbg<=0;countb<=1;end
1:
beginnumb<=bgreen;lampbr<=0;lampbg<=1;countb<=0;end
default:
lampbg<=1;
endcase
end
elsebegin
if(numb>8'b)倒计时
if(numb[3:
0]==0)
beginnumb[3:
0]<=9;numb[7:
4]<=numb[7:
4]-1;end
elsenumb[3:
0]<=numb[3:
0]-1;
if(numb==2)tempb<=0;
end
end
elsebeginlampbr<=1;lampbg<=0;tempb<=0;countb<=0;end
end
assignfag=(numa>5)?
(lampag?
1:
0):
clk&lampag;主干道绿灯倒数5秒闪耀
assignfbg=(numb>5)?
(lampbg?
1:
0):
clk&lampbg;?
干道绿灯倒数5秒闪耀
endmodule
(2)
moduledecode4_7(
input[3:
0]indec_0,indec_1,indec_2,indec_3,indec_4,indec_5,indec_6,indec_7,
outputreg[6:
0]dout_0,dout_1,dout_2,dout_3,dout_4,dout_5,dout_6,dout_7
);
always@(indec_0orindec_1orindec_2orindec_3orindec_4orindec_5orindec_6orindec_7)
begin
case(indec_0)
4'h1:
dout_0=7'b111_1001;
4'h2:
dout_0=7'b010_0100;||
4'h3:
dout_0=7'b011_0000;51
4'h4:
dout_0=7'b001_1001;||
4'h5:
dout_0=7'b001_0010;
4'h6:
dout_0=7'b000_0010;||
4'h7:
dout_0=7'b111_1000;42
4'h8:
dout_0=7'b000_0000;||
4'h9:
dout_0=7'b001_1000;
4'ha:
dout_0=7'b000_1000;
4'hb:
dout_0=7'b000_0011;
4'hc:
dout_0=7'b100_0110;
4'hd:
dout_0=7'b010_0001;
4'he:
dout_0=7'b000_0110;
4'hf:
dout_0=7'b000_1110;
4'h0:
dout_0=7'b100_0000;
endcase
case(indec_1)
4'h1:
dout_1=7'b111_1001;
4'h2:
dout_1=7'b010_0100;||
4'h3:
dout_1=7'b011_0000;51
4'h4:
dout_1=7'b001_1001;||
4'h5:
dout_1=7'b001_0010;
4'h6:
dout_1=7'b000_0010;||
4'h7:
dout_1=7'b111_1000;42
4'h8:
dout_1=7'b000_0000;||
4'h9:
dout_1=7'b001_1000;
4'ha:
dout_1=7'b000_1000;
4'hb:
dout_1=7'b000_0011;
4'hc:
dout_1=7'b100_0110;
4'hd:
dout_1=7'b010_0001;
4'he:
dout_1=7'b000_0110;
4'hf:
dout_1=7'b000_1110;
4'h0:
dout_1=7'b100_0000;
endcase
case(indec_2)
4'h1:
dout_2=7'b111_1001;
4'h2:
dout_2=7'b010_0100;||
4'h3:
dout_2=7'b011_0000;51
4'h4:
dout_2=7'b001_1001;||
4'h5:
dout_2=7'b001_0010;
4'h6:
dout_2=7'b000_0010;||
4'h7:
dout_2=7'b111_1000;42
4'h8:
dout_2=7'b000_0000;||
4'h9:
dout_2=7'b001_1000;
4'ha:
dout_2=7'b000_1000;
4'hb:
dout_2=7'b000_0011;
4'hc:
dout_2=7'b100_0110;
4'hd:
dout_2=7'b010_0001;
4'he:
dout_2=7'b000_0110;
4'hf:
dout_2=7'b000_1110;
4'h0:
dout_2=7'b100_0000;
endcase
case(indec_3)
4'h1:
dout_3=7'b111_1001;
4'h2:
dout_3=7'b010_0100;||
4'h3:
dout_3=7'b011_0000;51
4'h4:
dout_3=7'b001_1001;||
4'h5:
dout_3=7'b001_0010;
4'h6:
dout_3=7'b000_0010;||
4'h7:
dout_3=7'b111_1000;42
4'h8:
dout_3=7'b000_0000;||
4'h9:
dout_3=7'b001_1000;
4'ha:
dout_3=7'b000_1000;
4'hb:
dout_3=7'b000_0011;
4'hc:
dout_3=7'b100_0110;
4'hd:
dout_3=7'b010_0001;
4'he:
dout_3=7'b000_0110;
4'hf:
dout_3=7'b000_1110;
4'h0:
dout_3=7'b100_0000;
endcase
case(indec_4)
4'h1:
dout_4=7'b111_1001;
4'h2:
dout_4=7'b010_0100;||
4'h3:
dout_4=7'b011_0000;51
4'h4:
dout_4=7'b001_1001;||
4'h5:
dout_4=7'b001_0010;
4'h6:
dout_4=7'b000_0010;||
4'h7:
dout_4=7'b111_1000;42
4'h8:
dout_4=7'b000_0000;||
4'h9:
dout_4=7'b001_1000;
4'ha:
dout_4=7'b000_1000;
4'hb:
dout_4=7'b000_0011;
4'hc:
dout_4=7'b100_0110;
4'hd:
dout_4=7'b010_0001;
4'he:
dout_4=7'b000_0110;
4'hf:
dout_4=7'b000_1110;
4'h0:
dout_4=7'b100_0000;
endcase
case(indec_5)
4'h1:
dout_5=7'b111_1001;
4'h2:
dout_5=7'b010_0100;||
4'h3:
dout_5=7'b011_0000;51
4'h4:
dout_5=7'b001_1001;||
4'h5:
dout_5=7'b001_0010;
4'h6:
dout_5=7'b000_0010;||
4'h7:
dout_5=7'b111_1000;42
4'h8:
dout_5=7'b000_0000;||
4'h9:
dout_5=7'b001_1000;
4'ha:
dout_5=7'b000_1000;
4'hb:
dout_5=7'b000_0011;
4'hc:
dout_5=7'b100_0110;
4'hd:
dout_5=7'b010_0001;
4'he:
dout_5=7'b000_0110;
4'hf:
dout_5=7'b000_1110;
4'h0:
dout_5=7'b100_0000;
endcase
case(indec_6)
4'h1:
dout_6=7'b111_1001;
4'h2:
dout_6=7'b010_0100;||
4'h3:
dout_6=7'b011_0000;51
4'h4:
dout_6=7'b001_1001;||
4'h5:
dout_6=7'b001_0010;
4'h6:
dout_6=7'b000_0010;||
4'h7:
dout_6=7'b111_1000;42
4'h8:
dout_6=7'b000_0000;||
4'h9:
dout_6=7'b001_1000;
4'ha:
dout_6=7'b000_1000;
4'hb:
dout_6=7'b000_0011;
4'hc:
dout_6=7'b100_0110;
4'hd:
dout_6=7'b010_0001;
4'he:
dout_6=7'b000_0110;
4'hf:
dout_6=7'b000_1110;
4'h0:
dout_6=7'b100_0000;
endcase
case(indec_7)
4'h1:
dout_7=7'b111_1001;
4'h2:
dout_7=7'b010_0100;||
4'h3:
dout_7=7'b011_0000;51
4'h4:
dout_7=7'b001_1001;||
4'h5:
dout_7=7'b001_0010;
4'h6:
dout_7=7'b000_0010;||
4'h7:
dout_7=7'b111_1000;42
4'h8:
dout_7=7'b000_0000;||
4'h9:
dout_7=7'b001_1000;
4'ha:
dout_7=7'b000_1000;
4'hb:
dout_7=7'b000_0011;
4'hc:
dout_7=7'b100_0110;
4'hd:
dout_7=7'b010_0001;
4'he:
dout_7=7'b000_0110;
4'hf:
dout_7=7'b000_1110;
4'h0:
dout_7=7'b100_0000;
endcase
end
endmodule
divider
modulediv(
outputrego_clk,输出时钟
inputrst_n,复位
inputi_clk输入时钟
);
parameterN=50_000_000;分频的倍数
parameterM=24_999_999;N2-1
reg[25:
0]cnt;
always@(posedgei_clkornegedgerst_n)
begin
if(!
rst_n)
cnt<=26'b0;
else
begin
if(cnt==N-1)
cnt<=26'b0;
else
cnt<=cnt+26'b1;
end
end
always@(posedgei_clkornegedgerst_n)
begin
if(!
rst_n)
o_clk<=0;
else
begin
if(cnt<=M)
o_clk<=1;
else
o_clk<=0;
end
end
endmodule
modulediv_zh(f,_500HzOut,_1KHzOut,
ncR,CLOCK_50,s);
inputncR,CLOCK_50,s;
output_500HzOut,_1KHzOut,f;
wire_1HzOut,_5HzOut;
assignf=s?
_5HzOut:
_1HzOut;
divn#(.WIDTH(26),.N())
u0(.clk(CLOCK_50),
.rst_n(ncR),
.o_clk(_1HzOut)
);
divn#(.WIDTH(17),.N(100000))
u1(.clk(CLOCK_50),
.rst_n(ncR),
.o_clk(_500HzOut)
);
divn#(.WIDTH(16),.N(50000))
u2(.clk(CLOCK_50),
.rst_n(ncR),
.o_clk(_1KHzOut)
);
divn#(.WIDTH(24),.N())
u3(.clk(CLOCK_50),
.rst_n(ncR),
.o_clk(_5HzOut)
);
endmodule
moduledivn(o_clk,clk,rst_n);
inputclk,rst_n;
outputo_clk;
parameterWIDTH=3;
parameterN=6;
reg[WIDTH-1:
0]cnt_p;
reg[WIDTH-1:
0]cnt_n;
regclk_p;
regclk_n;
assigno_clk=(N==1)?
clk:
(N[0]?
(clk_p|clk_n):
clk_p);
always@(posedgeclkornegedgerst_n)
begin
if(!
rst_n)
cnt_p<=0;
elseif(cnt_p==N-1)
cnt_p<=0;
else
cnt_p<=cnt_p+1;
end
always@(posedgeclkornegedgerst_n)
begin
if(!
rst_n)
clk_p<=0;
elseif(cnt_p<(N>>1))
clk_p<=1;
else
clk_p<=0;
end
always@(negedgeclkornegedgerst_n)
begin
if(!
rst_n)
cnt_n<=0;
elseif(cnt_n==N-1)
cnt_n<=0;
else
cnt_n<=cnt_n+1;
end
always@(negedgeclkornegedgerst_n)
begin
if(!
rst_n)
clk_n<=0;
elseif(cnt_n<(N>>1))
clk_n<=1;
else
clk_n<=0;
end
endmodule
2、生成的波形图:
3、管脚分配:
4、下载过程等的截图和注解:
(1)为下载选择正确的实验板型号
(2)下载使用的BDF电路图:
各部分大图:
(3)开始下载,选择Tools>Programmer,并单击Start.
设计课题3:
多功能数字钟系统(层次化设计),要求用实验箱下载。
(1)基本功能:
60秒—60分—24小时。
(2)扩展功能:
①报时;每小时59分
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- FPGA 毕业 课程设计 报告
![提示](https://static.bdocx.com/images/bang_tan.gif)