FPGA课程设计.docx

上传人:b****6 文档编号:8863419 上传时间:2023-02-02 格式:DOCX 页数:25 大小:793.37KB
下载 相关 举报
FPGA课程设计.docx_第1页
第1页 / 共25页
FPGA课程设计.docx_第2页
第2页 / 共25页
FPGA课程设计.docx_第3页
第3页 / 共25页
FPGA课程设计.docx_第4页
第4页 / 共25页
FPGA课程设计.docx_第5页
第5页 / 共25页
点击查看更多>>
下载资源
资源描述

FPGA课程设计.docx

《FPGA课程设计.docx》由会员分享,可在线阅读,更多相关《FPGA课程设计.docx(25页珍藏版)》请在冰豆网上搜索。

FPGA课程设计.docx

FPGA课程设计

F

P

G

A

专业:

12级电子信息工程

班级:

一班

姓名:

李威

学号:

120101011109

指导老师:

祝宏

制作日期:

2014年11月20号

1、任务书:

第九周(10月27号至11月2号):

一百进制可逆计数器的模块原理设计,代码编写,波形仿真,代码调试,模块封装以及管脚分配任务。

第十周(11月3号至11月9号):

完成第二道设计课题(交通灯)和第三道设计课题(多功能数字钟)模块原理设计,代码编写,波形仿真,代码调试,模块封装以及管脚分配任务。

第十一周(11月10号至11月16号):

在实验室使用ED2-115开发板进行功能模块实际演示。

第十二周(11月17号至11月23号):

完成对FPGA课程设计报告的书写。

2、报告内容:

设计课题一、一百进制可逆计数器

1)实验要求:

设计一个可控的100进制可逆计数器,要求用DE2-115开发板下载。

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

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

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

clr

plus

minus

功能

0

×

×

复位为0

1

1

0

递增计数

1

0

1

递减计数

1

1

1

暂停计数

图1-1

2)信号定义:

分频模块:

ncR:

暂停 ; CLOCK_50:

500Hz分频 ;  

s:

1000Hz分频;

译码模块:

indec_0~7:

译码输入; outdec_0~7:

译码输出; 

计数模块:

clk :

脉冲 ; clear复位端; plus:

加计数使能端;          

minus:

减计 数使能端 ; cin:

计数使能端 ;

3)主要模块verilog代码及注示:

  

modulecount100(clk,clear,plus,minus,qout,cin);

inputclk,clear,plus,minus,cin;//输入由开关控制拨上为1,拨下为0

output[7:

0]qout;

reg[7:

0]qout;

always@(posedgeclk)

beginif(clear)qout<=0;//如果复位端为1则执行复位功能

elseif((plus)&&(!

minus))//若plus为1且minus为0时加计数

begin

if(cin)//使能端为1时才进行计数

begin

if(qout[3:

0]==9)//模为100的计数

begin

qout[3:

0]<=0;

if(qout[7:

4]==9)qout[7:

4]<=0;

elseqout[7:

4]<=qout[7:

4]+1;

end

elseqout[3:

0]<=qout[3:

0]+1;

end

end

elseif((!

plus)&&(minus))//若plus为0且minus为1进行减计数

beginif(cin)

if(qout[3:

0]==0)

begin

qout[3:

0]<=9;

if(qout[7:

4]==0)qout[7:

4]<=9;

elseqout[7:

4]<=qout[7:

4]-1;

end

elseqout[3:

0]<=qout[3:

0]-1;

end

Else//若plus和minus均为1则暂停

qout<=qout;

end

endmodule

 

4)模块封装图:

5)对应各模块功能仿真波形(数据分析)分析及结论

图1-2

如图1-2所示当复位端clear为1时输出qout为0,当复位端clear为0时计数器开始正常计数

us

图1-3

如图1-3所示当复位端clear为0且使能端cin为1,plus为1,minus为0时进行加计数

图1-4

如图1-4所示当复位端clear为0且使能端cin为1,plus为0,minus为1时进行减计数.

6)选用芯片型号、定义芯片管脚号

选用芯片型号:

CycloneIVE

芯片管脚:

CLOCK_50

Input

PIN_Y2

2

B2_N0

3.3-V

SW[4]

Input

PIN_AB27

5

B5_N1

2.5V

SW[3]

Input

PIN_AD27

5

B5_N2

2.5V

SW[2]

Input

PIN_AC27

5

B5_N2

2.5V

SW[1]

Input

PIN_AC28

5

B5_N2

2.5V

SW[0]

Input

PIN_AB28

5

B5_N1

2.5V

HEX0[6]

Output

PIN_H22

6

B6_N0

2.5V

HEX0[5]

Output

PIN_J22

6

B6_N0

