大一时候做的数字电路实验的课程设计,主要完成一个简单篮球计时器
主要功能有:
(1) 实现24s倒计时计时精度0.1的功能; (2) 分别有开始、暂停、进球、犯规等操作系统; (3) 倒计10s时数码管闪烁计时,计时结束声光提示; (4) 记录双方犯规次数,任一方满6提示罚球; 运行结果展示:呃呃 图倒了。。 原理图: 附上verilog源代码: - 附录1.1(主24秒计时器设计):
- module Design(start,E,F,G,CE,Q1,Q,Q2,H,L,A,B,clk,a,b);
- input start,clk,CE,a,b,E;
- output reg[3:0] Q1;
- output reg[4:0] Q;
- output reg[3:0] Q2;
- output reg[3:0] L;
- output reg[2:0] A,B;
- output wire F,G,H;
- wire g,CR1,CR2;
- reg k;
- assign F=(Q<5'b01010);//倒计时小于10s后开始闪烁
- assign G=((Q==5'b00000)&(L==4'b0000));//倒计时为0时开始声光提示
- assign H=((A==3'b110)|(B==3'b110));//分数为6时开始提示罚球
- assign CR1=((A==3'b110)|(B==3'b110)|(CE==1)|a==1|((b==1)&(Q>5'b01110)));//复位24秒
- assign CR2=((b==1)&(Q<=5'b01110));//复位14秒
- always @ (posedge clk)
- if(!start)
- begin Q=5'b11000;Q1=4;Q2=2;L=3'b000;A=0;B=0;k=0; end//是否开始计数使能端
- else
- begin
-
- if(G==1);//声光提示
- else
- begin
- if(g==0&E==0&CR1==0&CR2==0)
- begin
- if(L==4'b0000)
- begin Q=Q-5'b00001;L=4'b1001; end
- else if(L>4'b0000)
- begin L=L-4'b0001;k=0; end
- if(Q<10)
- begin Q1=Q;Q2=0; end
- else if(Q>9&Q<20)
- begin Q1=Q-10;Q2=1; end
- else if(Q>19)
- begin Q1=Q-20;Q2=2; end
-
- //正常情况下计数
- end
- else if(g==0&E==0&CR1==1)
- begin Q=5'b11000;L=4'b0000;Q2=2;Q1=4; end//复位24秒
- else if(g==0&E==0&CR2==1)
- begin Q=5'b01110;L=4'b0000;Q2=2;Q1=4; end//复位14秒
- if(a==1)
- begin A<=A+3'b001-k;k=1; end
- if(b==1)
- begin B<=B+3'b001-k;k=1; end
- end
- end
- endmodule
复制代码- 附录1.2(分频时钟信号设计):
- module fhz(clk1,clk2,clk3,clk);
- input clk;
- output reg clk1,clk2,clk3;
- reg [20:0] n=0;reg [20:0] m=0; reg[22:0] z=0;
- always@(posedge clk)
- begin
- if(n==599999)
- n=0;
- else
- n=n+1;
- if(n<300000)
- clk1=1;
- else
- clk1=0;
- if(z==1199999)
- z=0;
- else
- z=z+1;
- if(z<600000)
- clk2=1;
- else
- clk2=0;
- if(m==59)
- m=0;
- else
- m=m+1;
- if(m<30)
- clk3=1;
- else
- clk3=0;
- end
- endmodule
复制代码- 附录1.3(位选信号设计):
- module decode(Q1,Q2,L,clk,E,Q);
- input [3:0] Q1,Q2,L;
- input clk;
- output reg [2:0] E;
- output reg [3:0] Q;
- reg [1:0] F=0;
- always@(posedge clk)
- if(F==0)
- begin Q=Q1;E=2;F=1; end //选择小数位
- else if(F==1)
- begin Q=Q2;E=4;F=2; end //选择个位
- else if(F==2)
- begin Q=L;E=1;F=0; end //选择十位
- endmodule
复制代码
|