福建睿矽微電子科技有限公司 柯志斌
一種雙核安全芯片仿真和驗證平臺的實現
福建睿矽微電子科技有限公司 柯志斌
本文先從FPGA驗證板的制作說起,再分別介紹FPGA驗證平臺和ASIC仿真平臺的搭建和測試,并著重闡述了兩平臺之間的異同點,全面簡潔地闡述了雙核安全芯片的整個驗證測試流程。
驗證平臺;仿真平臺;FPGA;ASIC;雙核安全芯片
雙核安全芯片主要包括安全核系統(以下簡稱安全核)、應用核系統(以下簡稱應用核)、雙核通信三個部分。在驗證平臺上,先是兩個系統各自獨立調試,再進行雙核通信測試,最后是雙核之間的安全驗證。本文著重闡述在整個測試過程中經常碰到的JTAG、UART、存儲、燒錄等調試基本要素,并就FPGA和ASIC兩平臺的異同點進行詳細說明。
首先要進行FPGA芯片的選型工作,主要包括FPGA單元資源是否足夠,內置SRAM IP容量是否滿足應用需求,芯片的管腳是否夠用。除了芯片應用時需要的功能管腳外,還要考慮到數模混合IP驗證需要增加的引腳:如USB、磁卡、IC卡、數據安全防護等模塊,需要將模擬部分用類似功能的硬件電路搭建出來。綜合考量,最終選用Xlinx的Artix-7 XC7A200T-2FBG67GC芯片,官網有相應的開發板套件資料AC701 Evaluation Kit[1],參考并羅列出重點注意事項,保留FPGA能正常啟動和下載的核心模塊,其余根據實際需求,進行大幅度刪減,再增加自身的功能模塊。
驗證板由電源板、基板和核心板組成。電源板與基板等高平放著相連;核心板搭于基板上方,通過基板左右兩側的長條形連接座進行連接。
三個板子各自分開設計,主要是考慮到:(1)前期屬于設計階段,無法一次性設計到位,避免后續調試因為小改動而必須全部改版。(2)每塊板功能明顯不同,可以分別由各專業人員分別設計,獨立負責。(3)每塊板都可以拆卸,設計時也要充分考慮到與其他項目板子的混用性,以達到項目間資源充分利用,節省成本。
板子拼連要充分考慮三個板子之間的尺寸及拼接問題,穩定性很重要,否則后面調試時會常有一些莫名其妙的問題。因本身驗證平臺就是用于驗證IP功能的,IP功能是否正確尚不知道,如再加上板子自身的不穩定因素,調試起來就異常困難,疑神疑鬼,費事費力,嚴重延誤工期。電源板的制作要嚴格參照AC701開發板,注意各個電壓的電流余量,以保證FPGA芯片能滿負荷運轉,達到最大效率。
前期,安全核和應用核的調試接口是分開的,都用SWD模式(SWDIO,SWDCLK,GND,VDD),便于調試。也可以將雙核的JTAG調試接口串聯起來調試[2],如圖1所示;但沒有現成的編譯器可以調試。因此,先用SWD模式分開調試,功能完好后,再進行串聯調試,避免把串聯調試的不確定性問題帶入項目中。驗證板上則采用了兼容JTAG和SWD的雙核調試接口,如圖2所示。
UART串口是最常用的通信接口,也是必備的應用調試接口。安全核和應用核都需要一個調試UART。 為方便測試,也為了FPGA和ASIC實現的一致性,兩平臺都植入了專門用于測試用的uart串口,見第4章節。
安全核和應用核中的SRAM、ROM和eflash,都需要用FPGA內置的SRAM單元進行替換;因此,SRAM的容量大小是FPGA芯片選型的重要因素。SRAM、ROM、eflash都采用AHB總線連接在總線矩陣(BusMatrix)上,所以用SRAM替換后,可以做到AHB接口的讀寫時序保持一致。 應用核還包括EMC控制器(External Memory Controller),可以外掛pflash和psram,用于程序和數據的擴展。

圖1 JTAG串聯調試連接示意圖

