资源描述
EDA技术课程作业——习题二 篮球24秒可控计时器设计
姓名:徐晨阳 学号:2012301080040
习题要求:用Verilog HDL语言设计篮球24秒可控计时器
功能说明:1.具有24秒计时、显示功能;
2.设置外部按键,完成清零、暂停、恢复控制;
3.24秒倒计时,时间间隔为1s;
4.时间到后发出报警信号,并在3s后解除。
一、 设计思路
根据对篮球规则的了解,每队每回合的进攻时间为24秒,一旦进攻时间超出24秒,便会自动报警从而判定犯规。 在每回合内若有犯规出现,则比赛时间暂停,重新发球后继续倒计时。一个回合结束后时间自动回到24秒。因此该24秒计时器应包括以下模块:脉冲发生、递减计数、报警电路、控制开关、显示电路,从而控制完成计数器的置数、连续计数、复位、暂停/继续、实时显示、报警等功能。
二、 设计方案
用QuertusⅡ实现该功能用两种方案。方案一是利用VHDL语言编写各个模块,然后将所有模块连接进行仿真及测试;方案二是利用已有的芯片构成相应模块,后组合连接仿真。尽管方案在设计中有一定的简便性且不用编写复杂的程序,但跟据作业要求及自己掌握的知识,选择前者。
具体设计方案如下:
1. 秒脉冲发生部分:clk_in 为10Hz时钟信号,经十分频后得到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,解除报警信号。
总体框图如下:
三、 实验代码及注释
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为分频器中的计数变量,delay为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进行控制
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(!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==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秒计时器符合要求。
五、 总结
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.对该篮球计时器进行设计前,应对篮球规则有一定的了解,从而更准确的实现其功能。
展开阅读全文