大一時候做的數字電路實驗的課程設計,主要完成一個簡單籃球計時器
主要功能有:
(1) 實現24s倒計時計時精度0.1的功能; (2) 分別有開始、暫停、進球、犯規等操作系統; (3) 倒計10s時數碼管閃爍計時,計時結束聲光提示; (4) 記錄雙方犯規次數,任一方滿6提示罰球;
QQ圖片20180721120928.png (32.24 KB, 下載次數: 92)
下載附件
2018-7-21 12:10 上傳
QQ截圖20180721121128.png (34.17 KB, 下載次數: 98)
下載附件
2018-7-21 12:11 上傳
運行結果展示:呃呃 圖倒了。。
ff.jpg (322.14 KB, 下載次數: 79)
下載附件
2018-7-21 12:13 上傳
原理圖:
yuanli.png (48.26 KB, 下載次數: 101)
下載附件
2018-7-21 12:17 上傳
附上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
復制代碼
|