康賓孫亮周玉娟
(1中國(guó)電子科技集團(tuán)公司第五十四研究所河北石家莊050081)
(2解放軍理工大學(xué)江蘇南京210007)
SPI作為一個(gè)通用的接口在越來越多的芯片上使用,是一種4線的低速接口;AD9517-1ABCPZ就是一款支持SPI接口的時(shí)鐘芯片,SPI接口是該芯片的配置接口。Nios II處理器作為一個(gè)簡(jiǎn)單的CPU,在很多SOPC系統(tǒng)中都被使用;在FPGA設(shè)計(jì)中搭建Nios II系統(tǒng),結(jié)合SPIMASTER模塊,可以用于配置AD9517-1ABCPZ,讓其輸出所需頻率的時(shí)鐘。
Nios II系列軟核處理器是Altera公司的第二代FPGA嵌入式處理器,其性能超過200DMIPS。Nios II包括3種產(chǎn)品,分別是:NiosⅡ/f(快速)最高的系統(tǒng)性能、中等FPGA使用量;NiosⅡ/s(標(biāo)準(zhǔn))高性能和低FPGA使用量;NiosⅡ/e(經(jīng)濟(jì))低性能,最低的FPGA使用量。這3種產(chǎn)品采用32位處理器的基本結(jié)構(gòu)單元:32位指令大小、32位數(shù)據(jù)和地址路徑32位通用寄存器和32個(gè)外部中斷源;使用同樣的指令集架構(gòu)(ISA),100%二進(jìn)制代碼兼容,可以根據(jù)系統(tǒng)需求的變化更改CPU,選擇滿足性能和成本的最佳方案[1,2]。
AD9517-1ABCPZ是Analog Device公司生產(chǎn)的時(shí)鐘發(fā)生器,其工作電壓+3.3 V,最大輸入頻率2 400 MHz,最大輸出頻率2 650 MHz,輸出時(shí)鐘為TTL電平或LVPEL電平[3]。
SPI總線系統(tǒng)是一種同步串行外設(shè)接口,可以使MCU與各種外圍設(shè)備以串行方式進(jìn)行通信以交換信息。SPI總線系統(tǒng)可直接與各個(gè)廠家生產(chǎn)的多種標(biāo)準(zhǔn)外圍器件直接相連,該總線一般使用4條線:SDO(主設(shè)備數(shù)據(jù)輸出,從設(shè)備數(shù)據(jù)輸入)、SDI(主設(shè)備數(shù)據(jù)輸入,從設(shè)備數(shù)據(jù)輸出)、SCLK(時(shí)鐘信號(hào),由主設(shè)備產(chǎn)生)和CS(從設(shè)備使能信號(hào),由主設(shè)備控制)等信號(hào)[4]。
使用Nios II初始化、配置AD9517-1ABCPZ的實(shí)現(xiàn)方案可以分為兩部分:硬件設(shè)計(jì)和軟件設(shè)計(jì)[4]。硬件設(shè)計(jì)主要包括基于Nios II的SOPC系統(tǒng)的搭建,SPI-MASTER接口FPGA程序設(shè)計(jì)。軟件設(shè)計(jì)主要包括:SPI讀寫函數(shù)設(shè)計(jì),AD9517-1ABCPZ寄存器配置函數(shù)設(shè)計(jì)。
硬件設(shè)計(jì)包括:Nios II的SOPC系統(tǒng)和SPI-MASTER模塊兩部分。Nios II的SOPC系統(tǒng)通過并行的CPU接口與SPI-MASTER模塊相連,SPI-MASTER通過 SPI接口與AD9517相連,其原理框圖如圖1所示:
圖1 硬件系統(tǒng)原理框圖
Nios II的SOPC系統(tǒng),采用硬件程序和軟件程序都存儲(chǔ)在EPCS芯片的方式,采用該方式FPGA無需外接FLASH、SDRAM芯片,節(jié)省了電路板的布局空間以及成本,其主要包括以下幾個(gè)部分[5]:①Nios II,系統(tǒng)的CPU;②On-chip Memory RAM,存儲(chǔ)系統(tǒng)啟動(dòng)后的程序指令以及數(shù)據(jù);③On-chip Memory ROM,存儲(chǔ)只讀數(shù)據(jù),例如波形數(shù)據(jù)等;④EPCSSerial Flash Controller,控制EPCS芯片,指定啟動(dòng)地址;⑤JTAG UART,程序調(diào)試輸出接口,相當(dāng)于系統(tǒng)串行接口輸出,用于觀察調(diào)試過程中輸出信息;⑥Avalon-MM Tristate Bridge,其用于連接以上5個(gè)部分;⑦Typical Avalon-MM Tristate Slave,系統(tǒng)的CPU接口,控制片選,讀寫信號(hào)等。以上7個(gè)部分組成一個(gè)簡(jiǎn)單的帶有CPU接口的SOPC系統(tǒng),用于承載AD9517-1ABCPZ配置程序。
NIOS系統(tǒng)數(shù)據(jù)線是32位的,也就是按照32位進(jìn)行讀寫操作。但圖1所示的原理框圖中DATA寬度是8位的,這樣的話就會(huì)出現(xiàn)一個(gè)問題:若不對(duì)CS信號(hào)作調(diào)整,在一個(gè)讀周期內(nèi)CS信號(hào)會(huì)出現(xiàn)4次有效狀態(tài)。要完成8位的讀操作,就必須對(duì)CS信號(hào)進(jìn)行調(diào)整:在Typical Avalon-MM Tristate Slave里加入4位Byteenable[3..0]信號(hào),當(dāng)Byteenable信號(hào)和RD信號(hào)同時(shí)有效時(shí),CS信號(hào)才有效,這樣就可以避免一個(gè)讀周期內(nèi)CS信號(hào)出現(xiàn)4次有效狀態(tài)的情況。NIOS系統(tǒng)的讀操作不會(huì)出現(xiàn)類似情況,所以數(shù)據(jù)讀過程CS信號(hào)不需要調(diào)整[6]。AD9517-1ABCPZ的SPI接口默認(rèn)是MSB方式,SPI-MASTER模塊以MSB的方式設(shè)計(jì),其讀寫時(shí)序圖如圖2和圖3所示。
圖2 SPI接口寫時(shí)序
圖3 SPI接口讀時(shí)序
在FPGA內(nèi)部,SPI-MASTER模塊有以下幾個(gè)寄存器,用于存儲(chǔ)命令以及數(shù)據(jù):①R/W寄存器,用于指示本次操作是SPI讀操作還是SPI寫操作;②W1WO寄存器,用于指示本次SPI讀寫操作要訪問AD9517-1ABCPZ的寄存器個(gè)數(shù);③地址寄存器,用于指示本次SPI讀寫操作要訪問的AD9517-1ABCPZ的寄存器起始地址;④開始SPI讀寫寄存器,用于發(fā)起SPI讀寫操作;⑤狀態(tài)指示寄存器,用于指示SPI讀寫操作是否為空閑;⑥寫數(shù)據(jù)寄存器,用于暫存本次SPI寫操作的數(shù)據(jù);⑦讀數(shù)據(jù)寄存器,用于暫存本次SPI讀操作的數(shù)據(jù)。
R/W寄存器、W1WO寄存器、地址寄存器、開始SPI讀寫寄存器和狀態(tài)指示寄存器等的內(nèi)容用于指定本次SPI操作的屬性,其決定了SPI接口的指令周期;寫數(shù)據(jù)寄存器和讀數(shù)據(jù)寄存器用于存儲(chǔ)SPI接口的讀寫數(shù)據(jù),其決定SPI接口的數(shù)據(jù)周期。
SPI的接口時(shí)序設(shè)計(jì)分為SPI讀時(shí)序和SPI寫時(shí)序2個(gè)部分。
SPI寫時(shí)序:SPI接口的CS信號(hào)只有在“開始SPI讀寫寄存器”被置位后有效,其有效狀態(tài)要一直保持到最后一個(gè)數(shù)據(jù)傳輸完成;SCLK信號(hào)的頻率一要在AD9517-1ABCPZ的SPI接口SCLK頻率范圍內(nèi),其是SDO、SDI信號(hào)的同步時(shí)鐘,可以由其他高頻率時(shí)鐘分頻得到;SDO信號(hào)在SCLK時(shí)鐘上升延依次輸出“R/W寄存器”、“W1WO寄存器”、“地址寄存器”的內(nèi)容,完成SPI接口的指令周期;SD0信號(hào)在SCLK時(shí)鐘上升延依次輸出由“W1WO寄存器”決定數(shù)據(jù)字節(jié)數(shù),完成SPI接口的數(shù)據(jù)周期。
SPI讀時(shí)序:SPI接口的CS信號(hào)只有在“開始SPI讀寫寄存器”被置位后有效,其有效狀態(tài)要一直保持到最后一個(gè)數(shù)據(jù)傳輸完成;SD0信號(hào)在SCLK時(shí)鐘上升延依次輸出“R/W寄存器”、“W1WO寄存器”、“地址寄存器”的內(nèi)容,完成SPI接口的指令周期;SD0信號(hào)在SCLK時(shí)鐘上升延依次儲(chǔ)存由“W1WO寄存器”決定數(shù)據(jù)字節(jié)數(shù),完成SPI接口的數(shù)據(jù)周期。
配置AD9517-1ABCPZ的NOIS系統(tǒng)軟件設(shè)計(jì)可以分為2個(gè)主要的部分:SPI讀寫函數(shù)設(shè)計(jì)和AD9517-1ABCPZ寄存器配置函數(shù)設(shè)計(jì)。AD9517-1ABCPZ寄存器配置主要包括:SPI接口MSB或LSB寄存器配置、PLL使能寄存器配置、REFCLK選擇寄存器配置、分頻寄存器配置和倍頻寄存器配置等,按照其手冊(cè)進(jìn)行配置就可以讓其輸出相應(yīng)頻率的時(shí)鐘。SPI讀寫函數(shù)設(shè)計(jì)是該系統(tǒng)程序設(shè)計(jì)的重點(diǎn),其決定SPI接口能否正常配置AD9517-1ABCPZ時(shí)鐘芯片。
SPI讀函數(shù)設(shè)計(jì)流程:①設(shè)置“R/W寄存器”為讀指令狀態(tài);②設(shè)置“W1WO寄存器”,指示被讀寄存器的個(gè)數(shù);③設(shè)置“地址寄存器”,指示本次SPI讀操作要訪問的AD9517-1ABCPZ寄存器起始地址;④判斷“狀態(tài)指示寄存器”是否為空閑狀態(tài),若為空閑狀態(tài),則進(jìn)行⑤的操作,若為忙狀態(tài),則等待;⑤設(shè)置“開始SPI讀寫寄存器”為開始讀狀態(tài),發(fā)起SPI讀操作;⑥等待SPI讀操作完成,把暫存的數(shù)據(jù)讀入Nios II的CPU接口;⑦SPI讀操作完成后,由硬件FPGA程序,清除“開始SPI讀寫寄存器”的開始讀狀態(tài),為下次讀操作做準(zhǔn)備。
在開始SPI讀操作后,“狀態(tài)指示寄存器”指示SPI讀操作為忙狀態(tài),直到SPI讀操作完成,“狀態(tài)指示寄存器”再次指示SPI讀操作為空閑狀態(tài)。在2次SPI讀之間,上一次讀操作完成,才能開始下一次的讀操作。本次SPI讀操作完成后,才能把數(shù)據(jù)讀入Nios II的CPU接口。何時(shí)把數(shù)據(jù)讀入到Nios II的CPU接口的程序有2種方法設(shè)計(jì):①不作任何判斷,只在程序中加入足夠的時(shí)延;②對(duì)“狀態(tài)指示寄存器”的指示狀態(tài)進(jìn)行判斷,在其指示忙狀態(tài)時(shí)程序一直處于等待狀態(tài),但是等待要有一定的限度,在等待足夠的SCLK時(shí)鐘周期后,要跳出等待狀態(tài),若此時(shí)“狀態(tài)指示寄存器”還是處于忙狀態(tài),則輸出告警信息。
方法①的設(shè)計(jì)比較簡(jiǎn)單,其執(zhí)行效率不高,可靠性比較低,適合于程序處于理想狀態(tài)下運(yùn)行的情況;方法2對(duì)狀態(tài)進(jìn)行判斷,執(zhí)行效率較高,雖然也進(jìn)行了等待,但是在足夠的SCLK周期以后就跳出等待狀態(tài),防止了程序死鎖,程序執(zhí)行的可靠性較高。
SPI寫函數(shù)設(shè)計(jì)流程:①設(shè)置“R/W寄存器”為寫指令狀態(tài);②設(shè)置“W1WO寄存器”,指示被寫寄存器的個(gè)數(shù);③設(shè)置“地址寄存器”,指示本次SPI寫操作要訪問的AD9517-1ABCPZ寄存器起始地址;④判斷“狀態(tài)指示寄存器”是否為空閑狀態(tài),若為空閑狀態(tài),則進(jìn)行⑤的操作,若為忙狀態(tài),則等待;⑤設(shè)置“開始SPI讀寫寄存器”為開始寫狀態(tài),發(fā)起SPI寫操作;⑥等待SPI寫操作完成;⑦SPI寫操作完成后,由硬件FPGA程序,清除“開始SPI讀寫寄存器”的開始寫狀態(tài),為下次寫操作做準(zhǔn)備。
在開始SPI寫操作后,“狀態(tài)指示寄存器”指示SPI寫操作為忙狀態(tài),直到SPI寫操作完成,“狀態(tài)指示寄存器”再次指示SPI寫操作為空閑狀態(tài)。在2次SPI寫之間,上一次寫操作完成,才能開始下一次的寫操作。這樣的話在2次SPI寫操作之間,要加入延時(shí)判斷程序,若在每次SPI寫操作之間都加入延時(shí)判斷程序,會(huì)對(duì)程序執(zhí)行效率帶來較大影響。在SPI MASTER模塊了加入適量的FIFO,用于緩存SPI寫指令,結(jié)合FPGA程序的乒乓設(shè)計(jì),可以較大的提高程序的運(yùn)行效率。
使用NOIS II搭建的SOPC結(jié)合自主設(shè)計(jì)的SPI MASTER模塊,可以靈活輕松的完成AD9517-1ABCPZ配置工作,讓其輸出系統(tǒng)所需的多種時(shí)鐘?;贜ios II的SOPC系統(tǒng)設(shè)計(jì)簡(jiǎn)單靈活、開發(fā)周期短、成本低和系統(tǒng)維護(hù)升級(jí)方便,是許多中、低速系統(tǒng)設(shè)計(jì)不錯(cuò)的選擇,今后必將在各個(gè)領(lǐng)域得到更廣泛的應(yīng)用。
[1]孟 芳,于立佳,張文志.基于NiosⅡ的SOPC系統(tǒng)設(shè)計(jì)分析[J].無線電通信技術(shù).2012,38(1):73-76.
[2]ALTERA ComPany,Nios IIprocess Reference handbook.Ver13.1.0[R].ALTERA ComPany,2014.
[3]ANALOG DEVICESComPany,AD9517-1ABCPZ datasheet.Rev.D[R].ALTERA ComPany,2012.
[4]Freescale ComPany,The Freescale SPIBus Specification.VERSION 4.01[R].ALTERA ComPany,2004.
[5]侯建軍,郭 勇.SOPC技術(shù)基礎(chǔ)教程[M].北京:清華大學(xué)出版社,2008.
[6]ALTERA ComPany,Embeded Design handbook.Ver2.9[R].ALTERA ComPany,2011.