C64X EDMA優先順序及優先順序佇列

2021-08-26 17:12:22 字數 1759 閱讀 4945

下圖為edma傳輸請求方框圖:

從圖中我們可以看到,請求有三種:

ll2控制器傳輸請求:l2控制器發布所有用於cache服務的傳輸請求:如訪問非cache記憶體、qdma傳輸等。對c64x dsp,cache服務請求可以在任何優先順序上產生,這可以通過cache配置暫存器(ccfg)的p位來設定。對於讀請求,cache控制器對乙個l2行,總是以2個突發64位元組來請求:首先請求行的missed部分。對於寫請求,可能是由於回寫/回寫並無效或逐出等操作引起的,cahce控制器以兩個突發64位元組來完成1行的傳輸。qdma傳輸請求與edma通道的限制是一樣的。

lhpi/pci傳輸請求:hpi/pci自動產生傳輸請求以服務host傳輸。對於c64x dsp,預設的hpi/pci傳輸請求是中等級別,但是請求的優先順序可以通過trctl來程式設計,對於固定模式的host訪問,hpi/pci發布單個元素讀寫請求及短時資料突發增量傳輸請求。突發尺寸總是以8個或更少的元素進行。

ledma通道傳輸請求:edma通道傳輸請求可以發生在urgent、high、medium、low四個級別上,推薦,高優先順序用於短時突發和單元素傳輸,低優先順序用於長時塊的搬移。

下表為c64x dsp資料請求的可程式設計優先順序

opt中的pri位

優先順序請求者

level 0:urgent優先順序

l2控制器、edma、qdma、hpi/pci

level 1:high優先順序

l2控制器、edma、qdma、hpi/pci

level 2:medium優先順序

l2控制器、edma、qdma、hpi/pci

level 3:low優先順序

l2控制器、edma、qdma、hpi/pci

100-111

保留保留

4個優先順序級別都有各自的請求排隊佇列,每個佇列的總長度固定為16;但是每個佇列中三個請求者在其中占有的長度可以程式設計,下表為c64x dsp傳輸請求佇列的分配情況:

queue

優先順序固定的佇列總長度

請求者預設佇列長度

程式設計佇列長度的暫存器

q0urgent

l2控制器和qdma

edma

hpi/pci

l2alloc0(長度範圍:0-7)

pqar0(長度範圍:0-15)

trctl(長度範圍:0-15)

q1high

l2控制器和qdma

edma

hpi/pci

l2alloc0(長度範圍:0-7)

pqar0(長度範圍:0-15)

trctl(長度範圍:0-15)

q2medium

l2控制器和qdma

edma

hpi/pci

l2alloc0(長度範圍:0-7)

pqar0(長度範圍:0-15)

trctl(長度範圍:0-15)

q3low

l2控制器和qdma

edma

hpi/pci

l2alloc0(長度範圍:0-7)

pqar0(長度範圍:0-15)

trctl(長度範圍:0-15)

因為一旦乙個佇列裡的請求滿了,那麼這個佇列如果再來請求的時候,edma控制器會stall,所以所有的請求都會不響應,直到那個佇列有空閒位置才繼續響應事件。所以,我們不要讓某個級別的請求太過繁忙,從而導致stall發生。比較好的情況是:讓各個級別的請求的負擔基本差不多,這樣避免edma控制器阻塞。

python優先順序佇列 python 優先順序佇列

簡介 優先順序佇列是基於堆的,關於堆的時候可以參考文章堆,優先順序佇列就是入隊時,會分配乙個優先順序,之後出隊時,根據優先順序出列。如,入隊時 4,a 6,r 3 d 則出隊順序 6,r 4,a 3 d 優先順序佇列的python實現 class priorityqueue object def i...

C語言弄搞優先順序 優先順序問題

c語言易弄錯優先順序 1.的優先順序高於 操作符用於消除這類問題 p.f誤認 p所指物件的字段f。p f 實際結果 對p取f偏移,作為指標,然後作為解除引用操作。p.f 2.優先順序高於 int ap誤認 ap是個指向int陣列的指標。int ap 實際結果 ap是個元素為int的指標陣列。int ...

Linux程序優先順序和調整優先順序

linux 是乙個多使用者 多工的作業系統,系統中通常執行著非常多的程序。但是 cpu 在乙個時鐘週期內只能運算一條指令 現在的 cpu 採用了多執行緒 多核心技術,所以在乙個時鐘週期內可以運算多條指令。但是同時運算的指令數也遠遠小於系統中的程序總數 那問題來了 誰應該先運算,誰應該後運算呢?這就需...