新聞中心

EEPW首頁 > 業(yè)界動態(tài) > 基于PGL22G的物聯(lián)網(wǎng)Sensor HUB設計

基于PGL22G的物聯(lián)網(wǎng)Sensor HUB設計

作者:黃國偉 時間:2019-01-29 來源:電子產品世界 收藏

作者 黃國偉(福州大學,福建 福州 350108)

本文引用地址:http://m.butianyuan.cn/article/201901/397270.htm

  摘要:基于紫光同創(chuàng)PGL22G型號芯片,進行,使之成為MCU,在軟核中通過Wishbone總線進行互聯(lián)。隨后,基于OpenMIPS架構進行μC/OS系統(tǒng)的,在μC/OS系統(tǒng)下通過GPIO口進行數(shù)據(jù)采集,并將采集到的存儲至EEPROM中,可通過電腦查詢EEPROM存儲的數(shù)據(jù)。通過相應的通信模塊進行傳感器數(shù)據(jù)的發(fā)送。發(fā)送的數(shù)據(jù)可以在相應微信公眾號中實時查看。

  關鍵詞;;;

  1 框架描述

  1.1 MCU框架描述

  的MCU整體框架如圖1所示,MCU主要由寄存器單元,協(xié)處理器單元,F(xiàn)SM單元,算術單元,數(shù)據(jù)單元構成[1]。寄存器單元包括針對32位指令格式的通用寄存器,針對乘除法運算結果的乘除法結果寄存器,程序計數(shù)器,存放OpenMIPS相關操作指令的指令寄存器。用于數(shù)據(jù)處理的算數(shù)模塊(包括四則運算和部分特殊的數(shù)據(jù)移位操作),數(shù)據(jù)選擇模塊;針對于五級流水線設計的狀態(tài)模塊,其構成與實現(xiàn)于下一段介紹;針對本設計使用的五級流水線還添加了協(xié)處理器模塊用于工作狀態(tài)的配置。

nEO_IMG_1.jpg

  1.2 流水線框架描述

  本設計的五級流水線框架如圖2所示,結合圖1的MCU架構圖可見:首先通過取址模塊去獲取相應指令,與此同時程序計數(shù)器技術同狀態(tài)控制模塊數(shù)據(jù)交互后實現(xiàn)對于當前執(zhí)行狀態(tài)的控制,通過譯碼模塊和32個通用寄存器的數(shù)據(jù)讀寫實現(xiàn)指令的譯碼,將譯碼后的指令放入執(zhí)行模塊進行判斷后進入相應的算數(shù)模塊實現(xiàn)相應的數(shù)據(jù)計算處理,通過放存模塊確定存入對應的寄存器地址,最終將結果放入對應的寄存器[2]。

nEO_IMG_2.jpg

  2 SOPC實現(xiàn)原理

  通過PGL22G構成MCU主體,搭載Wishbone總線實現(xiàn)與UART、Flash、GPIO等外部設備的數(shù)據(jù)交互。

  2.1 五級流水線的實現(xiàn)

  如圖2所示,五級流水線可以概括為取指、譯碼、執(zhí)行、訪存、回寫,下面分別介紹五級各自實現(xiàn)原理。

  取指階段是取出指令存儲器中的指令,同時程序計數(shù)器(以下簡稱PC)值遞增。PC中,因為一條指令是32位,而設計基于OpenMIPS的MCU是采用字節(jié)尋址的方式,由此每條指令對應4個字節(jié),PC每次尋址結束后地址加4。在取指譯碼模塊間有取指譯碼模塊用于緩存取指階段的指令及其對應地址。

  譯碼階段是指針對指令給出相應運算和操作的對應操作數(shù),通過32位通用寄存器實現(xiàn)對指令的同時讀取和寫入。譯碼模塊通過對通用寄存器的訪問實現(xiàn)指令對應運算和操作的譯碼過程,將獲取到的指令譯出對應的源操作數(shù)送出。在譯碼和執(zhí)行模塊間有譯碼執(zhí)行模塊用于緩存譯碼階段給出的運算類型,源操作數(shù)和對應訪問寄存器的地址相關數(shù)據(jù)。

  執(zhí)行階段是對獲取到的源操作數(shù)進行相應的指定運算,并將運算出的結果送入到運算訪存模塊進行緩存。

  訪存階段將執(zhí)行階段的結果送入回寫階段。

  回寫階段將相應的指令與那算結果寫入對應地址的寄存器,由此完成一個周期五級流水線的操作。

  2.2 指令存儲的實現(xiàn)

  將設計為SOPC的初衷便是使用對應MCU指令集的編程方式減少對于設計人員的數(shù)字電路實現(xiàn)要求,指令存儲決定MCU對應運行指令的正確。結合對于FPGA資源的考慮以及對應MCU指令程序編譯燒寫的便捷,使用外接SPI Flash作為ROM使之成為指令的存儲設備。

  首先輸入對應Flash工作模式數(shù)據(jù),然后通過計數(shù)器進行計數(shù)實現(xiàn)地址數(shù)據(jù)的發(fā)送,當計數(shù)器停止即地址數(shù)據(jù)發(fā)送結束,此時DQ1管腳輸出所需數(shù)據(jù),SPI Flash讀取數(shù)據(jù)仿真波形如圖3所示。

