数字系统课程设计辩论赛计时器.docx

上传人:b****8 文档编号:10992063 上传时间:2023-02-24 格式:DOCX 页数:14 大小:5.28MB
下载 相关 举报
数字系统课程设计辩论赛计时器.docx_第1页
第1页 / 共14页
数字系统课程设计辩论赛计时器.docx_第2页
第2页 / 共14页
数字系统课程设计辩论赛计时器.docx_第3页
第3页 / 共14页
数字系统课程设计辩论赛计时器.docx_第4页
第4页 / 共14页
数字系统课程设计辩论赛计时器.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

数字系统课程设计辩论赛计时器.docx

《数字系统课程设计辩论赛计时器.docx》由会员分享,可在线阅读,更多相关《数字系统课程设计辩论赛计时器.docx(14页珍藏版)》请在冰豆网上搜索。

数字系统课程设计辩论赛计时器.docx

数字系统课程设计辩论赛计时器

数字系统设计实验

课程设计

题目:

辩论赛计时器

学生姓名:

文超周李旭11380191138033

班级专业:

11级自动化

指导教师:

潘秀琴

1.实验名称:

辩论赛计时器

2.实验学时:

24学时

3.实验目的:

1、深入了解VerilogHDL语言语法。

2、学会独立思考、设计及实现较大规模的数字电路系统。

4.实验要求

实验报告应包含实验目的、实验原理,设计思路,实验程序,实验结果,实验总结。

其中具体要求为:

1)程序实现模块化设计,写出设计思路,认真标注代码注释;

2)达到正确地运行结果;

3)实验中出现的问题进行详细总结。

5.实验原理:

本实验中将依照现有辩论赛规则,制作一个简易的计时装置。

辩论赛由开篇立论、双方攻辩、攻辩小结、自由辩论和总结陈词五部分组成。

1)开篇立论、攻辩小结、总结陈词部分需一方发言终止后,另一方才允许发言。

2)双方攻辩和自由辩论中,双方需要交替发言,一方发言时,本方计时器工作;另一方计时器处于停滞状态。

本实验中要完成倒数计时,状态控制与过渡,文字提示的显示,按键消抖等功能。

系统正常工作时,发光二极管循环闪烁提醒辩手时间的流逝;八段数码管显示剩余时间;发光数码管显示发言者属于哪一方(正方/反方);拨码开关控制是对正方计时,还是对反方计时;按键1控制计时状态;按键2实现计时状态的转换。

6.实验步骤:

根据实验要求作预习报告。

根据实验需求,进行程序的设计。

根据以前设计的经验,反复调试程序。

调试通过,下载到FPGA开发板上进行实践调试。

完成整个过程,写实验报告。

7.实验结果

8.附录:

modulekeshe(clk,stop,zf,C,R,led_seg,led_dig,ledin,zt,ft);

inputclk,stop,zf,zt,ft;//stop-正方或反方倒计时使能0-有效zf-选择正方或反方1-选择正方0-选择反方zt/ft分别为正方或反方清零

outputC,R,led_seg,led_dig,ledin;//设定点阵管脚C-1亮R-0亮设定LED显示管脚led_seg-1亮,led_dig-0亮,

reg[5:

0]z,f;//z循环控制正方倒计时30-00f循环控制反方倒计时30-00

reg[0:

7]R,ledin;

reg[0:

15]C;

reg[0:

7]led_seg,led_dig;

reg[4:

0]m;

reg[2:

0]n;//计时器

reg[25:

0]i,j;

regtick1,tick2;

regts;

reg[3:

0]zs,zg,fs,fg;//正方十位正方个位反方十位反方个位

integerjjjj;

always@(posedgeclk)//分频

begin

if(i==9999999)

begin

tick1<=~tick1;

i<=0;

end

else

i<=i+1;

end

always@(posedgeclk)

begin

if(j>999)

begin

tick2<=~tick2;

j<=0;

end

else

j<=j+1;

end

always@(posedgetick1)

begin

if(zf)

begin

if(stop==0)//z循环控制正方倒计时30-00

begin

if(z==0)

beginz<=30;zs<=3;zg<=0;end

else

beginz<=z-1;zs<=z/10;zg<=z%10;end

if(zt)//正方倒计时清零操作

beginz<=30;zs<=0;zg<=0;end

end

end

else

begin

if(stop==0)//f循环控制反方倒计时30-00

begin

if(f==0)

beginf<=30;fs<=3;fg<=0;end

else

beginf<=f-1;fs<=f/10;fg<=f%10;end

if(ft)//反方倒计时清零操作

beginf<=30;fs<=0;fg<=0;end

end

end

end

always@(posedgetick2)

begin

case(n)

0:

begin

led_dig<=8'b11011111;

case(zs)//显示正方十位0-3

0:

led_seg<=8'b11111100;

1:

led_seg<=8'b01100000;

2:

led_seg<=8'b11011010;

3:

led_seg<=8'b11110010;

4:

led_seg<=8'b01100110;

5:

led_seg<=8'b10110110;

6:

led_seg<=8'b10111110;

endcase

end

1:

begin

led_dig<=8'b11101111;

case(zg)//显示正方个位0-9

0:

led_seg<=8'b11111100;

1:

led_seg<=8'b01100000;

2:

