雙端口RAM在ARM 與DSP通信系統(tǒng)中的應(yīng)用[圖]

相關(guān)專題: 芯片

后PC 時(shí)代,由于網(wǎng)絡(luò)技術(shù)和集成電路技術(shù)的迅速發(fā)展,利用嵌入式系統(tǒng)進(jìn)行數(shù)字信號(hào)處理與傳輸成為可能。在ARM 和DSP 構(gòu)成的雙處理器系統(tǒng)中,嵌入式作為主設(shè)備,主要完成數(shù)據(jù)處理、存儲(chǔ)與網(wǎng)絡(luò)傳輸工作,而DSP 作為從設(shè)備需要負(fù)責(zé)復(fù)雜的算法實(shí)現(xiàn)。

在此高速數(shù)據(jù)采集和處理系統(tǒng)中,隨著采樣數(shù)據(jù)量的增大和處理任務(wù)的增加,對(duì)數(shù)據(jù)的傳送要求越來(lái)越高,如果在兩個(gè)系統(tǒng)端口之間沒(méi)有能夠高速傳送數(shù)據(jù)的接口,將會(huì)造成數(shù)據(jù)傳送的阻塞,嚴(yán)重影響系統(tǒng)的實(shí)時(shí)性與處理數(shù)據(jù)的能力,因此此系統(tǒng)設(shè)計(jì)的重點(diǎn)之一是主從設(shè)備之間的數(shù)據(jù)通信。本文介紹用雙端口RAMIDT70261 完成TMS320C6211DSP 與嵌入式ARM920T之間的數(shù)據(jù)通信。

  1 IDT70261雙端口RAM功能簡(jiǎn)介

IDT70261 是美國(guó)IDT 公司生產(chǎn)的高速16K×16 的雙端口SRAM,其典型功耗為750mW,它具有兩個(gè)等級(jí)的存取時(shí)間:商業(yè)級(jí)有 15/20/25/35/55 ns (max),工業(yè)級(jí)有20/25/35/55ns (max)。雙端口RAM 有兩個(gè)完全獨(dú)立的端口,它們各自有一套相應(yīng)的數(shù)據(jù)總線、地址總線和控制總線,允許兩個(gè)控制器單獨(dú)或異步的讀寫(xiě)其中任意一個(gè)存儲(chǔ)單元。兩個(gè)端口具有同樣的對(duì)雙端口RAM 的讀寫(xiě)操作能力,但是當(dāng)兩個(gè)端口同時(shí)對(duì)同一地址進(jìn)行讀寫(xiě)操作時(shí),會(huì)因?yàn)閿?shù)據(jù)的沖突而造成存儲(chǔ)或讀取的錯(cuò)誤。對(duì)同一存儲(chǔ)單元的操作存在以下四種情況:

(1) 兩個(gè)端口不同時(shí)對(duì)同一地址單元進(jìn)行讀寫(xiě)數(shù)據(jù)。

(2) 兩個(gè)端口同時(shí)對(duì)同一地址單元進(jìn)行讀出數(shù)據(jù)。

(3) 兩個(gè)端口同時(shí)對(duì)同一地址單元進(jìn)行寫(xiě)入數(shù)據(jù)。

(4) 兩個(gè)端口同時(shí)對(duì)一個(gè)地址單元,一個(gè)寫(xiě)入數(shù)據(jù),另一個(gè)讀出數(shù)據(jù)。

前兩種情況不會(huì)造成對(duì)雙端口RAM的讀寫(xiě)錯(cuò)誤,第三種情況會(huì)造成寫(xiě)入數(shù)據(jù)的錯(cuò)誤,第四種情況會(huì)造成讀出錯(cuò)誤。為了避免對(duì)雙端口RAM 造成讀寫(xiě)錯(cuò)誤,IDT70261 有以下幾種仲裁控制方法。

1.1 遇忙邏輯控制

當(dāng)雙端口同時(shí)對(duì)同一地址單元進(jìn)行控制時(shí),IDT70261 提供一種/BUSY 控制機(jī)制。雙端口不對(duì)同一地址單元進(jìn)行控制時(shí),兩個(gè)端口的/BUSY 引腳都為高,左右兩個(gè)端口均可正常訪問(wèn)存儲(chǔ)空間。當(dāng)兩個(gè)端口對(duì)同一地址單元進(jìn)行存取時(shí),一個(gè)端口的/BUSY 引腳為高(允許對(duì)存儲(chǔ)空間的讀寫(xiě)操作),另一個(gè)端口的引腳為低(禁止對(duì)存儲(chǔ)空間的讀寫(xiě)操作),哪一個(gè)請(qǐng)求信號(hào)在前,其端口引腳為高,另一個(gè)為低。兩個(gè)端口請(qǐng)求讀寫(xiě)的時(shí)間差最小為5ns,當(dāng)時(shí)間小于5ns 時(shí),系統(tǒng)會(huì)自動(dòng)允許一個(gè)引腳讀寫(xiě),屏蔽另外一個(gè)引腳,防止出現(xiàn)對(duì)同一地址單元的讀寫(xiě)錯(cuò)誤。

