FPGA定时器24s倒计时.doc

FPGA定时器24s倒计时.doc
FPGA定时器24s倒计时.doc

设计一个用于篮球比赛的定时器。要求:

(1)定时时间为 24 秒,按递减方式计时,每隔 1 秒,定时器减1;

(2)定时器的时间用两位数码管显示;

(3)设置两个外部控制开关,开关 K1 控制定时器的直接复位 / 启动计时,开关 K2 控制定时器的暂停 / 连续计时;当定时器递减计时到零(即定时时间到)时,定时器保持零不变,同

时发出报警信号,报警信号用一个发光二极管指示。

(4)输入时钟脉冲的频率为 1kHz。

(5)用 Verilog HDL语言设计,用Modelsim 软件做功能仿真,用Quartus II 综合。(6)将设计代码和仿真代码写在作业本上。

module gcount(out,sel,clock_1k,clear,pause,gcon);

input clock_1k,clear,pause;

output [6:0] out;

output sel,gcon;

reg [6:0] out;

reg sel,gcon;

reg [3:0] cnt_sl,cnt_sh,count;

reg wire [9:0] fenpin;

clock_1 = fenpin[9]; // 1Hz;

always @(posedge clock_1k or negedge clear)

begin

if (!clear)

fenpin <= 10'b0;

else

fenpin <= fenpin + 1;

end

//cnt_sl

always@(posedge clock_1 or negedge clear)

//always@(posedge clock_1 or negedge clear or posedge pause) begin

if(!clear)

cnt_sl<=4'h4;

else if (!pause)

cnt_sl<=cnt_sl;

else if (cnt_sh == 0 && cnt_sl == 0)

cnt_sl<=4'h0;

else if (cnt_sl == 0)

cnt_sl<=4'h9;

else

cnt_sl<=cnt_sl-1;

end

//cnt_sh

always@(posedge clock_1 or negedge clear)

//always@(posedge clock_1 or negedge clear or posedge pause) begin

if(!clear)

cnt_sh<=4'h2;

else if (!pause)

cnt_sh <= cnt_sh;

else if (cnt_sh == 0 && cnt_sl == 0)

cnt_sh<=4'h0;

else if (cnt_sl == 0)

cnt_sh<=cnt_sh-1;

else

cnt_sh <= cnt_sh;

end

//gcon

//always@(posedge clock_1 or negedge clear)

always@(cnt_sh or cnt_sl)

begin

if (cnt_sh == 0 && cnt_sl == 0)

gcon<=1;

else

gcon <= 0;

end

//reg

always@(posedge clock_1k or negedge clear)

begin

if(!clear)

sel<=0;

else

sel <= ~sel;

end

always @(sel)

count = (sel == 0)?cnt_sh:cnt_sl;

always @(count)

begin

case(count)

4'b0000: out=7'b011_1111;

4'b0001: out=7'b000_0110;

4'b0010: out=7'b101_1011;

4'b0011: out=7'b100_1111;

4'b0100: out=7'b110_0110;

4'b0101: out=7'b110_1101;

4'b0110: out=7'b111_1101;

4'b0111: out=7'b000_0111;

4'b1000: out=7'b111_1111;

4'b1001: out=7'b110_1111;

default: out=7'b000_0000;

endcase

end

endmodule

`timescale 1ns/1ns

`include"./gcount.v"

module test;

reg Clock_1k,Clear,Pause;

wire [6:0] Out;

wire Sel,Gcon;

initial

begin

Clock_1k<=0;

Clear<=1;

Pause<=1;

#100 Clear<=0;

#100 Clear<=1;

#5000 Pause<=0;

#5000 Pause<=1;

#5000 Clear<=0;

#5000 Clear<=1;

end

always #1 Clock_1k<=~Clock_1k;

gcount

m(.out(Out),.sel(Sel),.clock_1k(Clock_1k),.clear(Clear),.pause(Pause),.gcon(Gco n));

endmodule

相关主题
相关文档
最新文档