FPGA(現(xiàn)场可(kě)編程門(mén)阵(zhèn)列)由(yóu)于(yú)其具有(yǒu)使用(yòng)靈活、執行速度(dù)快(kuài)、開(kāi)發(fà)工具豐富的(de)特(tè)點(diǎn)而(ér)越来(lái)越多(duō)地(dì)出(chū)現(xiàn)在(zài)現(xiàn)场電(diàn)路(lù)設計(jì)中(zhōng)。本(běn)文(wén)用(yòng) FPGA 作为(wèi)接口(kǒu)芯片(piàn),提(tí)供控制信(xìn)号(hào)和(hé)定(dìng)时(shí)信(xìn)号(hào),来(lái)实現(xiàn) DSP 到(dào) SDRAM 的(de)數據(jù)存取(qǔ)。
1 、SDRAM 介紹
本(běn)文(wén)采用(yòng)的(de) SDRAM 为(wèi) TMS626812A,图(tú) 1 为(wèi)其功能(néng)框图(tú)。它(tā)內(nèi)部(bù)分(fēn)为(wèi)两(liǎng)条(tiáo),每条(tiáo) 1M 字(zì)节(jié),數據(jù)宽(kuān)度(dù)为(wèi) 8 位,故存儲總(zǒng)容量(liàng)为(wèi) 2M 字(zì)节(jié)。
所(suǒ)有(yǒu)輸入(rù)和(hé)輸出(chū)操作都是(shì)在(zài)时(shí)鐘(zhōng) CLK 上(shàng)升(shēng)沿的(de)作用(yòng)下(xià)進(jìn)行的(de),刷新时(shí)鐘(zhōng)交替刷新內(nèi)部(bù)的(de)两(liǎng)条(tiáo) RAM。TMS626812A 主(zhǔ)要(yào)有(yǒu)六(liù)条(tiáo)控制命令,它(tā)们(men)是(shì):条(tiáo)激尖 / 行地(dì)址入(rù)口(kǒu)、列地(dì)址入(rù)口(kǒu) / 写操作、列地(dì)址入(rù)口(kǒu) / 读(dú)操作、条(tiáo)无效、自(zì)動(dòng)刷新、自(zì)動(dòng)刷新。SDRAM 與(yǔ) TMS320C54x 接口(kǒu)中(zhōng)用(yòng)到(dào)的(de)命令主(zhǔ)要(yào)有(yǒu):MRS、DEAC、ACTV、WRT-P、READ-P 和(hé) REFR。这(zhè)里(lǐ),設計(jì)目的(de)就(jiù)是(shì)産生(shēng)控制信(xìn)号(hào)来(lái)滿足这(zhè)些命令的(de)时(shí)序要(yào)求。關(guān)于(yú) TMS626812A 的(de)具體(tǐ)说(shuō)明(míng)可(kě)以(yǐ)查看(kàn)其數據(jù)手(shǒu)册。
2 、SDRAM 與(yǔ) TMS320C54x 之間(jiān)的(de)通(tòng)用(yòng)接口(kǒu)
图(tú) 2 是(shì) DSP 與(yǔ) SDRAM 的(de)通(tòng)用(yòng)接口(kǒu)框图(tú),图(tú)中(zhōng) DSP I/F 代(dài)表(biǎo) TMS320C54x 端接口(kǒu)單元(yuán),SDRAM CNTL 代(dài)表(biǎo) SDRAM 端接口(kǒu)控制單元(yuán)。SDRAM 被(bèi)設置成(chéng)一(yī)次(cì)性(xìng)读(dú)写 128 个(gè)字(zì)节(jié),而(ér) DSP 一(yī)次(cì)只(zhī)读(dú)写一(yī)个(gè)字(zì)节(jié),因(yīn)而(ér)建立了(le)两(liǎng)个(gè)緩沖區(qū) B0、B1 来(lái)緩存和(hé)中(zhōng)轉(zhuǎn)數據(jù)。B0、B1 大小都为(wèi) 128 字(zì)节(jié),而(ér)且映射到(dào) DSP 中(zhōng)的(de)同(tóng)一(yī)地(dì)址空間(jiān)。
盡管(guǎn) B0、B1 对(duì)應(yìng)于(yú)同(tóng)一(yī)地(dì)址空間(jiān),但对(duì)两(liǎng)个(gè)緩沖區(qū)不(bù)能(néng)在(zài)同(tóng)一(yī)时(shí)刻進(jìn)行合法訪問(wèn)。实際上(shàng),當 B0 被(bèi) DSP 訪問(wèn)时(shí),B1 就(jiù)被(bèi) SDRAM 訪問(wèn),反(fǎn)之也(yě)成(chéng)立。若 DSP 向(xiàng) B1 写數據(jù),SDRAM 就(jiù)從 B0 读(dú)數據(jù);而(ér)當 SDRAM 的(de)數據(jù)写到(dào) B0 中(zhōng)时(shí),DSP 就(jiù)從 B1 读(dú)數據(jù)。两(liǎng)者(zhě)同(tóng)时(shí)從同(tóng)一(yī)緩沖區(qū)读(dú)或(huò)写都将激發(fà)錯誤。上(shàng)邊(biān)所(suǒ)述的(de)數據(jù)轉(zhuǎn)移方(fāng)式有(yǒu)两(liǎng)種(zhǒng)好(hǎo)处:一(yī)是(shì)加速了(le) TMS320C54x 的(de)訪問(wèn)速度(dù),二(èr)是(shì)解(jiě)決了(le)二(èr)者(zhě)之間(jiān)的(de)时(shí)鐘(zhōng)不(bù)同(tóng)步問(wèn)題(tí)。
3 、FPGA 中(zhōng)的(de)硬(yìng)件(jiàn)設計(jì)
TMS320C54x 为(wèi)外(wài)部(bù)存儲器的(de)擴展(zhǎn)提(tí)供了(le)下(xià)列信(xìn)号(hào):CLK、CS、AO~A15、D0~D15、RW、MATRB、ISTRB、IS,而(ér) SDRAM 接收(shōu)下(xià)列信(xìn)号(hào):CLK、CKE、CS、CQM、W、RAS、CAS、A0~A11。由(yóu)于(yú)两(liǎng)端控制信(xìn)号(hào)不(bù)同(tóng),需要(yào)在(zài) DSP 與(yǔ) SDRAM 之間(jiān)加上(shàng)控制邏輯,以(yǐ)便将從 DSP 过(guò)来(lái)的(de)信(xìn)号(hào)解(jiě)釋成(chéng) SDRAM 能(néng)够接收(shōu)的(de)信(xìn)号(hào),图(tú) 3 是(shì)用(yòng) FPGA 設計(jì)的(de)頂层硬(yìng)件(jiàn)接口(kǒu)图(tú)。
图(tú)中(zhōng)主(zhǔ)要(yào)由(yóu)三(sān)个(gè)模块(kuài):DSP-IQ、DMA-BUF 和(hé) SD-CMD。其中(zhōng) DSP-IO 是(shì) DSP 端的(de)接口(kǒu),用(yòng)来(lái)解(jiě)碼 TMS320C54x 發(fà)送的(de) SDRAM 地(dì)址和(hé)命令。DMA-BUF 代(dài)表(biǎo)緩沖區(qū) BO、B1。SD_CMD 模块(kuài)用(yòng)来(lái)産生(shēng) SDRAM 訪問(wèn)所(suǒ)需的(de)各(gè)種(zhǒng)信(xìn)号(hào)。
DSP_IO 模块(kuài)又包(bāo)括 IO_DMA、DSP_BUF 和(hé) DSP_READ。IO_DMA 産生(shēng) SDRAM 的(de)命令信(xìn)号(hào),即图(tú) 3 中(zhōng)的(de) DSP_RDY、DSP_SD_RW、DSP_SD_BANK_SW、DSP_SD_ADDR[20..0]、DSP_SD_ADDR_RESET、DSP_SD_START。DSP_BUF 産生(shēng)訪問(wèn) B0、B1 的(de)地(dì)址、數據(jù)和(hé)控制信(xìn)号(hào),图(tú) 3 中(zhōng)指 DSP_SD_BUFCLKI、DSP_SD_BUFCLKO、DSP_SD_BUFWE、DSP_SD_BUFADDR[6..0]、DSP_SD_BUFIN[7..0]。DSP-READ 子模块(kuài)用(yòng)来(lái)控制 DSP 的(de)读(dú)写方(fāng)向(xiàng)。
DMA_BUF 分(fēn)为(wèi) B0、B1 两(liǎng)个(gè)緩沖區(qū),用(yòng)来(lái)進(jìn)行數據(jù)傳送,每个(gè)緩沖區(qū)的(de)輸入(rù)輸出(chū)信(xìn)号(hào)包(bāo)括:CLKI、CLKO、WE、ADDR[6-0]、DATA_IN[7-0]、DATA_OUT[7-0]。BANK_SW 是(shì)一(yī)个(gè)開(kāi)關(guān)信(xìn)号(hào),用(yòng)于(yú) DSP 和(hé) SDRAM 对(duì) B0、B1 的(de)切(qiè)換訪問(wèn)。
SD_CMD 模块(kuài)包(bāo)括刷新、读(dú)、写功能(néng)。當 DSP 芯片(piàn)發(fà)出(chū) SDRAM 读(dú)命令时(shí),128 字(zì)节(jié)的(de)數據(jù)從 SDRAM 中(zhōng)读(dú)出(chū)来(lái)并被(bèi)存儲到(dào) B0 或(huò) B1 中(zhōng),當 DSP 發(fà)出(chū)写命令之时(shí),128 字(zì)节(jié)的(de)數據(jù)傳到(dào) B0 或(huò) B1 之中(zhōng)并被(bèi)最(zuì)終(zhōng)写到(dào) SDRAM 中(zhōng)。
4 、软(ruǎn)件(jiàn)設計(jì)
TMS626812A SDRAM 有(yǒu)两(liǎng)兆(zhào)字(zì)节(jié)的(de)存儲容量(liàng)。所(suǒ)以(yǐ) DSP 用(yòng)两(liǎng)个(gè) I/O 地(dì)址向(xiàng) FPGA 傳送訪問(wèn) SDRAM 的(de)高(gāo)低地(dì)址。此(cǐ)文(wén)中(zhōng),該两(liǎng)个(gè) I/O 地(dì)址对(duì)應(yìng)用(yòng)图(tú) 4 中(zhōng)的(de) 03h(DMA_ADDH)和(hé) 04h(DMA_ADDL)。另(lìng)外(wài),還(huán)有(yǒu)一(yī)个(gè) I/O 地(dì)址(图(tú) 4 中(zhōng)的(de) 05h)用(yòng)来(lái)向(xiàng) FPGA 傳送命令産生(shēng) SDRAM 訪問(wèn)的(de)信(xìn)号(hào)。
DSP 向(xiàng) SDRAM 写數據(jù)时(shí)的(de)操作步驟如(rú)下(xià):
(1)數據(jù)先(xiān)被(bèi)写到(dào) B0 或(huò) B1。
(2)SDRAM 的(de)訪問(wèn)地(dì)址經(jīng)由(yóu) DSP 的(de) I/O 地(dì)址 DMA_ADDH 和(hé) DMA_ADDL 發(fà)送到(dào) FPGA 中(zhōng)。
(3)DSP 向(xiàng) FPGA 發(fà)出(chū)一(yī)个(gè)命令(I/O 地(dì)址为(wèi) DMA_CTL)産生(shēng)控制信(xìn)号(hào),使 SDRAM 從 B0 或(huò) B1 中(zhōng)读(dú)取(qǔ)數值。
DSP 從 SDRAM 读(dú)數據(jù)的(de)操作步驟如(rú)下(xià):

