国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

一種基于SSP接口的FPGA被動(dòng)配置方法

2021-03-07 00:06尹凱
電子樂園·中旬刊 2021年4期

尹凱

摘要:本文實(shí)現(xiàn)了一種基于SSP接口的FPGA被動(dòng)配置方法,對(duì)FPGA的被動(dòng)串行配置進(jìn)行了詳細(xì)討論,給出了硬件電路設(shè)計(jì)和SSP接口的操作方法。

關(guān)鍵詞:SSP;FPGA被動(dòng)配置;Linux

1. 引言

FPGA在上電之后,需要從外部電路獲取配置數(shù)據(jù)并載入到內(nèi)部的配置SRAM中才能正常工作。本文主要討論了一種基于外部處理器SSP接口發(fā)送配置數(shù)據(jù)的方法,既可以保證配置速度又簡(jiǎn)化了硬件連接。

2.FPGA配置方式

Altera公司的Cyclone系列FPGA支持三種配置方式:AS模式(主動(dòng)串行模式)、PS模式(被動(dòng)串行模式)和JTAG模式。這三種配置方式由模式選擇管腳(MSEL1、MSEL0)的電平值決定,其主要區(qū)別是配置過程中FPGA所處的地位和加載配置數(shù)據(jù)的方式不同。本文使用其中的PS模式,實(shí)現(xiàn)外部處理器對(duì)FPGA的串行配置。

2.1PS配置過程

PS模式中主要用到的FPGA配置管腳包括:

lDCLK:配置時(shí)鐘;

lDATA0:配置數(shù)據(jù);

lnCONFIG:配置命令;

lnSTATUS:配置狀態(tài)指示;

lCONF_DONE:配置完成指示。

在PS模式下FPGA處于從屬地位,接收來(lái)自外部的配置命令、配置時(shí)鐘和配置數(shù)據(jù),并給出配置狀態(tài)信號(hào)以及配置完成指示信號(hào),時(shí)序波形如下圖所示。

外部控制器(ARM、單片機(jī)等)控制整個(gè)配置過程。在配置期間,配置數(shù)據(jù)在DCLK管腳的時(shí)鐘信號(hào)上升沿通過DATA0管腳鎖存至FPGA中。FPGA要求每字節(jié)數(shù)據(jù)從LSB(最低有效位)開始發(fā)送,比如配置文件包含的字節(jié)順序?yàn)?x02 0x1B,那么串行二進(jìn)制流的發(fā)送順序就是0100-0000 1101-1000。

2.2PS配置文件

Altera的開發(fā)環(huán)境QuartusII編譯后自動(dòng)生成的sof和pof格式的配置文件,不能用于PS模式,需要進(jìn)行格式轉(zhuǎn)化將sof文件轉(zhuǎn)換為rbf文件。

3.SSP接口電路設(shè)計(jì)

在本設(shè)計(jì)中,外部處理器使用的是MARVELL公司的PXA270,通過配置其GPIO管腳的復(fù)用功能實(shí)現(xiàn)SSP(同步串行協(xié)議)通信接口,處理器與FPGA配置管腳的連接關(guān)系如下圖所示。

3.1GPIO工作模式

對(duì)于具有復(fù)用功能的GPIO管腳,通過GPIO控制器的相應(yīng)寄存器來(lái)配置其工作模式。根據(jù)我們所選用GPIO管腳的編號(hào)范圍(GPIO23~GPIO27),使用的寄存器名稱及作用如下:

lGPLR0(GPIO電平狀態(tài)寄存器0)

讀取GPIO管腳的電平狀態(tài),每一位對(duì)應(yīng)一個(gè)GPIO管腳。

lGPSR0(GPIO輸出設(shè)置寄存器0)

控制GPIO管腳輸出高電平,每一位對(duì)應(yīng)一個(gè)GPIO管腳。

lGPCR0(GPIO輸出清除寄存器0)

控制GPIO管腳輸出低電平,每一位對(duì)應(yīng)一個(gè)GPIO管腳。

lGPDR0(GPIO方向寄存器0)

配置GPIO管腳為輸出或者輸入,每一位對(duì)應(yīng)一個(gè)GPIO管腳。

lGAFR0_U(GPIO復(fù)用功能寄存器0)

配置GPIO管腳復(fù)用功能,每?jī)晌粚?duì)應(yīng)一個(gè)GPIO管腳。

GPIO管腳的工作模式配置及寄存器取值如下表所示,各寄存器的物理地址詳見處理器的數(shù)據(jù)手冊(cè)。

3.2SSP接口時(shí)序

PXA270的SSP接口支持多種通信協(xié)議,包括TI的同步串行協(xié)議、Motorola的SPI協(xié)議、NI的Microwire協(xié)議等。這里使用Motorola的SPI通信協(xié)議,其接口時(shí)序如下圖所示。根據(jù)GPIO管腳的工作模式配置,我們只使用其中的SSPSCLK和SSPTXD信號(hào)用于發(fā)送FPGA的配置時(shí)鐘和配置數(shù)據(jù)。

這里需要注意的是,處理器的SSP接口在發(fā)送字節(jié)數(shù)據(jù)時(shí)是從MSB(最高有效位)開始發(fā)送,而FPGA要求每字節(jié)數(shù)據(jù)從LSB(最低有效位)開始發(fā)送,所以在配置程序中需要增加一個(gè)數(shù)據(jù)格式轉(zhuǎn)換過程。

