張偉+梁蓓
摘 要 隨著集成電路制程工藝的迅猛發(fā)展,數(shù)字集成電路復(fù)雜度越來越高,這對(duì)集成電路的驗(yàn)證帶來了嚴(yán)峻挑戰(zhàn)。相比軟件仿真,數(shù)字芯片采用FPGA進(jìn)行邏輯驗(yàn)證,可以大大提高驗(yàn)證的速度。近年來,SoCFPGA的出現(xiàn)對(duì)于驗(yàn)證平臺(tái)的設(shè)計(jì)提供了一種新的啟發(fā)。本文提出一種基于SoCFPGA的MIPS處理器驗(yàn)證平臺(tái)的設(shè)計(jì)。采用ZYNQ芯片中的ARM主處理器實(shí)時(shí)控制監(jiān)測(cè)MIPS從處理器的運(yùn)行狀態(tài),來達(dá)到驗(yàn)證MIPS處理器的目的。同時(shí)ARM主處理器運(yùn)行Linux操作系統(tǒng),在不需要斷電重新配置的情況下,通過執(zhí)行不同的C程序?qū)崿F(xiàn)不同功能的驗(yàn)證,大大提高了MIPS處理器的驗(yàn)證效率。
【關(guān)鍵詞】驗(yàn)證 SoCFPGA MIPS ARM
1 引言
隨著集成電路制程工藝水平的不斷提高,在現(xiàn)代集成電路設(shè)計(jì)中,ASIC芯片的復(fù)雜程度與集成規(guī)模與日俱增,這為ASIC芯片的驗(yàn)證過程帶來了嚴(yán)峻的挑戰(zhàn)。芯片驗(yàn)證的目的是為了保證電路的邏輯功能與性能滿足設(shè)計(jì)要求,其貫穿了整個(gè)芯片的設(shè)計(jì)過程。保證一次性流片成功,是芯片驗(yàn)證的最高目標(biāo),如果流片失敗,不但會(huì)造成昂貴的流片費(fèi)用損失,還會(huì)造成產(chǎn)品的推遲上市。整個(gè)芯片設(shè)計(jì)周期中,芯片驗(yàn)證已經(jīng)占70%以上。這些因素都證明了芯片驗(yàn)證的極其重要性,實(shí)現(xiàn)高效且低成本的驗(yàn)證顯得尤為重要。目前大多數(shù)模塊的邏輯仿真主要采用加入工藝庫的軟件仿真,而系統(tǒng)級(jí)的芯片邏輯驗(yàn)證由于電路規(guī)模較大,軟件仿真的速度與覆蓋率已經(jīng)不能滿足設(shè)計(jì)周期要求。FPGA(Field-Programmable Gate Array),在ASIC芯片邏輯驗(yàn)證過程中是一種很有效的補(bǔ)充。由于FPGA的可重配置性,降低了流片失敗可能帶來的損失,加快了驗(yàn)證速度。
近年來,Xilinx推出了新一代嵌入ARM硬核的SoC FPGA—ZYNQ系列,相比傳統(tǒng)FPGA中使用軟核通用處理器性能提高很多,且不占用FPGA有限的邏輯資源和布局布線資源。本文利用ZYNQ芯片中嵌入ARM硬核的優(yōu)勢(shì),提出了一種基于SoC FPGA的驗(yàn)證平臺(tái),通過使用ARM處理器做為主處理器,MIPS處理器作為從處理器,從而來對(duì)MIPS處理器設(shè)計(jì)過程進(jìn)行驗(yàn)證。
2 ZYNQ簡(jiǎn)介
ZYNQ-7000是Xilinx推出的新一代全可編程片上系統(tǒng)(All Programmable SoC),其中我們采用的ZC706開發(fā)套件的ZYNQ芯片包含一顆可配置的雙核ARM Cortex A9處理器(Processing System,PS部分),和基于28nm工藝的Xilinx FPGA(Programmable Logic,PL部分),我們將其稱為SoC FPGA。其中PS部分可以用于通用型流水線計(jì)算,由于其已經(jīng)集成在芯片上,不需要占用FPGA的邏輯資源和布局布線資源,而且性能很高。PL部分可以用于實(shí)現(xiàn)某些特殊算法的硬件加速與硬件擴(kuò)展,PL部分可以實(shí)現(xiàn)并行計(jì)算,能夠比通用處理器快6-8個(gè)數(shù)量級(jí)以上,而且PL部分的可重構(gòu)性,能夠靈活實(shí)現(xiàn)各種特殊算法的硬件加速。PS部分與PL部分通過芯片內(nèi)AMBA總線實(shí)現(xiàn)連接,帶寬很高,滿足了某些苛刻環(huán)境下的帶寬要求。
3 MIPS處理器驗(yàn)證平臺(tái)設(shè)計(jì)
本文提出一種基于SoC FPGA(Xilinx ZYNQ)的MIPS處理器驗(yàn)證平臺(tái)的設(shè)計(jì)。將PS部分的ARM處理器作為主處理器,MIPS處理器在PL部分實(shí)現(xiàn),其中ARM處理器上移植Linux操作系統(tǒng),配置交叉編譯環(huán)境,在運(yùn)行過程中ARM處理器實(shí)時(shí)監(jiān)控MIPS處理器的工作狀態(tài),以此達(dá)到驗(yàn)證MIPS處理器功能的目的。
3.1 基于SoC FPGA的原型系統(tǒng)驗(yàn)證架構(gòu)
基于SoC FPGA的原型系統(tǒng)驗(yàn)證架構(gòu)如圖1,整體架構(gòu)的設(shè)計(jì)思想如下:
(1)首先上電后MIPS處理器處于復(fù)位狀態(tài)。ARM主處理器通過AXI-Lite接口,將MIPS處理器運(yùn)行過程中所需要的指令和初始化數(shù)據(jù),從系統(tǒng)內(nèi)存寫入到Distributed RAM中。
(2)寫入完成后,ARM主處理器通過AXI-Lite接口,寫入MIPS處理器啟動(dòng)命令,結(jié)束MIPS 處理器的復(fù)位狀態(tài)。MIPS處理器開始從Distributed RAM中讀取指令和數(shù)據(jù)。
(3)MIPS處理器執(zhí)行指令過程中,ARM主處理器將輪詢MIPS處理器的結(jié)束標(biāo)志。MIPS處理器完成所有指令執(zhí)行后,將設(shè)置結(jié)束標(biāo)志(Distributed RAM的固定地址)。
(4)ARM處理器將計(jì)算結(jié)果從Distributed RAM中讀回到系統(tǒng)內(nèi)存,并打印到串口終端,從而能夠在屏幕上實(shí)時(shí)監(jiān)測(cè)MIPS處理器運(yùn)行狀態(tài)。
3.2 AXI-Lite總線接口模塊設(shè)計(jì)
ARM主處理器發(fā)出的指令能夠在AXI-Lite Slave接口完成譯碼,根據(jù)ARM發(fā)出的讀寫請(qǐng)求對(duì)Distributed RAM進(jìn)行操作。要求其能夠支持以下地址空間的尋址:AXI-Lite接口可尋址的范圍為0x00000000 – 0x00003FFF (16KB),其中包括8KB Distributed RAM空間,地址范圍為:0x00000000 – 0x00001FFF,并且在AXI-Lite接口模塊中加入一個(gè)1-bit寄存器,來實(shí)現(xiàn)啟動(dòng)MIPS處理器的功能,地址為0x00002000。該寄存器將作為AXI-Lite接口的輸出信號(hào),在正常復(fù)位后,該寄存器置為1。當(dāng)AXI-Lite接口收到對(duì)這個(gè)寄存器的寫命令時(shí),就將寫入值(32-bit)的第0位取反后寫到這個(gè)1-bit寄存器中,來實(shí)現(xiàn)對(duì)MIPS處理器的復(fù)位操作。
AXI-Lite Slave接口可尋址范圍為16KB,所以其地址寬度為14位,與ARM通過AXI總線連接,與Distributed RAM通過5個(gè)通道連接,分別是Address、Write_data、Read_data、MemWrite、MemRead。另外一位寄存器mips_reset輸出口與MIPS處理器的復(fù)位端相連。Distributed RAM空間大小為8KB,即2^13Byte,單個(gè)寄存器為32位(4Byte),需要2^11個(gè)寄存器,所以Distributed RAM地址為11位。Distributed RAM采用同步寫入異步讀取。
為了對(duì)AXI-Lite Slave模塊與Distributed RAM模塊進(jìn)行仿真驗(yàn)證,需要設(shè)計(jì)一個(gè)AXI-Lite Master模塊模擬ARM處理器對(duì)其進(jìn)行收發(fā)數(shù)據(jù),以對(duì)其邏輯功能進(jìn)行驗(yàn)證,對(duì)這兩個(gè)模塊進(jìn)行仿真的結(jié)構(gòu)如圖2所示。
AXI-Lite Master模塊代替ARM處理器進(jìn)行收發(fā)數(shù)據(jù),加入時(shí)鐘復(fù)位激勵(lì),得到如圖3的仿真結(jié)果。
3.3 MIPS處理器頂層設(shè)計(jì)
mips_cpu_top需要將MIPS處理器模塊、AXI-Lite Slave模塊、Distributed RAM模塊包含進(jìn)來,另外需要添加一段組合邏輯,實(shí)現(xiàn)當(dāng)MIPS處理器對(duì)Distributed RAM進(jìn)行讀寫操作時(shí),如果此時(shí)ARM通過AXI-Lite Slave模塊對(duì)Distributed RAM有讀請(qǐng)求,將數(shù)據(jù)32hFFFF_FFFF返回到ARM讀取的數(shù)據(jù),表示ARM讀取的數(shù)據(jù)錯(cuò)誤。只有當(dāng)MIPS處理器停止對(duì)Distributed RAM進(jìn)行讀寫操作時(shí),ARM處理器才能讀取到正確的數(shù)據(jù)。如圖4是對(duì)頂層的仿真結(jié)果。
根據(jù)仿真波形可以看到,當(dāng)MIPS處理器對(duì)Distributed RAM進(jìn)行寫操作時(shí),同時(shí)ARM主處理器對(duì)Distributed RAM進(jìn)行讀操作,讀到的數(shù)據(jù)為32hFFFF_FFFF。當(dāng)MIPS處理器進(jìn)行讀操作時(shí),ARM主處理器同樣讀到錯(cuò)誤的數(shù)據(jù)。只有當(dāng)MIPS主處理器對(duì)Distributed RAM沒有任何操作時(shí),ARM主處理器才會(huì)讀取到正確的數(shù)據(jù)。頂層邏輯功能得到驗(yàn)證。
4 基于SoC FPGA的MIPS處理器驗(yàn)證平臺(tái)實(shí)現(xiàn)
4.1 比特流文件的生成
驗(yàn)證平臺(tái)具體的Block Design如圖5,MIPS處理器頂層包含了AXI接口模塊,Distributed RAM模塊以及MIPS處理器,對(duì)外只預(yù)留AXI總線結(jié)構(gòu),系統(tǒng)會(huì)自動(dòng)為工程加入AXI Interconnect模塊與Processer System Reset模塊,經(jīng)過DRC檢查,添加時(shí)鐘約束,Vivado軟件生成可以配置SoC FPGA的比特流文件。
4.2 ARM硬核上運(yùn)行Linux操作系統(tǒng)
在ARM硬核上運(yùn)行Linux操作系統(tǒng)需要用到以下幾個(gè)文件:
(1)BOOT.bin是引導(dǎo)程序,其組成包含3個(gè)文件:fsbl.elf、system.bit、u-boot.elf。主要用于初始化PL(FPGA部分)和PS(ARM部分)及引導(dǎo)內(nèi)核。fsbl.elf需要在SDK軟件中生成,system.bit為Vivado工程的比特流文件,u-boot.elf需要在Linux系統(tǒng)下編譯生成。使用SDK軟件可以將這3個(gè)文件生成BOOT.bin。
(2)uImage是Linux內(nèi)核文件,需要在Linux操作系統(tǒng)下安裝交叉編譯環(huán)境后,編譯生成。
(3)devicetree.dtb是設(shè)備樹文件,包含硬件配置信息的數(shù)據(jù)結(jié)構(gòu),包括CPU、內(nèi)存、總線及相關(guān)外設(shè),內(nèi)核啟動(dòng)時(shí),可以解析這些信息,以此來配置內(nèi)核及加載相關(guān)驅(qū)動(dòng)。
(4)Linaro文件系統(tǒng)。需要在Linux系統(tǒng)下解壓到SD卡的ext3分區(qū)。ramdisk文件系統(tǒng),需要存放于SD卡的fat32分區(qū)。
有了以上文件后,我們就可以在ARM硬核上移植Linux操作系統(tǒng)。
4.3 編譯運(yùn)行C程序
將比特流文件燒寫到SoC FPGA中,啟動(dòng)操作系統(tǒng),C程序在Linux操作系統(tǒng)下編譯并且執(zhí)行,ARM執(zhí)行該C程序的主要功能是將MIPS處理器所需的指令和數(shù)據(jù)寫入Distributed RAM中,并啟動(dòng)MIPS處理器,MIPS處理器將從Distributed RAM中讀取指令及數(shù)據(jù),其執(zhí)行后的結(jié)果存放于Distributed RAM中,將由ARM在Distributed RAM中讀回到系統(tǒng)內(nèi)存中,并在串口調(diào)試工具界面中打印輸出。
由圖6打印輸出的結(jié)果可以判斷,在SoC FPGA上實(shí)現(xiàn)了多周期MIPS處理器的驗(yàn)證,ARM處理器將MIPS處理器執(zhí)行冒泡排序結(jié)果打印。后期可以編寫不同的C程序,讓MIPS處理器執(zhí)行其他更加復(fù)雜的功能,對(duì)MIPS處理器進(jìn)行更充分的驗(yàn)證。
5 結(jié)語
本文提出了一種基于SoC FPGA的MIPS處理器驗(yàn)證平臺(tái)的設(shè)計(jì),對(duì)MIPS處理器的驗(yàn)證提供了硬件仿真,提高了仿真速度。同時(shí)采用ARM主處理器實(shí)時(shí)控制監(jiān)測(cè)MIPS從處理器的方式,可以更加直觀的監(jiān)測(cè)MIPS處理器的運(yùn)行狀態(tài),并且ARM主處理器運(yùn)行Linux操作系統(tǒng),能夠在不斷電的前提下,通過執(zhí)行不同的程序,來對(duì)MIPS處理器進(jìn)行驗(yàn)證,同時(shí)在驗(yàn)證過程中采用C程序,極大的提高了驗(yàn)證效率。
參考文獻(xiàn)
[1]Qinsheng M,Yang C,Jun Y,et al. Random testing for system-level functional verification of system-on-chip[J].系統(tǒng)工程與電子技術(shù)(英文版),2009,20(06):1378-1383.
[2]Murphy P,F(xiàn)rantz J P,Welsh E,et al.VALID:Custom ASIC Verification and FPGA Education Platform[C]// International Conference on Microelectronics Systems Education. IEEE Computer Society,2003:64-65.
[3]Devins R J.Processor-independent system-on-chip verification for embedded processor systems[J].South BurlingtonvtUssouthBurlingtonvtUsessexJunctionvt Us,2003.
[4]Hutton M,Yuan R,Schleicher J,et al.A Methodology for FPGA to Structured-ASIC Synthesis and Verification[C]// Design,Automation and Test in Europe.IEEE,2006:64-69.
[5]Crockett L H.The Zynqbook:embedded processing with the ARM Cortex-A9 on the Xilinx Zynq-7000 all programmable SoC[M].Strathclyde Academic Media,2014.
[6]Wu Y,Song J,Ren K,et al.Research on LogGP Based Parallel Computing Model for CPU/GPU Cluster[J].2017.
作者簡(jiǎn)介
張偉(1991-),男,在讀研究生,主要研究方向?yàn)槔^承電路設(shè)計(jì)。
梁蓓(1963-),女,貴州大學(xué)教授,碩士生導(dǎo)師,主要研究方向?yàn)榧呻娐吩O(shè)計(jì)。
作者單位
貴州大學(xué)大數(shù)據(jù)與信息工程學(xué)院 貴州省貴陽市 550025