2.5V

HEX0[4]

Output

PIN_L25

6

B6_N1

2.5V

HEX0[3]

Output

PIN_L26

6

B6_N1

2.5V

HEX0[2]

Output

PIN_E17

7

B7_N2

2.5V

HEX0[1]

Output

PIN_F22

7

B7_N0

2.5V

HEX0[0]

Output

PIN_G18

7

B7_N2

2.5V

HEX1[6]

Output

PIN_U24

5

B5_N0

2.5V

HEX1[5]

Output

PIN_U23

5

B5_N1

2.5V

HEX1[4]

Output

PIN_W25

5

B5_N1

2.5V

HEX1[3]

Output

PIN_W22

5

B5_N0

2.5V

HEX1[2]

Output

PIN_W21

5

B5_N1

2.5V

HEX1[1]

Output

PIN_Y22

5

B5_N0

2.5V

HEX1[0]

Output

PIN_M24

6

B6_N2

2.5V

表1-2

设计课题二、交通灯

1)实验要求:

交通灯控制系统,要求用DE2-115开发板下载。

(1)设计一个十字路口交通信号灯的定时控制电路。

要求红、绿灯按一定的规律亮和灭,绿灯亮时,表示该车道允许通行;红灯亮时,该车道禁止通行。

并在亮灯期间进行倒计时,并将运行时间用数码管显示出来。

(2)要求主干道每次通行时间为40秒,支干道每次通行时间为30秒。

每次变换运行车道前绿灯闪烁,持续时间为5秒。

即车道要由主干道转换为支干道时,主干道在通行时间只剩5秒钟时,绿灯闪烁5秒显示,支干道仍为红灯,以便主干道上已过停车线的车继续通行,未过停车线的车停止通行。

同理,当车道由支干道转换为主干道时,支干道绿灯闪烁显示5秒钟,主干道仍为红灯。

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

注:

TimeH、TimeL分别表示计数器的高位和低位

HG、HR分别表示主干道的绿灯和红灯

CG、CR分别表示支干道的绿灯和红灯

两个定时时间:

绿灯闪烁和绿灯停止闪烁

4个状态:

S0:

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

S1:

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

S2:

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

S3:

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

2)顶层逻辑电路图组成、信号定义及原理简单叙述

图2-1

3)信号定义:

分频模块:

ncR:

暂停CLOCK_50:

500Hz分频s:

1000Hz分频

译码模块:

indec_0~7:

译码输入outdec_0~7:

译码输出

功能模块:

en:

脉冲acount:

主干道计数器bcount:

支干道计数器lampa0:

主干道绿灯lampa1:

主干道红灯lampb0:

支干道绿灯lampb1:

支干道红灯

4)交通灯代码:

moduletraffic(clk,en,lampa0,lampb0,lampa1,lampb1,acount,bcount);

output[7:

0]acount,bcount;//acount代表主干道计数器bcount代表支干道计数器

outputlampa0,lampb0,lampa1,lampb1;//0代表绿灯1代表红灯a代表主干道b代表支干道

inputclk,en;

reg[2:

0]counta,countb;

reg[7:

0]numa,numb;

regtempa,tempb;

reg[7:

0]ared,agreen,bred,bgreen;

reglampa0,lampb0,lampa1,lampb1;

always@(en)

if(!

en)//设置灯亮的时间

begin

ared<=8'h30;//主干道红灯亮30秒

agreen<=8'h40;//主干道绿灯亮40秒

bred<=8'h40;//支干道红灯亮40秒

bgreen<=8'h30;//支干道绿灯亮30秒

end

assignacount=numa;//设置中间变量进行计数

assignbcount=numb;

always@(posedgeclk)

begin

if(en)

begin//设置中间变量使计数可以循环进行

if(!

tempa)//若tenpa为0则继续往下执行

begin

tempa<=1;

case(counta)//用counta作为主干道状态选择0则亮绿灯1则亮红灯

0:

beginnuma<=agreen;lampa0<=1;lampa1<=0;counta<=1;end

1:

beginnuma<=ared;lampa0<=0;lampa1<=1;counta<=0;end

endcase

end

elsebegin//开始倒计时

if(numa>1)

if(numa[3:

0]==0)begin

numa[3:

0]<=4'b1001;

numa[7:

4]<=numa[7:

4]-1;

end

elsenuma[3:

0]<=numa[3:

0]-1;

if(numa==2)tempa<=0;

end

end

elsebegin

lampa0<=0;lampa1<=1;tempa<=0;counta<=0;

end

if((numa<7)&&(counta==1)&&(numa>1))lampa0<=~lampa0;//最后5秒/绿灯闪烁

end

always@(posedgeclk)

begin

if(en)

begin

