王彬 于哲 趙子龍
摘要: 傳統(tǒng)系統(tǒng)級(jí)芯片(system on chip,SoC) 仿真多數(shù)基于含有硬核中央處理器(central processingunit,CPU)的現(xiàn)場(chǎng)可編程邏輯門(mén)陣列(field programmable gate array,F(xiàn)PGA)平臺(tái),這使得數(shù)字芯片設(shè)計(jì)者在工程設(shè)計(jì)與仿真過(guò)程中缺乏對(duì)底層數(shù)據(jù)邏輯以及與其緊密關(guān)聯(lián)的系統(tǒng)應(yīng)用的深刻理解。針對(duì)該問(wèn)題,設(shè)計(jì)了一種面向工程仿真應(yīng)用的SoC 平臺(tái)。該平臺(tái)基于國(guó)產(chǎn)CPU 處理器和高級(jí)微控制器總線架構(gòu)(advanced microcontroller bus architecture,AMBA),預(yù)留了擴(kuò)展設(shè)計(jì)所需的高級(jí)高性能總線(advanced highperformance bus,AHB)和外圍總線(advanced peripheral bus,APB)接口,設(shè)計(jì)了CPU 向通用異步收發(fā)器(universal asynchronous receiver/transmitter,UART)寫(xiě)入串口數(shù)據(jù)的測(cè)試用例。結(jié)果表明,該平臺(tái)通過(guò)了仿真驗(yàn)證,可滿足數(shù)字芯片設(shè)計(jì)所涉及的嵌入式開(kāi)發(fā)、數(shù)字前端設(shè)計(jì)、模塊功能仿真等工程實(shí)踐教研需求。
關(guān)鍵詞:SoC;仿真驗(yàn)證;AMBA 總線;串口
中圖分類號(hào):TN47;TP368 文獻(xiàn)標(biāo)識(shí)碼:A
0 引言
隨著集成電路制造工藝的發(fā)展,系統(tǒng)級(jí)芯片(system on chip,SoC)能夠集成更多數(shù)量和種類的器件。SoC 設(shè)計(jì)應(yīng)該是一個(gè)軟件和硬件協(xié)同設(shè)計(jì)的過(guò)程,然而傳統(tǒng)的集成電路設(shè)計(jì)方法一般都是將系統(tǒng)分為軟件開(kāi)發(fā)和硬件電路設(shè)計(jì)兩個(gè)部分[1]。目前,SoC 設(shè)計(jì)相關(guān)的工程實(shí)踐主要是基于包括硬核處理器在內(nèi)的現(xiàn)場(chǎng)可編程邏輯門(mén)陣列(fieldprogrammable gate array,F(xiàn)PGA)平臺(tái)(如XILINX公司的ZYNQ 系列FPGA)的嵌入式開(kāi)發(fā)和數(shù)字硬件電路設(shè)計(jì),或?qū)⒑杏埠酥醒胩幚砥鳎╟entralprocessing unit,CPU) 的FPGA 作為原型驗(yàn)證的平臺(tái)進(jìn)行SoC 的系統(tǒng)驗(yàn)證[2-5],或基于SoC 芯片開(kāi)展相關(guān)應(yīng)用設(shè)計(jì)等[6],這些設(shè)計(jì)方式導(dǎo)致設(shè)計(jì)者對(duì)底層邏輯電路與上層系統(tǒng)應(yīng)用的理解不夠系統(tǒng)和深刻。
本文設(shè)計(jì)了一種面向工程仿真應(yīng)用的SoC 平臺(tái),該平臺(tái)層次清晰、結(jié)構(gòu)完整,支持高級(jí)高性能總線(advanced high performance bus,AHB)和外圍總線(advanced peripheral bus,APB) 的模塊擴(kuò)展,以及基于國(guó)產(chǎn)CPU 的系統(tǒng)級(jí)嵌入式開(kāi)發(fā);結(jié)合相關(guān)電子設(shè)計(jì)自動(dòng)化(electronic designautomation,EDA)工具、工藝庫(kù)文件,可滿足從前端設(shè)計(jì)仿真到后端綜合布線、基于SoC 的嵌入式開(kāi)發(fā)等工程實(shí)踐需求。
1 平臺(tái)架構(gòu)設(shè)計(jì)
圖1 為工程仿真SoC 組成架構(gòu)。其中,CPU 通過(guò)高級(jí)可擴(kuò)展接口(advanced eXtensible interface,AXI)接入總線矩陣;靜態(tài)隨機(jī)存取存儲(chǔ)器(staticrandom access memory, SRAM)、閃存(FLASH)、直接內(nèi)存訪問(wèn)(direct memory access,DMA)、預(yù)留1(Reserved1)和APB 橋通過(guò)AHB 接口接入總線矩陣;而通用異步收發(fā)器(universal asynchronousreceiver /transmitter,UART )、系統(tǒng)控制(systemcontrol,System_ctrl) 和預(yù)留2(Reserved2) 接入APB 橋的APB 接口。
其中,CPU 為國(guó)產(chǎn)CPU 處理器IP 核,是SoC的核心處理器;總線矩陣為多個(gè)SoC 總線組成的矩陣,包括AXI、AHB、APB 等多種類型的多個(gè)接口;SRAM 為系統(tǒng)的運(yùn)行內(nèi)存,CPU 可完成對(duì)SRAM 的高速讀寫(xiě)操作,同時(shí)為CPU 的高速運(yùn)行提供高速訪問(wèn)的存儲(chǔ)空間;FLASH 模塊為FLASH控制器模塊,可以完成對(duì)片外FLASH 存儲(chǔ)器的讀寫(xiě)操作,從而在SoC 啟動(dòng)階段從FLASH 中讀取BOOTLoader 文件和用戶程序,或是在DMA 控制下從FLASH 中搬移程序到SRAM;DMA 用來(lái)執(zhí)行存儲(chǔ)器與存儲(chǔ)器之間,以及存儲(chǔ)器與模塊之間的數(shù)據(jù)搬運(yùn),以避免因大量數(shù)據(jù)的搬運(yùn)而占用過(guò)多的CPU 資源;Reserved1、Reserved2 分別為預(yù)留的AHB、APB 接口模塊,工程實(shí)踐過(guò)程中可按需設(shè)計(jì)相應(yīng)的功能模塊并接入SoC 系統(tǒng)進(jìn)行系統(tǒng)級(jí)的仿真。
2 地址映射
通過(guò)IP 核的復(fù)用和相應(yīng)功能模塊的設(shè)計(jì), 可較快地完成SoC 的集成設(shè)計(jì)。而在各IP 核進(jìn)行系統(tǒng)集成之前, 還需要完成相應(yīng)的參數(shù)配置和地址分配。該地址分配是需要對(duì)SoC 系統(tǒng)架構(gòu)中各功能模塊進(jìn)行地址空間分配。例如, System_ctrl 被分配的地址映射范圍為0x0200_0000 ~ 0x0200_0FFF, UART 被分配的地址映射范圍為0x0200_4000 ~ 0x0200_4FFF。CPU可通過(guò)對(duì)特定地址映射范圍的寄存器進(jìn)行讀寫(xiě)訪問(wèn),實(shí)現(xiàn)對(duì)相應(yīng)功能模塊的控制。
在本設(shè)計(jì)中,CPU、總線矩陣、SRAM、FLASH、DMA 和APB 橋等模塊均選用現(xiàn)有IP 核,UART 和System_ctrl 為自主設(shè)計(jì)的功能模塊。通過(guò)地址映射空間的分配,完成對(duì)上述IP 核以及設(shè)計(jì)的功能模塊分配地址映射空間。各模塊IP 完成配置后集成到總線矩陣上。編寫(xiě)CPU 向UART 寫(xiě)數(shù)據(jù)的測(cè)試用例源文件,將其命名為cpu_write_uart.c文件;該源文件為用戶程序的Main 函數(shù)的一個(gè)子函數(shù)。整個(gè)CPU 用戶程序的源函數(shù)通過(guò)編譯后生成可執(zhí)行BIN 文件,將該可執(zhí)行文件作為FLASH模塊讀取的參數(shù)文件,CPU 在BOOTLoader 啟動(dòng)后,即可讀取用戶程序的可執(zhí)行文件。
3 仿真驗(yàn)證
SoC 仿真平臺(tái)搭建完成后,進(jìn)行嵌入式軟件的測(cè)試。以CPU 向UART 串口寫(xiě)3 個(gè)字節(jié)的數(shù)據(jù)0xab、0xac、0xad 為例,在基于國(guó)產(chǎn)CPU 開(kāi)發(fā)的C 程序的Main 函數(shù)中, 添加CPU 寫(xiě)UART 的函數(shù);然后執(zhí)行編譯生成可執(zhí)行文件cpu_write_uart.hex;將上述可執(zhí)行文件作為Flash 模型讀取參數(shù)的目標(biāo)文件,從而在仿真過(guò)程中實(shí)現(xiàn)對(duì)用戶程序的加載[7-8]。圖2 為CPU 向UART 寫(xiě)數(shù)據(jù)的波形圖。其中,CPU 通過(guò)AXI 總線向地址為32h0200_4000 的UART 寄存器分別依次寫(xiě)入了0xab、0xac 和0xad;uart_sout 端口依次輸出了串行比特值0xab、0xac 和0xad。其中,UART 波特率設(shè)置為115 200,格式為“起始位‘0+8 位數(shù)據(jù)+1 位校驗(yàn)位”,校驗(yàn)方式為偶校驗(yàn),且當(dāng)字節(jié)數(shù)據(jù)在串行發(fā)送比特流時(shí),發(fā)送比特的順序是從字節(jié)數(shù)據(jù)的低比特位到高比特位。例如,一個(gè)字節(jié)寬度的數(shù)據(jù)DATA[7:0],在UART串口發(fā)送時(shí)先發(fā)送DATA[0] 而最后發(fā)送DATA[7]。如圖3 所示,0xab 轉(zhuǎn)換為二進(jìn)制是“1010_1011”,轉(zhuǎn)換為UART 串口發(fā)送時(shí),加上起始位“0”和最后的校驗(yàn)位“1”, 所以轉(zhuǎn)換為比特流時(shí)為“0_1101_0101_1”; 采用同樣的方法可以驗(yàn)證UART 串口收到的數(shù)據(jù)為0xac、0xad,與CPU 寫(xiě)入的數(shù)據(jù)一致,從而驗(yàn)證了SoC 設(shè)計(jì)功能的正確性。
4 結(jié)論
本文設(shè)計(jì)了一種面向工程仿真應(yīng)用的SoC 平臺(tái),預(yù)留了擴(kuò)展接口,設(shè)計(jì)了測(cè)試用例并通過(guò)了仿真驗(yàn)證。該平臺(tái)在工程領(lǐng)域具有代表性,貼近工程實(shí)際且相關(guān)內(nèi)容深入淺出,可操作性強(qiáng),能夠?yàn)榧呻娐饭こ?、微電子等相關(guān)領(lǐng)域提供嵌入式設(shè)計(jì)、數(shù)字集成電路(integrated circuit,IC)設(shè)計(jì)、系統(tǒng)集成與功能仿真等工程實(shí)踐平臺(tái)與參考樣例,為培養(yǎng)工程實(shí)踐能力強(qiáng)的專業(yè)人才提供借鑒。
參考文獻(xiàn)
[1] 郭煒,魏繼增,郭箏,等. SoC 設(shè)計(jì)方法與實(shí)現(xiàn)[M].3 版. 北京:電子工業(yè)出版社,2017:10-12.
[2] 楊昕欣,姚遠(yuǎn),刁為民,等. 面向工程教育的SoC嵌入式系統(tǒng)實(shí)驗(yàn)平臺(tái)設(shè)計(jì)與教學(xué)實(shí)踐[J]. 中國(guó)現(xiàn)代教育裝備,2018(3):22-24.
[3] 高俊楓,黃樂(lè)天,胡慶. 嵌入式系統(tǒng)“FPGA+SoC”實(shí)踐教學(xué)體系內(nèi)容重構(gòu)[J]. 高等工程教育研究,2024(1):73-77.
[4] 張劍賢,吳文華,劉錦輝,等. 基于FPGA 的8 位SoC 微體系結(jié)構(gòu)設(shè)計(jì)[J]. 計(jì)算機(jī)教育,2020(3):31-35.
[5] 鄧睿,余宏,莫章潔,等. 基于SOC 技術(shù)的微機(jī)原理實(shí)驗(yàn)課程教學(xué)改革探索[J]. 數(shù)字技術(shù)與應(yīng)用,2023, 41(4):21-23.
[6] 江志東, 霍立平, 張弟, 等. 基于SoC 芯片的1553B 總線仿真平臺(tái)設(shè)計(jì)與實(shí)現(xiàn)[J]. 電子設(shè)計(jì)工程,2020,28(24):152-157.
[7] 鄧睿,余宏,莫章潔,等. 基于Cortex_M3 內(nèi)核的SoC 芯片軟硬件協(xié)同驗(yàn)證平臺(tái)設(shè)計(jì)實(shí)現(xiàn)[J]. 數(shù)字技術(shù)與應(yīng)用,2023,41(6):197-199.
[8] 朱文波,郭斌林. 一種有效的SOC 系統(tǒng)程序引導(dǎo)方法[J]. 杭州電子科技大學(xué)學(xué)報(bào),2008,28(1):16-19.