方 倪,徐德利,王 東,沈 凡,龔 祺
(華中師范大學物理科學與技術學院像素實驗室,湖北武漢 430079)
隨著集成電路技術的快速發展,復雜電路的集成變得可行。高能物理實驗中依托于CMOS 像素傳感器,像素傳感器最重要的指標之一就是像素分辨率,提高像素分辨率可增加高能物理中發現新粒子的概率,因此大陣列CMOS 像素傳感器具有極其重要的應用價值[1]。目前國內對于大陣列的拼接主要利用精密壓電陶瓷電機完成探測器位置調整,并通過激光測距儀測量以及計算機平面擬合來確定探測器的空間位置,進而實現大規模非連續CMOS 焦平面陣列的機械式拼接[2-3]。大陣列的讀出結構主要采用Global shutter[4]、rolling shutter[5]、AERD (Address Encode and Reset Decode)[6]等方式。利用機械方式的拼接可以解決大陣列問題,但是同時也會帶來外部連接的問題,陣列讀出方式的選擇也是該類芯片需要研究的關鍵問題。文中設計利用開源的RISCV 處理器構建一個可重構的數字讀出系統來克服這些問題,通過外部的配置進行讀出方式的選擇,通過外部接口的設計進行多處理器之間的級聯,實現大陣列像素的讀出,提高了系統兼容性。
像素陣列掃描控制器主要由3 個部分構成:核心模塊、通信接口和像素掃描陣列;核心模塊搭載國內開源的RISCV 內核,主要任務是協調各個模塊之間正常運轉;通信接口主要采用JTAG 接口,利用JTAG 既可以完成核的燒錄也可以形成菊花鏈結構級聯多核;像素掃描陣列實現常用的掃描方式及Global shutter &rolling shutter,能夠實現兩個模式的切換、更改掃描的分辨率以及針對某一指定區域進行掃描。像素陣列掃描控制器的結構示意圖如圖1所示。

圖1 像素陣列掃描控制器的結構示意圖
RISCV 架構主要由美國加州大學伯克利分校于2010年發明[7]。文中設計的內核基于國內開源RISCV處理器——蜂鳥E203[8],內核設計遵循模塊化的原則,將處理器劃分成4個主體模塊單元,分別為系統存儲、外設部分、程序Debug 燒錄部分以及處理器core。系統存儲主要分為ITCM(Instruction Tightly Coulped Memory)、DTCM(Data Tightly Coulped Memory)以及通過QSPI 接口外接其他片外存儲;外設部分主要包含了IIC、SPI、UART、GPIO、PWM 和Watch Dog;程序Debug 燒錄部分主要通過JTAG 進行實現;處理器core 為處理器核的所有邏輯部分。處理器的內部模塊層次劃分如圖2 所示。

圖2 處理器的模塊層次劃分
內核采用RV32IMAC 架構,支持32 位通用指令集,兼容16 位壓縮指令集以及多周期硬件乘除法單元。RISCV 指令集如表1 所示(僅展示該設計用到的指令集)。原蜂鳥E203 處理器采用深度二級流水線設計,處理器中采用流水線的作用是提升系統整體的運行速度,流水線的本質就是利用面積換取系統性能。微處理器性能的決定因素根據下式[9]體現:

表1 RISCV指令集

處理器時鐘頻率主要根據時序電路之間的最大組合邏輯延時得到,流水線是將單周期長的組合邏輯的操作分成多個組合邏輯實現,計算組合邏輯中最大的延時就是當前處理器的時鐘頻率,由此可以減少時序電路之間的組合邏輯,但帶來了寄存器數量的增加,也就是使用D 觸發器的數量變多,從而導致系統的面積隨之增加。文中設計綜合考慮面積和性能,選擇經典五級流水線的結構,將取值(IFU)、譯碼(ID)、執行(EXU)、訪存(MEM)、寫回(WB)各自作為一級,其流水線結構如圖3 所示。

圖3 處理器流水線結構
對于處理器而言,不僅僅需要關注性能,還需要關注整體的功耗,該處理器低功耗[10]的設計主要從以下兩個方面進行考慮:第一,采用不同的時鐘域,速度要求不高的模塊放在低時鐘域下,以低功耗運行,該處理器分為3 個時鐘域,具體如表2 所示;第二,內部單元配備獨立的門控時鐘(Clock Gate)[11],當該模塊或者單元空閑時,使用門控時鐘的合理關斷來節省動態功耗[12]。