if(!

tempb)//设置中间变量使计数可以循环进行

begin

tempb<=1;

case(countb)//用countb作为支干道状态选择0则亮红灯1则亮绿灯

0:

beginnumb<=bred;lampb0<=0;lampb1<=1;countb<=1;end

1:

beginnumb<=bgreen;lampb0<=1;lampb1<=0;countb<=0;end

endcase

end

elsebegin

if(numb>1)//开始倒计时

if(numb[3:

0]==0)begin

numb[3:

0]<=4'b1001;

numb[7:

4]<=numb[7:

4]-1;

end

elsenumb[3:

0]<=numb[3:

0]-1;

if(numb==2)tempb<=0;

end

end

elsebegin

lampb0<=0;lampb1<=1;tempb<=0;countb<=0;

end

if((numb<7)&&(numb>1)&&(lampa1==1))lampb0<=~lampb0;//最后5秒绿灯闪烁

end

endmodule

 

5)模块封装图:

6)对应各模块功能仿真波形(数据分析)分析及结论

图2-2

如图2-2所示主干道绿灯(lampa0)亮40秒(acount)同时支干道红灯(lampb1)亮,最后5秒主干道绿灯闪烁,然后红绿灯转换。

图2-3

如图2-3所示支干道绿灯(lampb0)亮30秒(bcount)同时主干道红灯(lampb1)亮30秒,最后5秒支干道绿灯闪烁,然后红绿灯转换,最后如上述进行依次循环。

7)选用芯片型号、定义芯片管脚号(列表格示意)及简述下载过程

选用芯片型号:

CycloneIVE

芯片管脚:

CLOCK_50

Input

PIN_Y2

2

B2_N0

3.3-V

HEX0[6]

Output

PIN_H22

6

B6_N0

2.5V

HEX0[5]

Output

PIN_J22

6

B6_N0

2.5V

HEX0[4]

Output

PIN_L25

6

B6_N1

2.5V

HEX0[3]

Output

PIN_L26

6

B6_N1

2.5V

HEX0[2]

Output

PIN_E17

7

B7_N2

2.5V

HEX0[1]

Output

PIN_F22

7

B7_N0

2.5V

HEX0[0]

Output

PIN_G18

7

B7_N2

2.5V

HEX1[6]

Output

PIN_U24

5

B5_N0

2.5V

HEX1[5]

Output

PIN_U23

5

B5_N1

2.5V

HEX1[4]

Output

PIN_W25

5

B5_N1

2.5V

HEX1[3]

Output

PIN_W22

5

B5_N0

2.5V

HEX1[2]

Output

PIN_W21

5

B5_N1

2.5V

HEX1[1]

Output

PIN_Y22

5

B5_N0

2.5V

HEX1[0]

Output

PIN_M24

6

B6_N2

2.5V

HEX2[6]

Output

PIN_W28

5

B5_N1

2.5V

HEX2[5]

Output

PIN_W27

5

B5_N1

2.5V

HEX2[4]

Output

PIN_Y26

5

B5_N1

2.5V

HEX2[3]

Output

PIN_W26

5

B5_N1

2.5V

HEX2[2]

Output

PIN_Y25

5

B5_N1

2.5V

HEX2[1]

Output

PIN_AA26

5

B5_N1

2.5V

HEX2[0]

Output

PIN_AA25

5

B5_N1

2.5V

HEX3[6]

Output

PIN_Y19

4

B4_N0

3.3-V

HEX3[5]

Output

PIN_AF23

4

B4_N0

3.3-V

HEX3[4]

Output

PIN_AD24

4

B4_N0

3.3-V

HEX3[3]

Output

PIN_AA21

4

B4_N0

3.3-V

HEX3[2]

Output

PIN_AB20

4

B4_N0

3.3-V

HEX3[1]

Output

PIN_U21

5

B5_N0

2.5V

HEX3[0]

Output

PIN_V21

5

B5_N1

2.5V

LEDG[1]

Output

PIN_E22

7

B7_N0

2.5V

LEDG[0]

Output

PIN_E21

7

B7_N0

2.5V

LEDR[1]

Output

PIN_F19

7

B7_N0

2.5V

LEDR[0]

Output

PIN_G19

7

B7_N2

2.5V

SW[1]

Input

PIN_AC28

5

B5_N2

2.5V

SW[0]

Input

PIN_AB28

5

B5_N1

2.5V

表2-1

设计课题三、多功能数字钟

1)实验要求:

多功能数字钟系统(层次化设计),要求用DE2-115开发板下载。

(1)基本功能:

60秒—60分—24小时。

(2)扩展功能:

①报时;每小时59分51,53,55,57秒低频报时,59秒高频报时。

②校时校分;

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

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

