天天看點

米聯客FDMA3.1資料緩存方案全網最細講解,自創更新版,送3套視訊和音頻緩存工程源碼

米聯客的FDMA資料緩存方案釋出也有五六年了,但真正能熟練使用的兄弟卻很少,其實還是沒有好的例程作為參考和同熟易懂的講解,這裡我做如下解析:

FDMA部分:這部分是米聯客封裝了使用者接口的AXI4-FULL協定代碼,我之前寫過一篇文章,逐行講解這個子產品,感興趣的兄弟可以去參考FDMA代碼逐行講解

米聯客官方的FDMA3.1封裝的IP做得不咋地,我這裡對IP做了重新封裝,如下:

米聯客FDMA3.1資料緩存方案全網最細講解,自創更新版,送3套視訊和音頻緩存工程源碼

這裡的AXI資料位寬并不是任意設定的,比如設定為110,這是非法的,米聯客原來的IP并沒有意識到這一點,也沒有提示使用者,是以我修改為可選項如下:

米聯客FDMA3.1資料緩存方案全網最細講解,自創更新版,送3套視訊和音頻緩存工程源碼

根據AXI4協定,AXI4資料位寬必須與記憶體相映射,說人話就是必須是8的倍數;且最大隻能是256;

AXI最大突發是長度:同理,AXI突發是長度也不是任意值,可選的隻有1,2,4,8,32,64,128,256,米聯客原來的IP并沒有意識到這一點,也沒有提示使用者,是以我修改為可選項如下:

米聯客FDMA3.1資料緩存方案全網最細講解,自創更新版,送3套視訊和音頻緩存工程源碼

這裡是指最大值,是以直接選256;

另外:重點:拿出小本本:

AXI資料位寬與AXI突發長度必須遵循如下公式:

AXI資料位寬/8*AXI突發長度<=4096;即4k邊界,當然,這裡米聯客依然沒說;

AXI ID以及ID位寬:如果需要調用多個FDMA IP,就要用到這裡,我的修改如下:

米聯客FDMA3.1資料緩存方案全網最細講解,自創更新版,送3套視訊和音頻緩存工程源碼

最大ID位寬給到了4,即最多可同時調用16個IP,一般用不到這麼多,是以這裡選1;

下面看更重要的FDMA控制器:

關于FDMA控制器我之前寫過文章,感興趣的可以參考FDMA控制器

當然,同樣的道理,米聯客原來的IP也沒有給出更細的東西,這裡我來說說:

先看FDMA控制器IP:

米聯客FDMA3.1資料緩存方案全網最細講解,自創更新版,送3套視訊和音頻緩存工程源碼

IP配置頁面如下:

米聯客FDMA3.1資料緩存方案全網最細講解,自創更新版,送3套視訊和音頻緩存工程源碼

下面的講解全是幹貨,注意聽!!!!!

SDK讀使能:

一般用不到,他的作用是在SDK裡讀目前幀的序号等,具體取看代碼吧,不懂的也可以問我;

圖像場同步檢測使能:

作用是檢測輸入視訊場同步的上升沿,以觸發FDMA傳輸,如果緩存視訊肯定要使能,如果緩存其他類型資料看情況,比如後面的緩存音頻的工程就沒有使能該信号;

AXI讀寫資料使能:

即讀和寫可選擇,這裡應該表揚米聯客,如果你的工程不需要用到讀,那你就隻使能寫,這樣可以節約fpga資源;

AXI資料位寬:

必須與FDMA的配置保持一緻;這裡我将IP做了修改,該參數修改為可選項有限,如下:

米聯客FDMA3.1資料緩存方案全網最細講解,自創更新版,送3套視訊和音頻緩存工程源碼

讀寫FIFO緩存深度:

IP内部有用到FIFO,這裡就是FIFO的資料深度設定,具體為什麼要用FIFO以及用FIFO的作用請看我之前的文章FDMA控制器這裡我将IP做了修改,該參數修改為可選項有限,如下:

米聯客FDMA3.1資料緩存方案全網最細講解,自創更新版,送3套視訊和音頻緩存工程源碼

如果資料量小的話可以選1024,資料量大的話可以選4096,具體情況具體選擇吧,不懂的也可以聯系問我;

讀寫資料的起始位址:

這裡指的是資料緩存的首位址,IP内部根據一幀資料的完成對起始位址進行了累加,具體看代碼吧,也可以參考我之前的文章FDMA控制器

讀寫資料“偏移”位址:

這裡的偏移打了引号,因為他不是正真的偏移,IP内部代碼關于讀寫位址部分如下:

米聯客FDMA3.1資料緩存方案全網最細講解,自創更新版,送3套視訊和音頻緩存工程源碼

