楊詩安,王子成
(1.中國科學(xué)院武漢物理與數(shù)學(xué)研究所,湖北武漢 430071;2.中國科學(xué)院大學(xué),北京 100049;3.武漢中科創(chuàng)新技術(shù)股份有限公司,湖北武漢 430206)
Zynq-7000是集成了ARM與FPGA的可擴展處理平臺。Zynq-7000 SoC系列集成 ARM處理器的軟件可編程性與 FPGA 的硬件可編程性,不僅可實現(xiàn)重要分析與硬件加速,同時還在單個器件上高度集成 CPU、DSP、ASSP 以及混合信號功能[1]。在SoC內(nèi)部,芯片功能被劃分成PS和PL兩部分,PS 相當(dāng)于ARM,具有固定的架構(gòu),承載了處理器和系統(tǒng)存儲區(qū),而 PL 也就是FPGA,是完全靈活的,可以滿足設(shè)計。其中互聯(lián)是通過連接了PS和PL的AXI接口來實現(xiàn)[2]。相比于常用的AHB總線協(xié)議,AXI總線具有更好的性能和更高的帶寬,而且這種片內(nèi)通信模式使數(shù)據(jù)通信更加可靠、高效,還可以降低功耗。
隨著數(shù)字系統(tǒng)越來越復(fù)雜,軟硬件協(xié)同設(shè)計越來越困難,F(xiàn)PGA加ARM這種低成本SoC解決方案是主要的發(fā)展方向,所以需要研究基于SoC可擴展平臺的應(yīng)用解決方案。本文基于Zynq-7000平臺設(shè)計了一個具有數(shù)據(jù)采集和顯示功能的最小系統(tǒng),通過對Zynq-7000 SoC芯片的應(yīng)用,為滿足數(shù)據(jù)采集和顯示需求提供更多的解決方案。
整個最小系統(tǒng)由CPU、內(nèi)存、Flash、ADC采集芯片等組成,SoC選用的處理器芯片是XC7Z020,SoC所掛內(nèi)存為DDR3,再用一片SRAM作刷屏緩存,結(jié)合A/D轉(zhuǎn)換芯片,外接液晶顯示屏,則可以完成數(shù)據(jù)的采集、存儲以及顯示。系統(tǒng)整體設(shè)計框架如圖1所示[3-4]。
圖1 系統(tǒng)整體設(shè)計框架
由框架圖可以看到信號流向。一路模擬量輸入系統(tǒng),經(jīng)過AD芯片轉(zhuǎn)換成數(shù)字信號之后存入SoC芯片的PL部分,在PL部分設(shè)計DMA模塊使數(shù)據(jù)傳輸速率匹配從而將數(shù)據(jù)寫入內(nèi)存,軟件處理后用于顯示的數(shù)據(jù)從內(nèi)存中取出,通過PL部分寫入SRAM中緩存,在PL的控制下LCD可顯示SRAM中的數(shù)據(jù)。
數(shù)據(jù)采集使用AD9601芯片,這是一款10位單片采樣模數(shù)轉(zhuǎn)換器,具有低功耗、高性能的特點。該芯片使用1.8 V模擬和數(shù)字電源供電,可支持兩路同步采樣輸入,具有高達250 MSPS的轉(zhuǎn)化率,信噪比為59.4 dBFS,且正常工作時功耗為322 mW[5]。模數(shù)轉(zhuǎn)換電路圖如圖2所示。
設(shè)計中采用單通道采樣,DA0~DA9是10位數(shù)據(jù)輸出通道,DRVDD是1.8 V數(shù)字輸出電源,AVDD是1.8 V模擬電源,VIN+、VIN-是差分模擬輸入信號,CLK+、CLK-是差分時鐘輸入,DCO+/DCO-是數(shù)據(jù)時鐘輸出端口,SDIO/DCS、SCLK/DFC、CSB分別是串行數(shù)據(jù)、時鐘、片選接口,通過對這3個SPI端口的編程,可以配置AD9601芯片的采樣頻率和輸出時鐘,從而控制系統(tǒng)的采樣速率。
AD9601芯片的配置時序圖如圖3所示。當(dāng)片選信號CSB為低電平時,在時鐘信號SCLK的上升沿開始傳輸數(shù)據(jù),首先傳輸16 bit的指令,字節(jié)第1位表示讀命令或?qū)懨?,W1和W0表示傳輸?shù)氖?個字節(jié)的
圖2 A/D轉(zhuǎn)換電路
圖3 AD9601配置時序
數(shù)據(jù)或是多個字節(jié)的數(shù)據(jù),后面是13 bit的地址位,接著是8 bit數(shù)據(jù)位D7到D0。通過硬件編程可將AD9601的輸出時鐘配置為200 MHz,數(shù)據(jù)格式為偏移二進制。配置結(jié)果仿真圖如圖4所示。
圖4 AD9601配置時序仿真波形
本設(shè)計中AD9601為10 bit、200 MSPS的模數(shù)轉(zhuǎn)換,由于實際在存儲時為了處理方便,每個采樣點需要16 bit的空間來存儲,因此一路AD9601實際需要的最大上傳帶寬可計算得出:
200 MSPS×16 bit=3.2 Gbps
(1)
如此大的帶寬需要DMA來傳輸[6-7]。
本設(shè)計中,AD采集數(shù)據(jù)在PL內(nèi)部先進fifo緩存,同時將數(shù)據(jù)按照規(guī)定的格式打包成數(shù)據(jù)包,單個數(shù)據(jù)包的大小可以通過配置寄存器來設(shè)置。DMA模塊接收到數(shù)據(jù)包,將其轉(zhuǎn)化完成后,PL發(fā)起一次AXI-HP主動對內(nèi)存的寫操作,以上操作循環(huán)進行。
圖5顯示了DMA模塊的內(nèi)部結(jié)構(gòu),這個模塊包含3個部分:
(1)dma_regfile:實現(xiàn)內(nèi)部Localbus接口、SPI時序生成及中斷產(chǎn)生;
(2)dma_wr_cmd_gen:接收來自AD模塊的數(shù)據(jù)并將其轉(zhuǎn)化為“寫操作”包;識別包(大包)結(jié)尾并輸出信號(到dma_regfile模塊)用來觸發(fā)中斷;統(tǒng)計包長度并在整個包(大包)上傳完成后寫入消息和包長到對應(yīng)內(nèi)存位置;
(3)dma_fifo2amba_wr:將內(nèi)部fifo時序轉(zhuǎn)換為AMBA-AXI4時序。
圖5 DMA模塊內(nèi)部結(jié)構(gòu)
本設(shè)計中設(shè)置單個包最大數(shù)據(jù)長度為1 024字節(jié),一片數(shù)據(jù)(大包)在輸入到DMA模塊時,若其長度超過1 024字節(jié),則需要分多個小包依次輸入。當(dāng)大包被分為多個小包輸入時,只有最后一個小包的長度可以不為1 024字節(jié),最后一個小包之前的所有小包長度必須為1 024字節(jié)。
每個數(shù)據(jù)包的幀頭和幀尾需要添加標(biāo)識,以便區(qū)分。由fifo輸入到DMA的數(shù)據(jù)包(小包)格式如表1所示。
FLAG_B是大包標(biāo)記,僅在每個小包的第1行(bit35~34)有效。FLAG_S是小包標(biāo)記。
包的標(biāo)記位FLAG_B定義如下:2’b10:SOP,首個小包;2’b00:MID,中間小包;2’b01:EOP,最后小包;2’b11:ONLY,只有1個小包。
表1 數(shù)據(jù)上傳格式表
本設(shè)計采用LVDS顯示屏,先要主動從CPU緩存中請求顯存數(shù)據(jù),存在SRAM中,然后在PL的控制下實現(xiàn)LCD顯示[8],其設(shè)計結(jié)構(gòu)如圖6所示。
圖6 數(shù)據(jù)顯示模塊設(shè)計框圖
顯卡功能的實現(xiàn)包括3個互相獨立的過程:
(1)PS申請一段固定連續(xù)的內(nèi)存空間用于存儲顯卡數(shù)據(jù),首地址為LCD_ADDR,將該首地址配置給lcd_display_req_top模塊。PS軟件生成的圖形/圖像被寫入內(nèi)存的固定地址LCD_ADDR處;
(2)lcd_display_req_top模塊在PS的控制下將以配置的頻率(cfg_freq1)從內(nèi)存中讀取顯卡數(shù)據(jù),每次都會讀取一個完整屏幕的數(shù)據(jù),讀取的數(shù)據(jù)會交給PL端的SRAM驅(qū)動模塊sram_is61wv102416,sram_is61wv102416模塊將顯卡數(shù)據(jù)按照順序?qū)懭隨RAM中存儲起來;
(3)lcd_1024x600_4lvds在PS的控制下以配置的頻率(cfg_freq2)通過sram_is61wv102416模塊從外部SRAM中讀取顯卡數(shù)據(jù),讀返回數(shù)據(jù)則直接轉(zhuǎn)換為LVDS信號輸出。
以上3個過程互相獨立,過程(1)和過程(2)通過PS內(nèi)存隔離,過程(2)和過程(3)通過外部SRAM隔離。
可以通過軟件仿真來驗證數(shù)據(jù)傳輸模式是否設(shè)計正確,先在vivado中模擬數(shù)據(jù)累加,利用仿真界面觀察結(jié)果,然后與PC端串口調(diào)試界面的傳輸數(shù)據(jù)作對比。圖7為數(shù)據(jù)仿真波形,圖8為串口打印數(shù)據(jù)。
圖7 vivado數(shù)據(jù)仿真波形
圖8 串口打印數(shù)據(jù)
從圖7中最后一行數(shù)據(jù)可以看到,數(shù)據(jù)在依次累加,因為每次傳輸32 bit的數(shù)據(jù),所以一次傳輸2個16 bit的數(shù),然后在內(nèi)存中順序緩存。對比圖8中串口打印的數(shù)據(jù),可以驗證數(shù)據(jù)在通道中正確傳輸。
系統(tǒng)測試時將信號發(fā)生器的輸出信號作為系統(tǒng)輸入,調(diào)節(jié)輸入信號的頻率和振幅,使波形可以在LCD屏上正常顯示。圖9為信號發(fā)生器的輸出波形,圖10為此系統(tǒng)屏幕顯示的波形。
圖9 信號發(fā)生器輸出波形
圖10 LCD顯示波形
LCD顯示屏上橫軸方向每個格點代表的是時間信息,由顯示波形的周期可以計算得出顯示波形的頻率,與信號發(fā)生器輸出波形頻率對比,可以驗證顯示波形是正確的。
該系統(tǒng)以Zynq-7000 SoC芯片為核心,結(jié)合存儲器件,數(shù)據(jù)采集芯片以及LCD顯示屏,搭建了一個可用于實時數(shù)據(jù)采集和顯示的平臺,設(shè)計中數(shù)據(jù)傳輸部分采用DMA傳輸機制,并且數(shù)據(jù)傳輸速率可用軟件配置。經(jīng)實驗證明,整個系統(tǒng)可完成預(yù)期的功能。在后期開發(fā)應(yīng)用中可將其作為一個模塊調(diào)用,節(jié)省開發(fā)時間。