找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5570|回复: 2
打印 上一主题 下一主题
收起左侧

基于FPGA篮球计时器的实现

[复制链接]
跳转到指定楼层
楼主
大一时候做的数字电路实验的课程设计,主要完成一个简单篮球计时器
主要功能有:
(1)   实现24s倒计时计时精度0.1的功能;
(2)   分别有开始、暂停、进球、犯规等操作系统;
(3)   倒计10s时数码管闪烁计时,计时结束声光提示;
(4)   记录双方犯规次数,任一方满6提示罚球;


运行结果展示:呃呃  图倒了。。

原理图:

附上verilog源代码:
  1. 附录1.1(主24秒计时器设计):
  2. module Design(start,E,F,G,CE,Q1,Q,Q2,H,L,A,B,clk,a,b);
  3. input start,clk,CE,a,b,E;
  4. output reg[3:0] Q1;
  5. output reg[4:0] Q;
  6. output reg[3:0] Q2;
  7. output reg[3:0] L;
  8. output reg[2:0] A,B;
  9. output wire F,G,H;
  10. wire g,CR1,CR2;
  11. reg k;
  12. assign F=(Q<5'b01010);//倒计时小于10s后开始闪烁
  13. assign G=((Q==5'b00000)&(L==4'b0000));//倒计时为0时开始声光提示
  14. assign H=((A==3'b110)|(B==3'b110));//分数为6时开始提示罚球
  15. assign CR1=((A==3'b110)|(B==3'b110)|(CE==1)|a==1|((b==1)&(Q>5'b01110)));//复位24秒
  16. assign CR2=((b==1)&(Q<=5'b01110));//复位14秒
  17. always @ (posedge clk)
  18. if(!start)
  19.   begin  Q=5'b11000;Q1=4;Q2=2;L=3'b000;A=0;B=0;k=0;  end//是否开始计数使能端
  20. else
  21. begin

  22. if(G==1);//声光提示
  23. else
  24. begin

  25. if(g==0&E==0&CR1==0&CR2==0)
  26.   begin
  27.     if(L==4'b0000)
  28.          begin  Q=Q-5'b00001;L=4'b1001; end
  29.          else if(L>4'b0000)
  30.          begin L=L-4'b0001;k=0;  end
  31. if(Q<10)
  32.   begin Q1=Q;Q2=0; end
  33. else if(Q>9&Q<20)
  34.   begin Q1=Q-10;Q2=1; end
  35. else if(Q>19)
  36.   begin Q1=Q-20;Q2=2; end

  37.          //正常情况下计数
  38.   end

  39.   else if(g==0&E==0&CR1==1)
  40.   begin  Q=5'b11000;L=4'b0000;Q2=2;Q1=4;  end//复位24秒
  41.   else if(g==0&E==0&CR2==1)
  42.   begin  Q=5'b01110;L=4'b0000;Q2=2;Q1=4;  end//复位14秒
  43.   if(a==1)
  44.   begin A<=A+3'b001-k;k=1;  end
  45.   if(b==1)
  46.   begin B<=B+3'b001-k;k=1;  end
  47. end
  48. end            
  49. endmodule
复制代码
  1. 附录1.2(分频时钟信号设计):
  2. module fhz(clk1,clk2,clk3,clk);
  3. input clk;
  4. output reg clk1,clk2,clk3;
  5. reg [20:0] n=0;reg [20:0] m=0; reg[22:0] z=0;
  6. always@(posedge clk)
  7. begin
  8. if(n==599999)
  9. n=0;
  10. else
  11. n=n+1;
  12. if(n<300000)
  13. clk1=1;
  14. else
  15. clk1=0;
  16. if(z==1199999)
  17. z=0;
  18. else
  19. z=z+1;
  20. if(z<600000)
  21. clk2=1;
  22. else
  23. clk2=0;
  24. if(m==59)
  25. m=0;
  26. else
  27. m=m+1;
  28. if(m<30)
  29. clk3=1;
  30. else
  31. clk3=0;
  32. end
  33. endmodule
复制代码
  1. 附录1.3(位选信号设计):
  2. module decode(Q1,Q2,L,clk,E,Q);
  3. input [3:0] Q1,Q2,L;
  4. input clk;
  5. output reg [2:0] E;
  6. output reg [3:0] Q;
  7. reg [1:0] F=0;
  8. always@(posedge clk)
  9. if(F==0)
  10.    begin Q=Q1;E=2;F=1; end    //选择小数位
  11. else if(F==1)
  12.    begin Q=Q2;E=4;F=2; end    //选择个位
  13. else if(F==2)
  14.    begin Q=L;E=1;F=0; end        //选择十位
  15. endmodule
复制代码




评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏3 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:438575 发表于 2019-12-18 23:15 来自手机 | 只看该作者
有没有原理图文件和程序文件
回复

使用道具 举报

板凳
ID:685188 发表于 2020-1-13 21:31 | 只看该作者
有顶层代码吗
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表