UltraRAM 是 UltraScale +? 系列中最新的存儲(chǔ)器模塊,能實(shí)現(xiàn)高達(dá) 500Mb 的總片上存儲(chǔ)容量,相當(dāng)于賽靈思 28nm FPGA 片上存儲(chǔ)器容量的 6 倍。
傳統(tǒng)的 FPGA 和 SoC 包含的片上存儲(chǔ)器以 block RAM 和分布式 RAM 的形式存在。由于器件能以更高數(shù)據(jù)速率處理更多數(shù)據(jù),因此越發(fā)需要將數(shù)據(jù)緩沖或存儲(chǔ)在靠近處理器的位置。
UltraScale+ 系列中的新產(chǎn)品是一款容量更大的稱為 UltraRAM 的靈活存儲(chǔ)器模塊。
UltraRAM 模塊可級(jí)聯(lián)在一起構(gòu)成更大的片上存儲(chǔ)器。在設(shè)計(jì)中使用 UltraRAM 很簡(jiǎn)單,因?yàn)橘愳`思提供了所有必要工具,利用這些工具可以在設(shè)計(jì)中集成功能強(qiáng)大的最新模塊。
?
緩沖與存儲(chǔ)的需求增加
UltraScale+ ? FPGA 和 MPSoC 能夠傳輸和處理的數(shù)據(jù)比前一代器件多得多。最大的 Virtex?UltraScale+ FPGA(即 VU13P)包含 128 個(gè)數(shù)據(jù)速率高達(dá) 32.75Gb/s 的 GTY 收發(fā)器,以及超過(guò) 11,000個(gè) 工作頻率接近 900MHz 的 DSP Slice。這樣可得到 8.4Tb/s 串行帶寬和 21 TMAC/s 的信號(hào)處理速度,因此,片上存儲(chǔ)器也需要實(shí)現(xiàn)同樣的增長(zhǎng),以使系統(tǒng)能夠有效地緩沖處理前進(jìn)入的數(shù)據(jù)和處理后流出的數(shù)據(jù)。
到達(dá)(進(jìn)入)UltraScale ? FPGA 器件, block RAM 和分布式 RAM 可作為快速和高效的片上存儲(chǔ)器。為了成功處理數(shù)百兆位的數(shù)據(jù),通常需要使用外部存儲(chǔ)器,例如 DDR4、DDR3 或 RLDRAM3。
UltraScale+ 系列產(chǎn)品則采用一種新的存儲(chǔ)方法。UltraRAM 是一種大容量、重量輕的存儲(chǔ)器模塊,使UltraScale+ 器件具備 500Mb 以上的高能效、低成本片上數(shù)據(jù)存儲(chǔ)器,相當(dāng)于賽靈思 28nm FPGA 片上存儲(chǔ)器的 6 倍。
靈活的級(jí)聯(lián)功能使得 UltraRAM 模塊能夠采用多種配置——既可單獨(dú)使用,也可在器件中將所有模塊連接在一起使用。這使得用戶能夠構(gòu)建大小適合應(yīng)用需求的存儲(chǔ)器陣列,并省去一些 PCB 上的外部存儲(chǔ)器組件,例如 QDR SRAM。
UltraRAM 細(xì)節(jié)與特性
賽靈思很多代的 FPGA 和 SoC 都采用分列架構(gòu),將不同資源列并排布置在一起。列的數(shù)量和高度直接決定 FPGA 或 SoC 的尺寸和容量。
大多數(shù) Kintex? UltraScale+ 和 Zynq? UltraScale+ 器件都包含一列 UltraRAM ;高端 Virtex UltraScale+FPGA 則包含多達(dá) 5 列 UltraRAM。UltraRAM 可在設(shè)計(jì)中作為單個(gè) 288Kb 存儲(chǔ)器,或者連接在一起構(gòu)成更大的 RAM 陣列。相同列中的所有 UltraRAM 都可連接在一起,通過(guò)專用的級(jí)聯(lián)路由傳送地址、數(shù)據(jù)和控制信號(hào)。在 Kintex UltraScale+ 和 Zynq UltraScale+ 器件中,級(jí)聯(lián)得到的 RAM 陣列可高達(dá)36Mb,在 Virtex UltraScale+ 器件中可達(dá)到 22.5Mb。Virtex UltraScale+ 系列中,所有 UltraRAM 列都可通過(guò)光纖路由連接在一起,在最大器件中可構(gòu)成容量達(dá) 360Mb 的存儲(chǔ)器陣列。
每個(gè) UltraRAM 模塊都是一個(gè)雙端口同步 288Kb RAM,采用深度為 4,096、寬度為 72 位的固定配置。端口 A 和端口 B 共享相同時(shí)鐘信號(hào)。在外部時(shí)鐘的單個(gè)周期內(nèi),端口 A 操作總是在端口 B 操作之前完成。每個(gè)端口在每個(gè)時(shí)鐘周期都可獨(dú)立執(zhí)行一個(gè)讀操作或一個(gè)寫(xiě)操作。當(dāng)兩個(gè)端口在相同時(shí)鐘周期內(nèi)以相同地址(即地址沖突)執(zhí)行寫(xiě)操作時(shí),端口 B 的寫(xiě)操作有效,因?yàn)槎丝?A 上的寫(xiě)操作被覆蓋。當(dāng)端口 A 執(zhí)行讀操作,而端口 B 以相同地址執(zhí)行寫(xiě)操作時(shí),端口 A 獲得存儲(chǔ)器陣列中的舊數(shù)據(jù),然后端口 B 上的新數(shù)據(jù)被寫(xiě)到存儲(chǔ)器陣列。當(dāng)端口 A 執(zhí)行寫(xiě)操作,端口 B 執(zhí)行讀操作時(shí),端口 A 上的新數(shù)據(jù)被寫(xiě)入存儲(chǔ)器陣列,新數(shù)據(jù)也被讀到端口 B。對(duì)于每個(gè)端口,當(dāng)執(zhí)行寫(xiě)操作時(shí),該端口的讀輸出不變,保持之前的值。
每個(gè) UltraRAM 存儲(chǔ)器陣列的內(nèi)容都被每個(gè)端口上的漢明碼單誤差校正雙誤差檢測(cè) (SECDED) ECC碼保護(hù),以確保數(shù)據(jù)完整性。啟動(dòng) ECC 后,UltraRAM 提供 64 位寬的被保護(hù)數(shù)據(jù)字。UltraRAM 的SECDED ECC 代碼與 block RAM 的兼容。這樣可實(shí)現(xiàn)端到端數(shù)據(jù)保護(hù)方案,即在一個(gè)存儲(chǔ)器輸入端進(jìn)行編碼的數(shù)據(jù),在下游存儲(chǔ)器輸出端對(duì)其進(jìn)行解碼之前,可在多個(gè)流水線級(jí)、存儲(chǔ)器類型和 / 或邏輯上保持受保護(hù)狀態(tài)。
UltraRAM 每?jī)蓚€(gè)端口包含多達(dá)四個(gè)流水線級(jí),并可針對(duì) 1-4 個(gè)時(shí)鐘周期的時(shí)延進(jìn)行配置。當(dāng)通過(guò)級(jí)聯(lián)UltraRAM 搭建較大的 RAM 陣列時(shí),時(shí)延取決于所用 UltraRAM 的數(shù)量(即陣列的大小以及目標(biāo)工作頻率)。
功耗降低
UltraRAM 提供各種內(nèi)置功能以最大化功率效率,通常無(wú)需用戶干預(yù)。這些功能包括 :
? 將設(shè)計(jì)中不用的 UltraRAM 斷電
? 自動(dòng)對(duì)不使用的流水線寄存器進(jìn)行時(shí)鐘門控
? 當(dāng) UltraRAM 長(zhǎng)時(shí)間不使用時(shí),使其進(jìn)入休眠模式
UltraRAM 可通過(guò)手動(dòng)或自動(dòng)進(jìn)入休眠模式。用戶可以訪問(wèn) UltraRAM 的 SLEEP 端口。激活 SLEEP時(shí),UltraRAM 從下個(gè)時(shí)鐘周期開(kāi)始進(jìn)入休眠模式。休眠模式下,UltraRAM SRAM 存儲(chǔ)器的外設(shè)邏輯斷電,但 SRAM 保持加電并保留其中的內(nèi)容。
每個(gè) UltraRAM 都包含相應(yīng)的電路用來(lái)預(yù)測(cè)和識(shí)別接下來(lái) N 個(gè)周期內(nèi)模塊是否會(huì)被使用,如果不使用,那么在未使用時(shí)間足夠長(zhǎng)之后,模塊會(huì)被送入休眠模式。這種自動(dòng)休眠模式使用休眠端口,利用內(nèi)置的控制邏輯來(lái)檢查將即將輸入的地址和使能信號(hào)的狀態(tài)。AUTO_SLEEP_LATENCY 屬性決定地址和使能信號(hào)需要比其他輸入信號(hào)提前多久到達(dá)。該信息用來(lái)確定是否有足夠的時(shí)間使單個(gè) UltraRAM 進(jìn)入休眠模式并在下個(gè)活動(dòng)之前將其喚醒。
在設(shè)計(jì)中使用 UltraRAM
UltraScale+ 產(chǎn)品組合使用賽靈思的 Vivado?Design Suite。設(shè)計(jì)工具提供一系列代碼模板,可幫助用戶成功鎖定器件內(nèi)的可用資源。有三種方法可以在 RTL 設(shè)計(jì)中使用 UltraRAM :編寫(xiě)代碼以調(diào)用存儲(chǔ)器 ;實(shí)例化器件原語(yǔ) ;使用最近添加的賽靈思參數(shù)化宏 (XPM)。大多數(shù)用戶都熟悉調(diào)用和實(shí)例化。VivadoDesign Suite 包含調(diào)用模板,所在位置 :
模板 → VHDL/Verilog → 綜合構(gòu)建 → 編碼實(shí)例 → RAM
在 Vivado Design Suite v2016.1. 中,用戶必須指定 ramstyle=“ultra”才能明確指示 Vivado 綜合使用UltraRAM。
如果用戶需要對(duì) UltraRAM 模塊的連接具有最終控制權(quán),應(yīng)使用以下位置的器件原語(yǔ) :
模板 > VHDL/Verilog > 器件原語(yǔ)實(shí)例化 > Kintex/Virtex UltraScale+ > BLOCKRAM > URAM
盡管能讓用戶對(duì)單個(gè)組件的連接實(shí)現(xiàn)最嚴(yán)格的控制,但如果采用很多組件并有很多端口和信號(hào),那么這種方法很快就會(huì)變得很費(fèi)勁。
要在 RTL 設(shè)計(jì)中采用 UltraRAM,第三種方法是 XPM :
模板 → VHDL/Verilog → 賽靈思參數(shù)化宏 (XPM) → 存儲(chǔ)器 (XPM_MEMORY) → RAM
XPM 是一種用來(lái)根據(jù)用戶指定要求創(chuàng)建 RAM 和 ROM 結(jié)構(gòu)的最新工具。用戶可在 XPM 代碼中指定多個(gè)類屬,包括存儲(chǔ)器大小、時(shí)鐘模式、ECC 模式等。這些要求隨后被 Vivado 綜合轉(zhuǎn)化為適當(dāng)?shù)拇鎯?chǔ)器陣列尺寸和風(fēng)格。
在 Vivado Design Suite v2016.1 中,用戶必須在 MEMORY_PRIMITIVE 類屬上指定值 UltraRAM ,以明確指示 Vivado 綜合使用 UltraRAM。
創(chuàng)建存儲(chǔ)器陣列
UltraRAM 架構(gòu)擴(kuò)展性非常強(qiáng),允許很多個(gè) UltraRAM 模塊高效地連接在一起,以構(gòu)成深邏輯存儲(chǔ)器,僅使用很少甚至無(wú)需架構(gòu)資源,而且訪問(wèn)時(shí)延相對(duì)較短。每個(gè) UltraRAM 包含所有必要的邏輯,用以將相同列中相鄰 UltraRAM 模塊之間的全部輸入以及輸出接口進(jìn)行完全級(jí)聯(lián),并有選擇性地進(jìn)行流水線化。此外,每個(gè) UltraRAM 都包含每端口上的附加邏輯和控制輸入,以獨(dú)立確定 UltraRAM 模塊陣列中經(jīng)過(guò)的讀或?qū)懯聞?wù)處理是否針對(duì)本地陣列,還是應(yīng)該被忽略掉。這種分布式的決策邏輯能實(shí)現(xiàn)靈活而且低開(kāi)銷的擴(kuò)展性。
當(dāng)設(shè)計(jì)中的指定存儲(chǔ)器陣列需要一個(gè)以上 UltraRAM 模塊時(shí),必須決定如何將多個(gè) UltraRAM 連接在一起。有兩個(gè)選擇分別是 :使用一個(gè)列中的所有 UltraRAM,或者使用多列陣列中的 UltraRAM。如果在一個(gè)列中構(gòu)建 UltraRAM 陣列,那么用來(lái)級(jí)聯(lián) UltraRAM 的所有必要路由都包含在該列中,使工具能夠充分利用所提供的專用資源。見(jiàn)圖 1。
圖 1 :在一個(gè)列中級(jí)聯(lián)的 UltraRAM
如果設(shè)計(jì)要求決定了多列陣列更加適合,例如,如果所需的陣列大于單個(gè)列的容量,那么需要?jiǎng)?chuàng)建多列陣列(見(jiàn)圖 2)。這種情況下,需要用一些架構(gòu)資源將多個(gè)列連接在一起。最大可實(shí)現(xiàn)頻率以及多列陣列中的訪問(wèn)時(shí)延取決于陣列尺寸、所用列的數(shù)量以及其他設(shè)計(jì)因素(例如 UltraRAM 列之間有多少架構(gòu)資源被設(shè)計(jì)的其他部分使用)。
圖 2 :多列 UltraRAM 陣列
當(dāng)創(chuàng)建 UltraRAM 陣列時(shí),地址、控制和寫(xiě)數(shù)據(jù)信號(hào)被提供至陣列的左下角,數(shù)據(jù)從陣列的右上角讀取。這樣能確保,通過(guò)對(duì)固定大小的陣列進(jìn)行恰當(dāng)流水線化后,從任何地址讀取任何數(shù)據(jù)所產(chǎn)生的時(shí)延總相同。
與每個(gè) UltraRAM 自身可提供的 64 位 ECC 保護(hù)或 72 位非 ECC 保護(hù)字寬相比,寬數(shù)據(jù)或控制路徑設(shè)計(jì)需要更高的總線帶寬。這種情況下,可以并列使用多個(gè)相同的 UltraRAM 模塊實(shí)例或以上描述的級(jí)聯(lián)結(jié)構(gòu)來(lái)構(gòu)建非常高效的寬字?jǐn)?shù)據(jù)存儲(chǔ)結(jié)構(gòu)。
寄存器和流水線化
每個(gè) UltraRAM 包含多個(gè)輸入和輸出寄存器,如圖 3 所示,其中有一些是可選的,取決于配置情況和所需的功能。
圖 3 :UltraRAM 寄存器
IREG、OREG 和 OREG_ECC 寄存器根據(jù)用戶所需的存儲(chǔ)器功能進(jìn)行激活。此外,當(dāng)把多個(gè) UltraRAM級(jí)聯(lián)在一起時(shí)使用的寄存器為 :IREG_PRE 和 REG_CAS。
當(dāng)把多個(gè) UltraRAM 連接在一起時(shí)需要遵守一些規(guī)則,以保持最大工作頻率 :
? 單列陣列中的第一個(gè)實(shí)例或多列陣列每個(gè)列中的第一個(gè)實(shí)例都必須使用 IREG_PRE 寄存器。
? 如果設(shè)計(jì)中需要,OREG 和 / 或 OREG_ECC 寄存器應(yīng)針對(duì)陣列中的所有 UltraRAM 一直啟用。
? 必須每經(jīng)過(guò)四個(gè) UltraRAM 模塊激活 REG_CAS 寄存器。
? 單列陣列中的最后一個(gè)實(shí)例或者多列陣列每列中的最后一個(gè)實(shí)例必須使用 REG_CAS 寄存器。
? 如果陣列垂直跨越多個(gè)時(shí)鐘區(qū)域,那么需要在時(shí)鐘區(qū)域邊界兩側(cè)提供附加流水線級(jí)。每個(gè)時(shí)鐘區(qū)域的每列上有 16 個(gè) UltraRAM。
如需了解 UltraRAM 模塊的更多信息和詳細(xì)框圖,請(qǐng)參考 UG573《UltraScale 架構(gòu)存儲(chǔ)器資源用戶指南》 的第二章。
遷移到 UltraRAM
用戶一定要知道所選目標(biāo)器件中不同存儲(chǔ)器資源的數(shù)量。有些情況下,用戶最開(kāi)始可以針對(duì)只有 blockRAM 的器件,但設(shè)計(jì)最終將會(huì)針對(duì)包含 UltraRAM 的器件。這種情況下,用戶需要了解 UltraRAM 的特性,并編寫(xiě)代碼以利用 block RAM 和 UltraRAM 中的特性。這樣,工具就可使用目標(biāo)器件中可使用的UltraRAM,而且,當(dāng)改用不同器件時(shí)用戶不必重新設(shè)計(jì)。
表 1 給出了不同 UltraScale+ 系列中 UltraRAM 的數(shù)量。在 Virtex UltraScale+ 器件中,可將所有UltraRAM 連在一起,以構(gòu)成容量高達(dá) 360Mb 的多列陣列 ;不過(guò),也可實(shí)現(xiàn)更為常用的 10Mb-144Mb 范圍的多實(shí)例使用模型。
表 1 :UltraScale+ 產(chǎn)品組合中的 UltraRAM 資源
所有 UltraScale+ 器件還包含可實(shí)現(xiàn)較小存儲(chǔ)器的 block RAM 和分布式 RAM,從而在 VU13P 中實(shí)現(xiàn)總?cè)萘砍^(guò) 500Mb 的片上存儲(chǔ)器。
DS890,《UltraScale 架構(gòu)和產(chǎn)品簡(jiǎn)介》給出了器件資源方面的更多詳情。
如果所選的器件中有 UltraRAM,應(yīng)該將其用作 144Kb 或更大的存儲(chǔ)器。
替代外部存儲(chǔ)器組件
高達(dá) 360Mb 的 UltraRAM 幾乎可配置成無(wú)數(shù)種方式,因此會(huì)有很多種使用模式。常見(jiàn)的 UltraRAM 使用模式是如果不實(shí)現(xiàn)在外部存儲(chǔ)器(例如 QDR SRAM)中,可以將存儲(chǔ)器整合在 FPGA 或 MPSoC 中。片上存儲(chǔ)器的優(yōu)勢(shì)在于可采用所需要的容量大小,而不是存儲(chǔ)器廠商提供的大小 ;而且存儲(chǔ)器在邏輯上非常接近設(shè)計(jì)中用來(lái)緩沖或存儲(chǔ)數(shù)據(jù)的位置。此外,為了與外部存儲(chǔ)器進(jìn)行連接,數(shù)據(jù)必須通過(guò)存儲(chǔ)器接口或控制器,并且通過(guò) FPGA/MPSoC 上的 I/O 引腳,而且外部存儲(chǔ)器組件會(huì)給系統(tǒng)增加很多功耗。通過(guò)以 UltraRAM 的方式在片上實(shí)現(xiàn)大容量存儲(chǔ),這樣可消除 FPGA/MPSoC 的 I/O 以及外部存儲(chǔ)器的 I/O產(chǎn)生的功耗。
輸入多播
每個(gè) UltraRAM 端口都可確定級(jí)聯(lián)模式中的事務(wù)處理是否屬于局部存儲(chǔ)器陣列。該功能可用來(lái)實(shí)現(xiàn)動(dòng)態(tài)的事務(wù)處理級(jí)寫(xiě)單播、多播和廣播存儲(chǔ)器結(jié)構(gòu)。這種結(jié)構(gòu)可以構(gòu)成高效輸出緩沖存儲(chǔ)器開(kāi)關(guān)的基礎(chǔ)。
有一個(gè) UltraRAM 存儲(chǔ)器端口專門用來(lái)寫(xiě),另一個(gè)專門用來(lái)讀。所有 UltraRAM 模塊的寫(xiě)端口都采用每模塊唯一的獨(dú)熱編碼 SELF_ADDR 和相配的獨(dú)冷編碼 SELF_MASK 值配置為連續(xù)級(jí)聯(lián)形式。每個(gè)寫(xiě)事務(wù)處理都可以被送到單個(gè)、多個(gè)或所有 UltraRAM 模塊,方法是設(shè)置一個(gè)或多個(gè)相應(yīng)的全局 / 高地址位,以匹配所有目標(biāo)模塊的 SELF_ADDR 屬性的 logical-OR。所有 UltraRAM 模塊的讀端口都是非級(jí)聯(lián)的,能夠讓單個(gè)寫(xiě)事務(wù)處理傳播到多個(gè)消費(fèi)模塊。
每個(gè) UltraRAM 模塊代表一個(gè)消費(fèi)模塊的緩沖要求。要獲得更大的存儲(chǔ)容量,可將每個(gè) UltraRAM 模塊改成 N 個(gè) UltraRAM 模塊級(jí)聯(lián)成的消費(fèi)模塊。
假設(shè) C 個(gè)消費(fèi)模塊從 C 個(gè)邏輯存儲(chǔ)器(每個(gè)深度為 N 個(gè) UltraRAM 模塊)并行讀取,那么寫(xiě)端口需要一個(gè)包含所有 C * N 個(gè) UltraRAM 模塊的連續(xù)級(jí)聯(lián),而讀端口需要 C 個(gè) 獨(dú)立的級(jí)聯(lián),每個(gè)深度為 N 個(gè)UltraRAM。
圖 4 給出了這樣一種配置,其中每個(gè)消費(fèi)模塊有四個(gè)輸出,每個(gè)輸出需要一個(gè) UltraRAM 模塊作為緩沖,并有兩個(gè)樣本多播事務(wù)處理分別針對(duì) UltraRAM 模塊 0 和 1 以及 1 和 3。
圖 4 :輸入多播
結(jié)論
每個(gè)設(shè)計(jì)都需要和使用這樣或那樣的存儲(chǔ)器。將大容量、靈活的 UltraRAM 模塊添加到 UltraScale+ 產(chǎn)品系列后,為用戶提供的片上存儲(chǔ)器容量比以往任何器件或競(jìng)爭(zhēng)器件都要大。由于模塊可連接在一起構(gòu)成不同大小的存儲(chǔ)器陣列,這樣用戶就能在設(shè)計(jì)中在需要的位置構(gòu)建理想的存儲(chǔ)器解決方案,消除了使用外部 SRAM 組件所帶來(lái)的功耗和電路板復(fù)雜性。
評(píng)論