使用Verilog语言编写的投篮机模块Word下载.docx

上传人:b****5 文档编号:19107939 上传时间:2023-01-03 格式:DOCX 页数:9 大小:64.07KB
下载 相关 举报
使用Verilog语言编写的投篮机模块Word下载.docx_第1页
第1页 / 共9页
使用Verilog语言编写的投篮机模块Word下载.docx_第2页
第2页 / 共9页
使用Verilog语言编写的投篮机模块Word下载.docx_第3页
第3页 / 共9页
使用Verilog语言编写的投篮机模块Word下载.docx_第4页
第4页 / 共9页
使用Verilog语言编写的投篮机模块Word下载.docx_第5页
第5页 / 共9页
点击查看更多>>
下载资源
资源描述

使用Verilog语言编写的投篮机模块Word下载.docx

《使用Verilog语言编写的投篮机模块Word下载.docx》由会员分享,可在线阅读,更多相关《使用Verilog语言编写的投篮机模块Word下载.docx(9页珍藏版)》请在冰豆网上搜索。

使用Verilog语言编写的投篮机模块Word下载.docx

4、计时模块—初始化之后开始倒计时,每秒递减

5、计数模块—每次投中球,计数加一

三、五个模块的具体完成过程:

在上完理论课之后,我们对Verilog和VHDL语言有了初步的了解,老师告诉我们这门课的关键在于自己的动手实践,于是我们实验小组着手开始了投篮机的设计实践。

首先通过查阅老师给的课件和网上的一些资料,熟悉了一下Quartusii的操作流程,并对两种硬件描述语言有了一个更深的了解,但同时也遇到很多不明白的地方,通过向老师的咨询,对投篮机模块有了一个感性的认识,并准备采用分解模块的方法,进行初步的实践。

随后我们着手进行实现投篮机功能所需模块代码的编写。

起初,我们简单的认为,投篮机无非就是一个计数模块,一个倒计时模块,因此我们只编写这两个模块的代码。

如下:

计数模块:

moduleCounter99(LED,keytouch,clr);

inputkeytouch,clr;

output[7:

0]LED;

reg[7:

always@(posedgekeytouchornegedgeclr)

begin

if(!

clr)

LED<

=8'

h00;

else

if(LED[3:

0]==4'

d9)

begin

LED[3:

0]<

=4'

d0;

if(LED[7:

4]==9)

LED[7:

4]=4'

else

4]<

=LED[7:

4]+1'

b1;

end

else

=LED[3:

0]+1'

end

endmodule

计时模块:

moduleBCD_cnt59(qout,clktouch,reset);

0]qout;

0]qout;

inputclktouch,reset;

always@(posedgeclktouchornegedgereset)

if(!

reset)

qout<

=0;

else

if(qout[3:

d0)

qout[3:

=9;

if(qout[7:

4]==0)

qout[7:

=5;

else

4]=qout[7:

4]-1'

elseqout[3:

=qout[3:

0]-1'

endmodule

通过在Quartusii上编译,运行,波形仿真,无误。

波形图如下:

 

图1Counter99功能仿真波形图

图2BCD_59功能仿真波形图

经过仔细观察开发板,发现KX-7C5T00578型号开发板只有三个数码管,其中有两个直接是BCD形式的,有一个是七段形式的,还少一个数码管,我们决定用LED灯来代替倒计时的十位数字,七段数码管显示倒计时的个位数字,另外两个数码管分别显示计数器的十位、个位。

为此我们还需要编写译码器模块。

经过几次改写,译码器代码编写成功如下:

七段译码模块:

moduleBCD1(in,LED);

output[4:

input[3:

0]in;

reg[4:

always@(in)

case(in)

4'

d0:

LED=5'

b00000;

d1:

b10000;

d2:

b11000;

d3:

b11100;

d4:

b11110;

d5:

b11111

default:

bx;

endcase

对LED灯的译码:

moduleBCD2(in,LED);

output[6:

reg[6:

LED=7'

b1111110;

b0110000;

b1101101;

b1111001;

b0110011;

b1011011;

d6:

b1011111;

d7:

b1110000;

d8:

b1111111;

d9:

b1111011;

开发板系统时钟是20MHz,而计数器采用的是按键触发,考虑到按键一下的平均时间是几个毫秒,所以我们需要把系统时钟分频到1KHz,所以这里就要用到分频模块和按键消抖模块。

在老师的指导下,我们写出了这两个程序,如下:

分频模块(20MHz——1KHz):

moduleclk_div1(clk_20M,clk1k);

inputclk_20M;

outputclk1k;

regR_clk1k=0;

assignclk1k=R_clk1k;

reg[15:

0]counter=0;

always@(posedgeclk_20M)

if(counter<

=19999)

counter<

=counter+1;

end

=9999)

R_clk1k<

=1;

end

endmodule

按键消抖模块:

modulesample(keyout,clk,keyin);

inputclk,keyin;

outputkeyout;

reg[3:

0]samp_count;

regkeyout;

initial

samp_count<

b0000;

always@(posedgeclk)

samp_count[3:

1]<

=samp_count[2:

0];

samp_count[0]<

=keyin;

if(samp_count==4'

b1111)

keyout<

=1'

b0;

经过这几个步骤,采用按键触发的计时器模块就能成功运行了。

考虑到倒计时是每秒数值减一,我们还必须利用系统时钟产生秒信号。

之前已经将20MHz时钟分频到1KHz,我们还需要继续分频,把1KHz时钟分频到1Hz,以产生秒时钟。

程序如下:

分频模块(1KHz——1Hz):

moduleclk_div2(inclk,outclk);

inputinclk;

outputoutclk;

regoutclk;

integerN=1000;

integerk;

always@(posedgeinclk)

if(k<

N/2)

outclk=1'

k=k+1;

if(k==N)

k=0;

至此,我们把所有的代码编写完毕。

我们将功能需求转换为器件模块图。

确定模块名称与每个模块的I/O端口名称,并确定模块之间的连接关系。

全部连接好并且成功分配好管脚的图如下:

图3核心控制模块图

此处需要注意分配管脚完成后一定要再编译一次,确认无误后把程序下载到开发板中。

实验结果:

在老师的指点下,成功的使用硬件描述语言编写出投篮机的功能代码,并实现了功能的仿真,达到了预期的设计实践的目的。

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

当前位置:首页 > 求职职场 > 简历

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

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