1.2 中斷控制機(jī)制

IDT70261 具有中斷輸出功能,中斷工作時(shí),雙端口RAM 的兩個(gè)最高地址單元3FFE、3FFF 作為"郵箱"來(lái)傳遞相應(yīng)的命令。當(dāng)中斷功能不使用時(shí),3FFE、3FFF兩個(gè)單元作為正常的存儲(chǔ)單元使用。下面介紹中斷工作原理。

左端口寫(xiě)地址單元3FFF,/INTR 變?yōu)橛行Вǖ碗娖剑,向右端口發(fā)送中斷請(qǐng)求,右端口響應(yīng)中斷請(qǐng)求后,可向3FFF 地址單元執(zhí)行一次讀操作,清除中斷標(biāo)志(/INTR 變?yōu)楦唠娖剑。同理,右端口?xiě)地址單元3FFE,/INTL 變?yōu)橛行Вǖ碗娖剑,向左端口發(fā)送中斷請(qǐng)求,左端口響應(yīng)中斷請(qǐng)求后,可向3FFE 地址單元執(zhí)行一次讀操作,清除中斷標(biāo)志(/INTL 變?yōu)楦唠娖剑?/p>

1.3 令牌傳遞原理

IDT70261 內(nèi)部有8 個(gè)獨(dú)立于雙端口RAM 的邏輯鎖存單元,用來(lái)標(biāo)明共享的雙端口RAM 是否正在使用。在此工作模式下,/SEM 用作鎖存器的"片選"信號(hào),地址線A2~A0 用來(lái)尋址8 個(gè)標(biāo)志鎖存器,數(shù)據(jù)線D0用來(lái)標(biāo)志鎖存器的狀態(tài)。

端口向鎖存器寫(xiě)入0 表示申請(qǐng)控制權(quán),寫(xiě)入1 表示放棄使用權(quán)。當(dāng)左端口要使用雙端口RAM 時(shí),先寫(xiě)入0 到標(biāo)志鎖存器,然后讀出標(biāo)志鎖存器的狀態(tài),若讀出的值為0,則左端口獲得該存儲(chǔ)單元的使用權(quán);若讀出的值為1,表明右端口正在使用該存儲(chǔ)單元。

此時(shí),左端口要么循環(huán)檢測(cè)鎖存器狀態(tài),直到右端口使用結(jié)束,要么向鎖存器寫(xiě)入1,撤銷請(qǐng)求。同理,若右端口使用雙端口RAM 時(shí),仍按照上述步驟進(jìn)行操作[1,2].

  2 基于IDT70261的接口電路

本系統(tǒng)為視頻數(shù)據(jù)采集處理系統(tǒng),當(dāng)攝像頭采集后的數(shù)據(jù)經(jīng)DSP 壓縮編碼后輸入到雙端口RAM 芯片中,ARM 處理器接收到數(shù)據(jù)請(qǐng)求后,接收?qǐng)D像數(shù)據(jù),對(duì)數(shù)據(jù)進(jìn)行存儲(chǔ)和傳輸工作,最終將圖像經(jīng)過(guò)解碼顯示在終端PC 機(jī)上。

基于IDT70261 的接口電路圖如圖1 所示,此系統(tǒng)采用中斷控制機(jī)制,雙端口RAM 的一些功能引腳并不需要全部使用。雙端口RAM 的左端是ARM920T芯片,右端是TMS320C6211 DSP 芯片。雙端口RAM兩個(gè)獨(dú)立的數(shù)據(jù)線D0L-D15L 和D0R-D15R 分別與ARM920 芯片和DSP 芯片連接,地址線A0L-A13L 和A0R-A13R 也分別與上述兩芯片連接。/CE 為芯片使能引腳,R/W 為讀寫(xiě)控制引腳,/OE 為輸出使能引腳,/INT 為中斷標(biāo)志引腳,/BUSY 為遇忙控制引腳,其連接電路如圖1 所示。

圖1 接口電路

3 數(shù)據(jù)通信的軟件實(shí)現(xiàn)

本系統(tǒng)采用中斷控制方式來(lái)實(shí)現(xiàn)對(duì)雙端口RAM的讀寫(xiě)操作。DSP 主要負(fù)責(zé)圖像數(shù)據(jù)壓縮工作,壓縮后的數(shù)據(jù)傳送給雙端口RAM.傳送數(shù)據(jù)時(shí),DSP 向信令字單元3FFF 寫(xiě)入'55H',在ARM 方產(chǎn)生中斷后,ARM 讀信令字單元3FFF,如果是'55H',說(shuō)明數(shù)據(jù)正在傳輸,讀完數(shù)據(jù)后,向信令字單元3FFE 寫(xiě)入'AAH',代表讀完數(shù)據(jù)。DSP 接收到中斷后,讀信令字單元3FFEH,如果為'AAH',表示傳輸數(shù)據(jù)成功。

