用FPGA 技術(shù)更新傳統(tǒng)系統(tǒng)是許多嵌入式系統(tǒng)設(shè)計(jì)人員都知道的場景。但現(xiàn)有設(shè)計(jì)確實(shí)需要更新,這其中就包括連接互聯(lián)網(wǎng)、 IoT等。當(dāng)然,我們也需要進(jìn)一步增強(qiáng)安全性。尤其考慮到目前人們熱衷于人工智能,大家對深度學(xué)習(xí)推理或機(jī)器視覺又有了新的需求。
盡管現(xiàn)在已將系統(tǒng)整合至物聯(lián)網(wǎng),但仍然面臨一個(gè)迫在眉睫的問題——這些更改將對系統(tǒng)硬件造成影響。直接使用 CPU 可以緩解所有的問題(圖 1)。但對于小型嵌入式設(shè)計(jì)(一開始就只有一英寸的小外形)來說,由于存在成本、功耗和散熱方面的限制,這種蠻力法可能行不通。此時(shí),必須采用 FPGA 方法。
圖1.更新傳統(tǒng)系統(tǒng)可能需要采用新的方法來提升計(jì)算能力
事實(shí)上,系統(tǒng)中通常有一個(gè)老舊的小型 FPGA 負(fù)責(zé)執(zhí)行實(shí)用工作:充當(dāng)端口擴(kuò)展器或設(shè)備控制器。然而,現(xiàn)在的低端 FPGA 可以充當(dāng)硬件加速器,將新的計(jì)算要求拉回至現(xiàn)有系統(tǒng)處理器范圍之內(nèi)。
采取下一步行動
我們需要采取進(jìn)一步行動,考慮將系統(tǒng)(或子系統(tǒng))的 CPU 或微控制器單元 (MCU) 也整合到 FPGA 中是否可行?顯而易見,答案是“當(dāng)然不可行”。眾所周知,F(xiàn)PGA 中的軟 CPU 內(nèi)核尺寸大、速度慢、價(jià)格貴。除了對于重要的嵌入式系統(tǒng)來說,這些概括性說法都不對。
我們不是在討論擁有強(qiáng)大 CPU 性能的系統(tǒng)。(比如 Arm* Cortex*-A53 內(nèi)核集群。)在硬件中包含此類 CPU 集群的中端 FPGA,但該主題不在本文介紹范圍之內(nèi)。今天我們討論的是處理器適用范圍更廣的系統(tǒng)(或總體設(shè)計(jì)中的子系統(tǒng)):微控制器中的 Cortex-M 級內(nèi)核,或真正的傳統(tǒng) CPU,如 68000。通常情況下,這種老舊處理器不適用于系統(tǒng)設(shè)計(jì),因?yàn)樗鼈兪冀K不愿意接觸古老、文檔不完整的代碼,直至最后生命周期結(jié)束被迫淘汰。我們要介紹的是,通??梢詫⑦@種小型或老舊 CPU 整合至低端 FPGA 中(圖 2)。
圖 2.小型現(xiàn)代 FPGA 可以吸收舊設(shè)計(jì)中所有的傳統(tǒng)處理器
“芯”起點(diǎn)在哪兒?
如果您有用 C 或 C++(最好是通過原始測試工作臺)編寫的文檔化源代碼,那么情況將對您非常有利。您可以從適用于在 FPGA 中進(jìn)行軟實(shí)施的整個(gè) CPU 內(nèi)核選項(xiàng)中進(jìn)行選擇。然后,還可以針對所選的 CPU 重新編譯并測試代碼。
遺憾的是,測試結(jié)果并不總是樂觀的。過去,微處理器的編譯器并不總是適合嵌入式設(shè)計(jì),尤其是對于存在實(shí)時(shí)限制的子系統(tǒng)。老代碼或保守型工程師編寫的代碼,可能完全是用匯編語言編寫的?,F(xiàn)代代碼主要是用 C 語言編寫的,其中關(guān)鍵例程用匯編語言手動編寫。無論采用哪種語言編寫,都至少會有一部分代碼鎖定在特定的指令集架構(gòu)中。
其次,需要謹(jǐn)慎考慮硬件獨(dú)立性程度,不是語言方面,而是編碼風(fēng)格方面。在過去節(jié)省代碼空間和縮短延遲至關(guān)重要的時(shí)候,往應(yīng)用代碼中嵌入中斷處理程序、驅(qū)動程序和物理 I/O 地址等不良實(shí)踐通常被認(rèn)為是明智之舉,這些做法會加大移植到新硬件的難度。過去,一些極其糟糕的想法,比如編寫時(shí)序依賴型代碼,通常被認(rèn)為更加明智。這種代碼可能需要重新編寫,才能在快速的現(xiàn)代硬件上運(yùn)行。但即使存在匯編語言源代碼和不合時(shí)宜的編碼風(fēng)格,我們?nèi)匀豢梢圆捎脤?shí)際方法將傳統(tǒng)模塊整合到 FPGA 中。
第一種方法是,如果 CPU 的確非常老舊,則使用開源寄存器傳輸級 (RTL) 模型在 FPGA 中重新實(shí)施傳統(tǒng)微處理器或微控制器。Github 等資源擁有許多用于傳統(tǒng)處理器(包括 6502、Z80、6809、68000 和 8086)的 Verilog 模型。但在這些內(nèi)核中進(jìn)行設(shè)計(jì)之前,必須考慮幾個(gè)問題。
第一個(gè)問題是合法性。因?yàn)?Verilog 可用并不意味著您擁有在商業(yè)產(chǎn)品中使用該設(shè)計(jì)的合法權(quán)利。有一些模型是研究人員和業(yè)余愛好者編寫的,沒有考慮到知識產(chǎn)權(quán)。因此,很久之前的一些架構(gòu)可能實(shí)際上位于公共域中。
另一個(gè)問題是作者的意圖。例如:Verilog 是架構(gòu)的近似功能描述。它的目的是僅在模擬中執(zhí)行代碼,還是封裝在用戶控件邏輯和 I/O 中?或者,該模型是否包含進(jìn)入微處理器芯片的其他所有硬件?您必須匹配 Verilog 模型的特性和傳統(tǒng)系統(tǒng)的需求,否則將要花費(fèi)大量的時(shí)間來了解舊芯片的劣勢。
接下來就是一些令人傷神的細(xì)節(jié)問題。SiFive 產(chǎn)品經(jīng)理 Jack Kang 指出,與現(xiàn)代 CPU 一樣,傳統(tǒng) CPU 也在整個(gè)產(chǎn)品生命周期中經(jīng)歷了多次修改,每次修改都會糾正一些錯(cuò)誤或劣勢。Verilog 代表哪個(gè)版本?或者它是一個(gè)理想化版本,代表著作者假定芯片怎樣正常運(yùn)行的方式?最后是設(shè)計(jì)師的謹(jǐn)慎程度。該模型是否按照實(shí)際傳統(tǒng)芯片一個(gè)循環(huán)接一個(gè)循環(huán)地運(yùn)行?是否啟動了您需要使用的操作系統(tǒng)?是否成功合成過?
如果 Verilog 模型無法正常運(yùn)行,還有另一個(gè)選擇。老舊的 CPU 速度非常慢,以致于在當(dāng)前 FPGA 中的微小現(xiàn)代 RISC 內(nèi)核上運(yùn)行的指令集模擬器都可以實(shí)時(shí)地遍歷傳統(tǒng)代碼,尤其是當(dāng)麻煩序列卸載到 FPGA 中其他位置的狀態(tài)機(jī)上時(shí)。這種方法不能簡單地呈現(xiàn)周期精確或時(shí)序精確,但在功能上是正確的。而且它還可以將移植問題從硬件域轉(zhuǎn)換到軟件域,在軟件域,您可以訪問整個(gè)調(diào)試工作臺,這樣移植問題處理起來容易得多。
如何實(shí)施 CPU?
討論了將傳統(tǒng)代碼遷移至新系統(tǒng)的可行性和難度后,接下來的問題是如何在低端 FPGA 中實(shí)施 CPU 內(nèi)核。我們之前討論過復(fù)制傳統(tǒng) CPU 的情況,現(xiàn)在我們可以來了解下實(shí)施現(xiàn)代高性能 CPU 的選項(xiàng)。
主要問題是處理器內(nèi)核依賴部分硬件結(jié)構(gòu),這種結(jié)構(gòu)在 ASIC 中以標(biāo)準(zhǔn)單元甚至是自定義邏輯的形式實(shí)施,無法在 FPGA 結(jié)構(gòu)中輕松高效地復(fù)制。因此,我們必須了解三種不同情況(圖 3):
僅通過用于模擬或 ASIC 合成的 Verilog 模型進(jìn)行合成的 CPU 內(nèi)核 — 即所謂的開箱即用場景。
擁有面向 FPGA 合成手動優(yōu)化的 RTL 的內(nèi)核。
從一開始就開發(fā)了架構(gòu)以在 FPGA 中實(shí)施的內(nèi)核。每種方法的可用性、規(guī)模和性能都不相同。這些方法都適用于現(xiàn)代低端 FPGA。
圖3.CPU 內(nèi)核中的三種 FPGA 優(yōu)化級別。
開箱即用
盡管并不是每家 CPU 內(nèi)核知識產(chǎn)權(quán) (IP) 廠商都專門針對 FPGA,但大多數(shù) IP 提供商都至少提供兩條遷移至 FPGA 內(nèi)核的路徑。最明顯的路徑是授權(quán)面向內(nèi)核的 RTL 源代碼,并通過 FPGA 廠商的工具鏈運(yùn)行該代碼。實(shí)施這條路徑會遇到很多挑戰(zhàn),全都是因?yàn)樵?RTL 用于 ASIC 合成,而非 FPGA 合成。
特別是首次在 FPGA 中嘗試運(yùn)行該代碼,那么遇到第一個(gè)問題將是:源代碼中的有些東西是采用 FPGA 合成工具無法處理的。代碼可能與合成工具不兼容的方式被隱藏或加密,可能包含您的工具無法識別的編譯指示、信號命名,甚至是帶有破壞性的注釋約定。您可以編輯這些內(nèi)容,但會因此產(chǎn)生第二個(gè)問題:許可。
如果您使用用于 ASIC 開發(fā)的 Verilog 源代碼,可能需要進(jìn)行編輯。這意味著您需要包含完整文檔的未隱藏的源代碼,以及/或 IP 廠商的大量支持。這些都是可用的,但它們都是針對財(cái)力雄厚、產(chǎn)量巨大、擁有大型法務(wù)部門的客戶所編寫和定價(jià)的。
還有另一條路徑:一些 IP 廠商提供評估或開發(fā)套件,您可以通過它們在 FPGA 中實(shí)施 CPU 內(nèi)核。該內(nèi)核可能沒有經(jīng)過高度優(yōu)化,但至少可以運(yùn)行和驗(yàn)證,而且其速度對軟件開發(fā)來說足夠快。
SiFive 產(chǎn)品經(jīng)理 Jack Kang 表示,他的一些客戶已經(jīng)采用了這種方法。該公司的 CoreDesigner 工具支持您從各種 RISC V 預(yù)配置內(nèi)核開始,根據(jù)您特定的需求調(diào)整配置,然后輸出 RTL。但該工具也會在 SiFive 的開發(fā)套件上輸出一個(gè)關(guān)于 FPGA 的編程文件。
Kang 還指出,“RISC V 的這種 FPGA 實(shí)施并未面向 FPGA 使用進(jìn)行高度優(yōu)化,但仍然包含不到 20K 的查找表,而且速度可以達(dá)到 100 Mhz 左右,當(dāng)然這很大程度上取決于配置。這種規(guī)模適合許多留有大量空間的低端 FPGA,支持您快速、輕松地將常用開源內(nèi)核整合到系統(tǒng)中?!?/p>
優(yōu)化方法
有一些方法可以改善這些數(shù)據(jù),但需要采取一些措施。之所以有這種改善機(jī)會,是因?yàn)?CPU 中有一些結(jié)構(gòu)并不適合 FPGA 邏輯結(jié)構(gòu)。
FPGA 使用大量相同邏輯元件陣列來實(shí)施邏輯,每個(gè)元件都包含一些查找表 (LUT) — 通常每個(gè) LUT 包含 4 個(gè)輸入 — 以合成邏輯函數(shù),以及一個(gè)或多個(gè)觸發(fā)器。這種安排適用于大多數(shù)隨機(jī)邏輯、管道和簡單狀態(tài)機(jī)。對于高扇入邏輯,由于可能出現(xiàn)在算法硬件和地址解碼器中,因此合成往往會生成一長串窄邏輯元件,從而消耗互連并導(dǎo)致延遲。對于基于內(nèi)存的功能,比如寄存器文件、高速緩存和相聯(lián)內(nèi)存,一次將功能映射至邏輯元件的觸發(fā)器(一或二位)可能要消耗大量資源,即使廠商工具足夠智能,嘗試將邏輯元件的 LUT 和觸發(fā)器隔離,并單獨(dú)使用它們。
很久以前,當(dāng) FPGA 首次用于數(shù)據(jù)包切換、數(shù)字信號處理和類似應(yīng)用時(shí),這種不匹配就非常明顯。為了解決這個(gè)問題,F(xiàn)PGA 廠商在邏輯結(jié)構(gòu)中嵌入了大型可分割 SRAM 模塊和硬件乘法累加模塊。通過使用這些資源,通??梢燥@著改進(jìn) CPU 實(shí)施規(guī)模,有時(shí)還可以提高性能。但可能需要在 RTL 源代碼中或合成過程中運(yùn)用一定的知識進(jìn)行干預(yù)。如果熟練的 FPGA 用戶仔細(xì)檢查 RTL,并面向 FPGA 合成使用已知最佳 FPGA 編碼實(shí)踐對其進(jìn)行調(diào)優(yōu),能夠進(jìn)一步提升性能。
特定于 FPGA 的內(nèi)核
行業(yè)標(biāo)準(zhǔn) CPU 內(nèi)核,比如 Cortex-M 家族或 RISC V,提供熟悉度、成熟的(或以 RISC 為例不斷壯大的)工具和軟件生態(tài)系統(tǒng),以及在 FPGA 廠商之間輕松遷移或遷移至 ASIC 實(shí)施的機(jī)會,甚至在某些情況下還可遷移至第三方現(xiàn)成的 SoC。但反過來要付出一定的代價(jià):費(fèi)用、規(guī)模,有時(shí)還有性能。
如果您想最大限度地優(yōu)化 FPGA,還需采取另一個(gè)步驟:不僅優(yōu)化實(shí)施過程,還要優(yōu)化 CPC 和指令集架構(gòu)本身:從一張白紙開始,僅添加對 FPGA 友好的結(jié)構(gòu)。很久以前,當(dāng) FPGA 首次變得足夠大,可容納 CPU 內(nèi)核時(shí),主要 FPGA 廠商就已經(jīng)開始做出這樣的努力。他們始終在做出這樣的努力:在英特爾案例中為 Nios? II 處理器,其以發(fā)展演進(jìn)為專有 CPU 架構(gòu),不斷壯大由工具、軟件和 FPGA 外設(shè) IP 組成的生態(tài)系統(tǒng)。
目前,這些內(nèi)核家族提供多種類型的產(chǎn)品,從具備最少特性的小型微內(nèi)核 (和 Arm 的 Cortex M0 沒什么不同)到全功能、支持 Linux 的 CPU。其中許多型號都適用于廠商的低端 FPGA。例如,緊湊型 Nios Iie 內(nèi)核只需大約 1000 個(gè)邏輯元件,但速度可達(dá)到或超過 75 MHz。在另一個(gè)極端,具備高速緩存和內(nèi)存管理功能,且能夠運(yùn)行 Linux* 操作系統(tǒng)的內(nèi)核大約需要 5000 個(gè)元件。在這兩者之間還有許多選擇來滿足特定需求。甚至這種全功能配置也足夠小,不但可以將多核 CPU 集群放在一臺低端英特爾? MAX? 10 設(shè)備中,還仍然擁有足夠的空間。
因此,有許多方法可以將傳統(tǒng) CPU 功能遷移至低端 FPGA,同時(shí)仍然擁有豐富的資源來支持傳統(tǒng)接口或控制器功能、IoT 連接、安全性,或機(jī)器學(xué)習(xí)加速。古老的機(jī)器代碼可在 FPGA 上運(yùn)行,以向老舊 CPU 致敬,也可在現(xiàn)代內(nèi)核的指令集模擬器上運(yùn)行。
高級語言代碼可面向現(xiàn)代代碼進(jìn)行編譯。極具挑戰(zhàn)性的代碼模塊可以卸載到 FPGA 中的加速塊中,然后通過多種優(yōu)化程度各不相同的方法,得到許可并在 FPGA 中實(shí)施現(xiàn)代 CPU 內(nèi)核的某個(gè)版本。為了最大限度地提高資源效率,廠商專有 CPU 內(nèi)核可在各種性能和功能點(diǎn)中實(shí)現(xiàn)最佳的緊湊性,且?guī)缀踹m合所有的設(shè)計(jì)場景。
編輯:hfy
-
微控制器
+關(guān)注
關(guān)注
48文章
7951瀏覽量
154973 -
FPGA
+關(guān)注
關(guān)注
1645文章
22046瀏覽量
618294 -
嵌入式系統(tǒng)
+關(guān)注
關(guān)注
41文章
3682瀏覽量
131366 -
機(jī)器視覺
+關(guān)注
關(guān)注
163文章
4595瀏覽量
122883 -
深度學(xué)習(xí)
+關(guān)注
關(guān)注
73文章
5561瀏覽量
122793
發(fā)布評論請先 登錄
交流充電樁負(fù)載能效提升技術(shù)
DevEco Studio AI輔助開發(fā)工具兩大升級功能 鴻蒙應(yīng)用開發(fā)效率再提升
RK3588核心板在邊緣AI計(jì)算中的顛覆性優(yōu)勢與場景落地
FPGA+AI王炸組合如何重塑未來世界:看看DeepSeek東方神秘力量如何預(yù)測......
國產(chǎn)FPGA SOC 雙目視覺處理系統(tǒng)開發(fā)實(shí)例

當(dāng)我問DeepSeek AI爆發(fā)時(shí)代的FPGA是否重要?答案是......
通過邊緣計(jì)算網(wǎng)關(guān)輕松實(shí)現(xiàn)plc的程序更新
云計(jì)算和傳統(tǒng)計(jì)算的區(qū)別
FPGA在圖像處理領(lǐng)域的優(yōu)勢有哪些?
Allegro X 23.11 版本更新 I PCB 設(shè)計(jì):梯形布線的分析性能提升

智慧水利山洪災(zāi)害防御能力提升系統(tǒng)

評論