圖2 兼容JTAG和SWD的雙核調試接口
Bootload配置數據存在于安全核中,前期也是以SRAM的形式進行調試,盡量簡潔,能簡單配置各個模塊啟動運行就可以了;等后續調試穩定后,再重新以ROM形式進行驗證。
調試階段,可以通過安全核和應用核自身的JTAG接口進行程序和數據的燒錄,包括對SRAM、ROM、eflash和外置pflash、psram的燒寫;等調試穩定后,應用開發人員也可以通過bootload進行燒錄動作,如通過uart或usb接口與PC機進行通信,也可以直接通過emmc接口直接從SD卡中獲取數據并燒錄。
仿真平臺模擬實際的FPGA平臺進行搭建,外設接口需要有相應的外圍設備仿真模型進行通信測試。實際應用測試時,經常用兩個FPGA開發板進行通信測試;仿真平臺也可以如此測試,但會嚴重降低仿真速度。
為方便仿真測試,參照ARM公司的Cortex-M0 DesignStart Eval的資料,將cmsdk_uart_capture.v加入到頂層testbench.v中,用于模擬實際應用測試時用到的PC機UART接口。同時將簡易的串口cmsdk_apb_uart.v植入到芯片當中;編譯時將cmsdk_uart.c加到src中。這樣在仿真時,需要觀測的數據就可以通過printf函數輸出到仿真軟件界面的console窗口或者fwrite到log文件。該log文件與實際調試時PC機串口上的顯示數據是完全一致的。通過比對這兩個文件,就可以發現ASIC在前端、后端設計當中可能產生的錯誤,同時也可以驗證RTL設計代碼的魯棒性。
ASIC中PLL都是由特定的IP供應商提供的,FPGA上只能調用FPGA現有的PLL進行模擬,頻率一致就行。本芯片可以根據應用場景不同,選擇不同頻率,以節省功耗;這一點在FPGA上約束并實現較為繁瑣,且會增大很大工作量,這里省去該功能。
ASIC中的低功耗設計,主要包括 (1) PMU(Power Management Unit),用來產生power switch以控制各個單元模塊的電源關斷;FPGA中保留這些power switch控制信號進行行為觀測,不會對各模塊電源進行處理。 (2) 門控時鐘,通過寄存器配置來對各個單元模塊的時鐘進行單獨控制;行為簡單,但如果在FPGA中引入門控時鐘的話,會數倍地增加后續的工作量且不利于調試,還極有可能導致FPGA跑步下去,因為FPGA里面的clock資源有限。因此,將門控時鐘模塊舍去,通過對配置時鐘的寄存器進行行為觀測即可。 (3)Multi-Voltage(多電壓域),本身FPGA和ASIC中各種電壓差異較大,對此不做處理。
ASIC中的SRAM和ROM一般由工藝廠的memory compiler配置生成,eflash一般由工藝廠或IP供應商另外提供。FPGA上,通過JTAG對SRAM進行燒錄來模擬elfash的燒錄功能,真正的eflash和rom的功能只能通過ASIC仿真來校驗;兩驗證平臺要對讀寫進行嚴格的時序比對,以保證SRAM與實際的eflash模型功能行為完全一致。
通過宏定義(`ifdef-`else-`endif)來實現FPGA和ASIC兩平臺共用一套代碼,以SRAM為例,摘抄如下:
`ifdef FPGA_Check
fpga_sram u_fpga_sram();
`else
asic_sram u_asic_sram();
`endif
本文介紹的FPGA驗證板,先是進行簡單的植入并調試驗證成功,在植入安全芯片各種IP進行功能驗證;后再進行全面的雙核植入,通過了應用開發人員產品級的高覆蓋率的功能驗證和批量測試;ASIC仿真平臺,也通過了前端驗證工程師的多次RTL仿真和后仿真校驗;仿真和驗證平臺均穩定運行。該雙核安全芯片業已順利MPW。
[1]Xilinx Artix-7 FPGA AC701 Evaluation Kit[DB/OL].http://www.xilinx.com/products/boards-and-kits/ek-a7-ac701-g.html.
[2]NXP Semiconductors,LPC43xx/LPC43Sxx ARM Cortex-M4/M0 multicore microcontroller User manual[DB/OL](2015-10-10).http://cache.nxp.com/documents/user_manual/UM10503.pdf?fsrch=1amp;sr=1amp;pageNum=1.
[3]ARM Ltd,Cortex-M0 DesignStart Eval[DB/OL].https://developer.arm.com/products/designstart/processor-ip/evaluate.
柯志斌(1982—),福建莆田人,碩士研究生,工程師,主要研究方向:數字芯片設計、MCU設計、POS機安全芯片設計。