ARM完成整個(gè)系統(tǒng)的實(shí)時(shí)控制,對(duì)雙端口RAM的圖像數(shù)據(jù)進(jìn)行讀取然后經(jīng)過(guò)網(wǎng)絡(luò)傳遞給PC 機(jī),因此需要驅(qū)動(dòng)程序來(lái)實(shí)現(xiàn)雙端口RAM與ARM之間的數(shù)據(jù)通信。驅(qū)動(dòng)程序是應(yīng)用程序與硬件之間的接口,用戶可以通過(guò)驅(qū)動(dòng)程序來(lái)間接的實(shí)現(xiàn)對(duì)硬件的讀寫(xiě)控制操作。雙端口RAM 的驅(qū)動(dòng)程序主要任務(wù)是讀雙端口RAM 數(shù)據(jù)到用戶空間、把用戶空間命令寫(xiě)入雙端口RAM 相應(yīng)地址以及相應(yīng)雙端口RAM 產(chǎn)生的中斷。在驅(qū)動(dòng)程序中,最主要的結(jié)構(gòu)便是file_operation,在里面包含了對(duì)文件的打開(kāi)、關(guān)閉、讀寫(xiě)和其他控制函數(shù),file_operation 結(jié)構(gòu)如下:

在使用設(shè)備之前需要對(duì)設(shè)備進(jìn)行初始化,包括配置ARM 接口寄存器、注冊(cè)設(shè)備、申請(qǐng)中斷和分配虛擬地址空間等。配置寄存器和注冊(cè)申請(qǐng)工作在加載模塊時(shí)實(shí)現(xiàn),分配資源工作在dualram_open 函數(shù)內(nèi)實(shí)現(xiàn)。

配置接口寄存器,AT91RM9200 具有一個(gè)EBI 接口,可以方便的連接各種存儲(chǔ)設(shè)備,可以使用EBI 接口中的SMC 來(lái)控制讀寫(xiě),由CS4 接口來(lái)控制雙端口RAM 的使能信號(hào),通過(guò)向相應(yīng)寄存器內(nèi)寫(xiě)入控制字來(lái)實(shí)現(xiàn)ARM 對(duì)雙端口RAM 的端口初始化工作。

在初始化函數(shù)init_dualram 中,用register_chrdev將雙端口RAM 注冊(cè)為一個(gè)字符型設(shè)備,用request_irq為設(shè)備申請(qǐng)相應(yīng)的中斷資源,函數(shù)如下:

myirq=request_irq(AT91RM_IRQ1,dualport_inter,SA_INTERRUPT,"dualram",NULL)

在裝載驅(qū)動(dòng)時(shí)進(jìn)行注冊(cè)和申請(qǐng),在卸載模塊時(shí)必須進(jìn)行注銷,即在dualram_exit 內(nèi)執(zhí)行unregister_chrdev 和free_irq 來(lái)釋放資源。

Linux 無(wú)法直接訪問(wèn)某一物理地址空間,必須通過(guò)虛擬地址空間的映射機(jī)制來(lái)完成訪問(wèn)。映射工作在dualram_open 函數(shù)內(nèi)完成,因此每次打開(kāi)設(shè)備都會(huì)完成此工作。所要用到的地址資源和數(shù)據(jù)結(jié)構(gòu)定義如下:

#define dualram_base_addr 0x60000000

#define dualram_size ox3fff

u16 *remaddr

通過(guò)使用函數(shù)remaddr = ioremap (dualram_base_addr ,dualram_size);進(jìn)行虛擬地址映射,此后就可以使用remaddr 來(lái)完成對(duì)實(shí)際雙端口RAM 空間的訪問(wèn)了。

為了有效的提高數(shù)據(jù)傳輸效率,驅(qū)動(dòng)程序與應(yīng)用程序之間采用異步通知的機(jī)制,這樣上層應(yīng)用程序便可以知道RAM 中的數(shù)據(jù)量是否達(dá)到閾值,而不用采用輪詢的方式,占用處理器資源。異步通知機(jī)制分三步完成,首先需要讓內(nèi)核知道驅(qū)動(dòng)程序與哪個(gè)進(jìn)程通信,當(dāng)進(jìn)程使用系統(tǒng)函數(shù)fcntl 執(zhí)行F_SETOWN 命令時(shí),設(shè)備文件擁有者(owner)的ID 號(hào)會(huì)被記錄在flip->f_owner 中,此時(shí)內(nèi)核知道了與驅(qū)動(dòng)進(jìn)行通信的進(jìn)程,然后應(yīng)用程序調(diào)用fcntl 的F_SETFL 命令來(lái)激活異步通知機(jī)制,這樣新數(shù)據(jù)到達(dá)時(shí)輸入文件便可發(fā)送一個(gè)SIGIO 信號(hào)到flip->f_owner 中指定的進(jìn)程。