4.Linux上配置程序?qū)崿F(xiàn)

配置程序運(yùn)行在Linux的用戶空間,rbf文件存放在與處理器相連的Flash指定分區(qū)中,rbf文件名作為參數(shù)傳遞給配置程序并通過文件訪問函數(shù)進(jìn)行讀取,配置程序的實(shí)現(xiàn)流程如下圖所示。

其中PS模式配置流程的具體操作步驟如下:

1)設(shè)置nCONFIG=0,保持2us以上;

2)檢測(cè)nSTATUS,若為0表示FPGA已響應(yīng)配置請(qǐng)求,否則出錯(cuò);

3)設(shè)置nCONFIG=1,等待不超過40us;

4)檢測(cè)nSTATUS,若為1表示FPGA可以開始進(jìn)行配置;

5)在DCLK的每個(gè)上升沿,通過DATA0輸入比特流數(shù)據(jù);

6)待所有數(shù)據(jù)發(fā)送完畢后,CONF_DONE應(yīng)變?yōu)?,表示FPGA配置完成。

對(duì)nCONFIG、nSTATUS和CONF_DONE管腳的操作,通過讀寫相應(yīng)GPIO寄存器即可實(shí)現(xiàn),這里主要對(duì)SSP控制器的操作進(jìn)行說(shuō)明。

1.1SSP接口初始化

SSP接口初始化使用到的SSP寄存器如下:

a)SSCR0_1(SSP1控制寄存器0)

b)SSCR1_1(SSP1控制寄存器1)

通過SSCR0_1寄存器配置SSP接口的工作模式,數(shù)據(jù)位數(shù)、時(shí)鐘頻率;通過SSCR1_1寄存器配置SSP接口的極性、相位等參數(shù)。最后通過SSCR0_1寄存器使能SSP1接口。初始化代碼如下:

static void set_ssp_reg(void)

{

//----Control Register 0----//

int sscr0 = read_reg(SSP_SSCR0);

sscr0 &= ~FRF; //Motorola

sscr0 &= ~MOD;

sscr0 |= (TIM | RIM);

//16-bit data

sscr0 &= ~(0xF);

sscr0 |= DSS;

sscr0 &= ~EDSS;

//Clock 6.5MHz

sscr0 &= ~ACS;

sscr0 &= ~NCS;

sscr0 &= ~ECS;

sscr0 &= ~(0xFFF << 8);

sscr0 |= SCR;

write_reg(SSP_SSCR0, sscr0);

//----Control Register 1----//

int sscr1 = read_reg(SSP_SSCR1);

sscr1 &= ~(0x3fc0);

sscr1 |= TFT; //Set TX fifo level

sscr1 |= RFT; //Set RX fifo level

sscr1 &= ~RWOT; //Tx Rx mode

sscr1 &= ~SPH; //Phase

sscr1 &= ~SPO; //Polarity

sscr1 &= ~LBM;

sscr1 &= ~TIE;

sscr1 &= ~RIE;

write_reg(SSP_SSCR1, sscr1);

//----Control Register 0----------------//

sscr0 = getmem(SSP_SSCR0);

sscr0 |= SSE;

putmem(SSP_SSCR0, sscr0);

}

1.2SSP接口數(shù)據(jù)發(fā)送

SSP接口數(shù)據(jù)發(fā)送使用到的SSP寄存器如下:

a)SSSR_1(SSP1狀態(tài)寄存器)

b)SSDR_1(SSP1數(shù)據(jù)寄存器)

通過SSSR_1寄存器讀取當(dāng)前發(fā)送FIFO的狀態(tài),如果發(fā)送FIFO不滿,則在SSDR_1寄存器中寫入新數(shù)據(jù),直到配置數(shù)據(jù)發(fā)送完成。發(fā)送代碼如下:

static int ssp_xmit(u16 b)

{

while(?。╣etmem(SSP_SSSR) & TNF));

putmem(SSP_SSDR, b);

return 0;

}

5. 結(jié)束語(yǔ)

本文主要實(shí)現(xiàn)了基于外部處理器SSP接口的FPGA被動(dòng)串行配置,具有接口簡(jiǎn)單、加載速度快、通用性強(qiáng)等特點(diǎn)。基于linux實(shí)現(xiàn)的配置程序方便移植和使用,通過分時(shí)加載不同的配置文件可以實(shí)現(xiàn)FPGA的動(dòng)態(tài)配置。

參考文獻(xiàn)

[1] Marvell Inc.Marvell PXA270 Processor Developers Manual, 2009

[2] Altera Inc.Cyclone III Device Handbook, 2012

[3]王黎明.深入淺出XScale嵌入式系統(tǒng).北京航空航天大學(xué)出版社, 2011

泸定县| 竹山县| 礼泉县| 太仓市| 成武县| 齐河县| 黑河市| 佛坪县| 恩平市| 玉树县| 江门市| 香河县| 鲁甸县| 凤阳县| 临潭县| 通许县| 喜德县| 土默特右旗| 富民县| 浑源县| 伊金霍洛旗| 咸丰县| 江门市| 启东市| 锡林浩特市| 仙游县| 长海县| 西安市| 漳平市| 邯郸市| 富顺县| 大石桥市| 玉田县| 若尔盖县| 巨鹿县| 闽清县| 沾益县| 房产| 高尔夫| 保德县| 扎赉特旗|