在DSP 應(yīng)用系統(tǒng)中,需要大量外擴(kuò)存儲(chǔ)器的情況經(jīng)常遇到。例如,在數(shù)碼相機(jī)和攝像機(jī)中,為了將現(xiàn)場(chǎng)拍攝的諸多圖片或圖像暫存下來,需要將 DSP 處理后的數(shù)據(jù)轉(zhuǎn)移到外存中以備后用。從目前的存儲(chǔ)器市場(chǎng)看,SDRAM 由于其性能價(jià)格比的優(yōu)勢(shì),而被 DSP 開發(fā)者所青睞。DSP 與 SDRAM 直接接口是不可能的。
FPGA(現(xiàn)場(chǎng)可編程門陣列)由于其具有使用靈活、執(zhí)行速度快、開發(fā)工具豐富的特點(diǎn)而越來越多地出現(xiàn)在現(xiàn)場(chǎng)電路設(shè)計(jì)中。本文用 FPGA 作為接口芯片,提供控制信號(hào)和定時(shí)信號(hào),來實(shí)現(xiàn) DSP 到 SDRAM 的數(shù)據(jù)存取。
1 、SDRAM 介紹
本文采用的 SDRAM 為 TMS626812A,圖 1 為其功能框圖。它內(nèi)部分為兩條,每條 1M 字節(jié),數(shù)據(jù)寬度為 8 位,故存儲(chǔ)總?cè)萘繛?2M 字節(jié)。
所有輸入和輸出操作都是在時(shí)鐘 CLK 上升沿的作用下進(jìn)行的,刷新時(shí)鐘交替刷新內(nèi)部的兩條 RAM。TMS626812A 主要有六條控制命令,它們是:條激尖 / 行地址入口、列地址入口 / 寫操作、列地址入口 / 讀操作、條無效、自動(dòng)刷新、自動(dòng)刷新。SDRAM 與 TMS320C54x 接口中用到的命令主要有:MRS、DEAC、ACTV、WRT-P、READ-P 和 REFR。這里,設(shè)計(jì)目的就是產(chǎn)生控制信號(hào)來滿足這些命令的時(shí)序要求。關(guān)于 TMS626812A 的具體說明可以查看其數(shù)據(jù)手冊(cè)。
2 、SDRAM 與 TMS320C54x 之間的通用接口
圖 2 是 DSP 與 SDRAM 的通用接口框圖,圖中 DSP I/F 代表 TMS320C54x 端接口單元,SDRAM CNTL 代表 SDRAM 端接口控制單元。SDRAM 被設(shè)置成一次性讀寫 128 個(gè)字節(jié),而 DSP 一次只讀寫一個(gè)字節(jié),因而建立了兩個(gè)緩沖區(qū) B0、B1 來緩存和中轉(zhuǎn)數(shù)據(jù)。B0、B1 大小都為 128 字節(jié),而且映射到 DSP 中的同一地址空間。
盡管 B0、B1 對(duì)應(yīng)于同一地址空間,但對(duì)兩個(gè)緩沖區(qū)不能在同一時(shí)刻進(jìn)行合法訪問。實(shí)際上,當(dāng) B0 被 DSP 訪問時(shí),B1 就被 SDRAM 訪問,反之也成立。若 DSP 向 B1 寫數(shù)據(jù),SDRAM 就從 B0 讀數(shù)據(jù);而當(dāng) SDRAM 的數(shù)據(jù)寫到 B0 中時(shí),DSP 就從 B1 讀數(shù)據(jù)。兩者同時(shí)從同一緩沖區(qū)讀或?qū)懚紝⒓ぐl(fā)錯(cuò)誤。上邊所述的數(shù)據(jù)轉(zhuǎn)移方式有兩種好處:一是加速了 TMS320C54x 的訪問速度,二是解決了二者之間的時(shí)鐘不同步問題。
3 、FPGA 中的硬件設(shè)計(jì)
TMS320C54x 為外部存儲(chǔ)器的擴(kuò)展提供了下列信號(hào):CLK、CS、AO~A15、D0~D15、RW、MATRB、ISTRB、IS,而 SDRAM 接收下列信號(hào):CLK、CKE、CS、CQM、W、RAS、CAS、A0~A11。由于兩端控制信號(hào)不同,需要在 DSP 與 SDRAM 之間加上控制邏輯,以便將從 DSP 過來的信號(hào)解釋成 SDRAM 能夠接收的信號(hào),圖 3 是用 FPGA 設(shè)計(jì)的頂層硬件接口圖。
圖中主要由三個(gè)模塊:DSP-IQ、DMA-BUF 和 SD-CMD。其中 DSP-IO 是 DSP 端的接口,用來解碼 TMS320C54x 發(fā)送的 SDRAM 地址和命令。DMA-BUF 代表緩沖區(qū) BO、B1。SD_CMD 模塊用來產(chǎn)生 SDRAM 訪問所需的各種信號(hào)。
DSP_IO 模塊又包括 IO_DMA、DSP_BUF 和 DSP_READ。IO_DMA 產(chǎn)生 SDRAM 的命令信號(hào),即圖 3 中的 DSP_RDY、DSP_SD_RW、DSP_SD_BANK_SW、DSP_SD_ADDR[20..0]、DSP_SD_ADDR_RESET、DSP_SD_START。DSP_BUF 產(chǎn)生訪問 B0、B1 的地址、數(shù)據(jù)和控制信號(hào),圖 3 中指 DSP_SD_BUFCLKI、DSP_SD_BUFCLKO、DSP_SD_BUFWE、DSP_SD_BUFADDR[6..0]、DSP_SD_BUFIN[7..0]。DSP-READ 子模塊用來控制 DSP 的讀寫方向。
DMA_BUF 分為 B0、B1 兩個(gè)緩沖區(qū),用來進(jìn)行數(shù)據(jù)傳送,每個(gè)緩沖區(qū)的輸入輸出信號(hào)包括:CLKI、CLKO、WE、ADDR[6-0]、DATA_IN[7-0]、DATA_OUT[7-0]。BANK_SW 是一個(gè)開關(guān)信號(hào),用于 DSP 和 SDRAM 對(duì) B0、B1 的切換訪問。
SD_CMD 模塊包括刷新、讀、寫功能。當(dāng) DSP 芯片發(fā)出 SDRAM 讀命令時(shí),128 字節(jié)的數(shù)據(jù)從 SDRAM 中讀出來并被存儲(chǔ)到 B0 或 B1 中,當(dāng) DSP 發(fā)出寫命令之時(shí),128 字節(jié)的數(shù)據(jù)傳到 B0 或 B1 之中并被最終寫到 SDRAM 中。
4 、軟件設(shè)計(jì)
TMS626812A SDRAM 有兩兆字節(jié)的存儲(chǔ)容量。所以 DSP 用兩個(gè) I/O 地址向 FPGA 傳送訪問 SDRAM 的高低地址。此文中,該兩個(gè) I/O 地址對(duì)應(yīng)用圖 4 中的 03h(DMA_ADDH)和 04h(DMA_ADDL)。另外,還有一個(gè) I/O 地址(圖 4 中的 05h)用來向 FPGA 傳送命令產(chǎn)生 SDRAM 訪問的信號(hào)。
DSP 向 SDRAM 寫數(shù)據(jù)時(shí)的操作步驟如下:
(1)數(shù)據(jù)先被寫到 B0 或 B1。
(2)SDRAM 的訪問地址經(jīng)由 DSP 的 I/O 地址 DMA_ADDH 和 DMA_ADDL 發(fā)送到 FPGA 中。
(3)DSP 向 FPGA 發(fā)出一個(gè)命令(I/O 地址為 DMA_CTL)產(chǎn)生控制信號(hào),使 SDRAM 從 B0 或 B1 中讀取數(shù)值。
DSP 從 SDRAM 讀數(shù)據(jù)的操作步驟如下:
(1)DSP 傳送訪問 SDRAM 的地址。
(2)DSP 經(jīng)由 FPGA 傳送一個(gè)命令,使得數(shù)據(jù)從 SDRAM 中讀到 FPGA 中。
(3)DSP 從 B0 或 B1 中讀得數(shù)據(jù)。
圖 4 為 DSP 中與數(shù)據(jù)傳送相關(guān)的各類存儲(chǔ)器的分配情況。
具體設(shè)計(jì)時(shí),應(yīng)參考相關(guān)資料進(jìn)行補(bǔ)充。不同的 DSP 與不同類型的 SDRAM 接口時(shí),會(huì)有細(xì)微的區(qū)別,電路設(shè)計(jì)完畢后要進(jìn)行認(rèn)真而多方面的測(cè)試。
責(zé)任編輯:xj
原文標(biāo)題:將FPGA作為接口芯片,如何實(shí)現(xiàn)DSP和SDRAM數(shù)據(jù)讀?。?/p>
文章出處:【微信公眾號(hào):FPGA設(shè)計(jì)論壇】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
-
dsp
+關(guān)注
關(guān)注
554文章
8059瀏覽量
350557 -
FPGA
+關(guān)注
關(guān)注
1630文章
21799瀏覽量
606207 -
芯片
+關(guān)注
關(guān)注
456文章
51243瀏覽量
427530 -
SDRAM
+關(guān)注
關(guān)注
7文章
432瀏覽量
55386
原文標(biāo)題:將FPGA作為接口芯片,如何實(shí)現(xiàn)DSP和SDRAM數(shù)據(jù)讀???
文章出處:【微信號(hào):gh_9d70b445f494,微信公眾號(hào):FPGA設(shè)計(jì)論壇】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
ADS8363數(shù)據(jù)輸出引腳上依然看不到數(shù)據(jù)跳變,為什么?
HDC1080損壞的可能原因有哪些?
ADC3663在40Mhz時(shí),數(shù)據(jù)讀取出現(xiàn)錯(cuò)位現(xiàn)象,怎么解決?
LabView怎么保存已經(jīng)讀取的數(shù)據(jù)方便下次接著用
無論多少G以后,都不可能沒有200G
![無論多少G以后,都<b class='flag-5'>不可能</b>沒有200G](https://file1.elecfans.com//web2/M00/0A/61/wKgZomcfYzKADK4cAAIPC7GQrj8275.png)
PCM1864采樣音頻數(shù)據(jù)的諧波及底噪可能會(huì)是由什么引入的呢?
AI賦能TRIZ:跨界融合,共赴“不可能”挑戰(zhàn)之旅
電器電阻增大可能原因和影響
百度健康推出五款大模型應(yīng)用產(chǎn)品
是否有可能讀取ESP當(dāng)前連接到的站點(diǎn)的RSSI?
bytes at port 輸出的值一直為0,串口助手可以讀取數(shù)據(jù),求問可能是什么問題?
《合宙的第一個(gè)10年》故事連載07:不可能的行動(dòng)變成可能,也有方法
![《合宙的第一個(gè)10年》故事連載07:<b class='flag-5'>不可能</b>的行動(dòng)變成<b class='flag-5'>可能</b>,也有方法](https://file.elecfans.com/web2/M00/43/7B/pYYBAGJ-B6aAHuNPAAAf8J1Ebk4778.jpg)
評(píng)論