Verilog 籃球24S計時器

2021-10-07 06:22:18 字數 4649 閱讀 9504

**結果

顯示**結果

(1)具有顯示24秒計時功能;

(2)系統設定外部操作開關,控制計時器的直接啟動(重置為24)和暫停/繼續功能;

(3)計時器為24秒遞減計時,其計時間隔為1秒;

(4)計時器遞減計時到零時,數碼顯示器不能滅燈,同時發出光電報警訊號。

module varmodcnt

(cp,clr,en,pe,d,q,carry_out)

;parameter n=

4,mod=10;

input cp,clr,en,pe;

input [n-1:

0] d;

output reg[n-1:

0] q;

output carry_out;

/*輸入:cp時鐘訊號,clr清零訊號,en使能,pe預製訊號,d為預置輸入

輸出:q為輸出4位二進位制數,carry_out為借位訊號*/

//敏感訊號:cp上公升沿,clr下降沿,pe上公升沿

always@(posedge cp,negedge clr)

begin

if(!clr) q<='d0;

//清零

elseif(

!en) q<=q;

//保持,相當於暫停

else begin

if(q==

4'b0000) q<=mod-1;

//遞減

else q<=q-1;

endendalways@(posedge pe)

begin

q<=d;

//置數

endassign carry_out=

(q==

4'b0000)

;//借位訊號

endmodule

module _24s

(cp,en,pe,q1,q0)

;input cp,en,pe;

output [3:

0] q1,q0;

/*輸入:cp為時鐘訊號,en為使能訊號,pe為預置訊號

輸出:q1為十位輸出數,q0為個位輸出數

*/wire carry_out;

wire carry_out1;

wire cp1;

assign cp1=

~carry_out;

//個位數減到0時,十位數遞減

wire en1;

assign en1=en&

~(carry_out&carry_out1)

;//當減為0時,不在遞減

varmodcnt u1

(cp1,

1'b1,en1,pe,4'b0010,q1,carry_out1)

;//元件例項化

varmodcnt u0

(cp,

1'b1,en1,pe,4'b0100,q0,carry_out)

;//元件例項化

endmodule

`timescale 100ms/

10ms

module tb_24s()

;reg cp;

reg en;

reg pe;

wire [3:

0] q1;

wire [3:

0] q0;

_24s u

(cp,en,pe,q1,q0)

;//元件例項化

initial

$monitor

($time,

"\tq1=%b,q0=%b\n"

,q1,q0)

;//時鐘

initial

cp=1;

always

#5 cp=

~cp;

initial

begin

//啟動:產生pe上公升沿,進行預置

en=1;pe=0;

#10; en=

1;pe=1;

#10;//計數

en=1;pe=0;

#260

;//啟動:產生pe上公升沿,進行預置

en=1;pe=1;

#10; en=

1;pe=0;

#20;//暫停

輸入:cp時鐘訊號,en使能訊號,pe預製訊號,bl,lt,

*/wire [3:

0]q1,q0;

wire bl1;

_24s u

(cp,en,pe,q1,q0)

;assign bl1=bl&

(q1!=

4'b0000)

;_74hc4511 u1

(1'b0,bl1,lt,q1,l1)

; _74hc4511 u0

(1'b0,bl,lt,q0,l0)

;endmodule

module _74hc4511

(input le,bl,lt,

input [3:

0] d,

output reg [6:

0] l);/*

輸入輸出埠說明。

輸入埠: le,bl,lt為使能訊號。d為待顯示的四位二進位制數字。

輸出埠:l為7段顯示器各段的工作情況。

*/wire [2:

0] e;

assign e=

;//中間變數用於後續的控制端優先順序判斷

always@(*)

begin

if(le==

0&&bl==

1&<==1)

begin

case

(d)//0-9顯示。

4'b0000:l=7'b111_1110;

4'b0001:l=7'b011_0000;

4'b0010:l=7'b110_1101;

4'b0011:l=7'b111_1001;

4'b0100:l=7'b011_0011;

4'b0101:l=7'b101_1011;

4'b0110:l=7'b001_1111;

4'b0111:l=7'b111_0000;

4'b1000:l=7'b111_1111;

4'b1001:l=7'b111_1011;

//以下為無效狀態

4'b1010:l=7'b000_0000;

4'b1011:l=7'b000_0000;

4'b1100:l=7'b000_0000;

4'b1101:l=7'b000_0000;

4'b1110:l=7'b000_0000;

4'b1111:l=7'b000_0000;

endcase

endelse

begin

ca***

(e)3

'bxx0:l=7'b111_1111;

//燈測試

3'bx01:l=7'b000_0000;

//滅燈

3'b111:l<=l;

//鎖存

籃球30s倒計時

實現30s倒計時,並且在數碼管實時顯示計數時間,每一秒led綠色燈閃爍一次,計時結束時數碼管停止,同時紅色led燈常亮。主要有三個部分,時鐘分頻模組,數碼管顯示模組以及頂層模組 這裡我沒有去呼叫內部pll 時鐘分頻模組如下 module div 25mhz input i clk,input i r...

I2S匯流排介面設計(Verilog)

i2s是數字音訊的介面,這裡不用多說,請讀者自己查閱相關資料。本文中要設計的是fpga與數字音訊晶元的i2s介面時序。簡單點說,就是通過fpga向音訊晶元寫資料,通過的是i2s匯流排,因為這個匯流排比較麻煩,我在這裡做成介面模組,其它模組直接拿來用就可以了。提示,i2s匯流排的介面訊號如下 2 bc...

I2S匯流排介面設計(Verilog)

i2s是數字音訊的介面,這裡不用多說,請讀者自己查閱相關資料。本文中要設計的是fpga與數字音訊晶元的i2s介面時序。簡單點說,就是通過fpga向音訊晶元寫資料,通過的是i2s匯流排,因為這個匯流排比較麻煩,我在這裡做成介面模組,其它模組直接拿來用就可以了。提示,i2s匯流排的介面訊號如下 2 bc...