(完整版)辩论赛计时器
- 格式:ppt
- 大小:69.47 MB
- 文档页数:15
数字系统课程设计题目:辩论赛计时器专业:计算机科学与技术班级: 09计算机一班姓名:冯帆张琪学号:冯帆(0936008)张琪(0936036)指导老师:潘秀琴一、实验名称辩论赛计时器的设计二、实验目的1、深入了解V erilog HDL语言语法2、学会独立思考、设计及实现较大规模的数字电路系统三、实验仪器设备/环境/器材PC机+ quartus软件四、实验原理本实验中将依照现有辩论赛规则,制作一个简易的计时装置。
辩论赛由开篇立论、双方攻辩、攻辩小结、自由辩论和总结陈词五部分组成。
1)开篇立论、攻辩小结、总结陈词部分需一方发言终止后,另一方才允许发言。
2)双方攻辩和自由辩论中,双方需要交替发言,一方发言时,本方计时器工作;另一方计时器处于停滞状态。
本实验中要完成倒数计时,状态控制与过渡,文字提示的显示,按键消抖等功能。
系统正常工作时,发光二极管循环闪烁提醒辩手时间的流逝;八段数码管显示剩余时间;发光数码管显示发言者属于哪一方(正方/反方);拨码开关控制是对正方计时,还是对反方计时;按键1控制计时状态;按键2实现计时状态的转换。
五、实验步骤1) 根据实验要求作预习报告。
2) 根据实验需求,进行程序的设计。
3) 根据以前设计的经验,反复调试程序。
4) 调试通过,下载到FPGA开发板上进行实践调试。
程序如下://`include "hz.v"module traffic(clk,zof,dg,ds,la,lb,enable,m,dr,dc);input clk;input zof,enable;input [0:2]m;output [7:0]dr;output [0:7] dc;output la,lb;output [0:7] dg,ds;reg la,lb;reg [0:7] dg,ds;reg disj;wire conj;integer coni,disi;reg [0:6]set,ag,am,ad,bg,bm,bd;reg [0:7] a,b;reg [7:0]dr;reg [0:7]dc;wire [0:2]m;integer c;/*------------------分频模块------------------*/hz hzz(.clk(clk),.conj(conj));//控制显示的分频信号always @(posedge clk)beginif(disi>9999)begindisj<=~disj;disi<=0;endelsedisi<=disi+1;end/*----------------------倒计时模块-------------------------------*/ always@(posedge conj)beginif(enable)beginif(zof)beginif(a<=0)a<=180;elsea<=a-1;endelsebeginif(b<=0)b<=180;elseb<=b-1;endendend/*-------------------------闪灯显示控制------------------------------------*/ always@(posedge clk)beginif(zof)begin la<=1'b1;lb<=1'b0;endelsebegin la<=1'b0;lb<=1'b1;endend/*--------------------数码管显示控制---------------------------------*/always@(posedge clk)beginif(enable)beginif(zof)beginag<=a/100;am<=(a-ag*100)/10;ad<=a%10;endelsebeginbg<=b/100;bm<=(b-bg*100)/10;bd<=b%10;endendend/*------------------------数码管显示------------------------------------*/always@(posedge disj)begincase (set)0:begincase(ad)0:begin dg<=8'b11111100;ds<=8'b11101111; end //a方向个位显示01:begin dg<=8'b01100000;ds<=8'b11101111; end //12:begin dg<=8'b11011010;ds<=8'b11101111; end //23:begin dg<=8'b11110010;ds<=8'b11101111; end //34:begin dg<=8'b01100110;ds<=8'b11101111; end //45:begin dg<=8'b10110110;ds<=8'b11101111; end //56:begin dg<=8'b10111110;ds<=8'b11101111; end //67:begin dg<=8'b11100000;ds<=8'b11101111; end //78:begin dg<=8'b11111110;ds<=8'b11101111; end //89:begin dg<=8'b11110110;ds<=8'b11101111; end //9endcaseset<=set+1;end1:begincase(am)0:begin dg<=8'b11111100;ds<=8'b11011111; end //a方向十位显示01:begin dg<=8'b01100000;ds<=8'b11011111; end //显示12:begin dg<=8'b11011010;ds<=8'b11011111; end //显示23:begin dg<=8'b11110010;ds<=8'b11011111; end //34:begin dg<=8'b01100110;ds<=8'b11011111; end //45:begin dg<=8'b10110110;ds<=8'b11011111; end //56:begin dg<=8'b10111110;ds<=8'b11011111; end //67:begin dg<=8'b11100000;ds<=8'b11011111; end //78:begin dg<=8'b11111110;ds<=8'b11011111; end //89:begin dg<=8'b11110110;ds<=8'b11011111; endendcaseset<=set+1;end2:begincase(ag)0:begin dg<=8'b11111100;ds<=8'b10111111; end //a方向十位显示01:begin dg<=8'b01100000;ds<=8'b10111111; end //显示1 endcaseset<=set+1;end3:begincase(bd)0:begin dg<=8'b11111100;ds<=8'b11111110; end //b方向个位显示01:begin dg<=8'b01100000;ds<=8'b11111110; end //12:begin dg<=8'b11011010;ds<=8'b11111110; end //23:begin dg<=8'b11110010;ds<=8'b11111110; end //34:begin dg<=8'b01100110;ds<=8'b11111110; end //45:begin dg<=8'b10110110;ds<=8'b11111110; end //56:begin dg<=8'b10111110;ds<=8'b11111110; end //67:begin dg<=8'b11100000;ds<=8'b11111110; end //78:begin dg<=8'b11111110;ds<=8'b11111110; end //89:begin dg<=8'b11110110;ds<=8'b11111110; end //9endcaseset<=set+1;end4:begincase(bm)0:begin dg<=8'b11111100;ds<=8'b11111101; end //b方向十位显示01:begin dg<=8'b01100000;ds<=8'b11111101; end //显示12:begin dg<=8'b11011010;ds<=8'b11111101; end //显示23:begin dg<=8'b11110010;ds<=8'b11111101; end //34:begin dg<=8'b01100110;ds<=8'b11111101; end //45:begin dg<=8'b10110110;ds<=8'b11111101; end //56:begin dg<=8'b10111110;ds<=8'b11111101; end //67:begin dg<=8'b11100000;ds<=8'b11111101; end //78:begin dg<=8'b11111110;ds<=8'b11111101; end //89:begin dg<=8'b11110110;ds<=8'b11111101; end //9endcaseset<=set+1;end5:begincase(bg)0:begin dg<=8'b11111100;ds<=8'b11111011; end //b方向十位显示0 1:begin dg<=8'b01100000;ds<=8'b11111011; end //显示1endcaseset<=set+1;end6:beginif(m==3'b001)begin dg<=8'b01100000;ds<=8'b01110111; endelse if(m==3'b010)begin dg<=8'b11011010;ds<=8'b01110111; endelse if(m==3'b011)begin dg<=8'b11110010;ds<=8'b01110111; endelse if(m==3'b100)begin dg<=8'b01100110;ds<=8'b01110111; endelse if(m==3'b101)begin dg<=8'b10110110;ds<=8'b01110111; endset<=0;endendcaseend/*------------------------点阵正反方字体显示--------------------------------*/ always@(posedge clk)if(c>=8)c<=0;elsec<=c+1;endalways@(posedge disj)beginif(zof)begincase(c)0:begin dc=8'b00000000;dr=8'b01111111;end1:begin dc=8'b01111110;dr=8'b10111111;end2:begin dc=8'b00001000;dr=8'b11011111;end3:begin dc=8'b00001000;dr=8'b11101111;end4:begin dc=8'b00101110;dr=8'b11110111;end5:begin dc=8'b00101000;dr=8'b11111011;end6:begin dc=8'b11111111;dr=8'b11111101;end7:begin dc=8'b00000000;dr=8'b11111110;endendcaseendelsebegincase(c)0:begin dc=8'b01111110;dr=8'b01111111;end1:begin dc=8'b01000000;dr=8'b10111111;end2:begin dc=8'b01111110;dr=8'b11011111;end3:begin dc=8'b01100010;dr=8'b11101111;end4:begin dc=8'b01010100;dr=8'b11110111;end5:begin dc=8'b01001000;dr=8'b11111011;end6:begin dc=8'b01010100;dr=8'b11111101;end7:begin dc=8'b01100001;dr=8'b11111110;endendcaseendendendmodule/*------------------------模块调用-------------------------------------*/ module hz(clk,conj);input clk;output conj;reg conj;integer coni;always @(posedge clk)if (coni>9999999)beginconj<=~conj;coni<=0;endelseconi<=coni+1;endendmodule5)完成整个过程,写实验报告。
数字系统课程设计题目:辩论赛计时器专业:计算机科学与技术班级: 09计算机一班姓名:冯帆张琪学号:冯帆(0936008)张琪(0936036)指导老师:潘秀琴一、实验名称辩论赛计时器的设计二、实验目的1、深入了解V erilog HDL语言语法2、学会独立思考、设计及实现较大规模的数字电路系统三、实验仪器设备/环境/器材PC机+ quartus软件四、实验原理本实验中将依照现有辩论赛规则,制作一个简易的计时装置。
辩论赛由开篇立论、双方攻辩、攻辩小结、自由辩论和总结陈词五部分组成。
1)开篇立论、攻辩小结、总结陈词部分需一方发言终止后,另一方才允许发言。
2)双方攻辩和自由辩论中,双方需要交替发言,一方发言时,本方计时器工作;另一方计时器处于停滞状态。
本实验中要完成倒数计时,状态控制与过渡,文字提示的显示,按键消抖等功能。
系统正常工作时,发光二极管循环闪烁提醒辩手时间的流逝;八段数码管显示剩余时间;发光数码管显示发言者属于哪一方(正方/反方);拨码开关控制是对正方计时,还是对反方计时;按键1控制计时状态;按键2实现计时状态的转换。
五、实验步骤1) 根据实验要求作预习报告。
2) 根据实验需求,进行程序的设计。
3) 根据以前设计的经验,反复调试程序。
4) 调试通过,下载到FPGA开发板上进行实践调试。
程序如下://`include "hz.v"module traffic(clk,zof,dg,ds,la,lb,enable,m,dr,dc);input clk;input zof,enable;input [0:2]m;output [7:0]dr;output [0:7] dc;output la,lb;output [0:7] dg,ds;reg la,lb;reg [0:7] dg,ds;reg disj;wire conj;integer coni,disi;reg [0:6]set,ag,am,ad,bg,bm,bd;reg [0:7] a,b;reg [7:0]dr;reg [0:7]dc;wire [0:2]m;integer c;/*------------------分频模块------------------*/hz hzz(.clk(clk),.conj(conj));//控制显示的分频信号always @(posedge clk)beginif(disi>9999)begindisj<=~disj;disi<=0;endelsedisi<=disi+1;end/*----------------------倒计时模块-------------------------------*/ always@(posedge conj)beginif(enable)beginif(zof)beginif(a<=0)a<=180;elsea<=a-1;endelsebeginif(b<=0)b<=180;elseb<=b-1;endendend/*-------------------------闪灯显示控制------------------------------------*/ always@(posedge clk)beginif(zof)begin la<=1'b1;lb<=1'b0;endelsebegin la<=1'b0;lb<=1'b1;endend/*--------------------数码管显示控制---------------------------------*/always@(posedge clk)beginif(enable)beginif(zof)beginag<=a/100;am<=(a-ag*100)/10;ad<=a%10;endelsebeginbg<=b/100;bm<=(b-bg*100)/10;bd<=b%10;endendend/*------------------------数码管显示------------------------------------*/always@(posedge disj)begincase (set)0:begincase(ad)0:begin dg<=8'b11111100;ds<=8'b11101111; end //a方向个位显示01:begin dg<=8'b01100000;ds<=8'b11101111; end //12:begin dg<=8'b11011010;ds<=8'b11101111; end //23:begin dg<=8'b11110010;ds<=8'b11101111; end //34:begin dg<=8'b01100110;ds<=8'b11101111; end //45:begin dg<=8'b10110110;ds<=8'b11101111; end //56:begin dg<=8'b10111110;ds<=8'b11101111; end //67:begin dg<=8'b11100000;ds<=8'b11101111; end //78:begin dg<=8'b11111110;ds<=8'b11101111; end //89:begin dg<=8'b11110110;ds<=8'b11101111; end //9endcaseset<=set+1;end1:begincase(am)0:begin dg<=8'b11111100;ds<=8'b11011111; end //a方向十位显示01:begin dg<=8'b01100000;ds<=8'b11011111; end //显示12:begin dg<=8'b11011010;ds<=8'b11011111; end //显示23:begin dg<=8'b11110010;ds<=8'b11011111; end //34:begin dg<=8'b01100110;ds<=8'b11011111; end //45:begin dg<=8'b10110110;ds<=8'b11011111; end //56:begin dg<=8'b10111110;ds<=8'b11011111; end //67:begin dg<=8'b11100000;ds<=8'b11011111; end //78:begin dg<=8'b11111110;ds<=8'b11011111; end //89:begin dg<=8'b11110110;ds<=8'b11011111; endendcaseset<=set+1;end2:begincase(ag)0:begin dg<=8'b11111100;ds<=8'b10111111; end //a方向十位显示01:begin dg<=8'b01100000;ds<=8'b10111111; end //显示1 endcaseset<=set+1;end3:begincase(bd)0:begin dg<=8'b11111100;ds<=8'b11111110; end //b方向个位显示01:begin dg<=8'b01100000;ds<=8'b11111110; end //12:begin dg<=8'b11011010;ds<=8'b11111110; end //23:begin dg<=8'b11110010;ds<=8'b11111110; end //34:begin dg<=8'b01100110;ds<=8'b11111110; end //45:begin dg<=8'b10110110;ds<=8'b11111110; end //56:begin dg<=8'b10111110;ds<=8'b11111110; end //67:begin dg<=8'b11100000;ds<=8'b11111110; end //78:begin dg<=8'b11111110;ds<=8'b11111110; end //89:begin dg<=8'b11110110;ds<=8'b11111110; end //9endcaseset<=set+1;end4:begincase(bm)0:begin dg<=8'b11111100;ds<=8'b11111101; end //b方向十位显示01:begin dg<=8'b01100000;ds<=8'b11111101; end //显示12:begin dg<=8'b11011010;ds<=8'b11111101; end //显示23:begin dg<=8'b11110010;ds<=8'b11111101; end //34:begin dg<=8'b01100110;ds<=8'b11111101; end //45:begin dg<=8'b10110110;ds<=8'b11111101; end //56:begin dg<=8'b10111110;ds<=8'b11111101; end //67:begin dg<=8'b11100000;ds<=8'b11111101; end //78:begin dg<=8'b11111110;ds<=8'b11111101; end //89:begin dg<=8'b11110110;ds<=8'b11111101; end //9endcaseset<=set+1;end5:begincase(bg)0:begin dg<=8'b11111100;ds<=8'b11111011; end //b方向十位显示0 1:begin dg<=8'b01100000;ds<=8'b11111011; end //显示1endcaseset<=set+1;end6:beginif(m==3'b001)begin dg<=8'b01100000;ds<=8'b01110111; endelse if(m==3'b010)begin dg<=8'b11011010;ds<=8'b01110111; endelse if(m==3'b011)begin dg<=8'b11110010;ds<=8'b01110111; endelse if(m==3'b100)begin dg<=8'b01100110;ds<=8'b01110111; endelse if(m==3'b101)begin dg<=8'b10110110;ds<=8'b01110111; endset<=0;endendcaseend/*------------------------点阵正反方字体显示--------------------------------*/ always@(posedge clk)if(c>=8)c<=0;elsec<=c+1;endalways@(posedge disj)beginif(zof)begincase(c)0:begin dc=8'b00000000;dr=8'b01111111;end1:begin dc=8'b01111110;dr=8'b10111111;end2:begin dc=8'b00001000;dr=8'b11011111;end3:begin dc=8'b00001000;dr=8'b11101111;end4:begin dc=8'b00101110;dr=8'b11110111;end5:begin dc=8'b00101000;dr=8'b11111011;end6:begin dc=8'b11111111;dr=8'b11111101;end7:begin dc=8'b00000000;dr=8'b11111110;endendcaseendelsebegincase(c)0:begin dc=8'b01111110;dr=8'b01111111;end1:begin dc=8'b01000000;dr=8'b10111111;end2:begin dc=8'b01111110;dr=8'b11011111;end3:begin dc=8'b01100010;dr=8'b11101111;end4:begin dc=8'b01010100;dr=8'b11110111;end5:begin dc=8'b01001000;dr=8'b11111011;end6:begin dc=8'b01010100;dr=8'b11111101;end7:begin dc=8'b01100001;dr=8'b11111110;endendcaseendendendmodule/*------------------------模块调用-------------------------------------*/ module hz(clk,conj);input clk;output conj;reg conj;integer coni;always @(posedge clk)if (coni>9999999)beginconj<=~conj;coni<=0;endelseconi<=coni+1;endendmodule5)完成整个过程,写实验报告。