Verilog项目设计报拔河游戏机Word文档格式.docx
《Verilog项目设计报拔河游戏机Word文档格式.docx》由会员分享,可在线阅读,更多相关《Verilog项目设计报拔河游戏机Word文档格式.docx(16页珍藏版)》请在冰豆网上搜索。
output[15:
0]LED;
//定义输出
reg[27:
0]Cnt;
regClk_100hz;
regen;
regKey1_n;
regKey1_n_reg;
regKey2_n;
regKey2_n_reg;
reg[3:
0]t;
reg[15:
0]led;
wirekey1,key2;
parameterCNT=28'
d49_999;
(2)分频模块,将Basys3的100M系统时钟分频成为周期为10ms,100Hz频率
always@(posedgeClkorposedgeRst_n)
begin
if(Rst_n)begin
Cnt<
=28'
d0;
Clk_100hz<
=0;
end
elseif(Cnt==CNT)begin
=~Clk_100hz;
else
=Cnt+1'
b1;
(3)按键消抖模块,给每一个按键两个状态,保证按键产生的信号可以消除抖动稳定。
beginif(Rst_n)
beginKey1_n<
Key2_n<
elsebegin
Key1_n<
=Key1_n_reg;
=Key2_n_reg;
always@(*)
if(Cnt==CNT)begin
Key1_n_reg=KEY1;
Key2_n_reg=KEY2;
Key1_n_reg=Key1_n;
Key2_n_reg=Key2_n;
assignkey1=Key1_n&
(~Key1_n_reg);
assignkey2=Key2_n&
(~Key2_n_reg);
(4)比较模块,每当时钟的上升沿,便比较A,B的脉冲个数,即谁按得快,输出就为1,否则就为0
always@(posedgeClk)
beginif(t==4'
d0||t==4'
d14)
en<
=1'
b0;
else
(5)移动模块
always@(posedgeClk_100hzorposedgeRst_n)
begin
if(Rst_n)
t<
=7;
if(en)
case({key1,key2})
2'
b10:
t<
=t+1'
b01:
=t-1'
default:
=t;
endcase
(6)译码模块,将得到的信号t转化为,Led的显示,最后赋值给Led输出端口,并且由数码管显示胜利的一方
case(t)
4'
d0:
led=16'
b0000_0000_0000_0011;
d1:
b0000_0000_0000_0110;
d2:
b0000_0000_0000_1100;
d3:
b0000_0000_0001_1000;
d4:
b0000_0000_0011_0000;
d5:
b0000_0000_0110_0000;
d6:
b0000_0000_1100_0000;
d7:
b0000_0001_1000_0000;
d8:
b0000_0011_0000_0000;
d9:
b0000_0110_0000_0000;
d10:
b0000_1100_0000_0000;
d11:
b0001_1000_0000_0000;
d12:
b0011_0000_0000_0000;
d13:
b0110_0000_0000_0000;
d14:
b1100_0000_0000_0000;
default:
b0000_0000_0000_0000;
endcase
assignLED=led;
endmodule
二、结果与讨论
1、仿真代码
`defineclk_period10//定义时钟周期
moduleBaTB();
regClk;
regRst_n;
regKEY1,KEY2;
wire[15:
project_bau0(
.Clk(Clk),
.Rst_n(Rst_n),
.KEY1(KEY1),
.KEY2(KEY2),
.LED(LED));
initial
beginClk=0;
end
always#(`clk_period/2)Clk=~Clk;
initialbegin
KEY1=0;
KEY2=0;
#(`clk_period*10);
Rst_n=1;
#(`clk_period*10);
Rst_n=0;
KEY1=1;
#(`clk_period*100);
KEY1=1;
KEY1=1;
endmodule
2、仿真波形
可以看到一直给Key1施加高电平时钟信号,Led灯的高电平一直向1方向的led灯方向移动,由此可得仿真成功。
3、问题与分析
在仿真成功以后生成比特流文件时一直显示错误无法成功,之后在请教其他同学以后,共同分析后发现,一开始设计中的数码管模块无法在结束后对应显示,于是便删除了数码管模块,在led移动到一端后便是游戏结束标志。
4、结果
在分析出问题兵解决之后,将程序烧写到fpga开发板上,设计的功能都能实现,于是上板验证也成功。
三、心得体会
一开始接触这个课题的时候,不知道怎么下手,通过其他同学的讲解以及查找资料基本了解了拔河游戏机的设计原理。
通过这次课程设计,我更加感到理论和实际之间的差异很大。
我也越来越强烈地感到要掌握一项技术,唯一的办法也是最好的办法就是实践。
只有通过实践才能将书本上的知识应用,也只有实践才能发现很多问题,真正掌握知识,学以致用。
虽然遇到的问题很多,但是同时得到很多有用的经验。
这些对于以后的学习和工作都有很大的帮助。
四、参考文献
[1]夏宇闻,Verilog数字系统设计教程,北京航天航空大学出版社,2013
[2]王金明,数字系统设计与VerilogHDL,北京电子工业出版社,2009
[3]潘松,EDA技术实用教程,北京科学出版社,2009
附录
实物板级验证图:
1、左边队员胜利
2、右边队员胜利
3、清零重置
4、源代码
module
project_ba(
Clk,Rst_n,KEY1,KEY2,
LED);
input
Clk;
Rst_n;
KEY1;
KEY2;
//定义输入
output
[15:
0]
LED;
reg
[27:
Cnt;
Clk_100hz;
en;
Key1_n;
Key1_n_reg;
Key2_n;
Key2_n_reg;
[3:
t;
led;
wire
key1,key2;
parameter
CNT
=
28'
always@(posedge
Clk
or
posedge
Rst_n)
if(Rst_n)
Cnt
<
Clk_100hz
0;
else
if(Cnt
==
CNT)
~Clk_100hz;
+
1'
begin
Key1_n
Key2_n
Key1_n_reg
Key2_n_reg
assign
key1
&
(~Key1_n_reg);
key2
(~Key2_n_reg);
Rst_n
)
t
7;
b10
:
b01
-
endcase
Clk)
if(t
d0
||
en
led
16'
d1
d2
d3
d4
d5
d6
d7
d8
d9
default
end//译码模块
LED
endmodule
5、测试文件
`defineclk_period10//定义时钟周期
6、管脚约束
set_propertyIOSTANDARDLVCMOS33[get_ports{LED[15]}]
set_propertyIOSTANDARDLVCMOS33[get_ports{LED[14]}]
set_propertyIOSTANDARDLVCMOS33[get_ports{LED[13]}]
set_propertyIOSTANDARDLVCMOS33[get_ports{LED[12]}]
set_propertyIOSTANDARDLVCMOS33[get_ports{LED[11]}]
set_propertyIOSTANDARDLVCMOS33[get_ports{LED[10]}]
set_propertyIOSTANDARDLVCMOS33[get_ports{LED[9]}]
set_propertyIOSTANDARDLVCMOS33[get_ports{LED[8]}]
set_propertyIOSTANDARDLVCMOS33[get_ports{LED[7]}]
set_propertyIOSTANDARDLVCMOS33[get_ports{LED[6]}]
set_propertyIOSTANDARDLVCMOS33[get_ports{LED[5]}]
set_propertyIOSTANDARDLVCMOS33[get_ports{LED[4]}]
set_propertyIOSTANDARDLVCMOS33[get_ports{LED[3]}]
set_propertyIOSTANDARDLVCMOS33[get_ports{LED[2]}]
set_propertyIOSTANDARDLVCMOS33[get_ports{LED[1]}]
set_propertyIOSTANDARDLVCMOS33[get_ports{LED[0]}]
set_propertyPACKAGE_PINL1[get_ports{LED[15]}]
set_propertyPACKAGE_PINP1[get_ports{LED[14]}]
set_propertyPACKAGE_PINN3[get_ports{LED[13]}]
set_propertyPACKAGE_PINP3[get_ports{LED[12]}]
set_propertyPACKAGE_PINU3[get_ports{LED[11]}]
set_propertyPACKAGE_PINW3[get_ports{LED[10]}]
set_propertyPACKAGE_PINV3[get_ports{LED[9]}]
set_propertyPACKAGE_PINV13[get_ports{LED[8]}]
set_propertyPACKAGE_PINV14[get_ports{LED[7]}]
set_propertyPACKAGE_PINU14[get_ports{LED[6]}]
set_propertyPACKAGE_PINU15[get_ports{LED[5]}]
set_propertyPACKAGE_PINW18[get_ports{LED[4]}]
set_propertyPACKAGE_PINV19[get_ports{LED[3]}]
set_propertyPACKAGE_PINU19[get_ports{LED[2]}]
set_propertyPACKAGE_PINE19[get_ports{LED[1]}]
set_propertyPACKAGE_PINU16[get_ports{LED[0]}]
set_propertyPACKAGE_PINW5[get_portsClk]
set_propertyPACKAGE_PINW19[get_portsKEY1]
set_propertyPACKAGE_PINT17[get_portsKEY2]
set_propertyPACKAGE_PINV17[get_portsRst_n]
set_propertyIOSTANDARDLVCMOS33[get_portsClk]
set_propertyIOSTANDARDLVCMOS33[get_portsKEY1]
set_propertyIOSTANDARDLVCMOS33[get_portsKEY2]
set_propertyIOSTANDARDLVCMOS33[get_portsRst_n]