**結果
顯示**結果
(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...