1、 EDA技术课程作业——习题二 篮球24秒可控计时器设计 姓名:徐晨阳 学号:2012301080040 习题要求:用Verilog HDL语言设计篮球24秒可控计时器 功能说明:1.具有24秒计时、显示功能; 2.设置外部按键,完成清零、暂停、恢复控制; 3.24秒倒计时,时间间隔为1s; 4.时间到后发出报警信号,并在3s后解除。 一、 设计思路 根据对篮球规则的了解,每队每回合的进攻时间为24秒,一旦进攻时间超出24秒,便会自动报警从而判定犯规。 在每回合内若有犯规出现,则比赛时间暂
2、停,重新发球后继续倒计时。一个回合结束后时间自动回到24秒。因此该24秒计时器应包括以下模块:脉冲发生、递减计数、报警电路、控制开关、显示电路,从而控制完成计数器的置数、连续计数、复位、暂停/继续、实时显示、报警等功能。 二、 设计方案 用QuertusⅡ实现该功能用两种方案。方案一是利用VHDL语言编写各个模块,然后将所有模块连接进行仿真及测试;方案二是利用已有的芯片构成相应模块,后组合连接仿真。尽管方案在设计中有一定的简便性且不用编写复杂的程序,但跟据作业要求及自己掌握的知识,选择前者。 具体设计方案如下: 1. 秒脉冲发生部分:clk_in 为10Hz时钟信号,经十
3、分频后得到1Hz的clk_out的输出计时脉冲。 2. 24秒递减计时部分:以分频后得到的clk_out为脉冲信号控制计时,间隔为1秒,计数器减1。 3.外部操作控制部分:以rst_为复位信号,低电平有效,当输入为低时,直接复位;以clr_控制清零,为低时直接清零;以pause为暂停信号,当pause为1时,计时器暂停计时,当为0时,恢复计时。 4.倒计时显示部分:使用数码管显示,用qh、ql分别控制数码管的高位输出和低位输出,ql逐次递减,当减为0时,qh减1,直至都减为0。 5.报警部分:当计数器减为0时(显示为00),报警信号warn置1,发出报警信号。延时3秒,后置0,解除报警
4、信号。 总体框图如下: 三、 实验代码及注释 module zy2(clk_in,rst_,clr,pause,clk_out,warn,qh,ql,); input rst_,pause,clr; //输入输出变量声明 input clk_in; output warn; output clk_out; output [3:0] qh,ql; reg [3:0] qh,ql; //定义reg变量 reg clk_out,warn; reg[3:0] count,delay; //count为分频器中的计数变量,del
5、ay为3秒延时控制变量 always@(posedge clk_in) //上升沿触发 if(count<9) //十分频 count<=count+1; else count<=4'd0; always@(posedge clk_in) if(!count) clk_out<=~clk_out; else; always @(posedge clk_out or negedge clr or negedge rst_) if(!rst_||!clr) delay<=4'b0; //对延时参数delay进
6、行控制 else if((ql==0&&qh==0)) delay<=delay+1; else delay<=0; always @(posedge clk_out or negedge clr or negedge rst_) if(!rst_||!clr) warn<=0; else if((qh==0&ql==0)&&(delay<3)) //当倒计时为00,报警3秒,后解除 warn<=1; else warn<=0; always @(posedge clk_out or negedge clr or negedge rst_) if(!
7、rst_) //rst_为0,复位 begin qh<=2; //显示24 ql<=4; end else if(!clr) //clr为0,清零,显示00 begin qh<=0; ql<=0; end else if(pause) //pause为1,暂停 begin ql<=ql; //显示数字不变 qh<=qh; end else if(!pause) //pause为0,继续计时 begin if((ql
8、0)&&(qh!=0)) begin ql<=9; qh<=qh-1; end else if(ql!=0) begin ql<=ql-1; qh<=qh; end else; end endmodule 四、 时序仿真验证功能 为了更方便的观察仿真结果、验证计时器功能,在时序仿真时将十分频电路改为二分频电路。 1. clr清零功能 2. rst_复位功能 3.pause暂停/继续功能 4. warn报警功能 经分析,仿真结果正确,该24
9、秒计时器符合要求。 五、 总结 1. 编程总是出现错误,经排查发现同一个reg变量在多个always语句下进行操作就会出现这种错误。 2. 一开始对分频模块进行设计时 是在always @(posedge clk_int or negedge clr or negedge rst_)下编写的,后来仿真时发现改变clr、rst_也会对分频后的波形clk_out造成影响,而根据结构图,分频电路是独立的,应该只收clk_in控制,于是将always语句改为always @(posedge clk_int ),仿真后结果正确。 3.对该篮球计时器进行设计前,应对篮球规则有一定的了解,从而更准确的实现其功能。