led_seg<=8'b11011010;

3:

led_seg<=8'b11110010;

4:

led_seg<=8'b01100110;

5:

led_seg<=8'b10110110;

6:

led_seg<=8'b10111110;

7:

led_seg<=8'b11100000;

8:

led_seg<=8'b11111110;

9:

led_seg<=8'b11110110;

endcase

end

2:

begin

led_dig<=8'b11111101;

case(fs)//显示反方十位0-3

0:

led_seg<=8'b11111100;

1:

led_seg<=8'b01100000;

2:

led_seg<=8'b11011010;

3:

led_seg<=8'b11110010;

4:

led_seg<=8'b01100110;

5:

led_seg<=8'b10110110;

6:

led_seg<=8'b10111110;

endcase

end

3:

begin

led_dig<=8'b11111110;

case(fg)//显示反方个位0-9

0:

led_seg<=8'b11111100;

1:

led_seg<=8'b01100000;

2:

led_seg<=8'b11011010;

3:

led_seg<=8'b11110010;

4:

led_seg<=8'b01100110;

5:

led_seg<=8'b10110110;

6:

led_seg<=8'b10111110;

7:

led_seg<=8'b11100000;

8:

led_seg<=8'b11111110;

9:

led_seg<=8'b11110110;

endcase

end

endcase

if(n==4)

n<=0;

else

n<=n+1;

end

always@(posedgetick2)

begin

if(zf&&z>5)//显示正方

begin

case(m)

0:

beginC=16'b0001000000000000;R=8'b01111111;end

1:

beginC=16'b0000100001111110;R=8'b10111111;end

2:

beginC=16'b0111111100001000;R=8'b11011111;end

3:

beginC=16'b0000100000101000;R=8'b11101111;end

4:

beginC=16'b0001111000101110;R=8'b11110111;end

5:

beginC=16'b0010001000101000;R=8'b11111011;end

6:

beginC=16'b0100001000101000;R=8'b11111101;end

7:

beginC=16'b1000011011111111;R=8'b11111110;end

endcase

if(m==7)

m<=0;

else

m<=m+1;

end

elseif(zf==0&&f>5)//显示反方

begin

case(m)

0:

beginC=16'b0001000001111110;R=8'b01111111;end

1:

beginC=16'b0000100001000000;R=8'b10111111;end

2:

beginC=16'b0111111101111110;R=8'b11011111;end

3:

beginC=16'b0000100001100010;R=8'b11101111;end

4:

beginC=16'b0001111001010100;R=8'b11110111;end

5:

beginC=16'b0010001001001000;R=8'b11111011;end

6:

beginC=16'b0100001001010100;R=8'b11111101;end

7:

beginC=16'b1000011001000011;R=8'b11111110;end

endcase

if(m==7)

m<=0;

else

m<=m+1;

end

elseif(zf==1&&z<6)//正方闪烁

begin

if(jjjj<20000)

begin

jjjj<=jjjj+1;

end

else

begin

jjjj<=0;

end

if(jjjj<10000)

begin

case(m)

0:

beginC=16'b0001000000000000;R=8'b01111111;end

1:

beginC=16'b0000100001111110;R=8'b10111111;end

2:

beginC=16'b0111111100001000;R=8'b11011111;end

3:

beginC=16'b0000100000101000;R=8'b11101111;end

4:

beginC=16'b0001111000101110;R=8'b11110111;end

5:

beginC=16'b0010001000101000;R=8'b11111011;end

6:

beginC=16'b0100001000101000;R=8'b11111101;end

7:

beginC=16'b1000011011111111;R=8'b11111110;end

endcase

if(m==7)

m<=0;

else

m<=m+1;

end

else

begin

C=16'b00000000000000000;R=8'b00000000;

end

end

elseif(zf==0&&f<6)//反方闪烁

begin

if(jjjj<20000)

begin

jjjj<=jjjj+1;

end

else

begin

jjjj<=0;

end

if(jjjj<9999)

begin

case(m)

0:

beginC=16'b0001000001111110;R=8'b01111111;end

1:

beginC=16'b0000100001000000;R=8'b10111111;end

2:

beginC=16'b0111111101111110;R=8'b11011111;end

3:

beginC=16'b0000100001100010;R=8'b11101111;end

4:

beginC=16'b0001111001010100;R=8'b11110111;end

5:

beginC=16'b0010001001001000;R=8'b11111011;end

6:

beginC=16'b0100001001010100;R=8'b11111101;end

7:

beginC=16'b1000011001000011;R=8'b11111110;end

endcase

if(m==7)

m<=0;

else

m<=m+1;

end

else

begin

C=16'b00000000000000000;R=8'b00000000;

end

end

end

always@(posedgetick1)

begin

if(zf)

begin

ledin=8'b00001111;

if(zs==0&&zg<=5)

begin

case(ts)

0:

beginledin=8'b00001111;end

1:

beginledin=8'b00000000;end

endcase

end

end

else

begin

ledin=8'b11110000;

if(fs==0&&fg<=5)

begin

case(ts)

0:

beginledin=8'b11110000;end

1:

beginledin=8'b00000000;end

endcase

end

end

ts<=ts+1;

if(ts==1)

ts<=0;

end

endmodule

 

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

当前位置:首页 > 高等教育 > 经济学

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

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