陶青平,尚國(guó)慶,朱清
(中國(guó)電子科技集團(tuán)公司第五十八研究所,江蘇 無錫 214035)
SoC 是一種集成化芯片,相比于傳統(tǒng)的芯片,SoC 芯片有著很多的優(yōu)勢(shì),它擁有可靠性高、體積小、功耗低、集成度高等特點(diǎn)[1]?,F(xiàn)在很多智能設(shè)備中都有它的身影,如手機(jī)處理器芯片華為的麒麟9000、高通的驍龍888等,甚至一些定制化特殊需求的芯片也都采用SoC 技術(shù)。SoC 的硬件通?;贗P 模式設(shè)計(jì)[2],所以SoC 的流行同時(shí)也催生了各種各樣的IP 設(shè)計(jì),尤其帶有標(biāo)準(zhǔn)總線協(xié)議的IP,可方便地嵌入到SoC 芯片中。在SoC 設(shè)計(jì)中,片上總線的概念[3]相當(dāng)重要,目前比較常見的幾種總線有:AXI 總線[4-5],目前應(yīng)用最廣泛的、高性能的片上總線;AHB 總線,目前應(yīng)用最為廣泛的高性能低功耗總線,ARM 的Cortex-M 系列大多采用這種總線;APB 總線,主要應(yīng)用于低帶寬周邊外設(shè)之間,如UART、SPI 等。
眾所周知,既然SoC 的設(shè)計(jì)離不開IP 的支持,在這些IP 在未集成到SoC 之前,需要對(duì)其進(jìn)行驗(yàn)證仿真。尤其那些帶有總線接口的IP,驗(yàn)證者除了要了解這個(gè)IP的功能,還必須對(duì)各種總線協(xié)議比較熟悉,這無疑增加了驗(yàn)證的困難。傳統(tǒng)的方案是MCU+FPGA 實(shí)現(xiàn)方案,或者類似FPGA 原型驗(yàn)證的架構(gòu)[6]。不僅要求在設(shè)計(jì)硬件上有很高的要求,如MCU 與FPGA 之間的通信,尤其是并行通信方式[7],而且有可能會(huì)要求驗(yàn)證者將一些總線協(xié)議進(jìn)行轉(zhuǎn)換,如XINTF 轉(zhuǎn)成APB 總線協(xié)議、EMIF 接口轉(zhuǎn)成APB 總線協(xié)議等,這就對(duì)驗(yàn)證者的技術(shù)提出了更高的要求。原型驗(yàn)證架構(gòu)方式還需要搭載一個(gè)核的實(shí)現(xiàn),不夠便捷。通過上述分析,發(fā)現(xiàn)一般傳統(tǒng)的方案對(duì)硬件和軟件的設(shè)計(jì)能力要求都比較高,而且任何一方有問題的話,調(diào)試起來也比較費(fèi)時(shí)費(fèi)力,甚至有可能導(dǎo)致硬件重做,耽誤項(xiàng)目進(jìn)度。
本文提出的方案設(shè)計(jì)與實(shí)現(xiàn)利用ZYNQ 的先天優(yōu)越性,ZYNQ 本身就是集ARM+FPGA架構(gòu)[8],PS 是ARM端,PL 是FPGA端,PL 可用來放待驗(yàn)證的IP,PS 可根據(jù)需要進(jìn)行裁剪。PS 與PL 的通信方式可采用一種標(biāo)準(zhǔn)的AXI4 通信[9],這種通信方式提供了一些通用的可行的橋進(jìn)行轉(zhuǎn)換,如AXI 轉(zhuǎn)APB、AXI 轉(zhuǎn)AHB 等都有成熟的橋方案,大大減少了硬件的設(shè)計(jì)復(fù)雜度和成本,對(duì)軟件的要求也不高。
根據(jù)測(cè)試不同的IP 功能可以構(gòu)建出一個(gè)最符合測(cè)試該IP 的系統(tǒng)架構(gòu),且軟硬件可裁剪。由于ZYNQ 的PS和PL 部分均可靈活配置,對(duì)于一些簡(jiǎn)單的IP,如UART、I2C、SPI等,由于這些IP 在ZYNQ 的PS 端均有實(shí)現(xiàn),便可通過EMIO 功能,將PS 端的引腳引入到PL端,就可以將放在PL 端的待測(cè)IP 的管腳與EMIO 端進(jìn)行連接,無需外接子板便可進(jìn)行協(xié)議驗(yàn)證。如果是帶有標(biāo)準(zhǔn)接口的IP,Xilinx 官方提供一些AXI 轉(zhuǎn)AHB、AXI 轉(zhuǎn)APB 的橋,這些總些接口都是大多數(shù)SoC 芯片方案采用的接口,利用這些橋便可方便地搭建系統(tǒng)架構(gòu),而無需和傳統(tǒng)方案一樣去關(guān)心總線時(shí)序如何轉(zhuǎn)化的問題,讓開發(fā)者和驗(yàn)證者著重關(guān)心具體IP 的驗(yàn)證。方案架構(gòu)如圖1 所示。
從圖1 中可以看出,基于不同的IP,可以選擇不同的測(cè)試通路,一條路徑是待測(cè)試的DUT 通過EMIO 進(jìn)行通信(如I2C、UART、SPI 等),PS 端的AXI 通過配置DUT寄存器,使能DUT 功能,再通過與PS 端的EMIO 進(jìn)行互聯(lián)測(cè)試,PS 可根據(jù)測(cè)試的結(jié)果判斷,完全不需要額外的連線措施;另一條是PS 端通過AXI 與DUT 進(jìn)行通信,有需要時(shí)外部再連接外設(shè)子板配合測(cè)試。這兩條路徑均省去了傳統(tǒng)的MCU+FPGA 方案的物理連線的步驟,節(jié)約PCB 的制作成本,測(cè)試結(jié)果可利用PS 的UART 打印送給PC端,實(shí)現(xiàn)自動(dòng)化一鍵測(cè)試需求。
Zynq-7000 系列[10]是具有雙核ARM(Cortex-A9)芯片的FPGA。ARM 處理器部分即文中提及的PS(Processing System)集成了DDR2/3/LPDDR2 存儲(chǔ)器控制器、以太網(wǎng)網(wǎng)口、USB 控制器、SD 卡、SPI、UART、Flash Memory Interface等外設(shè);可編程邏輯部分即文中提及的PL(Programmable Logic),如XC7Z045-FFG900-3 是采用Kintex-7 架構(gòu),其具有350 000 個(gè)邏輯單元(相當(dāng)于52 萬(wàn)門的電路)、218 600的LUTs、437 200 個(gè)寄存器、2 180 KB 的集成RAM、900個(gè)18×25 硬件乘法器。這些資源對(duì)實(shí)現(xiàn)大部分IP 的功能綽綽有余,而且ZYNQ 平臺(tái)為嵌入式系統(tǒng)的實(shí)現(xiàn)提供了極大的靈活性,可通過Vivado 對(duì)其資源進(jìn)行篩選。圖2 為ZYNQ 的資源框圖。
圖2 中EMIO、32 bit GP AXI Master Ports、32 bit GP AXI Slave Ports、HP AXI Slave Ports 和AXI ACP Slave Ports可與所測(cè)試DUT 進(jìn)行通信連接。
SoC IP 封裝就是將待測(cè)試的IP 進(jìn)行必要的重新打包封裝,如果測(cè)試的IP 沒有對(duì)應(yīng)的接口,需將接口與待測(cè)試的IP 一起封裝。在封裝IP 的過程中有兩處地方需特別注意的地方:一處是在Ports and Interfaces處,這里可以對(duì)所封裝的IP 的一些標(biāo)準(zhǔn)接口進(jìn)一步規(guī)范,如APB 接口、AHB 接口等,以使下一步連接時(shí)線比較清晰;另一處則是在Addressing and Memory,如果待測(cè)IP用到了地址映射,需添加Add Memory Map 和Add Address Blocks,并將封裝好的IP 集成到ZYNQ 平臺(tái)上進(jìn)行連接測(cè)試。
將各個(gè)封裝好的IP 與ZYNQ 通過接口連接好,生成bit 文件,將生成好的硬件通過Vivado 工具導(dǎo)出。啟動(dòng)SDK 軟件設(shè)計(jì)有兩種方式:一種通過Vivado 啟動(dòng)SDK;另一種打開SDK 軟件,導(dǎo)入剛才導(dǎo)入的硬件hdf。SDK軟件根據(jù)硬件的不同提供良好的板級(jí)支持包,程序的大體框圖業(yè)已寫好,只需測(cè)試者把想要測(cè)試的測(cè)試向量加入到框架中去或者直接通過PC 端傳入測(cè)試向量。
本文通過rdc IP 的測(cè)試來驗(yàn)證方案的正確性和優(yōu)越性。
旋變模塊rdc IP 的接口是APB 從機(jī)接口,與APB 主機(jī)總線接口連接。該模塊IP 的功能是接收SD(Sigma-Delta調(diào)制)類型的AD 數(shù)據(jù)格式。通過這些數(shù)據(jù)計(jì)算出旋變的轉(zhuǎn)速和角度。通過APB 接口配置其工作模式,讀取數(shù)據(jù)的轉(zhuǎn)速和角度信息。其端口信息如表1 所示。
表1 rdc IP 的端口信號(hào)
從表1 中可以看出,該模塊需要一工作時(shí)鐘pclk,這可以由PS 的FCLK_CLK0(100Mhz)提供;一基礎(chǔ)時(shí)鐘xclk_rom,可由PS 的FCLK_CLK1 提供;其他時(shí)鐘可經(jīng)過分頻,反相得到,如表2 所示。
表2 時(shí)鐘生成頻率
APB 接口可通過axi_apb_bridge 與axi_interconnect 連接到PS 端的M_AXI_GP0 上。PS 端通過此端口可配置rdc IP 的配置參數(shù)。
sin、cos 數(shù)據(jù)可通過PS 端將數(shù)據(jù)存放在PL 例化的雙口RAM中,在該設(shè)計(jì)中利用AXI_bram_ctrl 和blk_mem_gen雙端口,一端通過PS 寫入數(shù)據(jù),另一端則PL 可通過其讀出寫入的數(shù)據(jù)提供給IP 核作激勵(lì)。并通過PS 的GPIO 的上升沿產(chǎn)生中斷,通知rdc_driver 模塊數(shù)據(jù)傳輸完成,可向rdc IP 發(fā)送sin、cos 數(shù)據(jù)作為IP 的激勵(lì)向量。其中sin、cos 數(shù)據(jù)為事先準(zhǔn)備好的SD 類型的數(shù)據(jù)。
最終的Block Design 的設(shè)計(jì)圖如圖3 所示。
硬件完成后,生成hdf 文件和bit 文件,啟動(dòng)SDK,進(jìn)行軟件設(shè)計(jì),PS 軟件端的代碼主要為接收由PC 端通過串口發(fā)送的測(cè)試向量,并將其存放在PL 中的SRAM 中;接收完成后通知PL 向IP 輸入測(cè)試向量,PS 讀取IP 的寄存器的測(cè)試結(jié)果返回到PC 端判斷測(cè)試是否正確。其軟件設(shè)計(jì)流程如圖4 所示。
對(duì)比傳統(tǒng)的方案,本文以DSP+FPGA 方案為例,DSP與FPGA 通過EMIF 接口通信,F(xiàn)PGA 端除了需要實(shí)現(xiàn)rdc IP,還必須對(duì)EMIF 通信接口時(shí)序進(jìn)行轉(zhuǎn)換,轉(zhuǎn)成相應(yīng)的APB 接口,驗(yàn)證者需了解這兩種的時(shí)序關(guān)系,對(duì)驗(yàn)證者的設(shè)計(jì)水平提出了更高的要求。二者方案對(duì)比如表3 所示。
從表3 中可以看出,傳統(tǒng)方案從硬件到軟件的實(shí)現(xiàn)比本文的方案都要復(fù)雜得多,且費(fèi)時(shí)費(fèi)力,而本文的方案中除了基本的ZYNQ 平臺(tái)外,并未需要到其他外設(shè),而且減少了PCB 板級(jí)的布局布線,且在資源重復(fù)利用上相對(duì)于傳統(tǒng)的驗(yàn)證方案通用性更加靈活,減少了針對(duì)測(cè)試不同的IP 所帶來的制作成本的提供,提高驗(yàn)證效率。
表3 方案對(duì)比
本文介紹了一種ZYNQ 在SoC IP 驗(yàn)證方案的設(shè)計(jì)與實(shí)現(xiàn),并通過驗(yàn)證rdc IP 的實(shí)際案例說明方案的可行性。與傳統(tǒng)的MCU+FPGA 方案或者是原型驗(yàn)證架構(gòu)對(duì)比,本方案在硬件的搭建、PCB 制作的成本上以及軟件測(cè)試的優(yōu)越性和便利性上更勝一籌,特別是帶有標(biāo)準(zhǔn)接口的SoC IP 的測(cè)試。隨著SoC 芯片設(shè)計(jì)的流行,各種各樣的IP 設(shè)計(jì)的需求也日益增加,本文所提驗(yàn)證手段既簡(jiǎn)單又靈活方便,可為SoC 芯片驗(yàn)證提供參考。