篮球30秒可控计时器

1.设计要求

主要功能:

(1)具有30秒计时、显示功能;

(2)设置外部操作开关,控制计时器的直接清零、装数、启动和暂停/连续功能;

(3)30秒倒计时,其计时间隔为1秒;

(4)计时器递减计时到零显示器不能灭灯,同时发出报警信号;

(5)能解除报警信号。

在Quartus II软件平台上建立计数器电路的顶层电路文件,并完成编译和仿真。

输入信号:时钟CPA,直接清零CR,预置(装数)LD及减计数使能(启动/暂停)S。

输出信号:计时输出信号QH[3...0]、QL[3...0](8421BCD码)和报警信号L。

设计原理:

主要包括10分频器,30秒可控递减计时器及报警电路。30秒可控递减计时器是系统的核心部分,由外部开关键进行清零(CR),直接控制递减计时器的复位和解除报警;开关键预置(LD)低电平有效,当可控计时器预置30秒时,输出变量QH[3..0]和QL[3..0]分别为0011、0000(8421BCD码),即实现置数功能;启动递减计时和暂停/连续由开关键使能(启动/暂停)S,S=1用于递减计时(开通时钟通道),S=0用于保持(暂停)。10分频的功能是为了提高控制精度,减小时间误差。

 源程序:用Verilog编写basketball.v文件,源程序如下:

 

module basketball(CPB, L, QH, QL, CPA, S, LD, CR) ;
        input S, LD, CR ;
        input CPA ;
        output [3:0]QH, QL ;
        output CPB, L ;
        reg [3:0]QH, QL ;
        reg CPB ;
        reg L ;
        reg [3:0]i ;
        reg QC ;
        
        always @(posedge CPA)
            begin
                if(S==0)
                    CPB <= CPB ;
                else
                    if(i==9)
                        begin
                            i = 0 ;
                            CPB <= 1 ;
                        end
                    else
                        begin
                            i = i + 1 ;
                            CPB <= 0 ;
                        end
            end
            
            always @(posedge CPB or negedge LD or negedge CR)
                begin
                    if(!CR)
                        begin
                            QH <= 0 ;
                            QL <= 0 ;
                            QC <= 0 ;
                        end
                    else if(!LD)
                        begin
                            QH <= 3 ;
                            QL <= 0 ;
                            QC <= 1 ;
                            L <= 0 ;
                        end
                    else if((QH==0)&(QL==0))
                        begin
                            QH <= 0 ;
                            QL <= 0 ;
                            L <= QC ;
                        end
                    else if(QL==0)
                        begin
                            QL <= 9 ;
                            QH <= QH - 1 ;
                        end
                    else
                        begin
                            QL <= QL - 1 ;
                            QH <= QH ;
                        end
                end
endmodule 

 

 

posted @ 2014-02-16 17:59  Only-Love  阅读(2332)  评论(0编辑  收藏  举报