1、RR輪詢調度?
在設計中,我們經常會用到RR(Round-Robin,RR)輪詢調度,用于保證在一個時間段內的多個請求信號都能得到公平響應。
如下所示:輸入rr_req[3:0]為4個請求信號,輸出rr_grant[3:0]為4請求信號對應的4個響應信號:rr_req[n]表示第n請求申請響應,rr_grant[n]為1表示第n個請求被響應。如表所示,T1周期,所有請求均有效,首先響應低bit的請求,所以rr_grant[0]=1。T3周期,請求rr_req[0]有效,但是在T2時刻中被響應(rr_grant[1]=1),因此此次不再響應,而是響應rr_req[2],所以rr_grant[2]=1.
時鐘周期 | 請求信號rr_req[3:0] | 請求響應rr_grant[3:0] |
0 | 4’b0000 | 4’b0000 |
1 | 4’b1111 | 4’b0001 |
2 | 4’b1110 | 4’b0010 |
3 | 4’b1101 | 4’b0100 |
4 | 4’b1011 | 4’b1000 |
2、Verilog是如何實現RR輪詢調度的?
在verilog實現中,僅僅采用簡單的組合邏輯和寄存器就可以實現rr輪詢調度,不需要狀態機等設計。
基本原理是鎖存上一次輸出請求響應rr_grant[3:0],并且生成相應的有效位rr_mask[3:0],從(rr_valid[3:0]&rr_mask[3:0]) 和 rr_valid[3:0]&(~rr_mask[3:0]) 選取不為0的作為獲得rr_grant_tmp,rr_grant_tmp再經過組合邏輯并且取最低有效位。此處mask中1表示請求有效。
A | B | C | D | E | F | G |
時間順序 | 請求信號rr_req[3:0] | pre_rr_result(rr_grant[3:0]的打拍鎖存值) | rr_mask |
~rr_mask 生成有效位 |
rr_grant_tmp B&D or B&E,取其中不為0的 |
請求響應rr_grant[3:0] |
0 | 4’b0000 | 4’b0000 | 4’b1111 | 4’b0000 | 4’b0000 | 4’b0000 |
1 | 4’b1111 | 4’b0000 | 4’b1111 | 4’b0000 | 4’b1111 | 4’b0001 |
2 | 4’b1110 | 4’b0001 | 4’b0001 | 4’b1110 | 4’b1110 | 4’b0010 |
3 | 4’b1101 | 4’b0010 | 4’b0011 | 4’b1100 | 4’b1100 | 4’b0100 |
4 | 4’b1011 | 4’b0100 | 4’b0111 | 4’b1000 | 4’b1000 | 4’b1000 |
B列:為請求信號rr_req[3:0]
C列:pre_rr_result 為模塊內部鎖存的上一拍rr_grant[3:0],即寄存器鎖存打拍
D列:rr_mask為pre_rr_result經過組合邏輯得到的掩碼,rr_mask= {pre_rr_result[2:0],pre_rr_result[3]}-1’b1
E列:~rr_mask為pre_rr_result經過組合邏輯得到的掩碼,rr_mask=~( {pre_rr_result[2:0],pre_rr_result[3]}-1’b1)
F列:rr_grant_tmp為B&D or B&E,取其中不為0的
G列:rr_grant_tmp經過組合邏輯輸出最低有效位:(~rr_grant_tmp+1’b1)&rr_grant_tmp
審核編輯:劉清
-
寄存器
+關注
關注
31文章
5363瀏覽量
120915 -
IC設計
+關注
關注
38文章
1299瀏覽量
104176 -
Verilog
+關注
關注
28文章
1351瀏覽量
110243
原文標題:IC設計:RR調度原理
文章出處:【微信號:處芯積律,微信公眾號:處芯積律】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論