ARRAY_PARTITION是將數(shù)組按照指定要求分割成多個(gè)小的數(shù)組,形成多個(gè)小的存儲(chǔ)空間。這帶來的最直接的好處是增加了數(shù)據(jù)讀/寫端口的個(gè)數(shù),也就提高了數(shù)據(jù)吞吐率,但同時(shí)也會(huì)消耗更多的RAM資源或者寄存器。
先看看ARRAY_PARTITION的基本語法,如下圖所示。這種方法是直接在代碼中用#pragma的方式描述,當(dāng)然也可以直接在VitisHLS中采用圖形界面方式描述,如下圖所示。
在這里有兩個(gè)個(gè)重要的參數(shù)type和factor,其中type有三個(gè)可選值,分別為block、cyclic和complete。我們看看三者到底有什么區(qū)別。為便于說明,這里我們以一個(gè)數(shù)組長度為12的一維數(shù)組A[12]為例。如果type為block,factor為4,意味著將A[12]分割為4個(gè)小的數(shù)組,這樣每個(gè)數(shù)組的長度為12/4=3,同時(shí)每個(gè)數(shù)組中的元素是按順序依次從原始數(shù)組中獲取。如果type為cyclic,factor為4,這仍是將數(shù)組分割為4個(gè)長度為3的小數(shù)組,每個(gè)數(shù)組中的元素是交織地從原始數(shù)組中獲取。如果type是complete,此時(shí)參數(shù)factor不起作用,可理解為將數(shù)組全部打散,可同時(shí)獲取到12個(gè)元素,從而以寄存器方式實(shí)現(xiàn)。三者的區(qū)別如下圖所示。
上述三種形式以#pragma的形式描述如下圖所示。
block、cyclic和complete在下面這種描述方式下,最終的結(jié)果是一致的。
這里有一個(gè)問題,如果factor不能被數(shù)組長度整除時(shí)會(huì)是怎樣的結(jié)果呢?假定上述案例中factor為5,最終將是5個(gè)數(shù)組,其中前4個(gè)數(shù)組長度為2,最后一個(gè)數(shù)組長度為4。
ARRAY_PARTITION還允許對不同維度進(jìn)行分割,以二維數(shù)組A[6][4]為例,dim的含義如下圖所示。
一旦指定了dim,就可以對指定dim進(jìn)行分割,這里以A[6][4]為例,分割情形如下圖所示。
此外,在使用#pragma方式描述時(shí),可以通過宏macro給參數(shù)賦值,如下圖所示方式。
那么到底什么時(shí)候用block,什么時(shí)候用cyclic呢?本質(zhì)上與數(shù)據(jù)流密切相關(guān),在下一篇文章中我們給出一個(gè)具體案例幫助大家理解。
責(zé)任編輯:lq
-
寄存器
+關(guān)注
關(guān)注
31文章
5369瀏覽量
121275 -
數(shù)組
+關(guān)注
關(guān)注
1文章
417瀏覽量
26034 -
圖形界面
+關(guān)注
關(guān)注
0文章
37瀏覽量
7407
原文標(biāo)題:圖解ARRAY_PARTITION
文章出處:【微信號:Lauren_FPGA,微信公眾號:FPGA技術(shù)驛站】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
Lua語法基礎(chǔ)教程(下篇)
![Lua<b class='flag-5'>語法</b>基礎(chǔ)教程(下篇)](https://file1.elecfans.com//web2/M00/0A/44/wKgZomccZMyAS_3EAAA6RhgwQQ0754.png)
Lua語法基礎(chǔ)教程(中篇)
![Lua<b class='flag-5'>語法</b>基礎(chǔ)教程(中篇)](https://file1.elecfans.com//web2/M00/0A/44/wKgZomccZIWAUZsxAAAimiNr02k015.png)
Lua語法基礎(chǔ)教程(上篇)
編譯例程partition_mmap,報(bào)錯(cuò)no such vaddr range怎么解決?
rk3568在.config中配置了CONFIG_OPTEE_ALWAYS_USE_SECURITY_PARTITION =y,parameter.txt卻沒有security分區(qū)
使用NVS Partition Generator Utility nvs讀取不到key值,是怎么回事?
為什么nvs_partition_gen.py無法對csv文件轉(zhuǎn)換成bin文件?
FPGA學(xué)習(xí)筆記---基本語法
擦除flash的API函數(shù)esp_partition_erase_range(),擦除的扇區(qū)大小能否設(shè)置呢?
IDF-4.4.2在修改boot過程中,編譯有提示bootloader受到partition-table offset的限制,為什么?
請問如何讀取partition table的數(shù)據(jù)?
直流可編程電子負(fù)載IT8500系列編程與語法指南
hierarchy partition后,為何maia_cpu做floorplan時(shí)候不見pin?
![hierarchy <b class='flag-5'>partition</b>后,為何maia_cpu做floorplan時(shí)候不見pin?](https://file1.elecfans.com/web2/M00/C0/B2/wKgZomXX_v-ABSCOAAA6WeJ0cow414.png)
評論