(1)DSP 傳送訪問(wèn) SDRAM 的(de)地(dì)址。
(2)DSP 經(jīng)由(yóu) FPGA 傳送一(yī)个(gè)命令,使得數據(jù)從 SDRAM 中(zhōng)读(dú)到(dào) FPGA 中(zhōng)。
(3)DSP 從 B0 或(huò) B1 中(zhōng)读(dú)得數據(jù)。
图(tú) 4 为(wèi) DSP 中(zhōng)與(yǔ)數據(jù)傳送相關(guān)的(de)各(gè)類(lèi)存儲器的(de)分(fēn)配情(qíng)況。
具體(tǐ)設計(jì)时(shí),應(yìng)參考相關(guān)資料進(jìn)行補充。不(bù)同(tóng)的(de) DSP 與(yǔ)不(bù)同(tóng)類(lèi)型的(de) SDRAM 接口(kǒu)时(shí),会(huì)有(yǒu)细(xì)微的(de)區(qū)别,電(diàn)路(lù)設計(jì)完畢後(hòu)要(yào)進(jìn)行認真(zhēn)而(ér)多(duō)方(fāng)面(miàn)的(de)测試。
http://old.mdy-edu.com/xmucjie/2023/0201/1865.html
需要(yào)了(le)解(jiě)相關(guān)信(xìn)息可(kě)以(yǐ)聯系(xì):吴老(lǎo)师(shī)18022857217(微信(xìn)同(tóng)号(hào))








