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