表2 處理器的時鐘域
通信接口用于實現處理器程序的更新以及多核之間的連接,采用的是JTAG 接口,開源蜂鳥E203 內部采用JTAG 接口進行程序燒錄,利用JTAG 支持菊花鏈[13]的連接模式,從而可以拓展成多核之間的連接。JTAG 接口內部主要由TAP(狀態控制器)、數據寄存器、指令寄存器、旁路寄存器以及移位寄存器五部分構成。文中設計采用標準四線接口:TMS(測試模式選擇)、TCK(測試時鐘輸入)、TDI(測試數據輸入)、TDO(測試數據輸出)[14]。時鐘通過TCK 引腳輸入,驅動內部時序邏輯運轉,通過時鐘的上升沿采集TMS 的信號變化,從而改變內部TAP 狀態機的變化。測試數據從TDI 引腳輸入,輸入的是指令和數據,最終通過移位寄存器將數據通過TDO 引腳輸出。JTAG 內部TAP 狀態轉移圖如圖4 所示。JTAG接口不僅實現對處理器的程序燒錄和Debug 操作,還可以起到多核之間的連接作用,采用菊花鏈的連接模式,通過JTAG 的內部Bypass 透傳指令將前一級的數據直接送入到下一級,形成多核之間首尾相接的形式。JTAG 的菊花鏈連接結構如圖5 所示。

圖4 TAP狀態轉移圖

圖5 菊花鏈連接結構
對像素探測器而言,能夠正確有效地得到當前粒子的信息是比較關鍵的,這就需要依托于設計中的讀出系統是否設計合理,目前相機常見的陣列掃描采用的是Global shutter&rolling shutter方式[15]。傳統方法通過數字流程設計制作出某一種讀出方式,然后集成到像素芯片上,這樣就固定了掃描方式,不利于芯片后期的測試以及修改。為了能夠兼容多種讀出方式,給處理器增加了一個像素掃描外設模塊,該模塊接口管腳的定義如圖6 所示。該模塊主要實現了3種功能:第一,實現Global shutter&rolling shutter,并且可以實現兩種模式的切換;第二,實現Global shutter &rolling shutter 模式之間對于像素分辨率的切換;第三,實現Global shutter &rolling shutter 模式下對指定像素區域進行掃描。

圖6 像素接口設計
文中處理器開發的軟件平臺采用Ubuntu16.04系統,硬件開發語言采用Verilog HDL,硬件平臺選用Xilinx Artix-35T FPGA 開發板[16],仿真測試工具采用Vivado 以及VCS 軟件。
整個驗證過程主要分為以下兩個步驟:首先對處理器、像素掃描模塊以及JTAG 多核級聯等模塊進行功能仿真,查看仿真波形結果與理論結果是否一致;第二步將整體模塊通過Vivado 工具編譯綜合,將生成的.bit文件燒錄到FPGA 開發板中進行硬件測試。
首先對每個模塊進行前期功能驗證,主要通過編寫testbench輸入正確的激勵得到輸出波形,最后比較結果的正確性。處理器的仿真激勵通過對內部的ITCM進行寫操作,將需要測試的指令通過編譯器轉換成機械碼相當于對ITCM的某些地址寫入對應的數據。
測試的指令為ADD 指令,通過編譯器將編寫好的C 代碼轉化成ROM 可讀的機器碼文件,如測試仿真代碼中的rv32ui-p-addi.verilog 文件,使用Verilog的readmemh 函數讀入文件,初始化ITCM,由Verilog編寫的二維數組充當行為模型。最終測試結果如圖7 所示。從仿真結果中可以看出,寫入到ITCM 中的數據與最終對ITCM 進行讀出的數據是一致的,最終數據正確后寫回寄存器X3,X3 為“1”則通過仿真檢驗,最終打印出PASS 結果;否則測試結果有誤,打印出Fail字樣。

圖7 處理器仿真測試結果
測試文件中ITCM 寄存器地址為0x00,需要寫入的數據為16′h3405107 30001AA0D,通過仿真控制模塊內核查看ITCM 的信號結果,指令地址addr=0000 的數據dout 為34051073_0001AA 0D,符合最終的設計結果。
為了進一步驗證該處理器的可行性,進行FPGA原型驗證。將模塊通過Vivado 工具進行編譯綜合,生成bitstream 文件,利用開發板進行硬件驗證。通過JTAG 調試器將數據送入開發板的Memory 中,然后利用GCC工具鏈對寫好的C程序進行編譯,將編譯好的程序下載到開發板中,通過串口看出最終的輸出結果。以經典的“Hello world”程序為例,對于編寫好的C程序,為了更直觀地看到其結果,在C中調用串口。以PC端為接收器,配置好對應串口ttyUSB2 以及波特率115 200 bit/s。通過PC 端調用串口指定顯示當前串口號下的信息,最終的運行結果如圖8所示[17]。

圖8 硬件測試結果
目前該系統已經設計完成,正準備進行流片工作,前期針對RISCV 內核進行了一次流片,采用的是商用130 nm CMOS 工藝,主要修改內容是將內部的IP 替換成工廠提供的IP 核。
將芯片進行綁定測試,鍵合到印制電路板(PCB),焊接后進行測試,測試平臺如圖9 所示。芯片的外部輸入由FPGA 板提供,通過查看信號源以及Vivado硬件仿真波形驗證芯片功能。

圖9 芯片測試平臺
文中提出了一種可重構的數字讀出系統,主要應用于高能物理像素探測器中,該系統能夠兼容多種像素讀出方式,并且通過外部接口進行多核連接和多核之間的通信。該內核已經采用商用130 nm CMOS 工藝設計完成,處理器在40 MHz 的頻率下靜態功耗為5.221 2 mW,動態功耗為53.024 9 mW。