牛英山,王 爽,楊 光
(中國電子科技集團公司第四十七研究所,沈陽110032)
通用嵌入式32位RISC CPU具有體積小、功耗少、成本低的優點,作為控制核心在SoC設計領域得到了非常廣泛的應用。
在嵌入式領域,主流的通用32位RISC CPU有ARM、MIPS、LEON、Nios II、PowerPC、SPARC 等幾大系列。
目前主要有 ARM7(ARMv4T)、SecurCore(ARMv4T/v6M/v7M)、ARM9(ARMv4T)、ARM9E(ARMv5TEJ)、 ARM10(ARMv5TE)、 ARM11(ARMv6TE)、ARM Cortex-A/R/M(ARMv7-A/R/M)等幾大系列。ARM采用RISC體系架構,微處理器一般具有如下特點:
·體積小、低功耗、低成本、高性能;
·支持 Java(8位)/Thumb(16位)/ARM(32位)三套指令集;
·大量使用寄存器,指令執行速度更快;
·大多數數據操作都在寄存器中完成;
·尋址方式靈活簡單,執行效率高;
·指令長度固定。
目前主要有MIPS32K和MIPS64K兩大系列;MIPS處理器主要有以下技術特點:
·MIPS的設計保持純粹的RISC風格;
·占用更小的芯片面積,功耗方面稍大一些;
·具有32位和64位兩種架構的指令集;
·核內包含大量寄存器、指令數和字符;
·可視的流水線延遲間隙;
·多發射核技術;
·MIPS是開放式的架構,用戶可以在開發的內核中加入自己的指令。
目前主要有LEON2、LEON3、LEON4三大系列。LEON軟核是一個與SPARC V8兼容的整數處理單元IU(Integer Unit),LEON2是5級流水線,LEON3和LEON4是7級流水線。LEON微處理器具有以下特點:
·流水線結構;
·具有硬件乘法/除法和MAC功能;
·獨立的指令和數據Cache(哈佛結構);
·可根據需求靈活配置Cache的容量;
·片上總線使用AMBA2.0規范,支持APB和AHB標準;
·具備一些片上常用外設(如UART、中斷控制、I/O接口、實時時鐘、看門狗等)。
目前主要有Nios、Nios II兩大系列。
Nios II處理器是一個通用的32位RISC處理器內核,其主要特點如下。
·完全的32位指令集、數據通道和地址空間;
·可配置的指令和數據Cache;
·32個通用寄存器;
·32個有優先級的外部中斷源;
·單指令的32×32乘除法,產生32位結果;
·多種片上外設,并能夠與片外存儲器和外設接口;
·具有硬件協助的調試模塊,可以在IDE中控制處理器完成各種調試工作,如開始、停止、單步和跟蹤等;
·在不同的Nios II系統中,指令集結構(ISA)完全兼容;
·性能達到150DMIPS以上。
目前主要有 PowerPC 40x、60x、70x、90x 四大系列;
PowerPC架構具有以下特點:
·32個integer/float registers組;
·指令load/store在GPRS與FPRS之間存取數據;
·統一定長的精簡指令格式易于實現超標量流水線;
·最多支持4個operands,運算結果典型存放在first operand;
·IEEE-754標準浮點數,單精度(singlefloat)和雙精度(double-float)指令運算;
·PowerPC架構允許實現某一功能為特定的硬件平臺;
·用戶層指令的存取缺省在caches執行。特殊指令跨越caches存取;
·支持big-endian和little-endian模式;
·支持64-bit地址模式。
目前主要有v7、v8、v9三大系列。SPARC微處理器特點:
·SPARC微處理器具備精簡指令集;
·支持32位/64位數據精度;
·架構運行穩定;
·可擴展性優良;
·體系標準開放;
·環形結構的寄存器窗口技術。
通用嵌入式32位RISC CPU設計主要包括以下幾大方面。
首先是與用戶進行溝通,了解用戶的具體需求,并盡可能將所有的內容寫入文檔。其中關鍵的部分主要是產品的系列規劃(如1代、2代、3代等)、性能指標(如頻率、面積、功耗等)、編程模型(如調試模式、正常模式、特權模式等)、指令集(如指令種類、指令編碼格式、指令助記符、指令尋址方式、版本規劃、內部寄存器數量、功能定義和名稱、可擴展性說明、是否支持浮點預算等)、存儲器體系架構(哈佛體系架構或是馮·諾依曼)、總線接口協議、硬件調試方式(如串口調試、JTAG調試等)、存儲器管理單元、存儲器保護單元、高速緩存CACHE、緊耦合存儲器接口、寫緩沖器、片上協處理器定義、片外協處理器接口、中斷處理方式(硬件接口、同步還是異步、使能與禁止、優先級、響應過程和時間)、復位模式及行為、片外協處理器功能定義、片外協處理器指令集等。
指令集是微處理器的核心,主要包括指令種類(如算術運算類、邏輯運算類、乘法類、除法類、浮點預算類、數據傳送類、比較類、散轉類、其他等)、指令編碼格式(操作碼、操作數1、操作數2等)、指令助記符定義(MOV、ADD、SUB、MUL、DIV 等)和指令尋址方式(立即尋址、寄存器尋址、寄存器間接尋址、寄存器變址尋址、相對尋址等)、指令周期(哪些指令單周期、哪些指令多周期、指令數據相關周期)。通過設計,將所有指令的執行過程進行細化、歸類和簡化,為指令譯碼器的設計提供必要的理論依據,尤其是譯碼器輸出信號的種類和數量。
體系架構是實現微處理器的框架,尤其是對于不同指令集版本的實現更為重要。體系架構設計主要是數據通路和控制通路的規劃。數據通路規劃的重點是流水線組織,如采用流水線的級數(如5級、7級、8級等)、每級實現的功能(如取指、譯碼、發射、移位、執行、存儲器、回寫等)、流水線的結構相關(如數據前推、互鎖、延遲槽等)、關鍵部件(如系統控制單元、指令譯碼器、ALU、寄存器組、乘法器等)在流水線中的位置等。控制通路規劃的重點是根據指令的執行周期來設計控制狀態機、解決流水線的數據相關和控制相關、中斷和異常的處理等。
目前,在SoC設計中使用的片上總線主要有ARM的32位總線AMBA 2.0(AHB、APB)和64位總線 AXI 1.0/2.0,MIPS 的OCP 2.1,Nios II的 Avalon-Bus(Avalon-MM、Avalon-TRI、Avalon-MM、Avalon-MM)、PowePC 的 CoreConnect(PLB、OPB、DCR)以及Silicore的Wishbone總線。四種總線都是同步總線,使用時鐘沿驅動和采樣信號。總線的基本操作幾乎沒有區別,最大的區別在于提供的特性和規范的完整性。
總線接口可以選擇當前的主流片上總線,并獲取授權,同時也決定了整個SoC系統的總線規范以及與之配套使用的各種外圍IP模塊;還可以設計自己的總線規范,但必須有別于現有的總線協議,否則會侵權,并且要比現有的協議更好,否則也沒有意義。因為現有的總線協議比較成熟,而且使用該協議的IP也有很多,新協議的完備性和正確性需要花費很長時間、投入大量的人力、物力和財力才會使之達到一定的實用化程度。
根據體系架構進行頂層模塊劃分,規定各個主要模塊的功能以及主要的接口信號和時序關系,再將各主要模塊進行細化,為子模塊的RTL設計提供依據。
在進行子模塊的RTL設計之前,先規定RTL的代碼風格,以約束代碼工程師的行為,并保證設計風格的一致性,便于設計的更新、修改和管理。
在進行子模塊的RTL設計時,依據子模塊的功能定義和接口定義,選取合適的邏輯結構,如加法器、減法器、乘法器、除法器、譯碼器等,同時在子模塊中插入調試語句以便于查找出現的問題,再搭建對應的驗證平臺來進行子模塊測試。整個過程采用的是自頂向下的設計方式,并使用自下向上的驗證方式來保證設計的正確性。
根據微處理器的體系架構,將所有的功能模塊整合在一起,構成一個功能比較完整的微處理器軟核,并搭建一個測試平臺進行系統整體的連接調試,主要是針對各個模塊的基本功能以及系統的整體運作進行測試,從而保證系統的正確性。雖然在設計時已經進行了很詳細的規劃,但在系統整合后仍然會有很多問題出現,如信號數量、名稱及時序定義不一致的情況。
在進行系統整合與調試之后,搭建以微處理器為核心的系統級驗證平臺。系統級驗證平臺實際上是一個模擬微處理器使用環境的SoC,包括硬件和軟件兩部分。硬件部分由微處理器以及與之配套的IP模塊組成,構成SoC/MCU的主體。軟件部分由測試程序以及結果分析、比較和處理模塊構成,便于對微處理器進行調試。
經過系統級驗證的微處理器可以進行FPGA原型驗證,兩種驗證也可以同時進行。原型驗證的調試過程比較簡單,而且沒有系統級驗證的調試方式便利,可以觀察部分信號。FPGA原型驗證的目的是加速驗證過程,并通過模擬真實使用環境來發現設計中存在的缺陷,以此來完善微處理器的設計。搭建以微處理器為核心,且有外圍IP的SoPC,并進行功能仿真,再將其使用FPGA開發工具(如Quartus II、ISE、Libero、SynplifyPro 等)進行綜合、自動布局布線、生成位流文件,并下載到FPGA上運行。
經過基本調試后,可以調用對應IP的驅動程序來進行測試,之后將BootLoader(如Uboot、VIVI等)移植到系統上,為RTOS的移植做準備,再將嵌入式實時操作系統 RTOS(如 Linux、VxWork、UCOS-II/III、SymbianOS等)移植到系統上調試,最后再將應用程序添加到系統上運行。經過以上一系列驗證后,微處理器的實用化程度將會大大增強,同時也會提高用戶使用微處理器的信心和興趣。
軟件開發環境是嵌入式微處理器使用過程中很重要的一部分,基本要求是具有支持匯編語言、C語言、C++等程序的編譯、鏈接、軟件仿真、調試方便(尤其是在線進行目標軟件的調試)、軟件界面友好、簡單方便、靈活易用等特點,而且最好是提供與現有其它工具一樣的調試功能。軟件開發環境可以自行開發,周期可能較長,投入較大,維護成本較高;也可以在GNU提供的gcc等工具鏈的基礎上進行二次開發,周期會縮短,投入較小,維護成本較低;還可以使用ACE提供的專業編譯工具CoSy進行開發,周期會大幅度縮短,投入較大,維護成本較低,質量較高,更有利于產品的系列化發展。
以上只是對嵌入式微處理器的設計過程進行了簡明扼要的描述,而且涵蓋了主要方面,具體設計時還需要把每一過程進一步細化,才能達到設計目標。
[1] 楊碩.32位嵌入式微處理器一覽[DB/OL].http://epson.eefocus.com/ayayayaya/blog/10-08/193975_00ab0.html.
[2] 田澤,張怡浩,于敦山,盛世敏,仇玉林.SoC片上總線綜述[J].半導體技術,2003,28(11):11-15.