存儲(chǔ)器是FPGA設(shè)計(jì)中的常用單元,對(duì)存儲(chǔ)器的操作,最基礎(chǔ)的就是讀寫操作,還有一種就是讀改寫操作,即先讀出存儲(chǔ)器中的數(shù)據(jù),對(duì)其進(jìn)行修改后,再寫入存儲(chǔ)器。這樣的操作其實(shí)在大多數(shù)情況下都是非常簡單的,不值一提,但是在某些有性能要求的場景下,就需要一些考慮。
比如輸入是一個(gè)8bit的數(shù)據(jù),取值為0-255,求每個(gè)數(shù)值出現(xiàn)的次數(shù),即同時(shí)0出現(xiàn)多少次,1出現(xiàn)多少次……
讀改寫的問題
我們先以最簡單的例子,對(duì)FPGA內(nèi)部的RAM進(jìn)行讀改寫操作,看看是什么情況,假定需要對(duì)RAM中的數(shù)據(jù)讀出來加1后再寫回原地址,如下圖所示:
通過讀地址A,在下一個(gè)cycle得到數(shù)據(jù)X,然后對(duì)X進(jìn)行加一操作后,再寫回地址A。我們可以看到,整個(gè)過程需要3個(gè)cycle的時(shí)間。如果再對(duì)地址A開啟讀操作,就需要在第四個(gè)cycle開始,否則就讀不到最新的數(shù)據(jù)。換句話說,上述操作無法進(jìn)行流水操作,每次讀改寫操作至少需要3個(gè)cycle的時(shí)間(對(duì)于其他更加復(fù)雜的“改”操作,可能需要消耗更多的時(shí)間)。對(duì)于性能要求較高的場景,必須要流水操作的時(shí)候,如何處理呢?
解決方案
我們知道不能流水的原因是因?yàn)樽钚碌臄?shù)據(jù)可能沒有寫回RAM,還在數(shù)據(jù)總線上,因此判斷最新的數(shù)據(jù)在哪里就是解決這個(gè)問題的關(guān)鍵。這里還需要用到一個(gè)“cache”,用reg來實(shí)現(xiàn),主要是記錄即將要寫入RAM的地址和數(shù)據(jù),即記錄寫總線上的地址和數(shù)據(jù)。其實(shí)現(xiàn)原理可以用一個(gè)時(shí)序圖來展示。
我們假定要讀的地址是AABA,但是為了區(qū)分,我們用A1、A2、B1、A3來表示(A1、A2、A3其實(shí)是同一個(gè)地址)。我們看看如何利用“cache”實(shí)現(xiàn)流水式的讀改寫操作。
第1個(gè)時(shí)鐘周期,讀A1的內(nèi)容,此時(shí)cache的內(nèi)容也為0;
第2個(gè)時(shí)鐘周期,A1的內(nèi)容在dout上,為x,我們同時(shí)拿A1這個(gè)地址去“cache”查詢,由于“cache”為空,不取“cache”中的值,直接取dout上的值作為改寫的對(duì)象;同時(shí)也開始讀A2的內(nèi)容;
第3個(gè)時(shí)鐘周期,主要做2個(gè)更新,一是根據(jù)第2個(gè)周期中出現(xiàn)的A1和dout的值,更新到“cache”中,二是將更新的數(shù)據(jù)和地址放在寫總線上,這2個(gè)更新的內(nèi)容其實(shí)是一致的,都是改和寫的過程;同時(shí)拿A2去查詢“cache”;
第4個(gè)時(shí)鐘周期,根據(jù)查詢的結(jié)果,例子中為“cache”命中,選擇“cache”中的內(nèi)容x+1為改寫對(duì)象,而不是dout上讀取的值,所以寫入的內(nèi)容為x+2。同時(shí)根據(jù)第三個(gè)時(shí)鐘周期中的A2來更新cache,將A2和對(duì)應(yīng)寫入的值x+2更新到“cache”中,此時(shí)“cache”中有2個(gè)內(nèi)容,一個(gè)是A1和值x+1,一個(gè)是A2和值x+2;
從第4個(gè)時(shí)鐘周期可以看到,讀A2這個(gè)地址得到的值,不是從dout上獲取的,而是從“cache”中獲取的,這就是利用“cache”來實(shí)現(xiàn)讀改寫的流水操作。
在第5個(gè)時(shí)鐘周期,用A3去查詢“cache”時(shí),“cache”中有2個(gè)A,即A1和A2,這時(shí)我們?nèi)プ睢靶隆钡腁,即A2的值x+2作為改寫對(duì)象。
總結(jié)
在高性能的讀改寫場景下,利用“cache”可以實(shí)現(xiàn)讀改寫的流水操作,大大提高了處理性能。當(dāng)然如果輸入的數(shù)據(jù)并不是流水的,采用最簡單的方式實(shí)現(xiàn)讀改寫即可。
-
FPGA
+關(guān)注
關(guān)注
1629文章
21744瀏覽量
603665 -
FPGA設(shè)計(jì)
+關(guān)注
關(guān)注
9文章
428瀏覽量
26524 -
存儲(chǔ)器
+關(guān)注
關(guān)注
38文章
7493瀏覽量
163879 -
RAM
+關(guān)注
關(guān)注
8文章
1368瀏覽量
114731
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論