圖像數(shù)據(jù)到達(dá)后,Linux 內(nèi)的應(yīng)用程序完成對(duì)數(shù)據(jù)的讀寫(xiě)操作,寫(xiě)操作函數(shù)為:dualram_write,就是利用copy_from_user 把用戶空間的數(shù)據(jù)寫(xiě)入到雙端口RAM中,讀操作函數(shù):dualram_read,就是利用copy_to_user把雙端口RAM 中的數(shù)據(jù)讀入到用戶空間中[5,7].

4 測(cè)試結(jié)果

視頻監(jiān)控系統(tǒng)的測(cè)試環(huán)境是ARM 920T 與TMS320C6211 通過(guò)網(wǎng)絡(luò)與PC 互連構(gòu)成一個(gè)簡(jiǎn)單的局域網(wǎng)。通過(guò)網(wǎng)絡(luò)抓包軟件可以統(tǒng)計(jì)網(wǎng)絡(luò)的數(shù)據(jù)流量,通過(guò)CCS 分析工具分析系統(tǒng)的實(shí)時(shí)性。系統(tǒng)的量化階距越高,圖像的壓縮比率越大,所獲得的圖像質(zhì)量越差,本系統(tǒng)設(shè)置的量化階距設(shè)置為75.經(jīng)測(cè)試本系統(tǒng)的主要參數(shù)如下:圖像的壓縮格式為JPEG,分辨率為BMP(240×160),最大編碼速度為15 幀/秒,數(shù)據(jù)流量為50-200kbps,網(wǎng)絡(luò)采用UDP/IP 協(xié)議,網(wǎng)絡(luò)接口為RJ-45 100Mbps.

5 結(jié)語(yǔ)

本文結(jié)合了嵌入式圖像數(shù)據(jù)采集系統(tǒng)的設(shè)計(jì),介紹了通過(guò)雙端口RAM 實(shí)現(xiàn)ARM920T 與 TMS320C6211 DSP 之間的通信。利用雙端口RAM 的強(qiáng)大功能可以實(shí)現(xiàn)各種形式的處理器之間的高速數(shù)據(jù)通信。在信號(hào)處理領(lǐng)域和高速數(shù)據(jù)采集中,利用雙端口RAM的幾種不同仲裁機(jī)制,可以完成不同的數(shù)據(jù)傳送要求。

用它構(gòu)成的接口電路具有傳送速率高、實(shí)時(shí)性好、可靠性高、電路簡(jiǎn)單等優(yōu)點(diǎn)。

作者:劉玉珍 張曄 來(lái)源:《計(jì)算機(jī)系統(tǒng)應(yīng)用》


微信掃描分享本文到朋友圈
掃碼關(guān)注5G通信官方公眾號(hào),免費(fèi)領(lǐng)取以下5G精品資料
  • 1、回復(fù)“YD5GAI”免費(fèi)領(lǐng)取《中國(guó)移動(dòng):5G網(wǎng)絡(luò)AI應(yīng)用典型場(chǎng)景技術(shù)解決方案白皮書(shū)
  • 2、回復(fù)“5G6G”免費(fèi)領(lǐng)取《5G_6G毫米波測(cè)試技術(shù)白皮書(shū)-2022_03-21
  • 3、回復(fù)“YD6G”免費(fèi)領(lǐng)取《中國(guó)移動(dòng):6G至簡(jiǎn)無(wú)線接入網(wǎng)白皮書(shū)
  • 4、回復(fù)“LTBPS”免費(fèi)領(lǐng)取《《中國(guó)聯(lián)通5G終端白皮書(shū)》
  • 5、回復(fù)“ZGDX”免費(fèi)領(lǐng)取《中國(guó)電信5GNTN技術(shù)白皮書(shū)
  • 6、回復(fù)“TXSB”免費(fèi)領(lǐng)取《通信設(shè)備安裝工程施工工藝圖解
  • 7、回復(fù)“YDSL”免費(fèi)領(lǐng)取《中國(guó)移動(dòng)算力并網(wǎng)白皮書(shū)
  • 8、回復(fù)“5GX3”免費(fèi)領(lǐng)取《R1623501-g605G的系統(tǒng)架構(gòu)1
  • 本周熱點(diǎn)本月熱點(diǎn)

     

      最熱通信招聘

    業(yè)界最新資訊


      最新招聘信息