從《黑客帝國》深入工程師世界,我們可以發(fā)現這些工程師其實都是愛做夢的孩子。他們在科幻的電子世界里“權傾一方”,像孩子一樣打造著自己想要的美夢。今天,我們就來向這些長不大的孩子學習學習,如何在Arria10中Get刷新技能!
一般來說,定期刷新內存內容的要求通常是由內存控制器處理。然而,在Arria10中的用戶控制刷新項還能夠支持指定內存刷新的時間。因此,如果能夠借助流量模式方面的特定知識,那么我們就可以指定刷新操作時間,從而避免打斷讀/寫操作、提升效率。
在基于UNIPHY的內存控制器中,我們可以通過專用的用戶控制刷新接口發(fā)送用戶控制刷新請求。但由于該接口不支持Arria 10硬內存控制器,因此為了實現用戶控制刷新,需要通過內存映射配置和狀態(tài)寄存器接口(簡稱MMR接口)來發(fā)送請求。
那么該如何通過內存映射配置和狀態(tài)寄存器接口(簡稱MMR接口)來發(fā)送請求呢?為此,我們得掌握如何在內存IP參數化過程中啟用用戶控制刷新選項。首先,需要在“一般”選項卡中選擇硬PHY和硬控制器配置。
Attention: 只有DDR3、DDR4和LPDDR3協(xié)議支持該配置。
剩下的,就只是一些簡單的程序操作,其目的就是正常實施內存IP的參數化。(詳情步驟請參觀前文視頻。)
以上設置將為MMR接口開放附加端口,創(chuàng)建用于與這些端口通信的用戶邏輯。(但此時的MMR接口并不支持空發(fā)讀取/寫入。)然后再將這些信號與GND進行綁定。不過由于該接口并不支持背壓,因此“waitrequest”始終處于較低電平。只有在成功完成校準后,用戶才能夠訪問MMR接口。
用于啟動用戶控制刷新的寄存器
Attention:地址以十六進制值列出。
將cfg_usr_rfsh_en字段設置為1來啟用刷新。該字段對應地址19h的位數4。
mmr_refresh_req字段寬4位,每位對應每個隊列接收的刷新請求。
我們可讀取mmr_refresh_ack字段,了解刷新操作是否在進行中。該字段對應地址32h的位數0。
成功完成校準后向隊列0發(fā)送刷新請求的預期時間圖
如上圖所示:將數據0x0000_0010寫入cfg_usr_rfsh_en字段,是用于啟用用戶刷新。然后將數據0x0000_0001寫入mmr_refresh_request字段,向隊列0發(fā)送刷新請求。在32個時鐘周期后,讀取mmr_refresh_ack字段,直至顯示readdatavalid信號。
若讀取數據為1b’1,則表示刷新正在進行。而我們只能在看到確認信號后,才能再發(fā)出下一個刷新請求。當然,如果想要禁用刷新,則將數據0x0000_0000寫入mmr_refresh_req字段即可。怎么樣,這些操作還是挺簡單的吧?
本期主題更多的是如何通過內存映射配置和狀態(tài)寄存器接口(簡稱MMR接口)來發(fā)送請求。作為一名優(yōu)秀的攻城獅,相信您掌握此方法自然很容易。但您是否還有其它更好的方法Get Arria10中的刷新技能呢?
-
控制器
+關注
關注
112文章
16361瀏覽量
178071 -
寄存器
+關注
關注
31文章
5343瀏覽量
120377 -
Arria
+關注
關注
0文章
10瀏覽量
9471
原文標題:“權傾一方”的工程師,教你如何在Arria10中掌控刷新技能!
文章出處:【微信號:FPGAer_Club,微信公眾號:FPGAer俱樂部】歡迎添加關注!文章轉載請注明出處。
發(fā)布評論請先 登錄
相關推薦
評論