本文的目的不是介紹內(nèi)存尋址的具體設(shè)計(jì),其實(shí)很多細(xì)節(jié)我也不了解,而是想通過內(nèi)存尋址的設(shè)計(jì)思想看看對(duì) FPGA 的設(shè)計(jì)有什么幫助和借鑒。
內(nèi)存尋址有兩個(gè)的重要的設(shè)計(jì):
內(nèi)存分頁(yè)
頁(yè)表分級(jí)
關(guān)于內(nèi)存分頁(yè) - 規(guī)整即簡(jiǎn)單
內(nèi)存分頁(yè)即將內(nèi)存分割為以頁(yè)(一般是4KB)為單元的塊,然后內(nèi)存的分配和使用都是以頁(yè)為最小單元。假如一個(gè)進(jìn)程只需要 2KB 的內(nèi)存,仍然給其分配 4KB(一頁(yè))的空間。
關(guān)于內(nèi)存分頁(yè)的好處,我覺得知乎上一位知友的描述非常生動(dòng)和形象。他將內(nèi)存分頁(yè)比喻為停車場(chǎng)劃分停車位。停車位的劃分使得停車人尋找停車位時(shí)變得簡(jiǎn)單,停車人不再需要自己判斷位置空間是否夠大能停下車,只需要看有沒有空位即可。同時(shí)也使停車位的使用管理變得高效,停車場(chǎng)管理人員可以很容易判斷并發(fā)布停車位的空位信息。當(dāng)然,這可能只是內(nèi)存分頁(yè)的好處中的其中一個(gè)。
我們可以總結(jié)一下內(nèi)存分頁(yè)的使用場(chǎng)景:
有一塊大的 memory 空間
有很多 Users 要使用 memory
Users 使用 memory 的時(shí)間和空間大小不確定
那么當(dāng)我們?cè)?FPGA 設(shè)計(jì)中遇到這樣類似的場(chǎng)景時(shí),便可以借鑒內(nèi)存分頁(yè)的思想,將 memory 劃分為不同的塊,來提高 memory 的使用和管理效率。當(dāng)然,對(duì)于 memory 塊的劃分可能導(dǎo)致 memory 的浪費(fèi),像前面舉的例子,只需要 2KB 的內(nèi)存,卻分配了 4KB 的空間。如何正確的取舍,去做 tradeoff,這也是設(shè)計(jì)者需要考慮的。
再往本質(zhì)里看,這其實(shí)是硬件設(shè)計(jì)上的一個(gè)“規(guī)整”問題。就像CPU指令集的設(shè)計(jì),因?yàn)椴煌噶顚?duì) bit 利用的規(guī)整,簡(jiǎn)化了CPU的設(shè)計(jì)。規(guī)整即簡(jiǎn)單。
關(guān)于頁(yè)表分級(jí) - 時(shí)間換空間
頁(yè)表是用來將虛擬地址映射為物理地址的數(shù)據(jù)結(jié)構(gòu)。對(duì)于 4KB 的頁(yè)單元,需要 12-bit 來尋址。如果地址線的總位寬是 32-bit,那么我們需要 2^20 (32-12=20) 個(gè)頁(yè)表,假如每個(gè)表項(xiàng)用 4 byte,那么頁(yè)表總共要用到 4MB 的內(nèi)存。這還只是一個(gè)進(jìn)程用到的空間。
頁(yè)表分級(jí)減少了頁(yè)表對(duì)內(nèi)存的使用量。用過兩級(jí)分頁(yè)(第一級(jí)頁(yè)目錄+第二級(jí)頁(yè)表),即先通過第一級(jí)頁(yè)目錄查找到頁(yè)表,再通過第二級(jí)頁(yè)表去查找頁(yè),只有當(dāng)?shù)谝患?jí)的頁(yè)目錄項(xiàng)用到時(shí)才去分配第二級(jí)的頁(yè)表。舉個(gè)例子,假如頁(yè)目錄和頁(yè)表分別占用10-bit。頁(yè)目錄有2^10個(gè)項(xiàng) (一共占用 4KB 內(nèi)存),假如頁(yè)目錄只有第一項(xiàng)被用到,那么我們只需要分配其對(duì)應(yīng)的頁(yè)表,這個(gè)頁(yè)表也是有2^10個(gè)項(xiàng) (一共占用 4KB 內(nèi)存),那么此時(shí)只用到了 4KB+4KB = 8KB 內(nèi)存,相比于 4MB 節(jié)省了很大部分。
我們總結(jié)一下頁(yè)表分級(jí)的場(chǎng)景:
多個(gè) Users 共用一份地址線訪問 memory
每個(gè) Users 都需要自己的 memory 空間
實(shí)際有效的 Users 的數(shù)目是動(dòng)態(tài)變化的
Users 對(duì) memory 空間的使用也是動(dòng)態(tài)變化的
遇到類似的場(chǎng)景我們便可以考慮將地址分級(jí),對(duì) Users 動(dòng)態(tài)分配 memory 空間,幾個(gè) Users 甚至可以復(fù)用一份 memory,達(dá)到節(jié)省 memory 使用的目的。這樣做當(dāng)然增加了 memory 控制和管理的復(fù)雜度,也是設(shè)計(jì)上的 tradeoff。
再往本質(zhì)里看,這個(gè)場(chǎng)景其實(shí)利用了事件發(fā)生的時(shí)間上的差異。是時(shí)間“換”空間的概念,地址分級(jí)只是實(shí)現(xiàn)這個(gè)概念的一個(gè)手段。
總結(jié)
本文思考了內(nèi)存尋址的兩個(gè)設(shè)計(jì)點(diǎn)對(duì) FPGA 設(shè)計(jì)的借鑒意義。很多時(shí)候,設(shè)計(jì)的思想是相通的,尤其是像 CPU 或者 Linux內(nèi)核 這樣的經(jīng)典的,經(jīng)久不衰的設(shè)計(jì)。
來源: 本文轉(zhuǎn)載自FPGA開發(fā)之路 公眾號(hào)
審核編輯:湯梓紅
-
FPGA
+關(guān)注
關(guān)注
1645文章
22050瀏覽量
618602 -
內(nèi)核
+關(guān)注
關(guān)注
3文章
1416瀏覽量
41444 -
cpu
+關(guān)注
關(guān)注
68文章
11080瀏覽量
217120 -
Linux
+關(guān)注
關(guān)注
87文章
11511瀏覽量
213843 -
內(nèi)存
+關(guān)注
關(guān)注
8文章
3125瀏覽量
75274
原文標(biāo)題:從內(nèi)存尋址看 FPGA 設(shè)計(jì)
文章出處:【微信號(hào):FPGA研究院,微信公眾號(hào):FPGA研究院】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
什么是單片機(jī)尋址方式?尋址方式有哪些?
Hexagon DSP的十二種尋址模式
單片機(jī)的可尋址內(nèi)存是何意思
ARM指令尋址方式之內(nèi)存訪問指令尋址

西門子PLC如何尋址,具體方法是怎樣的
尋址方式與內(nèi)存計(jì)算的詳細(xì)說明

評(píng)論