https://mp.weixin.qq.com/s/Z4JJhZ_jL1lqF1nf_orq9A
简单介绍Timer的实现。
??
1. 基本功能
实现定时器的功能。
2. Timer
实现一个静态装入的定时器:
??
1) initCount
定时器的初始值,静态配置,不可动态改变。
2) maxInfligh
定时器事件的种类。
3) io
??
a. start:某个定时器事件需要启动定时器,io.start.bits为这个定时器事件的ID;
b. stop:某个定时器事件需要停止定时器,io.stop.bits为这个定时器事件的ID;
c. timeout:输出定时器是否超时,以及超时的定时器事件的ID;
4) inflight
记录各个定时器事件是否需要启动定时器。
??
5) countdown
倒数计数器。
6) active
定时器是否是激活状态,即正在倒计时的状态。
只需要有一个定时器事件要求开始计时,定时器即处于激活状态。
7) 倒计时
当定时器激活时,不停的进行倒计时:
??
8) 开始计时
??
当io.start.valid为真时,标记该定时器事件对应的inflight比特为真,并且把countdown置位初始值,开始倒计时。
9) 停止计时
??
当io.stop.valid为真时,标记该定时器事件对应的inflight比特为假。这个动作不一定会停止定时器。
10) 超时
??
当定时器处于激活状态,并且countdown倒数到0时,定时器超时。
11) assert
??
意思是说:不能停止没有事先要求启动的定时器事件。
个人认为,针对逆否命题进行assert比较好理解,即:
??
3. SimpleTimer
??
简单的定时器。不考虑定时器事件,只提供一个开始和停止控制。
1) io
??
a. start:开始定时器;
b. stop:停止定时器;
c. timeout:定时器是否超时;
2) 开始计时
??
当io.start为真时,定时器激活,开始从initCount - 1倒计时。
3) 停止计时
??
当io.stop为真时,定时器转入未激活状态。
4) 超时
??
4. DynamicTimer
定时时长可以动态输入的定时器:
??
1) io
??
其中,period为输入的定时时长。
2) 开始计时
??
3) 停止计时
??
要求停止,或者倒数到0时,停止计时。
4) 倒计时
??
5) 超时
??
5. 附录
略
原文地址:https://www.cnblogs.com/wjcdx/p/10992225.html