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文章
5400瀏覽量
122731 -
IC設計
+關注
關注
38文章
1343瀏覽量
105023 -
Verilog
+關注
關注
28文章
1364瀏覽量
111422
原文標題:IC設計:RR調度原理
文章出處:【微信號:處芯積律,微信公眾號:處芯積律】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
Linux系統調度是實現特性的關鍵部分
干貨分享:基于嵌入式Linux中進程調度實現方法
請問FreeRTOS是如何實現調度的?
Microchip單片機固定時間片輪詢調度匯編代碼 精選資料分享
Microchip單片機固定時間片輪詢調度匯編代碼 精選資料推薦
STM32是怎樣去實現軟件時間片調度的
基于FPGA的輪詢合路的設計和實現
基于SDH芯片的S19202的輪詢合路的設計

Microchip單片機固定時間片輪詢調度匯編代碼

STM32 操作系統內核調度原理與實現(1):輪詢系統,前后臺系統與多線程系統

評論