nEO_IMG_3.jpg

nEO_IMG_4.jpg

  2.3 數(shù)據(jù)存儲器RAM的實現(xiàn)

  通過pango軟件生成一個地址位寬為14的32位存儲器,寫操作時根據(jù)sel的值修改其中對應的字節(jié)即可。由于系統(tǒng)中地址位寬為32,但針對數(shù)據(jù)存儲時所需要的地址寬為14,再結合指令加一即為移動四位因此取系統(tǒng)地址位寬的第2~15位作為存儲器對應地址[3]

  2.4 協(xié)處理器的實現(xiàn)

  協(xié)處理器用于系統(tǒng)控制,主要用于配置CPU工作狀態(tài),實現(xiàn)高速緩存控制,異常處理和控制,存儲管理單元控制。首先對協(xié)處理器中的寄存器進行寫操作,依次寫入地址,將不同的數(shù)據(jù)保存到不同的寄存器中;依據(jù)讀取地址,將相應的寄存器值輸出即可。協(xié)處理器的訪問指令只需遵循MIPS32指令集中的訪問指令mtc0,mfc0即可。在譯碼階段依據(jù)指令讀出通用寄存器的值,在執(zhí)行階段確定寫入通用寄存器的值,將信息傳遞至訪存階段。訪存信息傳遞至回寫階段,回寫階段修改對應地址的寄存器值即可。

  2.5 Wishbone總線的實現(xiàn)

  Wishbone總線有多種連接方式:點對點、數(shù)據(jù)流、共享總線、交叉互聯(lián)等。在點對點連接方式中,有一個主設備和一個從設備。

  通過狀態(tài)機來實現(xiàn)Wishbone的操作和控制。復位的時候進入空閑狀態(tài)WB_IDLE。當處于空閑狀態(tài)WB_IDLE時,如果處理器發(fā)出了訪問請求,且當前沒有處于流水線清除過程中,那么會進入總線忙狀態(tài)WB_BUSY,開始訪問總線。但是,如果處于流水線清除過程中,那么本次的總線訪問當然會無效,所以不必進入WB_BUSY狀態(tài)。當處于總線忙狀態(tài)WB_BUSY時,如果收到Wishbone總線的響應,表示本次訪問結束,此時需要判斷流水線是否處于暫停狀態(tài)。如果沒有處于暫停狀態(tài),那么將訪問到的數(shù)據(jù)送入處理器,進入空閑狀態(tài)WB_IDLE,等待下一次訪問請求。如果處于暫停狀態(tài),那么將訪問到的數(shù)據(jù)暫時保存起來,同時進入等待暫停結束狀態(tài)WB_WAIT_FOR_STALL。當流水線暫停結束時,再將訪問到的數(shù)據(jù)送入處理器,并且進入空閑狀態(tài)WB_IDLE,等待下一次訪問請求。當處于總線忙狀態(tài)WB_BUSY時,如果發(fā)生異常,那么會清除流水線,此時將直接取消此次Wishbone總線訪問,并且回到狀態(tài)WB_IDLE。

  2.6 UART和GPIO的實現(xiàn)

  UART將并行的數(shù)據(jù)轉變?yōu)榇械臄?shù)據(jù)發(fā)送,或將接收到的串行數(shù)據(jù)轉變?yōu)椴⑿袛?shù)據(jù)。通過串口可以實現(xiàn)與計算機或其他設備的通信。在PGL22G開發(fā)板上有串口轉USB模塊,UART模塊控制是OpenCores站點提供的UART IP Core,其兼容常見UART設備;支持Wishbone數(shù)據(jù)規(guī)范。

  GPIO是以位為單位進行數(shù)字輸入輸出的I/O接口,作為單純通用輸入/輸出I/O,輸入時從外部讀取輸入信號,輸出時將寫入的值輸出到外部。處理器通過GPIO與其他外設相連。GPIO控制是OpenCores站點提供的GPIO IP Core,其I/O口數(shù)量從1到32可配置;所有I/O口可以配置為雙向接口;輸入接口可以觸發(fā)中斷;支持Wishbone數(shù)據(jù)規(guī)范。

  3 μC/OS系統(tǒng)的移植

  借鑒μC/OS-II在其他MIPS架構處理器上移植的代碼進行修改,在Linux中下載版本號為V2.91的μC/OS-II源碼以及針對MIPS M14K的μC/OS-II移植代碼[4]。去掉includes目錄下無需使用的cpu.h文件。os_cpu.h中的文件定義了處理器相關的常量、宏、結構體,這里可以完全使用MIPS M14K的移植代碼,無需修改。os_cpu_a.S文件異常處理樣例,和一些入堆棧使用的常數(shù),以及一些函數(shù)。將OS_CPU_SR_Save中的Status寄存器的最低位修改為0;DisableInterruptSource中的函數(shù)對應的Status寄存器中IM字段指定為修改為0。修改os_cpu_c.c文件,將新任務的入口地址task存放到堆棧中對應證書寄存器$31的位置[5];將BSP_Interrupt_Handler函數(shù)中的Compare寄存器的值增加0x50000,因為本次系統(tǒng)的頻率為27 MHz,為保證中斷是在12 ms個時鐘周期內發(fā)生。將修改后的文件進行編譯,最終得到相應的.bin文件,與BootLoader.bin合并后得到相應的.bin文件,將.bin文件燒入SPI Flash中,當OpenMIPS運行時會首先運行BootLoader,后者將μC/OS-II的代碼復制到RAM中,然后跳轉到RAM,最終控制權交由μC/OS-II,由此實現(xiàn)了μC/OS系統(tǒng)的移植和運行。

  4 結論

  本設計基于紫光PGL22G FPGA開發(fā)板實現(xiàn)了OpenMIPS內核的MCU移植,實現(xiàn)了操作系統(tǒng)μC/OS-II的移植使之構成SOPC系統(tǒng)增加系統(tǒng)的靈活性和穩(wěn)定性。實現(xiàn)了傳感器的數(shù)據(jù)采集(常見的數(shù)字信號和模擬信號的傳感器均可拓展實現(xiàn)數(shù)據(jù)采集,由此實現(xiàn)Sensor HUB),以及數(shù)據(jù)的本地存儲和訪問。通過通信數(shù)據(jù)實現(xiàn)了數(shù)據(jù)的上傳發(fā)送,同時可以在微信公眾號中進行數(shù)據(jù)的查詢。

  在本設計中還有一些可以改進的地方:首先,OpenMIPS架構具有一定的缺陷,我們可將本設計的架構改為RISC-V架構。該架構開源,可以拿到全部的源代碼進行裁剪或修改以實現(xiàn)我們的需求。此外,該架構以運算為核心,在大數(shù)據(jù)上和人工智能上具有無可比擬的優(yōu)勢。其次,在存儲上可用DDR存儲器來替代EEPROM,因為DDR存儲器具有速度快、存儲量大等等的優(yōu)勢。最后,可接入更多種類不同的傳感器,真正實現(xiàn)sensor HUB的主題。

  參考文獻

  [1]蔡啟先,劉明,余祖峰.MIPS64指令集模擬器的建模與實現(xiàn)方法[J].計算機工程,2010,(18):245-246.

  [2]劉秋菊,張光照,王仲英.基于MIPS指令集的流水線CPU設計與實現(xiàn)[J].實驗室研究與探索,2017,(8):148-152.

  [3]雷思磊. 自己動手寫CPU[M].電子工業(yè)出版社,2014.

  [4]陶銳,李洋,曹海燕.基于ARM7內核的UCOS-Ⅱ移植研究[J].企業(yè)技術開發(fā),2012,31(05):68+74.

  [5]李備,彭楚武,譚凌峰,陳敬恩.UCOS移植中的硬件抽象層構建技術[J].電子產品世界,2006(16):93-94+92.

  作者簡介:

  黃國偉(1994-),男,研究生,主要從事嵌入式系統(tǒng)的研究。

本文來源于科技期刊《電子產品世界》2019年第2期第45頁,歡迎您寫論文時引用,并注明出處



評論


相關推薦

技術專區(qū)

關閉