https://mp.weixin.qq.com/s/Z4JJhZ_jL1lqF1nf_orq9Aapp
簡單介紹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. 附錄
略