其中fdma_wbufn就是根據一幀資料的完成對起始位址進行了累加,W_addr就是根據突發資料進行的所謂偏移位址的增加,可能講不清楚,具體可以聯系問我吧;

讀寫緩存幀數:

這裡很好了解,就是存幾幀,這裡我将IP做了修改,該參數修改為可選項有限,如下:

米聯客FDMA3.1資料緩存方案全網最細講解,自創更新版,送3套視訊和音頻緩存工程源碼

輸入和輸出資料位寬:

這裡選32是為了和FIFO深度和AXI資料位寬進行适配;

FDMA單次突發的分傳次數:

這裡是為了解決4K邊界的問題,具體參考我之前的文章FDMA控制器這裡我将IP做了修改,該參數修改為可選項有限,如下:

米聯客FDMA3.1資料緩存方案全網最細講解,自創更新版,送3套視訊和音頻緩存工程源碼

讀寫單次突發的長度和次數:

因為DFMA控制器直接略過了AXI突發長度的問題,用FDMA單次突發的分傳次數完美取代了,是以讀寫單次突發的長度可以由使用者自定義,無需再考慮4K對齊,以1080P視訊為例,完全可以設定單次直接突發為一行資料,即1920,突發次數為1080行,一次類推;

單次突發跨度:

比如我想寫如720p視訊,卻以1080P視訊時序讀出來,這裡就有用了,跨度直接設定為1280,後面的工程由講解;

米聯客還配套給出了一個位址切換的IP,如下:

米聯客FDMA3.1資料緩存方案全網最細講解,自創更新版,送3套視訊和音頻緩存工程源碼

這個ip米聯客幹脆就沒有介紹,可能覺得太簡單了,我這裡解析如下:

米聯客FDMA3.1資料緩存方案全網最細講解,自創更新版,送3套視訊和音頻緩存工程源碼

可以看到,這個IP其實還是有點繞的,使用方法官方也沒有說,這裡我給的注釋應該能看得懂吧,這裡我将IP做了修改,該參數修改為可選項有限,如下:

米聯客FDMA3.1資料緩存方案全網最細講解,自創更新版,送3套視訊和音頻緩存工程源碼
米聯客FDMA3.1資料緩存方案全網最細講解,自創更新版,送3套視訊和音頻緩存工程源碼

工程講解:

工程1:

開發闆:Kintex7開發闆;

開發環境:vivado2019.1;

輸入:HDMI視訊1080P,IT6802解碼;

輸出:HDMI視訊1080P;

BD工程:

米聯客FDMA3.1資料緩存方案全網最細講解,自創更新版,送3套視訊和音頻緩存工程源碼

IP配置:

米聯客FDMA3.1資料緩存方案全網最細講解,自創更新版,送3套視訊和音頻緩存工程源碼

代碼架構:

米聯客FDMA3.1資料緩存方案全網最細講解,自創更新版,送3套視訊和音頻緩存工程源碼

工程2:

開發闆:Kintex7開發闆;

開發環境:vivado2019.1;

輸入:OV5640攝像頭720P;

輸出:HDMI視訊1080P;

BD工程:

同工程1;

IP配置:

米聯客FDMA3.1資料緩存方案全網最細講解,自創更新版,送3套視訊和音頻緩存工程源碼

這裡是720P輸入1080P輸出,是以跨度這裡的設定不一樣,要好好了解,不懂得聯系問我吧;

代碼架構:

米聯客FDMA3.1資料緩存方案全網最細講解,自創更新版,送3套視訊和音頻緩存工程源碼

工程3:

開發闆:Kintex7開發闆;

開發環境:vivado2019.1;

輸入:音頻資料,WM8731解碼;

輸出:音頻資料,WM8731編碼;

BD工程:

米聯客FDMA3.1資料緩存方案全網最細講解,自創更新版,送3套視訊和音頻緩存工程源碼

IP配置:

米聯客FDMA3.1資料緩存方案全網最細講解,自創更新版,送3套視訊和音頻緩存工程源碼

這裡說明一下:

音頻串并轉換後一個音頻點是32為資料,采樣率48K,雙通道,是以每秒的資料量就是:

48000*2=96000;

IP裡的單次突發讀寫長度設定為960,實際就是單次讀寫10ms的音頻;

IP裡的突發讀寫次數設定為1000,實際就是一共讀寫10s的音頻;

具體可參考我之前寫得文章音頻緩存

代碼架構:

米聯客FDMA3.1資料緩存方案全網最細講解,自創更新版,送3套視訊和音頻緩存工程源碼

輸出結果:工程1如下:

工程1輸出效果

工程2如下:

工程2輸出效果

福利:送以上3套工程及其源碼,聯系我吧兄弟!!!!!!

繼續閱讀