• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      基于FPGA的MMU IP軟核設(shè)計及實現(xiàn)*

      2019-10-09 05:23:06劉紅偉梁超廣朱慧惠
      通信技術(shù) 2019年9期
      關(guān)鍵詞:頁表開發(fā)板內(nèi)存

      劉紅偉,梁超廣,朱慧惠,潘 靈,邵 龍,林 勤

      (1.中國西南電子技術(shù)研究所,四川 成都 610036;2.航空工業(yè)西飛研究院,陜西 西安 710000)

      0 引 言

      隨著FPGA技術(shù)的發(fā)展,Xilinx公司最新的UltraScale+系列的ZCU102開發(fā)板不同于zynq-7000系列,采用的是64位的處理器armv8+大規(guī)??删幊踢壿嬈骷‵ield-Programmable Gate Array,F(xiàn)PGA)的 SoC模式[1]。與 armv7不同,64位的armv8擁有其獨特的內(nèi)存管理機制[2]。

      在armv8+FPGA的SoC模式中,ZCU102中的armv8可以很好地運行Linux嵌入式系統(tǒng),實現(xiàn)豐富的對外接口(如串口、千兆網(wǎng)口、USB、EMMC以及I2C等);FPGA可以實現(xiàn)并行邏輯算法的加速或高速串行總線協(xié)議之間的邏輯轉(zhuǎn)換(如Rapid IO和PCIE之間的數(shù)據(jù)協(xié)議轉(zhuǎn)換),實現(xiàn)操作系統(tǒng)和并行邏輯器件之間的軟硬件結(jié)合。為了能夠訪問Linux嵌入式操作系統(tǒng)中寫入內(nèi)存的數(shù)據(jù),F(xiàn)PGA端需要一個內(nèi)存管理單元(MMU)來配合Linux操作系統(tǒng)完成虛擬地址到物理地址的轉(zhuǎn)換,直接通過物理地址訪問處理器外掛內(nèi)存的數(shù)據(jù)。本文針對這一需求設(shè)計了一個基于FPGA執(zhí)行的包含TLB機制的支持虛擬地址到物理地址的轉(zhuǎn)換的內(nèi)存管理單元(MMU)IP軟核,同時可以滿足訪問處理器外掛內(nèi)存。

      1 ZCU102平臺簡介

      1.1 ZCU102開發(fā)板處理器和FPGA之間的數(shù)據(jù)通道簡介

      Zynq UltraScale+系列的ZCU102開發(fā)板是ARM和FPGA兩種架構(gòu)芯片結(jié)合的異構(gòu)SoC,包括多處理引擎、顯示、高速外設(shè)(如PCIE、USB以及SATA等)、低速I/O功能(如CAN、UART、SPI以及NAND等)和FPGA,如圖1所示。處理引擎包括基于4核ARMCortexA53系列的處理器APU、大規(guī)??删幊踢壿嬯嚵幸约肮芾韱卧?。其中,處理器系統(tǒng)和FPGA之間通過AXI總線接口(ACP、M_AXI以及S_AXI等)多種互聯(lián)選擇,實現(xiàn)該異構(gòu)SoC的整體應(yīng)用的靈活性,滿足用戶許多不同的應(yīng)用需求。

      圖1 ZCU102平臺

      AXI表示的是高級可擴展接口(Advanced eXtensible Interface,AXI),當(dāng)前的版本是AXI4,是ARMAMBA?3.0開放標(biāo)準(zhǔn)的一部分。第三方廠家生產(chǎn)的許多芯片和IP包都是基于這個標(biāo)準(zhǔn)的。Xilinx把AXI4定義為FPGA架構(gòu)內(nèi)使用的優(yōu)化的互聯(lián)技術(shù)[3-4]。其中,ACP是加速一致性端口(Accelerator Coherency Port,ACP),總線寬度為64位,F(xiàn)PGA部分作為主接口;M_AXI和S_AXI是通用AXI接口,總線寬度32位;處理器系統(tǒng)和FPGA都有主或從接口。

      1.2 FPGA上實現(xiàn)MMU過程流程

      ZCU102的處理器armv8運行Linux操作系統(tǒng)中物理地址到虛擬地址的轉(zhuǎn)換是采用頁表映射的機制實現(xiàn)的。Linux內(nèi)核部分生成數(shù)據(jù)分配的虛擬地址通過頁表映射實現(xiàn)。FPGA部分可以通過訪問數(shù)據(jù)線上的物理地址讀取虛擬地址對應(yīng)在內(nèi)存中的數(shù)據(jù)。在開發(fā)板上,F(xiàn)PGA需要一個內(nèi)存管理單元(MMU)完成操作系統(tǒng)中數(shù)據(jù)的虛擬地址到內(nèi)存中物理地址的轉(zhuǎn)換,之后FPGA端通過訪問內(nèi)存物理地址讀取生成的數(shù)據(jù),從而實現(xiàn)FPGA端和處理器端外掛內(nèi)存的地址共享,實現(xiàn)數(shù)據(jù)從處理器端到FPGA端的傳輸。ZCU102開發(fā)板上處理器和FPGA之間的MMU功能實現(xiàn)過程的功能流程,如圖2所示。處理器系統(tǒng)中armv8上運行Linux操作系統(tǒng)產(chǎn)生數(shù)據(jù),之后將數(shù)據(jù)的頭虛擬地址和L1頁表地址通過M_AXI發(fā)到FPGA的S_AXI,之后傳到FPGA的MMU(內(nèi)存管理單元),解析出L2、L3、L4頁表的物理地址。通過ACP讀取下一級頁表的地址,最后在FPGA的MMU中組合出數(shù)據(jù)虛擬地址對應(yīng)的物理地址,訪問內(nèi)存,將數(shù)據(jù)讀到FPGA,完成數(shù)據(jù)的傳輸過程。

      圖2 FPGA上實現(xiàn)MMU處理過程的功能劃分

      2 FPGA上的內(nèi)存管理單元(MMU)的設(shè)計

      FPGA上MMUIP軟核的設(shè)計主要由2部分組成,如圖1所示,一部分是虛擬地址到物理地址轉(zhuǎn)換的邏輯,另一部分是TLB的邏輯。

      2.1 Armv8的內(nèi)存管理體系

      運行在armv8的Linux采用分頁式內(nèi)存管理機制。內(nèi)存空間分為用戶(User)空間和內(nèi)核(Kernel)空間[5]。當(dāng)使用用戶空間的地址進行翻譯時,使用的是TTBR0_EL0寄存器的值作為查找表的基地址;當(dāng)使用內(nèi)核空間的地址進行翻譯時,則使用TTBR1_EL1寄存器的值作為查找表的基地址,如圖3所示。

      圖3 armv8內(nèi)存映射機制

      Armv8在執(zhí)行Linux內(nèi)核時支持多種內(nèi)存轉(zhuǎn)換粒度及其對應(yīng)的虛擬地址位寬,如表1所示。

      表1 不同內(nèi)存轉(zhuǎn)換粒度對應(yīng)的虛擬地址位寬

      2.2 MMU的原理及工作流程

      本文的MMUIP核的設(shè)計依據(jù)運行在4kB的內(nèi)存轉(zhuǎn)換粒度和39bit的虛擬地址位寬內(nèi)核的Linux來完成。整個MMU的工作原理流程如圖4所示。

      結(jié)合圖2和圖4的原理,設(shè)計MMUIP核VHDL邏輯工作流程如圖5所示。

      具體步驟如下:

      (1)Linux端通過MAXI發(fā)送虛擬地址以及TTBR0_EL0或TTBR1_EL1寄存器的值;

      (2)進入MMU工作的VHDL邏輯,TTBR0_EL0 或 TTBR1_EL1[47:12]與 虛 擬 地 址 [38:30]以 及“000”進行第一次拼接,獲得L2頁表地址并將其通過MMUIP端MAXI發(fā)送到PS的ACPSAXI接口上;

      圖4 MMU的工作原理流程

      (3)將ACPSAXI接口獲得的L2頁表地址解析后得到PUD的值,同時MMUIP端MAXI接口將會獲取到 PUD[47:12]的值、虛擬地址 [29:21]以及“000”進行第二次拼接,獲得L3頁表地址并發(fā)送給PS;

      (4)將ACPSAXI接口獲得的L3頁表地址解析后得到PMD的值,同時MMUIP端MAXI接口將會獲取到 PMD[47:12]的值、虛擬地址 [20:12]以及“000”進行第三次拼接,獲得L4頁表地址并發(fā)送給PS;

      (5)將ACPSAXI接口獲得的L4頁表地址解析后得到PTE的值,并將PTE的值保存到TLB緩存中,同時MMUIP端MAXI接口將會獲取到PTE[47:12]的值與虛擬地址[11:0]進行第四次拼接,獲得物理地址并發(fā)送給PS;

      (6)將ACPSAXI接口獲得的物理地址解析后得到對應(yīng)的數(shù)據(jù),同時MMUIP端MAXI接口將會獲取對應(yīng)的數(shù)據(jù)進行保存;

      (7)將虛擬地址進行間隔16bit的疊加,并判斷數(shù)據(jù)是否獲取完成。如果未完成且虛擬地址超出4kB的內(nèi)存細粒度,則進入TLB緩存機制獲取PTE的值;如果未完成但虛擬地址超出4kB的內(nèi)存細粒度,則返回到步驟(2)。

      2.3 MMU的VHDL邏輯及狀態(tài)機的設(shè)計

      按照2.2節(jié)的MMU工作原理,使用Vivado設(shè)計和封裝IP核時,虛擬地址到物理地址的轉(zhuǎn)換VHDL邏輯和MMU狀態(tài)機的設(shè)計,分別如圖6、圖7所示。

      該狀態(tài)機采用單進程設(shè)計,共有11個狀態(tài)。狀態(tài)機從Read addr狀態(tài)進入,讀取到虛擬地址后進入Read tlb狀態(tài)判斷是否觸發(fā)TLB緩沖器。如果觸發(fā),則進入Read Data cmd狀態(tài)讀取讀數(shù)據(jù)指令,進而進入Read Data狀態(tài)讀數(shù)據(jù)后返回Read addr狀態(tài)等待虛擬地址;如果沒有觸發(fā),TLB緩存器則進入Read pud cmd狀態(tài)讀取讀PUD值指令,進而進入Read pud狀態(tài)讀取PUD值。如果PUD值的后兩位為全零,則表示未讀取到有效的PUD值,進入PAGE FAULT狀態(tài),進而返回Read addr狀態(tài)等待虛擬地址;如果讀到有效的PUD值,則依次進入Read pmd cmd狀態(tài)和Read pmd狀態(tài)讀取PMD值。如果PMD值的后兩位為全零,則表示未讀取到有效的PMD值,則進入PAGEFAULT狀態(tài),進而返回Read addr狀態(tài)等待虛擬地址;如果讀到有效的PMD值,則依次進入Read pte cmd狀態(tài)和Read pte狀態(tài)讀取PTE值。如果PTE值的后兩位為全零,則表示未讀取到有效的PTE值,進入PAGEFAULT狀態(tài),進而返回Read addr狀態(tài)等待虛擬地址;如果讀到有效的PTE值,則依次進入Read data cmd狀態(tài)和Read data狀態(tài)讀取讀數(shù)據(jù),隨后返回Read addr狀態(tài)等待虛擬地址。

      圖5 MMUIP軟核VHDL邏輯工作流程

      圖6 虛擬地址到物理地址的轉(zhuǎn)換VHDL邏輯

      圖7 MMU狀態(tài)機

      3 仿真及驗證

      3.1 仿真及驗證平臺

      本文設(shè)計的是一個可以運行在ZCU102平臺的MMUIP核。為了能夠使該IP核可以正常工作,需要在ZCU102平臺上運行64位的Linux系統(tǒng),以及利用Vivado設(shè)計相應(yīng)的工程進行測試。

      本次測試的環(huán)境:Xilinx公司ZCU102 REVISION1.1開發(fā)板,Vivado 2018.3開發(fā)軟件,64位Linux操作系統(tǒng)。

      本次測試的基本流程:在Linux操作系統(tǒng)中創(chuàng)建一個函數(shù),函數(shù)內(nèi)容包括申請一段64位數(shù)據(jù)類型的用戶空間內(nèi)存,生成一段數(shù)據(jù)寫入該段用戶空間內(nèi)存,并將該段用戶內(nèi)存空間的起始地址和TTBR0_EL0寄存器的值發(fā)送給MMU。

      利用Vivado 2018.3軟件創(chuàng)建Vivado工程,該Vivado工程包括MMU IP軟核和ZCU102的PS的IP核。綜合后添加ILA核調(diào)試工具生成bit文件和ltx文件,通過仿真器加載到開發(fā)板中即可調(diào)用Linux系統(tǒng)中設(shè)計的函數(shù)進行測試。

      3.2 ILA調(diào)試工具仿真結(jié)果

      64位的Linux內(nèi)核在ZCU102開發(fā)板中初始化結(jié)束后調(diào)用函數(shù),完成虛擬地址和TTBR0_EL0寄存器的值發(fā)送后,通過ILA調(diào)試工具可以得到如圖8所示輸出波形。

      圖8 ILA調(diào)試的仿真波形

      通過調(diào)試平臺得到的波形可以看出,MMU能夠很好地讀取到Linux內(nèi)核分配的內(nèi)存地址以及其相對應(yīng)的數(shù)據(jù)。其中,虛擬地址的首地址為0x0038ca83a0,TTBR0_EL0寄存器的值為0x87aaab000,第一次與虛擬地址的[38:30]位拼接后查表得到的PUD的值為0x87a022003,第二次與虛擬地址的[29:21]位拼接后查表得到的PMD的值為0x87a816003,第三次與虛擬地址的[20:12]位拼接后查表得到的PTE的值為0x87bc9ff53,最終與虛擬地址的[11:0]位拼接得到的物理地址為0x87bc9f3a0,對應(yīng)的值為0x1fff以及下一位的值0x1ffe。虛擬地址加16bit后為0x0038ca83b0,可以觸發(fā)TLB緩存,直接可得其對應(yīng)的物理地址為0x87bc9f3b0,對應(yīng)的值為0x1ffd以及下一位的值0x1ffc,可以滿足設(shè)計時的需求。

      4 結(jié) 語

      針對armv8的內(nèi)存管理機制,結(jié)合FPGA對應(yīng)用數(shù)據(jù)獲取的高效率和大吞吐量的需求,本文設(shè)計了一個可以適用于Xilinx公司的ZCU102開發(fā)板的包含了TLB緩存的MMU IP軟核。實驗表明:該MMU IP軟核可以從處理器端外掛的DDR存儲顆粒內(nèi)穩(wěn)定高效地獲取大吞吐量的數(shù)據(jù),可以廣泛應(yīng)用于FPGA和處理器端之間數(shù)據(jù)通信的應(yīng)用場景。

      猜你喜歡
      頁表開發(fā)板內(nèi)存
      更正
      中國糖料(2022年4期)2022-03-15 22:37:37
      作者更正
      勘 誤
      “春夏秋冬”的內(nèi)存
      更正
      Microchip最新推出兩款PIC32 Curiosity開發(fā)板
      淺析單片機開發(fā)板的設(shè)計與制作
      電子制作(2017年22期)2017-02-02 07:10:14
      Mouser為您呈上開發(fā)關(guān)鍵之STMicroelectronics Nucleo開發(fā)板
      Arduino和Atmel發(fā)布Arduino Zero開發(fā)板
      基于內(nèi)存的地理信息訪問技術(shù)
      诸暨市| 边坝县| 前郭尔| 青河县| 和硕县| 郧西县| 留坝县| 东明县| 龙州县| 临城县| 哈密市| 遂溪县| 会宁县| 曲沃县| 宣城市| 库尔勒市| 收藏| 富川| 庆元县| 邯郸县| 文山县| 云安县| 五常市| 波密县| 丰都县| 会东县| 信丰县| 大新县| 吉首市| 鹿邑县| 华坪县| 扶绥县| 宜州市| 日土县| 临泉县| 壤塘县| 平昌县| 四川省| 七台河市| 团风县| 湖州市|