2)信号定义:

分频模块:

ncR:

暂停CLOCK_50:

500Hz分频s:

1000Hz分频

译码模块:

indec_0~7:

译码输入outdec_0~7:

译码输出

功能模块clk:

原始脉冲clks,clkm:

秒钟、分钟的进位脉冲

light:

背景灯remain1、remain2:

整点报时信号

outh、outm、outs:

时钟、分钟、秒钟输出端

alarm:

闹钟输出

3)功能模块代码、封装图以及仿真波形图:

时钟模块代码

modulehours(clkm,outh,light);//时钟模块:

含24进制以及背景灯时段控制

outputouth,light;//输出端口:

outh(时钟显示),light(背景灯)

reg[7:

0]outh;reglight;

inputclkm;//输入端口:

clkm(由分钟进位产生的时钟信号)

always@(posedgeclkm)

begin

/************二十四进制的实现(始)**************/

if(outh[3:

0]<9)//低位小于9的时候

begin

if(outh[3:

0]==3&&outh[7:

4]==2)//到达23后下一个状态为0

begin

outh[3:

0]=0;

outh[7:

4]=0;

end

else

outh[3:

0]=outh[3:

0]+1;//未到23,低位加一

end

else//低位等于9的时候

begin

outh[7:

4]=outh[7:

4]+1;//高位加1

outh[3:

0]=0;//低位为0

end

/***********二十四进制的实现(终)*************/

/*********背景灯时段控制的实现***********/

if(outh[7:

4]<1)//高位为0的时候(0:

00~9:

59)

begin

if(outh[3:

0]<6)//低位小于6(0:

00~5:

59)背景灯亮

light=1;

else

light=0;

end

else//当高位不小于1(10:

00~23:

59)

begin

if(outh[3:

0]>=8||outh[7:

4]>1)

//当高位大于1(20:

00~23:

59)或低位大于等于8(18:

00~19:

59)背景灯亮

light=1;

else

light=0;

end

end

endmodule

分钟模块代码

moduleminute(clks,outm,clkm,sound);//分钟模块:

含60时进制以及整点报时

outputoutm,clkm,sound;//输出端口:

outm(分钟显示),clkm(分钟进位信号)sound(整点报时信号(59分))

regclkm,sound;

reg[7:

0]outm;

inputclks;//输入端口:

clks(秒钟进位产生的时钟信号)

always@(posedgeclks)

begin

if(outm[3:

0]==9)//当低位为9

begin

if(outm[3:

0]==9&&outm[7:

4]==5)//如果此时为59分,下个时钟上升沿来临

begin//分钟归0,产生进位信号,整点报时信号清零

outm[3:

0]=0;

outm[7:

4]=0;

clkm=1;

sound=0;

end

else//否则高位加1,低位为0

begin

outm[7:

4]=outm[7:

4]+1;

outm[3:

0]=0;

end

end

else//如果低位不为(小于)9,

begin

if(outm[3:

0]==8&&outm[7:

4]==5)//如果此时是58分,当下一个时钟上升沿来临

begin

outm[3:

0]=outm[3:

0]+1;//低位加1(59),整点报时为1,进位信号清零

sound=1;

clkm=0;

end

else//此时不是58分,低位加1,进位信号清零

begin

outm[3:

0]=outm[3:

0]+1;

clkm=0;

end

end

end

endmodule

秒钟模块代码

modulesecond(clks,outs,clk,sound,remain1,remain2);//秒钟模块

outputouts,clks,remain1,remain2;//remain1,remain2为整点报时的两种信号

regclks,remain1,remain2;

reg[7:

0]outs;

inputclk,sound;

always@(posedgeclk)

begin

if(outs[3:

0]==9)

begin

if(outs[3:

0]==9&&outs[7:

4]==5)

begin

outs[3:

0]=0;

outs[7:

4]=0;

clks=clks+1;

end

else

begin

outs[7:

4]=outs[7:

4]+1;

outs[3:

0]=0;

end

end

else

begin

outs[3:

0]=outs[3:

0]+1;

clks=0;

end

if(sound)//当分钟到达59分,sound信号来临

begin

if(outs[7:

4]==5&&outs[3:

0]>0&&outs[3:

0]<9)//51~58秒信号灯1开始闪烁

remain1=~remain1;

elseif(outs[7:

4]==5&&outs[3:

0]==9)//59秒信号灯2开始闪烁

remain2=1;

else

begin

remain1=0;

remain2=0;

end

end

end

endmodule

时钟电路部分的各模块封装图:

 

时钟电路部分的顶层模块结构:

校时校分功能模块

校时校分功能可以通过增大时钟和分钟的时钟信号频率来实现,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 学科竞赛

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1