国产伦精品一区二区三区免费视频 ,久久电影网站,51成人做爰www免费看网站http://www.bjzhda.cnzh-cn曙海教育集團(tuán)論壇http://www.bjzhda.cnRss Generator By Dvbbs.Netofficeoffice@126.comimages/logo.gif曙海教育集團(tuán)論壇基于DSP的雙CPU微機(jī)繼電保護(hù)裝置的設(shè)計(jì)http://www.martymets.com/bbs/dispbbs.asp?BoardID=29&ID=1641&Page=1wangxinxin2010-11-22 14:41:14        關(guān)鍵詞:繼電保護(hù);DSP;硬件結(jié)構(gòu)
        電力工業(yè)的迅速發(fā)展、電力系統(tǒng)的復(fù)雜化以及保護(hù)要求的提高,促進(jìn)了微機(jī)繼電保護(hù)的迅速發(fā)展,尤其是高度智能化、數(shù)字化的微機(jī)保護(hù)裝置在電力系統(tǒng)的應(yīng)用不斷擴(kuò)大。微機(jī)繼電保護(hù)裝置除了擁有傳統(tǒng)的繼電保護(hù)裝置基本的測試功能外,還具有強(qiáng)大的數(shù)據(jù)處理能力和通信能力,其優(yōu)越性在電力系統(tǒng)實(shí)際應(yīng)用中得以體現(xiàn)。電力系統(tǒng)對于繼電保護(hù)的可靠性、選擇性、靈敏性和快速性都有很高的要求,而采用單CPU結(jié)構(gòu)的繼電保護(hù)裝置,其缺點(diǎn)是容易造成任務(wù)之間的沖突并且會(huì)引入等待周期。在微機(jī)繼電保護(hù)方面,數(shù)字信號(hào)處理器(Digital Signal Processor,即DSP)由于其突出的處理能力而受到青睞。此外DSP還具有內(nèi)存大、兼容性好等特點(diǎn)。隨著性能的提高和價(jià)格的下降,DSP在自動(dòng)控制、信息處理、通信以及儀器儀表等領(lǐng)域中得到廣泛應(yīng)用。本文以DSP為核心,提出了采用雙CPU模塊化設(shè)計(jì)的微機(jī)型繼電保護(hù)裝置。設(shè)計(jì)方案中使用型號(hào)為TMS320C6203B的DSP芯片,它是TMS320C6000系列DSP芯片的一種,片內(nèi)程序存儲(chǔ)器不僅在容量上進(jìn)行了擴(kuò)展,而去片內(nèi)程序RAM分為2個(gè)存儲(chǔ)塊。此外該芯片還具有處理性能更好、外設(shè)集成度更高、A/D轉(zhuǎn)換速度更快等優(yōu)點(diǎn),在控制方面得到廣泛應(yīng)用。
        1裝置硬件結(jié)構(gòu)設(shè)計(jì)
        1.1保護(hù)CPU與監(jiān)控CPU
        保護(hù)裝置硬件部分以保護(hù)CPU和監(jiān)控CPU為核心模塊,來完成相關(guān)的功能。DSP是一種具有特殊結(jié)構(gòu)的微處理器。與單片機(jī)比,哈佛結(jié)構(gòu)、流水線操作、獨(dú)有的硬件乘法累加操作、特殊的指令和特殊尋址模式、零消耗循環(huán)控制以執(zhí)行時(shí)間的可預(yù)測性是DSP突出的特點(diǎn)。此外,DSP片內(nèi)有多總線,片外的地址、數(shù)據(jù)總線分開,高速的同步串口或通信口等優(yōu)點(diǎn),因此數(shù)據(jù)輸入/輸出能力很強(qiáng),吞吐量大,在進(jìn)行數(shù)字信號(hào)處理時(shí)不僅速度快,精度也高。
        保護(hù)CPU的主要任務(wù)包括:(1)控制A/D采樣系統(tǒng)及開關(guān)量輸入;(2)對采集的數(shù)據(jù)進(jìn)行數(shù)字濾波,并對濾波后的數(shù)據(jù)進(jìn)行各種保護(hù)算法操作;(3)與監(jiān)控CPU進(jìn)行通信,完成處理結(jié)果的傳送。
        監(jiān)控CPU在執(zhí)行動(dòng)作則承擔(dān)整個(gè)系統(tǒng)的控制、通信、存貯的功能,借助操作系統(tǒng)處理各種復(fù)雜任務(wù),管理各種外設(shè),監(jiān)控整個(gè)系統(tǒng)的運(yùn)行狀況,為整個(gè)微機(jī)保護(hù)裝置提供高效率的處理平臺(tái)。硬件基本模塊如圖1所示。
        1.2雙CPU之間的通信
        裝置中保護(hù)CPU與監(jiān)控CPU之間的通信是主要解決的問題。在本裝置中采用的是利用高性能雙口RAM來構(gòu)成高速數(shù)據(jù)傳送接口的方案。雙口RAM 是一個(gè)共享式多端口存儲(chǔ)器,具有兩套完全獨(dú)立的數(shù)據(jù)線、地址線和讀寫控制線,并允許兩個(gè)獨(dú)立的系統(tǒng)同時(shí)對該存儲(chǔ)器進(jìn)行隨機(jī)性的訪問。保護(hù)CPU與監(jiān)控CPU雙方之間按照一定的通信協(xié)議,同時(shí)通過雙口RAM完成數(shù)據(jù)的讀取或存儲(chǔ),對數(shù)據(jù)進(jìn)行分析后完成彼此命令的交互并執(zhí)行相應(yīng)保護(hù)處理子程序。保護(hù)裝置中的雙口RAM采用美國IDT公司開發(fā)研制的IDT70V24來構(gòu)成。IDT70V24是3.3V高速4K×16bits的雙口靜態(tài)RAM,最快存取時(shí)間可達(dá)15ns,可與大多數(shù)高速處理器配合使用,在讀、存數(shù)據(jù)時(shí)不用插入等待狀態(tài)。雙CPU通信電路如圖2所示。
        1.3其他模塊的設(shè)計(jì)
        除了核心控制模塊外,裝置中還必須帶有模擬量采集模塊、開關(guān)輸入輸出模塊、通信及總線模塊以及人機(jī)接口模塊。模擬量采集模塊的組成部分為濾波電路、采樣保持電路、A/D轉(zhuǎn)換模塊、過零檢測等單元回路組成。對于分布式的變電站自動(dòng)化系統(tǒng),聯(lián)系各智能裝置的計(jì)算機(jī)通信網(wǎng)絡(luò)是整個(gè)系統(tǒng)的關(guān)鍵。因此,除了一般的保護(hù)硬件模塊以外,本裝置還設(shè)計(jì)了RS232和RS485以及CAN通信接口。這些通信接口的引入,可以滿足新的通信技術(shù)和網(wǎng)絡(luò)技術(shù)在電力系統(tǒng)及微機(jī)保護(hù)應(yīng)用中的要求,便于實(shí)行變電站綜合自動(dòng)化管理。其中RS232接口和上位機(jī)相連,主要用于調(diào)試和下載程序,而RS485接口可用作GPS對時(shí)接口和聯(lián)網(wǎng)通信接口。DSP與RS485的通信接口電路如圖3所示。
        2相關(guān)軟件設(shè)計(jì)
        2.1程序結(jié)構(gòu)
        整個(gè)保護(hù)程序包括主程序和定時(shí)中斷程序兩部分。主程序完成整個(gè)保護(hù)裝置的基本功能,包括保護(hù)裝置的初始化、自檢、數(shù)值處理、故障判斷、出口動(dòng)作等模塊;中斷服務(wù)子程序包括定時(shí)采樣A/D轉(zhuǎn)換、電氣量計(jì)算、相關(guān)數(shù)據(jù)記錄、鍵盤中斷及串行通信中斷等模塊。主程序和中斷程序結(jié)構(gòu)如下:
        2.2開發(fā)環(huán)境
        由于裝置采用雙CPU結(jié)構(gòu),根據(jù)兩塊CPU各自完成的功能,可將軟件設(shè)計(jì)成兩大部分,分別用來完成保護(hù)CPU的保護(hù)工作和監(jiān)控CPU的監(jiān)控與通信工作。為了方便程序的維護(hù),及其在硬件平臺(tái)的相互移植,因此本裝置中對保護(hù)CPU的程序采用匯編語言編寫,而監(jiān)控CPU的相關(guān)程序則使用C語言編寫。
        TMS320C6203B系列DSP的開發(fā)環(huán)境與一般微處理器的開發(fā)環(huán)境類似,其特點(diǎn)是包括C優(yōu)化編譯器、編程接口界面友好、具有產(chǎn)生代碼能力的C/匯編語言源調(diào)試器、軟件仿真器、實(shí)時(shí)硬件仿真器、擁有實(shí)時(shí)操作系統(tǒng)以及大量的應(yīng)用軟件。整個(gè)DSP程序可以選擇在CCS2.0(即Code Composer Studio(代碼調(diào)試器)2.0)集成環(huán)境下設(shè)計(jì)。CCS2.0提供了強(qiáng)大的仿真功能,可支持多種控制模式,同時(shí)支持匯編和C語言的調(diào)試。
        3結(jié)語
        在電力系統(tǒng)中,微機(jī)繼電保護(hù)的設(shè)計(jì)逐漸順應(yīng)著計(jì)算機(jī)化、網(wǎng)絡(luò)化,集保護(hù)、控制、測量、數(shù)據(jù)通訊與一體和人工智能化的發(fā)展趨勢。本保護(hù)裝置軟硬件均采用模塊化設(shè)計(jì),結(jié)構(gòu)清晰,并且具有靈活的通信功能,可直接與PC機(jī)進(jìn)行RS232串行通信。可以看出采用DSP的雙CPU模式的微機(jī)繼電保護(hù)裝置,能充分利用DSP高速處理數(shù)據(jù)的能力,同時(shí)也能突顯出處理外部中斷及對外設(shè)部件的控制能力。裝置配置了高速RS485總線和CAN現(xiàn)場總線,在規(guī)定一定的通信協(xié)議后,便于實(shí)行變電站綜合自動(dòng)化管理。
]]>
基于GIO/FVID的DSP視頻驅(qū)動(dòng)程序http://www.martymets.com/bbs/dispbbs.asp?BoardID=29&ID=1640&Page=1wangxinxin2010-11-22 14:40:09摘要: 以基于TI公司TMS320F2812 DSP的視頻處理系統(tǒng)為例,在DSP/BIOS的基礎(chǔ)上設(shè)計(jì)GTO/FVID模型的視頻設(shè)備底層驅(qū)動(dòng)程序,為高層應(yīng)用程序開發(fā)人員提供方便的API接口函數(shù)來操作底層視頻設(shè)備,提高了視頻處理系統(tǒng)的開發(fā)效率。所闡述的視頻設(shè)備驅(qū)動(dòng)程序開發(fā)方法,對同類視頻處理平臺(tái)具有較好的可借鑒性。

  關(guān)鍵詞 視頻設(shè)備驅(qū)動(dòng)程序 TMS320F2812 DSP/BI0S GIO/FVID模型

  引言

  隨著時(shí)代的發(fā)展,DSP技術(shù)在遠(yuǎn)程監(jiān)控、可視電話、工業(yè)檢測等視頻處理領(lǐng)域得到了廣泛的應(yīng)用,對于不同的視頻處理系統(tǒng),會(huì)使用不同的視頻設(shè)備,所以有必要為視頻沒備設(shè)計(jì)驅(qū)動(dòng)程序,為高層應(yīng)用程序提供統(tǒng)一的接口來操作底層硬件。只要是遵循此驅(qū)動(dòng)程序接口標(biāo)準(zhǔn)開發(fā)的高層應(yīng)用程序,都可以在具有相同接口的不同硬件平臺(tái)上運(yùn)行,具有很好的通用性和可移植性。同時(shí)高層應(yīng)用程序設(shè)計(jì)人員只要會(huì)使用設(shè)備驅(qū)動(dòng)程序提供的API接口,就不必了解底層硬件的具體實(shí)現(xiàn),可以大大提高整個(gè)視頻系統(tǒng)的開發(fā)效率。

  對于視頻設(shè)備,TI公司也提出了對應(yīng)的視頻設(shè)備驅(qū)動(dòng)程序模型,但這些模型主要是針對6000系列高端DSP,甚至是DM64X這樣的視頻處理專用DSP設(shè)計(jì)的。而TMS320F2812(簡稱F2812)DSP這樣的低端處理器,內(nèi)部存儲(chǔ)空間較小,且沒有DM64X那樣專用的視頻接口。本文針對這類問題,提出了對TI視頻驅(qū)動(dòng)模型進(jìn)行簡化和改造的方法,使視頻設(shè)備驅(qū)動(dòng)程序占用盡量少的系統(tǒng)資源,來完成對視頻硬件設(shè)備的操作。這種視頻驅(qū)動(dòng)模型的裁減方法,對于使用低端處理器的視頻處理系統(tǒng)具有借可鑒性。

  1、基于DSP/BIOS的外設(shè)驅(qū)動(dòng)開發(fā)模型

  TI公司為開發(fā)DsP的外設(shè)驅(qū)動(dòng)程序,推出了DSP/BIOS Device Driver kit,定義了標(biāo)準(zhǔn)的設(shè)備驅(qū)動(dòng)模型,并提供了一系列的API接口。如圖1所示,外設(shè)驅(qū)動(dòng)程序分為兩層:

  ①類驅(qū)動(dòng)(class driver)。類驅(qū)動(dòng)程序用來為應(yīng)用程序提供接口。這部分程序與設(shè)備無關(guān),主要功能包括維護(hù)設(shè)備數(shù)據(jù)緩沖區(qū),向上提供API接口供應(yīng)用層程序調(diào)用,并協(xié)調(diào)應(yīng)用程序?qū)ν庠O(shè)操作的同步和阻塞;向下提供適配層與迷你驅(qū)動(dòng)層相連,實(shí)現(xiàn)API接口函數(shù)到迷你驅(qū)動(dòng)層程序的映射。類驅(qū)動(dòng)程序與硬件無關(guān),只要外設(shè)驅(qū)動(dòng)模型選定了,類驅(qū)動(dòng)程序就定下來了,不需要做多少修改。

  ②迷你驅(qū)動(dòng)(mini driver)。迷你驅(qū)動(dòng)程序與設(shè)備相關(guān),所以設(shè)計(jì)迷你驅(qū)動(dòng)程序是外設(shè)驅(qū)動(dòng)開發(fā)中的重點(diǎn)。迷你驅(qū)動(dòng)程序與類驅(qū)動(dòng)層的接口格式是統(tǒng)一的,但迷你驅(qū)動(dòng)程序?qū)Φ讓佑布牟僮魇歉鶕?jù)硬件平臺(tái)的不同而變化的。迷你驅(qū)動(dòng)接收類驅(qū)動(dòng)層發(fā)出的IOM_Packet命令包,決定對底層硬件進(jìn)行什么樣的操作。

  外設(shè)驅(qū)動(dòng)程序模型又可以分為以下3類:

  ①PIP/PI0模型。基于數(shù)據(jù)管道的I/O模型,每個(gè)管道都在維護(hù)自己的一個(gè)緩沖區(qū)。當(dāng)數(shù)據(jù)寫入緩沖區(qū),或從緩沖區(qū)取出數(shù)據(jù)時(shí),便會(huì)激發(fā)notifyReader和notifyWriter函數(shù)實(shí)現(xiàn)數(shù)據(jù)的同步。

  ②SIO/DIO模型。基于數(shù)據(jù)流的I/O模型,一個(gè)數(shù)據(jù)流是單向的,要么是輸入,要么是輸出,而且SIO/DIO模瓔使用異步方式來操作I/0,對于數(shù)據(jù)的讀寫、處理可以同時(shí)進(jìn)行。

  ③GI0模型。通用的I/O模型,靈活性很強(qiáng),且沒有適配層,直接操作迷你驅(qū)動(dòng)程序,主要用來設(shè)計(jì)新型的設(shè)備驅(qū)動(dòng)模型。

w

點(diǎn)擊此處查看全部新聞圖片

  2、視頻處理系統(tǒng)硬件平臺(tái)

  硬件平臺(tái)如圖2所示。系統(tǒng)以TI公司的F2812 DSP作為中心處理器,以模擬攝像機(jī)進(jìn)行視頻信號(hào)采集,再使用SAA7111視頻解碼芯片將其轉(zhuǎn)換為BT601格式的數(shù)字視頻信號(hào)。DSP將數(shù)字視頻信號(hào)處理后,再寫入輸出幀緩存AL422中,并控制視頻編碼芯片ADV7177,將其轉(zhuǎn)換為模擬電視信號(hào)輸出。整個(gè)系統(tǒng)以l片CPLD——IspMachLC4128來協(xié)調(diào)各個(gè)芯片之間的時(shí)序關(guān)系。

]]>
基于DSP和FPGA的實(shí)時(shí)圖像壓縮系統(tǒng)設(shè)計(jì)http://www.martymets.com/bbs/dispbbs.asp?BoardID=29&ID=1639&Page=1wangxinxin2010-11-22 14:38:001 系統(tǒng)工作原理及硬件設(shè)計(jì)
    系統(tǒng)由Camera Link接口模塊、以FPGA為核心的圖像采集預(yù)處理與傳輸單元、以DSP為核心的圖像壓縮單元以及RS422遠(yuǎn)距離數(shù)據(jù)傳輸單元組成。由于采集、處理均需要訪問存儲(chǔ)器,為了降低成本,采用普通的異步SRAM,按功能區(qū)分可分為采集SRAM和壓縮處理SRAM。讀寫邏輯由FPGA控制,采用乒乓機(jī)制進(jìn)行切換。整個(gè)系統(tǒng)結(jié)構(gòu)如圖1所示。

圖片點(diǎn)擊可在新窗口打開查看

    系統(tǒng)工作過程:圖像信號(hào)經(jīng)由LVDS轉(zhuǎn)換芯片后轉(zhuǎn)換成LVTTL信號(hào),直接傳送至FPGA解碼為8位數(shù)據(jù),以字節(jié)方式一行一行寫入SRAM靜態(tài)存儲(chǔ)器(存儲(chǔ)器由兩部分組成),用于乒乓緩存輸入數(shù)據(jù),每部分滿1幀后由FPGA控制送出幀中斷給DSP,DSP啟動(dòng)EDMA讀入1幀數(shù)據(jù),采用JPEG2000方式編碼后連續(xù)寫入到FIFO_OUT,F(xiàn)PGA負(fù)責(zé)從FIFO_OUT讀出數(shù)據(jù),非空即讀,緩存積累不會(huì)超過1幀數(shù)據(jù)。讀出的數(shù)據(jù)另行打包后以9 Mb/s的碼率通過DS26LV31 422接口芯片從out1接口輸出,或者分流后從out1和out2以各4.5 Mb/s的碼率輸出。
2 FPGA功能模塊設(shè)計(jì)
2.1 Camera Link接口模塊

    Camera Link接口模塊負(fù)責(zé)對高頻幀數(shù)字?jǐn)z像頭輸出的LVDS信號(hào)轉(zhuǎn)換為TTL標(biāo)準(zhǔn)信號(hào)。
    關(guān)于Camera Link的采集數(shù)據(jù)的邏輯代碼,關(guān)鍵之處在于產(chǎn)生存儲(chǔ)器的地址信號(hào)、存儲(chǔ)器寫信號(hào)以及在對應(yīng)的地址處將數(shù)據(jù)穩(wěn)定地寫進(jìn)存儲(chǔ)器。本系統(tǒng)用像素時(shí)鐘產(chǎn)生列地址計(jì)數(shù)器、行同步信號(hào)產(chǎn)生行地址計(jì)數(shù)器,兩者拼接產(chǎn)生存儲(chǔ)器的地址信號(hào)。這樣產(chǎn)生的有效地址雖然不連續(xù),但意義明確,而且有利于顯示部分的隔行隔列顯示。對于8 bit的數(shù)據(jù),可將2個(gè)有效數(shù)據(jù)拼接成16 bit后再存儲(chǔ),這樣可以提高FPGA讀寫存儲(chǔ)器的速度。
    Camera Link接口時(shí)序如圖2所示。

圖片點(diǎn)擊可在新窗口打開查看

    圖2中:VD為幀同步信號(hào),電平模式,高電平有效;HD為行同步信號(hào),脈沖模式,上升沿有效;PCLK為像素同步時(shí)鐘,脈沖模式;DATA為10 bit圖像數(shù)據(jù),在PCLK的下降沿推出,接收端在PCLK上升沿采集,PCLK為常運(yùn)行模式。每個(gè)VD有效期內(nèi)有480個(gè)HD有效信號(hào),在第0~478個(gè)HD有效時(shí),每個(gè)HD有效期間有600個(gè)有效圖像數(shù)據(jù),第479個(gè)HD(即每幀的最后1行)有效時(shí),前600個(gè)DATA為有效圖像數(shù)據(jù),600個(gè)DATA后預(yù)留6個(gè)字節(jié)輸出圖像相關(guān)信息,即第D600~D605為預(yù)留字節(jié)。
2.2 SRAM乒乓緩存
    在圖像采集處理系統(tǒng)中,DSP的壓縮算法在實(shí)現(xiàn)時(shí)間上往往并不是固定不變的,然而前端的采集模塊卻使用均勻速度對圖像進(jìn)行采集,這樣存在時(shí)間上的不同步,有可能會(huì)導(dǎo)致圖像數(shù)據(jù)的丟失和影響幀數(shù)據(jù)的完整性[2]。為此,本系統(tǒng)在采集和壓縮模塊之間增加1個(gè)緩沖電路來解決這一問題。
    常用的緩沖電路主要有3種[3]:雙口RAM結(jié)構(gòu)、FIFO結(jié)構(gòu)和乒乓結(jié)構(gòu)。由于乒乓結(jié)構(gòu)可以使用相對比較便宜的高速大容量SRAM,而且可以實(shí)現(xiàn)數(shù)據(jù)的連續(xù)性,因此本系統(tǒng)采用了乒乓結(jié)構(gòu)雙SRAM作為視頻數(shù)據(jù)的緩沖。在將1幀圖像的數(shù)據(jù)全部存儲(chǔ)完以后,DSP再利用很短的時(shí)間直接將1幀圖像數(shù)據(jù)讀入片內(nèi),這樣既可以保證不丟失像素?cái)?shù)據(jù)、DSP可以連續(xù)采集每1幀像素?cái)?shù)據(jù),又能為DSP留出更多空余時(shí)間,為后面進(jìn)行圖像處理提供可能。為了實(shí)現(xiàn)數(shù)據(jù)幀的完整性,必須保證讀取數(shù)據(jù)幀的優(yōu)先級(jí)要高于寫數(shù)據(jù)幀的優(yōu)先級(jí),所以本系統(tǒng)的數(shù)據(jù)輸入輸出單元是根據(jù)數(shù)據(jù)處理流程來進(jìn)行切換的。

    乒乓控制模塊按照功能還分為:S0、S1、S2、S3 4個(gè)轉(zhuǎn)換狀態(tài)。其中,狀態(tài)S0為初始化狀態(tài)(所有信號(hào)都處于初始化狀態(tài)),系統(tǒng)加電或者復(fù)位后進(jìn)入此狀態(tài);在S1狀態(tài),主要負(fù)責(zé)對SRAM0的寫入,不可以對SRAM1進(jìn)行讀操作;在S2狀態(tài),主要負(fù)責(zé)對SRAM1進(jìn)行寫操作,對SRAM0進(jìn)行讀操作,當(dāng)SRAM1寫完后,如果SRAM0未讀完,則繼續(xù)處于狀態(tài)S2,如果SRAM0讀完,則進(jìn)入狀態(tài)S3;在S3狀態(tài),主要負(fù)責(zé)對SRAM0進(jìn)行寫操作,對SRAM1進(jìn)行讀操作,當(dāng)SRAM0寫完后,如果SRAM1未讀完,則繼續(xù)處于狀態(tài)S3,如果SRAM1讀完,則進(jìn)入狀態(tài)S2。乒乓控制模塊狀態(tài)轉(zhuǎn)換圖如圖3所示。

圖片點(diǎn)擊可在新窗口打開查看

    SRAM乒乓電路如圖4所示。圖中,wr_data為Camera Link接口接收到的只包含灰度信號(hào)的圖像數(shù)據(jù)。為了方便圖像數(shù)據(jù)的管理,每個(gè)像素、每行的像素都對應(yīng)到了SRAM的固定地址,所以wr_addr為該像素在SRAM中的地址,同時(shí)也可以表示該像素在一幅圖像中的位置。CHANNEL_SEL為讀SRAM的標(biāo)志位,0代表SRAM0,1代表SRAM1。

圖片點(diǎn)擊可在新窗口打開查看

2.3 FIFO緩存模塊和RS422傳輸模塊
    由于DSP向RS422模塊傳輸數(shù)據(jù)并不是勻速傳輸,而且傳輸速度比RS422的傳輸速度快很多倍,所以必須采用FIFO模塊。
3 DSP程序設(shè)計(jì)
    TI公司的TMS320DM642芯片是一款高性能視頻處理器,其主頻可以高達(dá)600 MHz,數(shù)字處理能力可以達(dá)到4 800 MI/ps[3]。
    DSP工作流程圖如圖5所示,DSP在相關(guān)外設(shè)與EDMA相關(guān)寄存器初始化完成后,才開始響應(yīng)中斷事件觸發(fā)EDMA傳輸,在本系統(tǒng)中由EXITUINT4中斷上升沿觸發(fā)EDMA進(jìn)行傳輸。在接收到FPGA發(fā)送的中斷信號(hào)后,開始進(jìn)行EDMA傳輸,整個(gè)EDMA傳輸?shù)倪^程需要10 ms左右,傳輸完成后觸發(fā)EDMA中斷,在中斷服務(wù)函數(shù)中觸發(fā)1個(gè)軟中斷,在軟中斷服務(wù)函數(shù)中進(jìn)行圖像數(shù)據(jù)的壓縮。

圖片點(diǎn)擊可在新窗口打開查看

3.1 EDMA乒乓程序設(shè)計(jì)
    在整個(gè)DSP的工作流程中,要實(shí)現(xiàn)圖像數(shù)據(jù)采集、壓縮、傳輸同時(shí)進(jìn)行,則在DSP程序中需要1個(gè)雙緩沖buffer,在向buf1中采集圖像信號(hào)的時(shí)候,DSP可以對buf2中的數(shù)據(jù)進(jìn)行壓縮,而在對buf2中進(jìn)行采集的時(shí)候,DSP可以對buf1中的數(shù)據(jù)進(jìn)行壓縮。

   實(shí)現(xiàn)這個(gè)功能的方法是采用EDMA ping_pong方式。在DSP中使用hEdmaPing和hEdmaPong雙通道EDMA并建立PingBuffer和PongBuffer兩個(gè)數(shù)據(jù)存儲(chǔ)區(qū)。 當(dāng)寫完1幀圖像后,F(xiàn)PGA發(fā)送EXTINT4中斷信號(hào)啟動(dòng)hEdmaPing將數(shù)據(jù)搬移到PingBuffer,同時(shí)將通道鏈接至hEdmaPong。在下一個(gè)中斷事件發(fā)生時(shí)將數(shù)據(jù)搬移到PongBuffer中,CPU在hEdmaPong通道完成中斷服務(wù)程序中鏈接hEdmaPing通道。如此往復(fù),使系統(tǒng)數(shù)據(jù)搬移和處理連續(xù)進(jìn)行。
3.2 DSP/BIOS調(diào)度程序設(shè)計(jì)
    僅僅采用EDMA乒乓方式進(jìn)行EDMA數(shù)據(jù)傳輸還是不夠的,不能實(shí)現(xiàn)數(shù)據(jù)的采集和壓縮同時(shí)進(jìn)行,還需要DSP/BIOS調(diào)度程序。在任務(wù)、硬件中斷、軟件中斷中進(jìn)行調(diào)度,在軟中斷服務(wù)函數(shù)中進(jìn)行圖像壓縮任務(wù)。
    DSP/BIOS是TI公司所設(shè)計(jì)開發(fā)的、尺寸可裁剪的實(shí)時(shí)多任務(wù)操作系統(tǒng)內(nèi)核,通過使用DSP/BIOS提供的豐富的內(nèi)核服務(wù),開發(fā)者能快速地創(chuàng)建滿足實(shí)時(shí)性能要求的精細(xì)復(fù)雜的多任務(wù)應(yīng)用程序。
    DSP/BIOS程序編寫過程如下:
    (1)在DSP/BIOS配置面板中添加1個(gè)軟中斷jpeg_swi,并將該軟中斷的服務(wù)函數(shù)設(shè)置為jpeg。
    (2)添加軟中斷服務(wù)函數(shù)jpeg();代碼如下:
    void jpeg(void)
    {
      Uint32 i;
      if(pingpong)
      bitstream_length=my_jpegenc->fxns->encode(my_jpegenc,(XDAS_Int8**)buf0,output_bitstream_buffer);
      else
      bitstream_length=my_jpegenc->fxns->encode(my_jpegenc,(XDAS_Int8 **)buf1,output_bitstream_buffer);
      submit_qdma();
          while(!(EDMA_getPriQStatus()&EDMA_OPT_PRI_HIGH));
    }
    (3)在EDMA中斷服務(wù)函數(shù)中添加如下代碼:
    SWI_post(&jpeg_swi);
    該函數(shù)的作用是觸發(fā)jpeg_swi軟中斷。
4 系統(tǒng)關(guān)鍵技術(shù)
4.1 時(shí)鐘

    在使用內(nèi)部生成的時(shí)鐘過程中,可能引起設(shè)計(jì)上的功能和時(shí)限問題。組合邏輯產(chǎn)生的時(shí)鐘會(huì)引入毛刺,造成功能問題,而引入的延遲則可能會(huì)導(dǎo)致時(shí)限問題。
    本設(shè)計(jì)中用到很多全局時(shí)鐘的整數(shù)倍分頻,且由于分頻的整數(shù)倍較大,如果利用FPGA中自帶的DCM模塊很難實(shí)現(xiàn)這樣的功能。因此,采用同步計(jì)數(shù)器的分頻方法,并且在各個(gè)時(shí)鐘信號(hào)輸出之前,再加一級(jí)寄存器輸出,這樣的操作就避免了組合邏輯生成的毛刺被阻擋在寄存器的數(shù)據(jù)輸入端口上。
4.2 DSP與FPGA數(shù)據(jù)交換
    由于壓縮算法采用MECOSO公司的JPEG壓縮算法,經(jīng)過優(yōu)化和處理后,壓縮1幅圖像僅需要4 ms。所以影響整個(gè)系統(tǒng)能否實(shí)現(xiàn)高頻幀的關(guān)鍵技術(shù)是EDMA向SDRAM中搬移數(shù)據(jù)的速度,在本設(shè)計(jì)中設(shè)幀圖像的大小為600×480=288 KB,傳輸1幅圖像所需的時(shí)間需要10 ms。影響其速度主要有2個(gè)因素:EMIF所使用的ECLOCK和EMIF相關(guān)設(shè)置的寄存器。
    在本系統(tǒng)中,ECLOCK采用了DSP的CPU4分頻,使EMIF的CLOCK工作在150 MHz,大大提高了搬移速度。由于SRAM映射在DSP的CE2空間,考慮到讀取數(shù)據(jù)需要建立(setup)、選通(Strobe)和保持(Hold)3個(gè)步驟,故將CE2相關(guān)寄存器的建立時(shí)間和選通時(shí)間選擇為1個(gè)clk,經(jīng)Hold時(shí)間設(shè)置為0。這樣設(shè)置后EMIF總線的數(shù)據(jù)吞吐量為:
     圖片點(diǎn)擊可在新窗口打開查看
    本文設(shè)計(jì)的圖像壓縮系統(tǒng)實(shí)現(xiàn)了分辨率為600×480、幀頻率為100幀/s的視頻信號(hào)輸入的圖像采集,并能夠進(jìn)行實(shí)時(shí)的JPEG壓縮。系統(tǒng)采用DSP+FPGA的方案,雖然是一種較常用的組織方式,但在該系統(tǒng)中解決了一些關(guān)鍵的問題,大大提高了圖像壓縮速度及系統(tǒng)的靈活性。本系統(tǒng)已經(jīng)應(yīng)用于航天領(lǐng)域某監(jiān)測系統(tǒng),效果良好,運(yùn)行穩(wěn)定。

]]>
TMS320VC55X系列DSP的FLASH引導(dǎo)方法http://www.martymets.com/bbs/dispbbs.asp?BoardID=29&ID=1638&Page=1wangxinxin2010-11-22 14:36:22
以下內(nèi)容含腳本,或可能導(dǎo)致頁面不正常的代碼
說明:上面顯示的是代碼內(nèi)容。您可以先檢查過代碼沒問題,或修改之后再運(yùn)行.
]]>
大容量無線傳輸技術(shù)中高性能DSP的啟動(dòng)方法http://www.martymets.com/bbs/dispbbs.asp?BoardID=29&ID=1637&Page=1wangxinxin2010-11-22 14:35:36摘要:大容量無線傳輸技術(shù)的實(shí)現(xiàn)依賴高性能數(shù)字信號(hào)處理器(DSP)。大多數(shù)C6000 系列 DSP 采用ROM (FLASH) 啟動(dòng)方式。采用ROM 啟動(dòng)方式時(shí),C6000 系列DSP 在上電后會(huì)自動(dòng)拷 貝存儲(chǔ)于FLASH 中的1K 字節(jié)代碼到內(nèi)存中。然而DSP 的程序往往大于1K 字節(jié),這時(shí)就需設(shè) 計(jì)一個(gè)二級(jí)bootloader 來輔助完成程序的加載。本文設(shè)計(jì)并實(shí)現(xiàn)了一種C6000 系列DSP 的 啟動(dòng)方法,重點(diǎn)研究了二級(jí)bootloader 的設(shè)計(jì),如何將程序編譯生成的目標(biāo)文件轉(zhuǎn)換成基 于FLASH 格式的文件,以及如何將基于FLASH 格式文件燒寫入FLASH。實(shí)踐證明,該方法性 能穩(wěn)定,可移植性好,具有較大的工程應(yīng)用價(jià)值。

1 引言

在極低譜密度,高頻譜利用率的大容量無線傳輸技術(shù)中,高速實(shí)時(shí)信號(hào)處理成為技術(shù)的 關(guān)鍵。目前市場上,能滿足對高速實(shí)時(shí)信號(hào)處理的需要有具有良好的可編程性的器件主要有 DSP 和FPGA。

TMS320C6000 系列DSP 是TI 公司推出的一種高性能的數(shù)字信號(hào)處理器,包含定點(diǎn)和浮 點(diǎn)兩個(gè)系列,其中定點(diǎn)系列包括TMS320C62xx 和TMS320C64xx,浮點(diǎn)系列包括TMS320C67xx。 C6000 系列DSP 有三種啟動(dòng)方式:

(1) 主機(jī)啟動(dòng)

如果選擇主機(jī)啟動(dòng)模式,在復(fù)位信號(hào)結(jié)束后,DSP 的CPU 被內(nèi)部“阻塞”而其他部分都 被釋放。在此期間,一個(gè)外部的主機(jī)在必要時(shí)可以通過主機(jī)接口初始化CPU 的內(nèi)存空間,包 括配置與啟動(dòng)相關(guān)的內(nèi)部寄存器。一旦主機(jī)完成了所有必須的初始化,它必須將HPIC 寄存 器的DSPINT 位置“1”來完成啟動(dòng)過程。在程序加載完后,CPU 被從“阻塞”中喚醒,然后 從地址0 處執(zhí)行指令。在CPU 被喚醒后,CPU 需要將DSPINT 位清零[1]。

(2) ROM 啟動(dòng)

如果采用ROM 啟動(dòng)模式,則C6000 系列的DSP(C621x/C671x/C64x)復(fù)位后自動(dòng)從CE1 空間的起始處拷貝1K 字節(jié)的代碼到內(nèi)存空間。該拷貝過程由EDMA 完成,使用默認(rèn)的Rom 時(shí)鐘。在此過程中CPU 一直處于“阻塞”狀態(tài),直到拷貝完成后才被被喚醒,然后從地址0 處開始執(zhí)行程序[1]。

(3) 無啟動(dòng)

如果選擇無啟動(dòng)模式,CPU 復(fù)位后直接從地址0 處開始執(zhí)行指令。 C6000 系列DSP 的器件配置情況決定了選擇的啟動(dòng)方式。具體來說就是DSP 的啟動(dòng)模式 管腳(boot mode pins)接上拉還是下拉電阻。以C6416 為例,BEA[19:18]是啟動(dòng)模式管 腳,它們?nèi)〔煌闹担ㄉ侠娮璐怼?”,下拉電阻代表“0”)代表的含義如表1-1 所示:

如果DSP 的程序小于1K 字節(jié),那么上述ROM 啟動(dòng)機(jī)制已經(jīng)可以完成程序的加載。然而 事實(shí)上大部分DSP 的程序會(huì)大于1K 字節(jié),這時(shí)就需要?jiǎng)?chuàng)建一個(gè)特定啟動(dòng)程序來完成更多代 碼的加載。該特定啟動(dòng)程序又被稱作二級(jí)bootloader[2]。

在需要二級(jí)bootloader 的程序中,這段特定啟動(dòng)代碼通常駐留在ROM 存儲(chǔ)器的起始位 置以便在DSP 復(fù)位后能自動(dòng)被加載到內(nèi)存地址0 處。當(dāng)1K 字節(jié)代碼被加載完畢后,CPU 開 始從地址0 處執(zhí)行,也就是執(zhí)行二級(jí)bootloader 的內(nèi)容。二級(jí)bootloader 的功能就是將程 序的剩余部分拷貝到內(nèi)存中。

2 啟動(dòng)方法的設(shè)計(jì)與實(shí)現(xiàn)

采用二級(jí)bootloader 的DSP 啟動(dòng)方法的實(shí)現(xiàn)大體分為四步:配置存儲(chǔ)器;編寫 secondary bootloader 代碼;編譯程序,轉(zhuǎn)換目標(biāo)文件的格式;將程序燒寫進(jìn)FLASH。圖1 為實(shí)施該啟動(dòng)方法的硬件平臺(tái)示意圖,其中DSP 的型號(hào)選擇C6416,F(xiàn)LASH 的型號(hào)選擇 AM29LV800B。

2.1 配置存儲(chǔ)器

2.1.1 定義存儲(chǔ)器分區(qū)

為了實(shí)現(xiàn)使用二級(jí)bootloader 的ROM 啟動(dòng),需要將FLASH 劃分為FLASH_BOOT, FLASH_REST 兩個(gè)區(qū)。這兩個(gè)區(qū)分別存儲(chǔ)由on-chip bootloader 拷貝的程序段和由secondary bootloader 拷貝的程序段。對于BIOS 程序,Memory 段的定義在MEM(Memory Section Manager)對象里。對于非BIOS 程序,Memory 段定義在linker command file 中。一個(gè)C6416 的Memory 段定義的例子如下所示:

 

]]>
基于DSP和以太網(wǎng)的數(shù)據(jù)采集處理系統(tǒng)http://www.martymets.com/bbs/dispbbs.asp?BoardID=29&ID=1636&Page=1wangxinxin2010-11-22 14:34:20 

隨著測試技術(shù)的不斷發(fā)展,低功耗、高性能的DSP逐漸取代了通用單片機(jī)在數(shù)據(jù)采集處理系統(tǒng)中的地位;同時(shí),以太網(wǎng)技術(shù)也在數(shù)據(jù)采集、測試測量技術(shù)中發(fā)揮越來越大的作用。本文從軟件、硬件出發(fā),介紹一種基于DSP和以太網(wǎng)的數(shù)據(jù)采集處理系統(tǒng)的設(shè)計(jì)思想及實(shí)現(xiàn)。

    1  基于以太網(wǎng)的數(shù)據(jù)采集處理系統(tǒng)

    生產(chǎn)和科研領(lǐng)域?qū)y試的要求越來越高,所需測試和處理的數(shù)據(jù)量也越來越巨大,有時(shí)需要多個(gè)測試儀器同時(shí)進(jìn)行測試,各測試儀器之間又需要進(jìn)行數(shù)據(jù)交換;而且測試領(lǐng)域也越來越廣泛,有些現(xiàn)場不適合工作人員親臨,這時(shí)就需要通過網(wǎng)絡(luò)進(jìn)行控制。以太網(wǎng)技術(shù)在數(shù)據(jù)采集處理系統(tǒng)中的應(yīng)用如圖1所示。

    與工業(yè)現(xiàn)場應(yīng)用比較多的現(xiàn)場總線比較,以太網(wǎng)最大的特點(diǎn)是開發(fā)性好、成本低。通過把復(fù)雜的TCP/IP協(xié)議封裝而提供各種網(wǎng)絡(luò)測試技術(shù),使網(wǎng)絡(luò)測試的開發(fā)變得不再復(fù)雜。同時(shí),由于網(wǎng)絡(luò)測試帶來巨大效益,使網(wǎng)絡(luò)測試在測試自動(dòng)化領(lǐng)域得到廣泛應(yīng)用。以太網(wǎng)作為分布式測試的一個(gè)網(wǎng)絡(luò)方案,其潛力無疑是巨大的。

    圖1  數(shù)據(jù)采集處理系統(tǒng)中的以太網(wǎng)應(yīng)用

    以太網(wǎng)接口控制器和DSP微處理器的價(jià)格不斷下降,使得將以太網(wǎng)直接集成到基于DSP等嵌入式系統(tǒng)的測試、采集、工業(yè)I/O設(shè)備中成為越來越明顯的趨勢。基于以太網(wǎng)的I/O設(shè)備是將以太網(wǎng)接口直接嵌入到設(shè)備內(nèi)部,所以使得設(shè)備更簡潔,體積更小,安裝也更靈活。和一些目前應(yīng)用于工業(yè)的其它通信方案比較,以太網(wǎng)方式通常需要功能更強(qiáng)大的微處理器和更大的內(nèi)存。而網(wǎng)絡(luò)和計(jì)算機(jī)技術(shù)的發(fā)展,特別是DSP技術(shù)的應(yīng)用,可以大大降低這方面的成本。

    2  數(shù)據(jù)采集處理系統(tǒng)的硬件設(shè)計(jì)

    該系統(tǒng)以TI公司的TMS320C6000系列DSP中的TMS320C6211和10/100M自適應(yīng)以太網(wǎng)控制芯片MX98728EC為核心,主要包括ADC數(shù)據(jù)采集、DSP數(shù)據(jù)處理和以太網(wǎng)接口三個(gè)部分。圖2為數(shù)據(jù)采集處理系統(tǒng)框圖。

    2.1TMS320C6000DSP

    TMS320C6000是美國TI公司于1997年推出的新一代高性能DSP芯片。這種芯片是定點(diǎn)、浮點(diǎn)兼容的DSP。其定點(diǎn)系列是TMS32C62XX,浮點(diǎn)系列是TMS320C67XX。TMS320C6000片內(nèi)有8個(gè)并行的處理單元,分為相同的兩組,芯片的最高時(shí)鐘頻率可以達(dá)到300MHz。當(dāng)芯片仙部8個(gè)處理單元同時(shí)運(yùn)行時(shí),其最大處理能力可以達(dá)到2400MIPs。本數(shù)據(jù)采集處理系統(tǒng)采用TMS320C6211,其主要特別如下:

    相±

    ·每個(gè)周期8條32位指令

    ·8個(gè)高度獨(dú)立的功能單元,包括6個(gè)32/40位的運(yùn)算器和2個(gè)16位的乘法器(32bit結(jié)果)

    ·32個(gè)32位通用寄存器

    圖2  數(shù)據(jù)采集處理系統(tǒng)框圖

    ·靈活自由的數(shù)據(jù)/程序定位,L1/L2存儲(chǔ)器結(jié)果:4K字節(jié)L1P程序Cache、4K字節(jié)的L1D數(shù)據(jù)Cache、64K字節(jié)L2通用RAM/Cache

    ·32位外部存儲(chǔ)器接口(EMIF):對異步存儲(chǔ)器的無縫接口,如SRAM、EPROM;對同步存儲(chǔ)器的無縫接口,如SDRAM、SBSRAM;共512M字節(jié)外部存儲(chǔ)器可尋址空間

    ·增強(qiáng)的DMA(EDMA控制):16個(gè)獨(dú)立通道

    ·兩個(gè)32位通用定時(shí)器

    ·支持JTAG邊界掃描標(biāo)準(zhǔn),調(diào)試時(shí)可以方便可靠地控制DSP上面的所有資源

    2.2以太網(wǎng)控制器MX98728EC

    MX98728EC是一個(gè)通用的單片10/100M快速以太網(wǎng)控制器,通過它的主機(jī)總線接口,可以實(shí)現(xiàn)各種各樣的應(yīng)用,而不需要或者只需極少的外部控制邏輯。單片機(jī)的解決方案可以減小電路板的尺寸,減少板上芯片的數(shù)量,以降低系統(tǒng)的成本。MX98728EC的特點(diǎn)如下:

    ·32位通用異步總線結(jié)構(gòu),支持頻率最高達(dá)33MHz

    ·單片解決方案,集成了10/100MTP收發(fā)器

    ·可選的外部收發(fā)器MII接口

    ·完全兼容IEEE802.3u協(xié)議

    ·支持16/8bit打包緩沖數(shù)據(jù)寬度和32/16bit主機(jī)總線數(shù)據(jù)寬度

    ·分離的TX和RXFIFO,支持全雙工模式,獨(dú)立的TX和RX通道

    ·豐富的片上寄存器,支持各種各樣的網(wǎng)絡(luò)管理功能

    ·支持16/8bit的用于打包緩沖器的SRAM接口、支持片上FIFO的突發(fā)DMA模式

    ·自動(dòng)設(shè)置網(wǎng)絡(luò)速度和協(xié)議的NWAY功能

    ·可選的EEPROM設(shè)置,支持1kbit和4kbit的EEPROM接口

    ·支持軟件EEPROM接口,方便升級(jí)EEPROM的內(nèi)容

    圖3  DSP和以太網(wǎng)接口部分硬件設(shè)計(jì)

    2.3系統(tǒng)結(jié)構(gòu)

    2.3.1ADC數(shù)據(jù)采集部分

    CPLD1由DSP提供時(shí)鐘信號(hào),主要作用是提供掃描表SRAM的地址,掃描表SRAM的數(shù)據(jù)由DSP寫入。掃描表輸出的數(shù)據(jù)用來設(shè)定A/D轉(zhuǎn)換的通道和儀表放大器的增益。ADC采用14位的LTC1416。32路模擬信號(hào)通過多路復(fù)用器后,其中一路信號(hào)被選中,進(jìn)入儀表放大器,放大之后進(jìn)入ADC。ADC的轉(zhuǎn)換時(shí)鐘由DSP的定時(shí)器提供。

    2.3.2DSP數(shù)據(jù)處理部分

    ADC轉(zhuǎn)換后的14位數(shù)據(jù)通過FIFO進(jìn)入DSP進(jìn)行處理,F(xiàn)IFO采用4片CY7C425形成乒乓結(jié)構(gòu),以實(shí)現(xiàn)模擬信號(hào)的不間斷采樣。DSP擴(kuò)展一片F(xiàn)lashMemory作為DSP的程序存儲(chǔ)器,另外還擴(kuò)展了一片SRAM作為程序緩存。脫機(jī)運(yùn)行時(shí),DSP將Flash中的程序?qū)懭隨RAM,再寫入DSP內(nèi)部RAM。CPLD2主要用于控制FIFO的讀寫,并且提供以太網(wǎng)接口部分的控制信號(hào)。DSP系統(tǒng)中的數(shù)字信號(hào)處理算法主要實(shí)現(xiàn)濾波、采樣率變換、非線性修正、溫漂修正等。

    2.3.3以太網(wǎng)接口部分

    以太網(wǎng)主控芯片MX98728EC通過RJ45接口連接以太網(wǎng),擴(kuò)展一片SRAM作為以太網(wǎng)數(shù)據(jù)收發(fā)存儲(chǔ)器,另外又?jǐn)U展一片EEPROM以存儲(chǔ)以太網(wǎng)卡的MAC地址、IO基地址、中斷線選擇等配置寄存器的初始化數(shù)據(jù)。CPLD3通過DSP高位地址線的譯碼控制以太網(wǎng)芯片的片選并提供以太網(wǎng)接口部分的復(fù)位信號(hào)等。DSP和以太網(wǎng)的接口部分硬件如圖3所示。

    3  數(shù)據(jù)采集處理系統(tǒng)的軟件設(shè)計(jì)

    軟件編程時(shí)應(yīng)該充分利用硬件資源及開發(fā)工具,使代碼達(dá)到所期望的性能,并且在DSP嵌入式系統(tǒng)的基礎(chǔ)上集成已經(jīng)封裝的TCP/IP協(xié)議棧,增加網(wǎng)絡(luò)連接代碼。由于DSP系統(tǒng)硬件以及以太網(wǎng)協(xié)議的復(fù)雜性,本系統(tǒng)中的軟件編程是一個(gè)難點(diǎn)。

    在本系統(tǒng)的軟件設(shè)計(jì)過程中,采用了TI公司的基于C6000系列DSP的實(shí)時(shí)操作系統(tǒng)DSP/BIOS以及DSP/BIOS提供的實(shí)時(shí)數(shù)據(jù)交換功能RTDX(Real-Time-Data-eXchange)。DSP/BIOS針對DSP的應(yīng)用環(huán)境,通過一系列的對象模塊向開發(fā)者提供了一個(gè)實(shí)用優(yōu)秀的實(shí)時(shí)操作系統(tǒng)。它可以壽命用戶提高軟件的模塊化程度、并行性和可維護(hù)性等,有利于降低系統(tǒng)成本和縮短開發(fā)周期,運(yùn)行于該操作系統(tǒng)之上的應(yīng)用程序在開發(fā)時(shí)間、軟件維護(hù)、升級(jí)等方面都有了極大的提高。實(shí)時(shí)數(shù)據(jù)交換功能是DSP/BIOS提供的一個(gè)全新的功能。在很多應(yīng)用中要求DSP不停下來,而需要從主機(jī)中實(shí)時(shí)地讀取數(shù)據(jù)或者向主機(jī)實(shí)時(shí)地輸出數(shù)據(jù)。

    因?yàn)楸鞠到y(tǒng)的軟件結(jié)構(gòu)較為復(fù)雜,涉及的算法較多,故應(yīng)采用模塊化、由頂向下、逐步細(xì)化的結(jié)構(gòu)化程序設(shè)計(jì)方法。這一方法可節(jié)省軟件工作量、提高工作效率。圖4為簡化的數(shù)據(jù)采集處理程序流程圖。

    實(shí)踐證明,根據(jù)以上方案設(shè)計(jì)基于DSP和以太網(wǎng)的數(shù)據(jù)采集處理系統(tǒng),可以很好地實(shí)現(xiàn)對模擬信號(hào)的采集和處理。在此基礎(chǔ)上,也可以將其作為其于DSP和以太網(wǎng)的網(wǎng)絡(luò)測試平臺(tái)開發(fā)過程中的調(diào)試工具,從而加速把以太網(wǎng)集成到測試、采集和工業(yè)I/O儀器中的開發(fā)進(jìn)程。(T002)

]]>
基于PCI總線的DSP系統(tǒng)可執(zhí)行文件在線實(shí)時(shí)下載技術(shù)http://www.martymets.com/bbs/dispbbs.asp?BoardID=29&ID=1635&Page=1wangxinxin2010-11-22 14:32:53引 言

從主機(jī)向DSP下載可執(zhí)行文件的常用方式有:(1)利用仿真器,通過USB總線和JTAG端口,把可執(zhí)行文件從主機(jī)下載進(jìn)DSP。這種方式適用于軟件研制階段。(2)利用燒寫器,把可執(zhí)行文件燒寫進(jìn)硬件電路板上的Flash芯片中。DSP上電復(fù)位之后,將固化在Flash芯片中的代碼讀入DSP的片上RAM或片外RAM映射成的存儲(chǔ)區(qū)域里。這種方式適用于軟件調(diào)試結(jié)束、需要將其固化在電路板上的階段。固化之后,整個(gè)系統(tǒng)可以脫離主機(jī)運(yùn)行。

在軟件無線電系統(tǒng)的實(shí)際應(yīng)用過程中,還需要這樣一種下載方式:從主機(jī)直接向DSP下載可執(zhí)行文件并且啟動(dòng)程序運(yùn)行。這些可執(zhí)行文件是已經(jīng)經(jīng)過調(diào)試、滿足要求的功能模塊。主機(jī)將它們分別實(shí)時(shí)下載并啟動(dòng)運(yùn)行,能夠迅速地切換整個(gè)軟件無線電系統(tǒng)的業(yè)務(wù)模式,使系統(tǒng)迅速地滿足不同場合的要求,從而把系統(tǒng)面向廣大用戶的通用性與面向特定用戶的專用性很好地結(jié)合起來。

1 以DSP為核心的軟件無線電硬件平臺(tái)簡介

圖1是本文實(shí)例的硬件平臺(tái)框圖。A/D的工作方式由FPGA控制,外界模擬信號(hào)通過A/D采樣,進(jìn)入雙口RAM,DSP從雙口RAM里讀取采樣數(shù)據(jù)。DSP芯片采用TI公司推出的TMS320C6000系列中的C6701,它通過EMIF與SDRAM和SBRAM芯片相連。PCI芯片AMCCS5933在主機(jī)和DSP之間起橋梁作用,它使得主機(jī)可以通過PCI總線訪問DSP的所有存儲(chǔ)空間,DSP也可以通過PCI總線向主機(jī)發(fā)送信息。

圖片點(diǎn)擊可在新窗口打開查看

2 從主機(jī)通過PCI總線向DSP下載可執(zhí)行文件

2.1 實(shí)現(xiàn)流程

圖2顯示了下載可執(zhí)行文件的整個(gè)流程。

圖片點(diǎn)擊可在新窗口打開查看

2.2 文件格式轉(zhuǎn)換

開發(fā)運(yùn)行在TMS32C6000系列DSP上的程序時(shí),通常都使用TI公司推出的集成開發(fā)環(huán)境CCS。編譯通過之后,會(huì)生成一個(gè)可執(zhí)行文件*.out。下載到DSP中的就是該*.out文件里的代碼。

以文件loadProgTest.out為例,闡述文件格式的轉(zhuǎn)換過程:

首先把loadProgTest.out文件轉(zhuǎn)換成十六進(jìn)制格式的文件,編寫一個(gè)名為loadProgTest.cmd的文件,內(nèi)容如下:

各條語句的含義如下:

圖片點(diǎn)擊可在新窗口打開查看

第1行是out文件名;第2行表示輸出ASCII的十六進(jìn)制格式;第3行指明轉(zhuǎn)換后的十六進(jìn)制文件為image模式;第4行表示生成名為loadProgTest.mxp的文件,可以從該文件中看到各段所占的存儲(chǔ)單元;第5行和第6行分別指明memory和ROM的寬度;第7行指明little-endian方式(如果需要使用big-endian方式,把L改為M即可)。

可執(zhí)行文件中的代碼從組織形式上分成若干段,從內(nèi)容上則分為程序代碼和數(shù)據(jù)代碼。第10行表示在DSP的存儲(chǔ)區(qū)域中,為程序代碼開辟的空間是從地址0x00000000到0x0000ffff;程序代碼轉(zhuǎn)換成十六進(jìn)制格式之后,將被寫入loadProgTest.hex文件。第11行表示在DSP的存儲(chǔ)區(qū)域中,為數(shù)據(jù)代碼開辟的空間是從地址0x80000000到0x8000ffff;數(shù)據(jù)代碼轉(zhuǎn)換成十六進(jìn)制格式之后,將被寫入loadProgTest.a10文件。

編寫好loadProgTest.cmd文件之后,從CCS安裝目錄下拷貝出一個(gè)名為hex6x.exe的應(yīng)用程序,把它和loadProgTest.out文件以及l(fā)oadProgTest.cmd文件放在同一個(gè)文件夾里。執(zhí)行命令行hex6x loadProgTest.cmd。

執(zhí)行完后,將生成3個(gè)文件:loadProgTest.mxp、loadProgTest.hex和loadProgTest.a10。

其次,把loadProgTest.hex和loadProgTest.a10 2個(gè)文件分別轉(zhuǎn)換為頭文件

編寫一個(gè)C語言應(yīng)用程序,利用C語言中的文件庫函數(shù),新建一個(gè)名叫code.h的頭文件,然后打開loadProgTest.hex,按從前到后的順序逐一讀取其中的字符。每讀取8個(gè)字符,就在這8個(gè)字符中最先讀取的字符前面加上“0x”,然后把它們寫入頭文件code.h。這樣,就把loadProgTest.hex中的程序代碼組織成了一個(gè)數(shù)組,存放進(jìn)code.h頭文件。用同樣的方法,把loadProgTest.a10中的數(shù)據(jù)代碼組織成一個(gè)數(shù)組,存放進(jìn)data.h頭文件里。

經(jīng)過了上述轉(zhuǎn)換之后,就可以把頭文件code.h和data.h中的數(shù)組,即可執(zhí)行文件loadProgTest.out中的代碼下載進(jìn)DSP中了。

2.3 下載代碼

下載代碼之前要做的準(zhǔn)備工作是把DSP的BOOT方式設(shè)置為HPI方式(HPI指DSP的主機(jī)并行端口),并給DSP一個(gè)復(fù)位脈沖,以鎖存HPI的BOOT方式。這時(shí),DSP的內(nèi)核將處于reset狀態(tài)。

設(shè)置并鎖存DSP的BOOT方式之后,就可以向它下載代碼了。下載代碼的過程全部在PCI驅(qū)動(dòng)程序里完成,主機(jī)可以通過HPI訪問DSP的所有存儲(chǔ)空間。本實(shí)例中,下載程序代碼時(shí),首先配置HPI控制寄存器HPIC為0x00010001,其次配置HPI地址寄存器HPIA為0x00000000,這是程序代碼在DSP存儲(chǔ)空間中的起始存儲(chǔ)地址,然后把code.h里的數(shù)組寫進(jìn)自動(dòng)增量模式的HPI數(shù)據(jù)寄存器HPID。下載數(shù)據(jù)代碼的步驟和下載程序代碼一樣,只是要把HPIA配置成0x80000000,這是數(shù)據(jù)代碼在DSP存儲(chǔ)空間中的起始存儲(chǔ)地址。

2.4 啟動(dòng)程序運(yùn)行

成功下載可執(zhí)行文件的代碼之后,主機(jī)向HPIC寄存器中的DSPINT位寫入1。這個(gè)動(dòng)作同樣是在PCI驅(qū)動(dòng)程序里完成。只要DSPINT=1,DSP的內(nèi)核將被喚醒,自動(dòng)從0x00000000處開始執(zhí)行已下載的程序。

圖2是一個(gè)演示實(shí)例,程序功能是向地址0x80007000至0x80007010的DSP存儲(chǔ)區(qū)寫入0x12345678。可以看到下載程序前后DSP存儲(chǔ)區(qū)的內(nèi)容變化。

圖片點(diǎn)擊可在新窗口打開查看

3 結(jié) 論

通過轉(zhuǎn)換可執(zhí)行文件的格式,把DSP設(shè)置成HPI的BOOT方式,復(fù)位DSP,下載可執(zhí)行文件代碼,設(shè)置HPIC寄存器的DSPINT位為1,可以實(shí)現(xiàn)從主機(jī)通過PCI總線在線下載可執(zhí)行文件、并且啟動(dòng)程序運(yùn)行的目的。本文中的實(shí)例DSP采用了TMS320C6701,對于其它型號(hào)的DSP,本文同樣具有指導(dǎo)意義。

]]>
技術(shù)|TMS320C6000 TM擴(kuò)展總線與MPC860微處理器的接口http://www.martymets.com/bbs/dispbbs.asp?BoardID=29&ID=1634&Page=1wangxinxin2010-11-22 14:30:39    關(guān)鍵詞:DSP QUICC VLIW(超長指令字)
MPC860 是PowerPC系列產(chǎn)品。PowerPC系列是由IBM、Motorola和Apple聯(lián)合研制的基于RISC結(jié)構(gòu)的微處理器。PowerPC可運(yùn)行于多種操作環(huán)境,使用的工作平臺(tái)從便攜式設(shè)備到服務(wù)器。TMS320C6000系列是1997年美國TI公司推出的DSP芯片,這種芯片是定點(diǎn)、浮點(diǎn)兼容的 DSPs系列。其中定點(diǎn)系列是TMS320C62xx,浮點(diǎn)系列是TMS320C67xx,它們可以通過DSP的HPI(Host Port Interface)和MPC860相連。本文針對C6202介紹另外一種接口方法,即同步主機(jī)接口模式下C6202的擴(kuò)展總線與MPC860的接口實(shí)現(xiàn),其中C6202為從處理器,MPC860為主處理器。
1 TMS320C6000的主要特點(diǎn)
TMS320C6000 系列DSP(數(shù)字信號(hào)處理器)是TI公司最新推出的一種并行處理的數(shù)字信號(hào)處理器。TMS320C6000片內(nèi)有8個(gè)并行的處理單元,分為相同的兩組。它的體系結(jié)構(gòu)采用超長指令字(VLIW)結(jié)構(gòu),單指令字長為32bit,8個(gè)指令組成一個(gè)指令包,總字長為8×32=256bit。芯片內(nèi)部設(shè)置了專門的指令分配模塊,可以將256bit的指令包同時(shí)分配到8個(gè)處理單元,并由8個(gè)單元同時(shí)運(yùn)行。芯片的最高時(shí)鐘頻率可以達(dá)到300MHz,通過片內(nèi)的鎖相環(huán)(PLL)將輸入時(shí)鐘倍頻獲得。當(dāng)片內(nèi)的8個(gè)處理單元同時(shí)運(yùn)行時(shí),最大處理能力可以達(dá)到2400MIPS。
TMS320C6000主要是為移動(dòng)通信基站的信號(hào)處理而推出的超級(jí)處理芯片。200MHz時(shí)鐘的C6201完成1024點(diǎn)定點(diǎn)FFT的時(shí)間只要66μs,比傳統(tǒng)的DSP要快一個(gè)數(shù)量級(jí),在民用和軍用領(lǐng)域都將有廣闊的應(yīng)用前景。
2 TMS3206000的擴(kuò)展總線
目前,TMS320C6000系列中中有C6202和C6203具有擴(kuò)展總線。它們是在C6201/6701主機(jī)接口(HPI)的基礎(chǔ)上發(fā)展起來的。
擴(kuò)展總線是一個(gè)32bit寬的總線,支持與異步外設(shè)、異步/同步FIFO、PCI橋及外部主控處理器的接口。它同時(shí)還提供了一個(gè)靈活的總線仲裁機(jī)制,可以進(jìn)行內(nèi)部仲載,也可以由外部邏輯完成。
擴(kuò)展總線從結(jié)構(gòu)上可以分為兩部分:I/O接口和主機(jī)接口,如圖1所示。
I/O 接口,擴(kuò)展總線共管轄4個(gè)XCE外部空間,4個(gè)空間可以分別配置成兩種工作模式:異步I/O模式和同步FIFO模式。這兩種模式可以在一個(gè)系統(tǒng)中同時(shí)工作。異步I/O模式的接口信號(hào)時(shí)序與EMIF類似,具有可編程程度高的特點(diǎn)。這一模式下,擴(kuò)展總線接口的4根地址信號(hào)使得每個(gè)XCE空間最多可以掛接16 個(gè)外部設(shè)備。FIFO模式則提供了與同步FIFO無縫接口的能力,可以直接控制1個(gè)進(jìn)行讀操作的同步FIFO或4個(gè)進(jìn)行寫操作的同步FIFO。借助少量外部邏輯,每個(gè)XCE空間可以管理16個(gè)讀操作FIFO或16個(gè)寫操作FIFO。擴(kuò)展總線I/O口與DSP的其他存儲(chǔ)空間由DMA控制器進(jìn)行連接。
主機(jī)接口也有兩種工和模式:同步和異步。同步模式提供了主控和從屬兩種工作方式,此時(shí)地地址信號(hào)和數(shù)據(jù)信號(hào)復(fù)用相同的管腳。異步模式只有從屬功能,它與 C6201/C6211/C6701/C6711的HPI操作完全類似,只是數(shù)據(jù)寬度為32bit。異步模式可以用來與全類似,只是數(shù)據(jù)寬度為 32bit。異步模式可以用來與其他微處理器接口。擴(kuò)展總線主機(jī)接口與DSP存儲(chǔ)器的連接由DMA輔助通道完成。
在同步主機(jī)接口模式下,主機(jī)的數(shù)據(jù)與地址信號(hào)復(fù)用,并且與i960Jx兼容。目前主流的PCI接口芯片都采用i960總線作為芯片內(nèi)部總線,這樣C6000 與PCI總線接口時(shí),需要的外部邏輯可以減少到最少。尤其在作為從屬處理器時(shí),同步主機(jī)接口同樣可以非常方便地與其他一些通用處理器接口。C6202的擴(kuò)展總線還具有突發(fā)傳輸?shù)哪芰Α1疚募蠢眠@一方式實(shí)現(xiàn)MPC860與C6202擴(kuò)展總線的接口。
C6202處理器的工作頻率最高可以采用50MHz,經(jīng)內(nèi)部4倍頻后升至200MHz,每個(gè)時(shí)鐘周期最多可以并行執(zhí)行8條指令,從而可以實(shí)現(xiàn)1600MIPS的定點(diǎn)運(yùn)算能力,完成1024點(diǎn)定點(diǎn)FFT的時(shí)間只需70μs。
3 MPC860介紹
MPC860 PowerQUICC是當(dāng)今比較流行、性能相當(dāng)優(yōu)越的單片集成嵌入式微處理器,繼承了以前享有盛譽(yù)的32bit 68360Quicc和68302的許多優(yōu)點(diǎn)。它內(nèi)部集成了微處理器和一些控制領(lǐng)域常用的外圍組件,特別適用于互聯(lián)網(wǎng)絡(luò)和數(shù)據(jù)通信市場。 PowerQUICC可以被稱為MC68360在網(wǎng)絡(luò)和數(shù)據(jù)通信領(lǐng)域的新一代產(chǎn)品,提高了器件運(yùn)行的各方面性能,包括器件的適應(yīng)性、擴(kuò)展能力和集成度等。 MPC860 PowerQUICC通信處理器可根據(jù)用戶要求提供2~4個(gè)串行通信控制器、不同規(guī)格的指令和數(shù)據(jù)緩存及各種級(jí)別的網(wǎng)絡(luò)協(xié)議支持。該產(chǎn)品專為寬帶接入設(shè)備如:遠(yuǎn)程接入路由器、DSLAM、接入集線器、LAN/WAN交換機(jī)、PBX系統(tǒng)和網(wǎng)關(guān)等設(shè)計(jì)。
在MPC860中包括3個(gè)主要模塊:PowerPC核心、系統(tǒng)接口單元(SIU)、通信處理模塊(CPM)。PowerPC是主要的處理機(jī)單元,通常稱為Embedded PowerPC核心(或EPPC),它包括緩存和存儲(chǔ)器管理單元(MMU),在40MHz時(shí)鐘時(shí)為50 MIPS指令速度;第二個(gè)主要模塊為系統(tǒng)接口單元,它的主功能是提供內(nèi)部總線和外部總線的接口;第三個(gè)主要模塊為通信處理機(jī)模塊,CPM在不同的通信設(shè)備如SCC和SMC上發(fā)送接收數(shù)據(jù)通信,通信設(shè)備可以獨(dú)立工作。SCC和SMC也可以用于時(shí)分復(fù)用總線。
CPM模塊中有一個(gè)32位RISC微處理機(jī)。MPC860有2個(gè)CPU:PowerPC和32位RISC。PowerPC執(zhí)行高層代碼,RISC處理實(shí)際通信的低層通信功能。2個(gè)處理機(jī)主要是通過內(nèi)部存儲(chǔ)空間配合工作。在存儲(chǔ)器區(qū),每個(gè)處理機(jī)都可以設(shè)置控制位、讀狀態(tài)位。
MPC860 中有16個(gè)串行DMA單元。每一個(gè)通信設(shè)備都有一個(gè)發(fā)送DMA和接收DMA。32位RISC控制這16個(gè)串行DMA在通信設(shè)備和存儲(chǔ)器之間傳送數(shù)據(jù)。當(dāng) MPC860接收數(shù)據(jù)時(shí),串行DMA從通信設(shè)備接收數(shù)據(jù)并放入存儲(chǔ)器中;發(fā)送數(shù)據(jù)順序相反,串行DMA從存儲(chǔ)器中取數(shù)據(jù),把數(shù)據(jù)送到通信設(shè)備。串行DMA 只服務(wù)CPM的RISC,但是2個(gè)虛擬的IDMA可以為用戶所用。4 擴(kuò)展總線接口實(shí)現(xiàn)
MPC860內(nèi)部集成了嵌入式的PowerPC核和使用特定RISC處理器的通信處理模塊(CPM)。這個(gè)雙處理器結(jié)構(gòu)優(yōu)于傳統(tǒng)結(jié)構(gòu),因?yàn)镃PM可以從嵌入式的PowerPC核卸出外圍任務(wù)。
4.1 接口實(shí)現(xiàn)
同步主機(jī)接口模式下,C6202和MPC860的接口如圖2所示。盡管圖2中的C6202處于從方式,但還是具有擴(kuò)展總線仲裁的能力,用于異步I/O和擴(kuò)展總線的FIFO接口。只有當(dāng)這兩個(gè)設(shè)備共享總線時(shí),MPC860內(nèi)部的仲裁才被使用。
擴(kuò)展總線的管腳定義
擴(kuò)展總線管理 MPC860的管腳 功能定義
XCNTL A[29] MPC860用于控制信號(hào)的地址位,A31是MPC860地址總線的LSB
XBLAST BDIP 觸發(fā)傳輸指示,XBLAST的極性(在這個(gè)例子高有效)由復(fù)位時(shí)XD[13]的上位電阻決定
XW/R RD/WR 讀寫存取指示,XW/R的極性(在這個(gè)例子高有效)由復(fù)位時(shí)候的XD[12]的上拉電阻決定
XD[31:0] D[0:31] MPC860用D[0:3]作為32位的接口。D0是MPC860數(shù)據(jù)總線的MSB,而XD31是擴(kuò)展總線的MSB。
XCLK XLKOUT 自身(擴(kuò)展)總線時(shí)鐘
XHOLD 間接邏輯需與 擴(kuò)展總線仲裁信號(hào)
XHOLDA BR、BG和BB連接 注意內(nèi)部擴(kuò)展總線仲裁已經(jīng)處于使能端
XAS TS 新的轉(zhuǎn)移開始指示
XCS A[28:0] MPC860的地址解碼從而產(chǎn)生XCS信號(hào)
XBE[3:0] TSIZE[1:0]、A[31:30] 字節(jié)使能用TSIZE和A[31:30]的解碼來實(shí)現(xiàn)
XRDY TA SETA bit在MPC860選擇寄存器中設(shè)置為1,用于指示TA由外部總線產(chǎn)生
MPC860的內(nèi)部總線仲裁處于禁止?fàn)顟B(tài),相反擴(kuò)展總線的仲裁處于使能狀態(tài)。DSP的字節(jié)使能信號(hào)由TSIZE[1:0]和MPC860的地址線A[31:30]通過解碼得到,DSP字節(jié)使能換算表如表1所示。表1 DSP字節(jié)使能換算表



TSIZE
A30
A31
XBE[3:0]

0  10  10  10  11  01  00  0
0011010
0101000
0  1  1  11  0  1  11  1  0  11  1  1  00  0  1  11  1  0  00  0  0  0 
4.2 自舉配置
MPC860 及擴(kuò)展總線把數(shù)據(jù)總線的上拉和下拉電阻用于硬件復(fù)位的BOOT配置,MPC860和DSP需要不同的上拉電阻配置。方法之一就是用總線開關(guān)(bus switch)。在這個(gè)例子中用SN74CBT16390(2個(gè)16bit和32bit之間FET復(fù)用/解復(fù)用總線開關(guān))在復(fù)位的時(shí)候人離MPC860和 DSP的數(shù)據(jù)總線,允許每一個(gè)設(shè)備有自己不同的復(fù)位配置字。方法之二就是首先硬件復(fù)位(復(fù)位的過程中,XBUS的上拉和下拉電阻用于配置MPC860),而DSP復(fù)位應(yīng)該在MPC860之后。在DSP復(fù)位之后,MPC860有效地驅(qū)動(dòng)數(shù)據(jù)總線上用于配置DSP的數(shù)據(jù)值,從而DSP將被配置。
由于兩個(gè)設(shè)備都可以運(yùn)行在內(nèi)部總線仲裁使能或者禁止方式,所以內(nèi)部擴(kuò)展總線仲裁(TMS320C6000擴(kuò)展總線)處理總線的仲裁。不管內(nèi)部還是外部的仲裁配置都在系統(tǒng)復(fù)位時(shí)設(shè)置。假設(shè)處于外部仲裁,那么在MPC860從數(shù)據(jù)總線上取樣硬件復(fù)位配置字的時(shí)候,MPC860的ERAB位必須設(shè)置為1;而當(dāng) DSP從復(fù)位到內(nèi)部總線仲裁的數(shù)據(jù)總線上取樣硬件復(fù)位配置字的時(shí)候,TMS320C6000的XARB位必須設(shè)置為1。
通過在XD[31:0]上拉和下拉電阻的擴(kuò)展總線自舉配置如下:
字段(field) 定義
BLPOL 當(dāng)DSPs作為擴(kuò)展總線的從屬時(shí),XBLAST信號(hào)的極性BLPOL=1,XBLAST最高有效
RWPOL 擴(kuò)展總線讀/寫信號(hào)的極性,RWPOL=1,為XW/R
HMOD 主機(jī)(host)的模式(對應(yīng)于HPIC中的XB狀態(tài)),HMOD=1,外部的主機(jī)接口處于同步的主/從模式
XARB 擴(kuò)展總線仲裁使能(對應(yīng)于XBGC中的狀態(tài)),XARB=1,內(nèi)部擴(kuò)展總線仲裁處于使能狀態(tài)
FMOD FIFO模式(對應(yīng)于XBGC中的狀態(tài))
LEND 小端模式,LEND=1,系統(tǒng)運(yùn)行在小端模式
BootMode[4:0] 設(shè)定設(shè)備自舉模式,包括芽機(jī)口自舉、ROM、boot、存儲(chǔ)器映射選擇
為使工作準(zhǔn)確,MPC860的高速緩存必須關(guān)閉使能。數(shù)據(jù)緩存是否使用,只要將相應(yīng)的狀態(tài)寫放DC_CST寄存器。在禁止?fàn)顟B(tài),緩豐了標(biāo)志狀態(tài)位被忽略,訪問將通過總線傳輸。數(shù)據(jù)緩存在復(fù)位后默認(rèn)為禁止。禁止的數(shù)據(jù)緩存不影響數(shù)據(jù)地址的邏輯轉(zhuǎn)換,在MSROR位的控制下繼續(xù)進(jìn)行,任何寫入DC_CST寄存器的操作必須優(yōu)先于一個(gè)同步指令,則確保在數(shù)據(jù)存儲(chǔ)時(shí),數(shù)據(jù)緩存的使能變化。由于總線錯(cuò)誤或者執(zhí)行特定的直接緩存線性控制時(shí),數(shù)據(jù)緩存產(chǎn)生一個(gè)中斷信號(hào),緩存進(jìn)入禁止?fàn)顟B(tài),類似于禁止。每一頁都有不同的存儲(chǔ)控制屬性,MPC860支持緩存禁止(CI)、寫入(WT)和監(jiān)視(G)屬性,但不支持存儲(chǔ)器的一致性。對于要求存儲(chǔ)一致性的頁,必須編程設(shè)置為緩存禁止。G屬性用于映射那些對不確定存儲(chǔ)比較敏感的I/O設(shè)備,有G屬性的頁使存儲(chǔ)強(qiáng)行停止,除非是非敏感性存儲(chǔ)或者被核(core)取消。是否可緩存的區(qū)域必須定義,對于主要存儲(chǔ)區(qū)的寫回(write-back)或?qū)懲ǎ╳rite-through)模式,必須在使數(shù)據(jù)緩存使能之前通過初始化MMU來選擇。
經(jīng)實(shí)驗(yàn)驗(yàn)證,MPC860可以對擴(kuò)展總線進(jìn)行寫操作,也可以讀操作,基本功能已經(jīng)實(shí)現(xiàn)。此方案具有一定的實(shí)用性。



 (-----來源:無憂電子開發(fā)網(wǎng)
]]>
TMS320C6201 處理器與FLASH存儲(chǔ)器接口設(shè)計(jì)http://www.martymets.com/bbs/dispbbs.asp?BoardID=29&ID=1633&Page=1wangxinxin2010-11-22 14:28:12DSP是針對實(shí)時(shí)數(shù)字信號(hào)處理而設(shè)計(jì)的數(shù)字信號(hào)處理器,由于它具有計(jì)算速度快、體積小、功耗低的突出優(yōu)點(diǎn),非常適合應(yīng)用于嵌入式實(shí)時(shí)系統(tǒng)。自世界上第一片通用D5P芯片TMS320C10于1982年在美國T1公司產(chǎn)生以來,DSP處理器便顯示出強(qiáng)盛的生命力。短短二十多年,世界上許多公司便開發(fā)出各種規(guī)格的DSP處理器,并使它們在通信、自動(dòng)控制、雷達(dá)、氣象、導(dǎo)航、機(jī)器人等許多嵌入式實(shí)時(shí)領(lǐng)域得到了廣泛應(yīng)用。20世紀(jì)90年代后期美國TI公司推出的面向通訊領(lǐng)域的新一代32位的TMS320C6000系列DSP芯片(簡稱C6000)是目前世界上最先進(jìn)的DSP處理器,其中C62XX和C64XX為通用32位定點(diǎn)系列DSP處理器,C67XX為通用32位浮點(diǎn)系列DSP處理器,其指令速度分別高達(dá)960~4800MIPS和600MFLOPS~1GFLOPS,可與早期的巨型計(jì)算機(jī)速度相媲美,且單芯片功耗小于1.5W、采用BGA封裝(小型球柵陣列)、體積也很小(最大35mm×35mm×3.5mm)。因此,這些DSP處理器將在許多科技領(lǐng)域發(fā)揮重要作用。FLASH存儲(chǔ)器是新型的可電擦除的非易失性只讀存儲(chǔ)器,屬于EEPROM器件,與其它的ROM器件相比,其存儲(chǔ)容量大、體積小、功耗低,特別是其具有在系統(tǒng)可編程擦寫而不需要編程器擦寫的特點(diǎn),使它迅速成為存儲(chǔ)程序代碼和重要數(shù)據(jù)的非易失性存儲(chǔ)器,成為嵌入式系統(tǒng)必不可少的重要器件。DSP與FLASH存儲(chǔ)器的接口設(shè)計(jì)是嵌入式系統(tǒng)設(shè)計(jì)的一項(xiàng)重要技術(shù),本文以基于三個(gè)C6201/C6701 DSP芯片開發(fā)成功的嵌入式并行圖像處理實(shí)時(shí)系統(tǒng)為例,介紹這一設(shè)計(jì)技術(shù)。

  1 C6201/C6701新一代DSP處理器

 
  1.1 C6201/C6701的特點(diǎn)及外部存儲(chǔ)器接口EMIF
 
  C6201為通用32位定點(diǎn)DSP處理器,C6701為通用32位浮點(diǎn)DSP處理器,它們采用并行度很高的處理器結(jié)溝,從而具有許多突出的特點(diǎn):
 
  DSP核采用改進(jìn)的超長指令字(VLIW)體系結(jié)構(gòu)和多流水線技術(shù),具有8個(gè)可并行執(zhí)行的功能單元,其中6個(gè)為ALU,兩個(gè)為乘法器,并分成相同功能的兩組,在沒有指令相關(guān)情況下,最高可同時(shí)執(zhí)行8條并行指令; ·具有32個(gè)32位通用寄存器,并分成兩組,每組16個(gè),大大加快了計(jì)算速度;
 
  片上集成了大容量的高速程序存儲(chǔ)器和數(shù)據(jù)存儲(chǔ)措,最高可以200Mbit/s的速度訪問,并采用改進(jìn)的多總線多存儲(chǔ)體的哈佛結(jié)構(gòu)。程序存儲(chǔ)器為64K字節(jié)、256位寬.每個(gè)指令周期可讀取8個(gè)指令字,還可靈活設(shè)置為高速CACHE使用;數(shù)據(jù)存儲(chǔ)器采用雙存儲(chǔ)塊,每個(gè)存儲(chǔ)塊又采用多個(gè)存儲(chǔ)體,可靈活支持8/16/32位數(shù)據(jù)讀寫。C6701還可支持64位訪問,每個(gè)時(shí)鐘可訪問雙32位故據(jù).C6701還可訪問雙64位IEEE雙精度浮點(diǎn)數(shù)據(jù); 片上集成了32位外部存儲(chǔ)器接口EMIF,并且分成4個(gè)時(shí)序可編程的空間(CE0、CEl、CE2、CE3),可直接支持各種規(guī)格SDRAM(除CEl空間外)、SBSRAM、SRAM、ROM、FLASH、FIFO存儲(chǔ)器。同時(shí),CEl空間還可直接支持8/16位寬的異步存儲(chǔ)器讀訪問,EMIF接口信號(hào)如圖1所示;
 
  片上集成了4個(gè)主DMA控制器和一個(gè)輔助DMA控制器:
  片上集成了兩個(gè)32位多功能定時(shí)器;
  片上集成了兩個(gè)多通道通用串行通訊口;
  片上集成了16位宿主機(jī)HPI端口,與EMIF端口一起。可支持構(gòu)成并行多處理器系統(tǒng);
  片上集成的鎖相循環(huán)PLL電路,具有4倍頻外部時(shí)鐘的功能,從而在外部可采用較低的時(shí)鐘電路,而在片內(nèi)可高頻(120MHz、150MHz、167MHz、200MHz)地進(jìn)行計(jì)算;
  片上集成了符合IEEE標(biāo)準(zhǔn)的JTAG在系統(tǒng)仿真接口,大大方便了硬件調(diào)試;
  具有一個(gè)復(fù)位中斷,一個(gè)非屏蔽中斷,4個(gè)邊沿觸發(fā)的可編程的可屏蔽中斷;
  雙電源供電,內(nèi)核電源為1.8V,外圍設(shè)備電源為3.3V,功耗低于1.5W;
  采用352BGA小型球柵陣列封裝,體積很小;
  具有豐富的適合數(shù)字運(yùn)算處理的指令集,并且所有的指令為條件轉(zhuǎn)移指令。
 
圖片點(diǎn)擊可在新窗口打開查看
  C6201/C6701高度的并行結(jié)構(gòu)特點(diǎn)、高速的時(shí)鐘頻率使其具有高達(dá)1600MIPS和400MMAC的運(yùn)算能力,比通常使用的DSP計(jì)算速度快十幾倍,甚至幾十倍,再加上其具有并行執(zhí)行、多功能、多任務(wù)的能力和豐富的指令集以及體積小、功耗低、易于使用的特點(diǎn),使它非常適合在嵌入式實(shí)時(shí)系統(tǒng)中應(yīng)用;同時(shí)TI公司開發(fā)了高效的C編譯器和多功能的集成開發(fā)系統(tǒng)CODE COMPOSER STUDIO(簡稱CCS)以及高性能的仿真器,大大簡化程序代碼的編寫與調(diào)試。
 
1.2 C620I/06701的引導(dǎo)工作方式
 
  在加電后,C6201/C6701可采用直接從零地址(只能為外部存儲(chǔ)器)開始執(zhí)行程序的不引導(dǎo)方式工作;也可采用輔助DMA先自動(dòng)從宿主機(jī)HPI端口或外部CEl空間(8/16/32位ROM)加載64K字節(jié)程序至零地址(片上存站器或外部存儲(chǔ)器),然后再從零地址開始執(zhí)行程序的引導(dǎo)方式工作。C6201/C6701的這些工作方式由上電復(fù)位時(shí)5個(gè)引導(dǎo)方式管腳BOOTMODE[4:0]的信號(hào)電平?jīng)Q定,這些電平信號(hào)還決定地址映射方式是采用某種類型、速度的外部存儲(chǔ)器為零地址的MAPO方式,還是采用片上程序存儲(chǔ)器為零地址D6 MAPl方式。這種結(jié)構(gòu)特點(diǎn)大大增加了系統(tǒng)設(shè)計(jì)的靈活性。在引導(dǎo)工作方式中,當(dāng)零地址為片上程序存儲(chǔ)器時(shí),程序直接從高速256位寬的片上程宇存儲(chǔ)器并行執(zhí)行,能充分發(fā)揮DSP的高速性能;而其它工作方式中,程序是從外部慢速32位寬的存儲(chǔ)器開始出行執(zhí)行。因此,基于C6000的嵌入式系統(tǒng)一般采用引導(dǎo)三片上程序存儲(chǔ)器執(zhí)行的工作方式,如表1所示。
圖片點(diǎn)擊可在新窗口打開查看
 
 2 FLASH存儲(chǔ)器MBM29LV800BA
 
    2.1 MBM29LV800BA介紹
 
  MBM29LV800BA是FUJITSU公司生產(chǎn)的1M×8/512K×l6位的FLASH存儲(chǔ)器,其管腳信號(hào)如圖2所示。/BYTE為×8或×16工作方式配置管腳(/BYTE接低時(shí)為×8方式,地址線為[A-1,A0,…A18]共20根,數(shù)據(jù)線為DQ[0:7],數(shù)據(jù)線高8位不用;/BYTE接高時(shí)為×16方式,地址線為A[0:18]共19根,A-1,不用,數(shù)據(jù)線為DQ[0:15]);RY/*BY為表示FLASH就緒或忙的管腳(它是集電極開路引腳,多個(gè)RY/*BY管腳可通過上拉電阻直接"線與"連接)。
 
圖片點(diǎn)擊可在新窗口打開查看
 
  MBM29LV800BA具有許多特點(diǎn),主要如下
 
  單電源3.0V讀、編程寫入、擦除;
  與JEDEC標(biāo)準(zhǔn)的命令集和引腳分布兼容;
  增加了快速編程寫人命令,寫入僅需兩個(gè)總線周期;
  具有至少100 000次的編程寫入/擦寫壽命;
  靈活的扇區(qū)結(jié)構(gòu)支持整片內(nèi)容擦除、任一扇區(qū)內(nèi)容擦除、相連續(xù)的多扇區(qū)內(nèi)容并行擦除;
  具有嵌入式編程寫入算法,可自動(dòng)寫入和驗(yàn)證寫入地址的數(shù)據(jù);
  具有嵌入式擦除算法,可自動(dòng)預(yù)編程和擦除整個(gè)芯片或任一扇區(qū)的內(nèi)容;
  具有數(shù)據(jù)查尋位和切換位,可以通過軟件查尋方法檢測編程寫入/擦除操作的狀態(tài);
  具有RY/*BY管腳,可以通過硬件方法檢測編程寫入/擦除操作的狀態(tài);
  自動(dòng)休眠功能,當(dāng)?shù)刂繁3址(wěn)定時(shí),自動(dòng)轉(zhuǎn)入低功耗模式;
  具有低電壓禁止寫入功能;
  具有擦除暫停/擦除恢復(fù)功能,
 
  2.2 MBM29LV800BA的主要命令及嵌入式算法
 
  MBM29LV800BA的編程寫入及擦除命令如表2所示。其中,X為十六進(jìn)制數(shù)字的任意值,RA為被讀數(shù)據(jù)的FLASH地址,RD為從FLASH地址RA讀出的數(shù)據(jù),PA為寫編程命令字的FLASH地址,PD為編程命令宇,SA為被擦除內(nèi)容的扇區(qū)地址。 MBM29LV800BA具有嵌入式編程寫入和擦除算法機(jī)構(gòu),當(dāng)向FLASH寫入數(shù)據(jù)內(nèi)容或擦除其扇區(qū)內(nèi)容時(shí),需要根據(jù)相應(yīng)的算法編程才能完成。其編程擦除算法流程為:首先寫編程擦除命令序列;然后運(yùn)行數(shù)據(jù)測試算法以確定擦除操作完成;其編程寫入算法流程為:程序開始,首先驗(yàn)證寫入扇區(qū)是否為空,不空則運(yùn)行擦除算法;然后運(yùn)行編程寫入算法,寫編程寫入命令序列,再運(yùn)行數(shù)據(jù)測試算法或查詢RY/*BY管腳信號(hào)以確定該次操作完成。地址增1繼續(xù)上述過程,否則結(jié)束操作;數(shù)據(jù)測試算法主要是測試DQ7和DQ5位的數(shù)據(jù)變化,以確定泫次操作是進(jìn)行中、完成、還是失敗。
圖片點(diǎn)擊可在新窗口打開查看
 
 
  3 C6201/6701與FLASH的接口設(shè)計(jì)
 
  基于C6000系列DSP處理器的嵌入式系統(tǒng)往往采用地址映射方式為MAPl的ROM引導(dǎo)方式。這種方式是把開發(fā)成功的敝入式可執(zhí)行程序燒寫在CEl空間(從0~01400000地址開始的ROM存儲(chǔ)器)中,并根據(jù)引導(dǎo)方式設(shè)置相應(yīng)的引導(dǎo)模式管腳BOOTMODE[4:0]。這樣,當(dāng)嵌入式系統(tǒng)上電工作時(shí),從復(fù)位信號(hào)的上升沿開始,輔助DMA把執(zhí)行程序從引導(dǎo)ROM中移至片上程序存儲(chǔ)船中,然后在片上程序存儲(chǔ)器開始執(zhí)行程序。這種方式呵充分發(fā)揮C6000系列DSP的并行結(jié)構(gòu)特點(diǎn),具有最好的執(zhí)行性能。當(dāng)引導(dǎo)ROM器件采用FLASH存儲(chǔ)器MBM29LV800BA時(shí),C6201/C6701與FLASH存儲(chǔ)器以8位方式連接的接口設(shè)計(jì)如圖3所示。FLASH的地址線[A-1,A0,…A18]與DSP的EMIF接口地址線[EA2,EA 3+…,EA21]直接相連;FLASH的低8位數(shù)據(jù)線DQ[0:7]與EMIF接口數(shù)據(jù)線[ED0,…,ED7]直接相連,高8位數(shù)據(jù)線DQ[8:15]不連接;讀寫使能信號(hào)可直接相連;EMIF接口的片選信號(hào)/CEl與字節(jié)使能信號(hào)/BE0"相與"后與FLASH的片選信號(hào)相連;FLASH的方式信號(hào)/BYTE接地;由于EMIF接口的ARDY信號(hào)為低時(shí),DSP自動(dòng)插入等待時(shí)鐘周期,因此,F(xiàn)LASH的就緒或忙RY/*BY信號(hào)經(jīng)上拉電阻直接與ARDY信號(hào)相連,這種設(shè)計(jì)使FLASH的編程寫操作可不運(yùn)行數(shù)據(jù)測試算法,大大簡化了程序設(shè)計(jì);C6201/C6701與FLASH以16位或32位方式相連咱6接口設(shè)計(jì)與8位方式類似。
]]>
DSP/BIOS在TMS32OC6000編程中自舉引導(dǎo)方法http://www.martymets.com/bbs/dispbbs.asp?BoardID=29&ID=1632&Page=1wangxinxin2010-11-22 14:26:201 DSP/BIOS的優(yōu)點(diǎn)


DSP/BIOS 是一個(gè)用戶可剪裁的實(shí)時(shí)操作系統(tǒng),主要由3部分組成:多線程實(shí)時(shí)內(nèi)核;實(shí)時(shí)分析工具;芯片支持庫。利用實(shí)時(shí)操作系統(tǒng)開發(fā)程序,可以方便快速地開發(fā)復(fù)雜的DSP程序。操作系統(tǒng)維護(hù)調(diào)度多線程的運(yùn)行,只需將定制的數(shù)字信號(hào)處理算法作為一個(gè)線程嵌入系統(tǒng)即可;芯片支持庫幫助管理外設(shè)資源,復(fù)雜的外設(shè)寄存器初始化可以利用直接圖形工具配置;實(shí)時(shí)分析工具可以幫助分析算法實(shí)時(shí)運(yùn)行情況。


DSP/BIOS實(shí)時(shí)操作系統(tǒng)的圖形配置界面包括:

(1)全局設(shè)置(system)— 包括內(nèi)存配置、芯片支持庫設(shè)置、endian模式設(shè)置等;

(2)操作系統(tǒng)調(diào)度工具(scheduling)— 包括定時(shí)器、周期器、硬件中斷管理、軟件中斷管理、任務(wù)調(diào)度、系統(tǒng)空載任務(wù)函數(shù)等;

(3)同步機(jī)制(synchronization)一一提供一般操作系統(tǒng)都具有的信號(hào)燈、郵箱、隊(duì)列、鎖4個(gè)工具;

(4)芯片支持庫(chip support library)— 針對不同的DSP芯片幫助配置DSP的外設(shè)資源,最常用的有DMA,MCBSPEMIF,TIMER等的配置;

(5)主機(jī)交互接口(input/output)— 提供DSP實(shí)時(shí)運(yùn)行時(shí)與主機(jī)通過仿真口和CCS(集成開發(fā)系統(tǒng))交互數(shù)據(jù)的機(jī)制;

(6)調(diào)試工具(instrumentation)— 記錄器(LOG)可以提供調(diào)試信息,但是特別針對實(shí)時(shí)操作優(yōu)化;統(tǒng)計(jì)工具(STS)可以統(tǒng)計(jì)調(diào)試過程中的各種事件。


通過使用 DSP/BIOS,我們可以:

(1)使用多線程技術(shù)高效地管理DSP的運(yùn)行,以提高運(yùn)行效率;

(2)使用標(biāo)準(zhǔn)接口的I/O和中斷;

(3)高效地定義和配置系統(tǒng)資源,如系統(tǒng)內(nèi)存和中斷向量表;

(4)通過實(shí)時(shí)分析工具對用戶應(yīng)用程序的運(yùn)行狀況實(shí)時(shí)查看;

(5)向用戶的目標(biāo)應(yīng)用程序添加數(shù)據(jù)結(jié)構(gòu)并圍繞一組相關(guān)線程來加以組織:

(6)幾乎所有的初始化都可以通過圖形化配置來完成,而不必詳細(xì)了解各個(gè)寄存器的每一位所代表的意義;


(7)通過調(diào)用DSP/BIOS或CSL(芯片支持庫)的API庫函數(shù),使代碼效率更高、程序可讀性和可移植性更強(qiáng),從而使得向新的TMS320DSP移植更加容易。例如:開全局中斷可以用HWI_enable(),啟動(dòng)DMA可以用DMA_start(hDMA0),這樣比直接通過寄存器配置來完成具有更強(qiáng)的可讀性和可移植性,而且不會(huì)出錯(cuò),也不必查閱相應(yīng)的寄存器信息。

2 DSP/BIOS的資源優(yōu)化


由于 DSP/BIOS的很多功能只有在調(diào)試時(shí)使用或者根本不用,如果不需要用到的部分都使用默認(rèn)的配置將會(huì)占用較大的內(nèi)存資源,如果用戶程序較大就會(huì)造成DSP內(nèi)存資源緊張或不足。由于DSP/BIOS是一個(gè)可剪裁的操作系統(tǒng),可以很方便地將不需要用到的功能關(guān)閉,以節(jié)省空間。表1列出了減少DSP/BIOS所占資源的幾種措施以及在C62x中可以減少的存儲(chǔ)空間大小。


表中減少的空間大小只作為參考,隨著CCS的版本不一樣可能會(huì)有一定差別。筆者在CCS2.20.18上編寫了一個(gè)簡單的程序,DSP采用的是TMS320C6203,主程序采用C語言編寫。優(yōu)化前的.out文件大小為78.6KB,轉(zhuǎn)化成二進(jìn)制文件為28.3KB;優(yōu)化后的.out文件為29.4KB,轉(zhuǎn)化成二進(jìn)制文件為4.4KB。

3 程序的自舉引導(dǎo)方法


TMS320C6000器件可以設(shè)置成3種自舉方式,其加載過程分別敘述如下:


①不加載 。CPU直接從存儲(chǔ)器的0地址處開始執(zhí)行指令。如果系統(tǒng)中使用的是SDRAM,那么CPU 會(huì)先掛起,直到SDRAM的初始化完成。TMS320C6x1x 不具有這類方式。


②ROM 加載。位于外部存儲(chǔ)空間的ROM中的程序首先通過DMA/EDMA搬入地址。處。盡管加載過程是在芯片外部被復(fù)位信號(hào)釋放以后才開始的,但是當(dāng)芯片仍處于內(nèi)部復(fù)位保持時(shí),就開始了上述的傳輸過程了。用戶可以指定外部ROM 的存儲(chǔ)寬度,EMIF會(huì)自動(dòng)將相鄰的8bit或16bit數(shù)據(jù)合并成32bit。ROM中的程序必須以little endian的格式存儲(chǔ)。用DMA/EDMA進(jìn)行的這一加載過程是一個(gè)單幀的數(shù)據(jù).tk傳輸。傳輸過程完成
之后,CPU退出復(fù)位狀態(tài),開始執(zhí)行地址0處的指令。對于 TMS320C6x0x,DMA使用默認(rèn)的ROM時(shí)序從CEl空間中拷貝64KB數(shù)據(jù)到地址0處。

對于 TMS320C6x1x,EDMA使用默認(rèn)的ROM時(shí)序從CE1空間(C64x從EMIFB CE1空間)拷貝1KB數(shù)據(jù)到地址0處。

圖片點(diǎn)擊可在新窗口打開查看
③主機(jī) (HPI)引導(dǎo)。CPU停留在保持狀態(tài),其余硬件部分均保持正常狀態(tài)。在這期間,外部主機(jī)通過主機(jī)口或PCI口(如6205或64x)初始化CPU的存儲(chǔ)空間。主機(jī)完成所有的初始化工作后,將主機(jī)口控制寄存器中的DSPINT位設(shè)置為1,結(jié)束引導(dǎo)過程。此時(shí)CPU退出復(fù)位狀態(tài),開始執(zhí)行地址0處的指令。在主機(jī)引導(dǎo)過程中,主機(jī)可以對DSP所有的存儲(chǔ)空間進(jìn)行讀和寫。

其中,用得最多的是ROM加載。為了生成可以從ROM中自舉的代碼,就要注意DSP/BIOS中的存儲(chǔ)器設(shè)置。對于TMS320C6x0x,一般而言,64KB的代碼就足夠了,那樣就只需選擇好各個(gè)代碼段的Load Address和Run Address就可以了。DSP/BIOS將自動(dòng)生成cmd文件,而不需用戶自己編寫。如果64KB不夠,則需自己編寫boot程序。而對于TMS320C6x1x ,1KB的程序一般是不夠用的,所以要自己編寫boot程序。下面以TMS320C6711為例介紹DSP/BIOS中程序空間的配置以及boot程序的編寫方法。

TMS320C6711內(nèi)部含有64KB的RAM,既可以配置為L2Cache,也可以配置成SRAM。一般而言,在系統(tǒng)上電復(fù)位時(shí)配置為SRAM,將1KB的引導(dǎo)程序從ROM中拷貝到SRAM中,而在引導(dǎo)程序中將用戶的程序從ROM中拷貝到SBSRAM中或SDRAM中去執(zhí)行。在主程序的初始化部分將內(nèi)部RAM配置為高速緩存,這樣可以提高程序的運(yùn)行速度。當(dāng)然,也可以把內(nèi)部RAM用作SRAM,把全部的用戶程序都引導(dǎo)到其中來執(zhí)行,
這樣可以不用外接SBSRAM或SDRAM 。

首先在 DSP/BIOS的存儲(chǔ)器段管理器(Memory Section Manager)中指定如下幾段:
FLASH_BOOT:or igin=000000000,le ngth=0x400;(存儲(chǔ)自舉代碼)
FLASH_REST:or igin=0x90000400,le ngth=Ox1fc00;(存儲(chǔ)主程序代碼等)
IRAM :or igin= 000000000,length= 0x10000;(內(nèi)部RAM)
SDRAM 或SBSRAM:origin=Ox80000000(CEO),length與外接存儲(chǔ)器大小有關(guān),如果沒有則可省略。


上電復(fù)位時(shí),F(xiàn)LASHesBOOT中的數(shù)據(jù)被復(fù)制到IRAM 中從地址0開始的一段,然后從地址0開始執(zhí)行程序。因此,在這段代碼中要把其它相應(yīng)的段從加載地址復(fù)制到運(yùn)行地址。在DSP/BIOS程序中,所用到的段及其相應(yīng)的加載地址和運(yùn)行地址建議按表2、表3安排。

圖片點(diǎn)擊可在新窗口打開查看

圖片點(diǎn)擊可在新窗口打開查看

在 BOOT 程序中,首先要初始化EMIF的相關(guān)寄存器,特別是有外接存儲(chǔ)器時(shí)(如SDRAM或SBSRAM),一定要先初始化相關(guān)寄存器,主要是EMIF全局控制寄存器和CE空間控制寄存器。然后將加載地址位于ROM中而運(yùn)行地址位于RAM中的段從ROM中復(fù)制到RAM中。具體的加載地址和運(yùn)行地址可以在map文件中查到。最后,將程序指針跳轉(zhuǎn)到主程序入口(c_int00)開始執(zhí)行。BOOT程序如下:

.sect " .myBootCode "
.global myBootCode


.ref _c_int00


;====myBootCode ===


myBootCode :

;***************

;Configure EMIF


;***************

...... ......

;***************


;CopySections


;***************

...... ......

;***************

;StartProgram


;***************


mvkl .S 2 _c_int00, B0


mvkh .S 2 _c_int00, B0


B . S2 B0


; jump to _c_int00


nop 5

編寫完 boot程序后,在cmd文件中加上一句:.my_boot_code: {} load=FLASH_BOOT,run=IRAM

]]>
HELLODSP TIC6000http://www.martymets.com/bbs/dispbbs.asp?BoardID=29&ID=1631&Page=1wangxinxin2010-11-22 14:24:37  最近在hellodsp(http://www.hellodsp.com)申請了個(gè)版主,本來是要申請TMS320C6000版塊的,不過這個(gè)版塊已經(jīng)有兩位優(yōu)秀的版主,我是做圖像處理的,于是就鎖定“語音視頻處理”版塊了,不過6000版塊我還是會(huì)經(jīng)常去,看到很多初學(xué)者在問一些入門的問題,有些提問題的同志對問題描述地也不夠清楚,可能更多的是想提問題可不知道怎么提吧,我剛學(xué)DSP的時(shí)候也一樣,碰到問題了不知道怎么把問題表述清楚,真有啞巴吃黃連的痛楚。最近有空回憶下自己學(xué)DSP的過程,算是個(gè)人經(jīng)歷吧,希望對大家有用。

我的經(jīng)歷
      錯(cuò)過第一次學(xué)習(xí)機(jī)會(huì)
      我2000年進(jìn)入大學(xué),專業(yè)通信工程。入學(xué)的時(shí)候成績不錯(cuò),還拿過一等獎(jiǎng)學(xué)金,自以為自己很聰明。當(dāng)時(shí)我們學(xué)院有個(gè)科技協(xié)會(huì),簡稱科協(xié),那時(shí)的科協(xié)會(huì)長是個(gè)大四的學(xué)兄,給人印象深刻,感覺他很厲害,就入了科協(xié),第一堂課是用555做個(gè)流水燈,科協(xié)已經(jīng)把印制板做好,我只用把器件焊上去就行了,燈是亮了很好玩,于是自己琢磨電路的原理,那時(shí)是個(gè)剛?cè)雽W(xué)的小子,什么也不懂,看那東西根本搞不懂,感覺太難了,后來慢慢就不去參加活動(dòng),再后來放棄了。
      現(xiàn)在想想那個(gè)時(shí)候太輕言放棄了,包括后來大學(xué)里自學(xué)51單片機(jī)、學(xué)FPGA都是只淺嘗則止,而沒有持之以恒,以至于后來錯(cuò)過了很多很多機(jī)會(huì)。所以在這里要告訴大家,也告訴我自己,學(xué)技術(shù)一定要堅(jiān)持,不管碰到什么困難,絕不能輕言放棄,堅(jiān)持就會(huì)有進(jìn)步,就像長跑,總有幾個(gè)困難點(diǎn),堅(jiān)持過去就覺得不是那么困難,水平才會(huì)有提升。
       第一次使用C51
       說起這個(gè),不得不感謝下我的一個(gè)大學(xué)室友,是他帶我入門C51,第一次用protel畫印制板,第一次申請免費(fèi)樣片、第一次編寫調(diào)試程序,第一次使用示波器等等,這些都得歸功于他的指導(dǎo)。
       時(shí)間過得很快,一轉(zhuǎn)眼就大四了,想想自己大學(xué)游戲玩了三年,學(xué)業(yè)荒廢,畢業(yè)設(shè)計(jì)這個(gè)機(jī)會(huì)一定要把握住,不然自己沒什么資本找工作啊,于是在選題的時(shí)候選了個(gè)單片機(jī)的題目“基于DDS的信號(hào)發(fā)生器設(shè)計(jì)”。雖然之前接觸過51、protel,不過那都是看看書而已,實(shí)際做起來什么都不會(huì),我確定的方案是用C51去控制AD9853輸出相應(yīng)頻率的波形,當(dāng)然這里離不開鍵盤和LCD顯示,AD9853是從AD公司申請的樣片,那時(shí)我第一次知道還有免費(fèi)午餐,大公司真的不錯(cuò),記得當(dāng)時(shí)TIDSP都可以申請,我就申請了一片6202,不過后來沒那么容易申請了,這次我堅(jiān)持了下來,一步一步地做,最終圓滿完成了畢業(yè)設(shè)計(jì)。
       我是幸運(yùn)的,因?yàn)樯磉吘陀袀(gè)很好的老師,初學(xué)者大都沒有這樣的條件,即便如此,初學(xué)者還是應(yīng)充分挖掘身邊的資源,將它們都利用起來,這樣你才能更接近成功。
       接觸DSP
       2004畢業(yè)后我到一個(gè)研究所工作,我所在的部門是做視頻跟蹤器的,主要用DSP+FPGA,對我來說入魚得水,因?yàn)槲覍@些東西很有興趣。當(dāng)時(shí)我的同事們用的還是TI C50DSP,這個(gè)很多人可能聽都沒聽過,TI的DSP按時(shí)間大概經(jīng)歷了這幾個(gè)系列,C25-C50-V33-2000-5000-6000,C50的功能很有限,只有匯編開發(fā)環(huán)境,因?yàn)楣δ芎唵危詫W(xué)起來也相對容易,加上我有51的基礎(chǔ),很快就上手了,一年半后部門器件換代直接換成了64xx,由于受C50的影響,我們開發(fā)還是習(xí)慣用匯編,2006年5月前后,我率先用C開發(fā)產(chǎn)品,取得了不錯(cuò)的效果。
       這當(dāng)中我接觸到了很多,由于我個(gè)人性格的原因,學(xué)什么都想學(xué)精,走了很多彎路。比如PCB剛開始用protel,后來發(fā)現(xiàn)它畫復(fù)雜板子的時(shí)候不方便,于是學(xué)用allegro,后來又學(xué)SI;DSP也是,6000會(huì)用了想學(xué)2000、5000,后來發(fā)現(xiàn)自己很幼稚,其實(shí)一到二門精通了足以,學(xué)什么要注意學(xué)習(xí)理念,工具平臺(tái)這些始終是外家功夫,要勤修內(nèi)功。

總結(jié)及建議
      1)選好自己的工具和平臺(tái)學(xué)DSP當(dāng)然首先要選擇一款DSP(這里主要說TI的DSP,AD公司的不熟這里就不說了)。如果是個(gè)人學(xué)習(xí)的話主要看個(gè)人需要和應(yīng)用場合,比如做圖像處理那當(dāng)然首推TI6000了,初學(xué)者不必將DSP分出三六九等,各個(gè)系列沒有明顯的優(yōu)劣,但有明確的應(yīng)用領(lǐng)域,2000偏接口控制,5000偏語音,6000適合做大數(shù)據(jù)量信號(hào)處理,比如圖像、雷達(dá)等等。初學(xué)者最好有個(gè)開發(fā)板,不然無異于紙上談兵,2000、5000的開發(fā)板相對便宜,6000的就比較昂貴。
       就上手容易度來說,我個(gè)人覺得6000更易上手,6000的結(jié)構(gòu)較2000、5000明了清晰,硬件上的條條框框比較少,你不需要看很多的硬件結(jié)構(gòu)資料就能著手編程,這個(gè)大概是技術(shù)的進(jìn)步吧。不過還是這句話,應(yīng)用場合決定你的選擇。
       2)自己先動(dòng)手
       初學(xué)者如果會(huì)C語言語法,在看過一些資料后就可以著手寫自己的第一個(gè)程序,如果寫不出來,看看TI最初級(jí)的例程,完成自己第一個(gè)程序。我給我們單位新同事做6000培訓(xùn)的時(shí)候,給他們的第一個(gè)題目就是寫一個(gè)程序讓LED燈不停閃爍,這個(gè)燈可能接在GPIO上或者通過EMIF譯碼與FPGA配合控制(后者可能更有意義),更進(jìn)一步的程序是控制閃爍的頻率。我比較喜歡讓他們用GPIO和EMIF,它們可能是6000里最簡單和用的最多的外設(shè)了,它們是初學(xué)者最早要攻克的堡壘。
       初學(xué)者往往對硬件結(jié)構(gòu)和軟件的配合沒有概念,對片內(nèi)存儲(chǔ)空間、片外存儲(chǔ)空間、片上外設(shè)這些概念沒有實(shí)在的理解,這些概念需要自己的反復(fù)的思考、反復(fù)的實(shí)驗(yàn)、反復(fù)的體會(huì)才能最終搞清楚,這些弄明白了你也就入門了。
       初學(xué)者比較忌諱看太多和太復(fù)雜的例程,看得太多你的思緒會(huì)比較亂,看得太復(fù)雜你會(huì)心浮氣躁,復(fù)雜的例程一般它都有相對復(fù)雜的編程結(jié)構(gòu),這個(gè)初學(xué)者是很難體會(huì)到的,所以剛開始不要看,等你寫了20到30個(gè)程序的時(shí)候再試著看相對復(fù)雜的例程。
       3)多動(dòng)手
       這個(gè)不用多說了,光看不練假把式。
       4)片上外設(shè)
      這里拿DM642來說,我把常用的外設(shè)由簡單到復(fù)雜排個(gè)序:GPIO-TIMER-EDMA-EMIF-I2C-MCASP-VideoPort-EMAC、MDIO,MCASP我沒用過,不過看過資料感覺不復(fù)雜,我給初學(xué)者的建議是先把前面4個(gè)學(xué)清楚,可以先學(xué)GPIO這個(gè)真的是簡單,剛開始不要急著用CSL,用匯編或是C寫個(gè)程序讓某個(gè)GPIO腳上輸出波形,這樣有助于理解片上外設(shè)以及有關(guān)的概念。前面4個(gè)明白了后面的具體用到再學(xué),這個(gè)時(shí)候你可以看TI相應(yīng)的例程,拿來用就可以。
       5)匯編、C和線性匯編
       現(xiàn)在開發(fā)6000的標(biāo)準(zhǔn)流程是先用C寫,C的好處很多這里不說了,有太多的文章在論述,不過對于準(zhǔn)備做優(yōu)化的同志們來說,匯編不會(huì)也不行,用匯編相對于C更助于你理解6000的架構(gòu),很多初學(xué)者對C語言中用指針對某個(gè)空間操作不理解,用匯編寫的話相對要好理解的多。
       大家不必對匯編心存畏懼,其實(shí)它也很簡單,只不過它比較晦澀,用它開發(fā)整個(gè)系統(tǒng)的時(shí)間上的花費(fèi)太多,不過關(guān)鍵算法的優(yōu)化有時(shí)還是離不開它,TI目前還提供線性匯編,它是匯編和C的折中,兼?zhèn)鋮R編的效率和C的易開發(fā)性。
       匯編和C都只是工具,關(guān)鍵還是你對架構(gòu)的理解和編程理念,所以選擇哪個(gè)都有道理,通過工具去探索架構(gòu)而已。我個(gè)人覺得初學(xué)者主要應(yīng)學(xué)習(xí)C,畢竟它是主流,可以用匯編寫4-5個(gè)小程序,熟悉它的語法就行,日后用它做優(yōu)化也不會(huì)什么都不知道,而且也助于對硬件架構(gòu)的理解。

結(jié)束
       就寫這么多了,一家之言,里面有很多廢話,希望對初學(xué)者有點(diǎn)幫助,拋磚引玉,也希望高手們多多寫出自已的經(jīng)驗(yàn)。

優(yōu)化一起放過來了~~~
關(guān)于優(yōu)化我的經(jīng)驗(yàn)是這樣的:
一、首先考慮從系統(tǒng)結(jié)構(gòu)上優(yōu)化,比如盡量減少待處理數(shù)據(jù)的無謂搬移,考慮你DSP片內(nèi)存儲(chǔ)量和每次處理數(shù)據(jù)量對系統(tǒng)結(jié)構(gòu)優(yōu)化,這部分的優(yōu)化應(yīng)該最早做;
二、其次從算法層面上著手,看采用的算法有沒有更好更簡單的計(jì)算方法,算法是否有某種對稱性,可否采用更合適的數(shù)據(jù)結(jié)構(gòu)等等,這方面的優(yōu)化比程序上的優(yōu)化更明顯;
三、如果算法層面暫時(shí)無更好的優(yōu)化辦法,看看軟件結(jié)構(gòu)能否優(yōu)化。
比如:
         1)多層的循環(huán)結(jié)構(gòu)能否減層。我經(jīng)常看到這樣的程序:
             for(i = 0; i++; i< A)
                 for(j = 0; j++ j< B)
                 {
                       E[j]  = C[j] - D[j];
                 }
             這個(gè)可以優(yōu)化成:
             for(i = 0; i++; i<A*B)
             {
                     E = C - D;
             }
            2) 關(guān)鍵循環(huán)結(jié)構(gòu)中的條件、跳轉(zhuǎn)指令應(yīng)盡量避免,哪怕會(huì)增加一些循環(huán)次數(shù),循環(huán)中沒有條件指令優(yōu)化器更容易優(yōu)化;
            3)關(guān)鍵循環(huán)不要調(diào)用子函數(shù)
            其它還有一些,具體可以看看手冊,手冊上講的很清楚
四、結(jié)合DSP系統(tǒng)的硬件結(jié)構(gòu)優(yōu)化
            1)看你處理的數(shù)據(jù)是放在片內(nèi)還是片外,如果放在片外的話這個(gè)建議將數(shù)據(jù)分塊分批倒入片內(nèi)處理,類似于流水結(jié)構(gòu);
            2)針對外部數(shù)據(jù)可對L2 cache優(yōu)化
五、結(jié)合DSP優(yōu)化器、指令系統(tǒng)等進(jìn)行優(yōu)化
           這部分可以詳細(xì)的看TI的手冊,大概有這幾個(gè)方法:
            1)優(yōu)化選項(xiàng),-o3 -pm 取消-g 等等這些選項(xiàng),如果你的軟件結(jié)構(gòu)很好,那么它們的優(yōu)化效果很明顯;
            2)加一些優(yōu)化指示符指導(dǎo)優(yōu)化,這部分看手冊,包括存儲(chǔ)地址無關(guān)性,SIMD(單指令多數(shù)據(jù)處理)等等;
            3)用一些專用指令,比如6000提供飽和加、溢出減指令,可以不必用條件判斷;
            4)如果效果還是不好,用線性匯編改寫你的程序,將你的優(yōu)化思想用線性匯編表述出來,一般到地步就可以了;
            5)如果線性匯編優(yōu)化未能盡顯你的優(yōu)化思想,那就匯編吧,優(yōu)化器不會(huì)再幫助你優(yōu)化,完全是你自己控制程序了,自己做軟件流水吧;
           這部分需要有比較豐富的優(yōu)化經(jīng)驗(yàn)和扎實(shí)的優(yōu)化功底,多多積累,多看資料。
最后要重點(diǎn)說下:
           優(yōu)化是沒有止境的,在對程序?qū)?xì)致優(yōu)化前要對程序每個(gè)部分測試下時(shí)間,對非常耗時(shí)的部分做優(yōu)化,一但滿足你的要求就可以,不要為了優(yōu)化而優(yōu)化,我們應(yīng)該有更重要的東西要學(xué),不要陷在優(yōu)化上而不能自拔!!

 

本文來自CSDN博客,轉(zhuǎn)載請標(biāo)明出處:http://blog.csdn.net/ww303875615/archive/2009/12/10/4977742.aspx

]]>
TMS320C6000系列DSP板級(jí)設(shè)計(jì)分析http://www.martymets.com/bbs/dispbbs.asp?BoardID=29&ID=1630&Page=1wangxinxin2010-11-22 14:21:47摘要:德州儀器公司的TMS320C6000(以下簡稱TI C6000)系列DSP是目前國際上性能最高的DSP芯片。本文從該系列芯片的封裝設(shè)計(jì)開始,分析討論了整個(gè)PCB的制作過程中需要注意的一系列問題,內(nèi)容主要包括C6000系列DSP的BGA封裝焊盤定義選擇的分析、多層板布線分析和SMT焊裝時(shí)關(guān)于元件貼片、 回流焊接技術(shù)的分析。本文對廣大的TI C6000系列DSP系統(tǒng)開發(fā)人員具有一定的借鑒意義。

引言

近年來,以高速數(shù)字信號(hào)處理器(DSP)為基礎(chǔ)的實(shí)時(shí)數(shù)字信號(hào)處理技術(shù)飛速發(fā)展,并獲得了廣泛的應(yīng)用。TMS320C6000系列DSP是德州儀器公司(TI)推出的定點(diǎn)、浮點(diǎn)系列DSP,其中定點(diǎn)產(chǎn)品峰值處理能力達(dá)到4800MIPS,浮點(diǎn)產(chǎn)品峰值處理能力達(dá)到1350MFLOPS,是目前國際上性能最高的DSP之一,其卓越的性能使得它在傳統(tǒng)的DSP領(lǐng)域、雷達(dá)、無線電基站等高端領(lǐng)域,以及寬帶媒體、身份識(shí)別等新興領(lǐng)域都有很好的應(yīng)用前景。隨著DSP性能和功能的不斷增強(qiáng),應(yīng)用系統(tǒng)的設(shè)計(jì)越來越復(fù)雜,要將DSP的性能充分釋放出來,合理的板級(jí)設(shè)計(jì)是DSP系統(tǒng)開發(fā)人員面臨的一個(gè)關(guān)鍵性的問題。

BGA封裝的設(shè)計(jì)分析

C6000系列DSP采用的是一種高密度BGA(Ball Grid Array)封裝,采用這種封裝的好處包括可以獲得更好的高頻電氣性能、比引腳封裝具有更長的使用周期、尺寸更小以及制造成本更低等。BGA封裝給芯片制造商以及芯片本身的性能都帶來了好處,但是對于板級(jí)開發(fā)人員來說,卻造成了很多不便之處,布線、焊裝、檢測與調(diào)試都比以前更加困難。
在設(shè)計(jì)密腳距(Fine-Pitch)的BGA封裝時(shí),不同技術(shù)的應(yīng)用會(huì)帶來不同的生產(chǎn)質(zhì)量,PCB上焊盤的合理設(shè)計(jì)能提高生產(chǎn)的可靠性。有兩種焊盤的設(shè)計(jì)方法可以選擇:阻焊定義(SMD,solder mask defined)的焊盤和無阻焊定義的焊盤(NSMD,non-solder mask defined)。圖1是這兩種焊盤的不同的焊裝效果。

圖1 SMD焊盤(a)和NSML焊盤(b)不同的焊裝效果(略)

這兩種焊盤定義都有其優(yōu)缺點(diǎn)。使用SMD焊盤時(shí),焊盤需要的尺寸比期望的尺寸大,而且如圖1所示,焊料與焊盤的接觸面尺寸由阻焊層的空隙大小決定,過大的焊盤使得走線非常困難。這種焊盤定義的優(yōu)點(diǎn)是它能夠精密的控制尺寸,焊盤也能夠更好的附著在PCB板的基底層上。與它相比,NSMD焊盤蝕刻在阻焊層內(nèi)(如圖1),焊盤的尺寸決定于銅層的蝕刻,沒有SMD焊盤尺寸精密,但是NSMD是TI公司推薦使用的焊盤定義,它可以在板上留下較多的布線空間以適應(yīng)密腳距的BGA封裝,可以使器件與PCB板的結(jié)合更加的緊密。圖2是TI公司提供的焊盤的最佳配置。另外,BGA封裝的器件需要采用回流焊設(shè)備進(jìn)行焊裝,為了保證器件封裝與PCB板有良好的連接,板子上的焊盤一般應(yīng)比器件上的管腳焊點(diǎn)(低溫金屬球)的直徑略大。

在密腳距的BGA封裝設(shè)計(jì)時(shí),布線也是需要注意的問題。電路板設(shè)計(jì)時(shí),通常采用0.1mm的最小線寬,0.2mm的間距。以腳間距為0.8mm的TMS320C6415(GLZ-532)為例,由于焊盤間的距離大概只有0.38mm(該距離是假定焊盤直徑為0.41mm時(shí)的最壞情況),在兩腳間最多只能布一條線。另外,焊盤通常通過較寬的銅導(dǎo)線與其他設(shè)備或者金屬化孔(PTH,Plated Through Hole)相連。作為一個(gè)規(guī)則,焊盤必須和PTH分離,將PTH放在焊盤的間隙處,并通過導(dǎo)線與焊盤連接是通用的辦法。

印制電路板的設(shè)計(jì)與分析

C6000系列DSP的板級(jí)設(shè)計(jì)不可避免地涉及到了多層印制電路板的設(shè)計(jì)問題,多層板有很多優(yōu)點(diǎn),但是因其密度和層數(shù)的關(guān)系,在加工制作過程中難度大,測試?yán)щy,可靠性保障程度相對于雙面板而言較低,一旦出現(xiàn)故障,幾乎沒有維修的可能。多層板的質(zhì)量和可靠性以及是否能取得合理的價(jià)格,很大程度上與多層板的設(shè)計(jì)有關(guān),作為設(shè)計(jì)者必須熟悉印制板有關(guān)的設(shè)計(jì)標(biāo)準(zhǔn)和要求。

通過使用高密度布線技術(shù),可以解決在設(shè)計(jì)中遇到的可供信號(hào)線通過的空間過小的難題。在高密度板設(shè)計(jì)中,孔密度(Via Density)是一個(gè)需要注意的因素。孔密度即特定面積的PCB板上的過孔個(gè)數(shù)。使用較小的過孔,可以增加PCB板的布通率,進(jìn)而使用更少的板面積,并能增加孔密度,微孔的使用解決了很多與孔密度相關(guān)的問題。下面想要分析的是兩種高密度的六層板的設(shè)計(jì)方法。

圖2 NSMD焊盤最佳配置(略)


通常在C600系列DSP的板級(jí)設(shè)計(jì)時(shí),BGA封裝外圍的孔密度相對較大,這是因?yàn)楣苣_焊點(diǎn)間布線路徑的有限選擇導(dǎo)致的。為了減少封裝外圍孔密度的問題,設(shè)計(jì)者可以如圖3所示的垂直設(shè)計(jì)方法,在焊盤之間垂直的轉(zhuǎn)一個(gè)0.25mm的孔,穿過內(nèi)層,設(shè)計(jì)者可以選擇適當(dāng)?shù)膶雍筒季的路徑,并使用一種被稱為狗骨形(dog bone)的導(dǎo)線來連接通孔和焊盤。這種方法最多需要為每一個(gè)管腳焊點(diǎn)轉(zhuǎn)一個(gè)通孔。除了這種方法以外,還有一種方法需要使用先進(jìn)的微孔技術(shù),通過使用盲孔和埋孔來連接各層。如圖4所示,盲孔將頂層和底層與中間層連接,埋孔連接中間層。這種方法需要使用激光在焊盤上轉(zhuǎn)0.1mm的微孔并在第二層埋上狗骨形的連接導(dǎo)線。因?yàn)槁窨讻]有暴露出來,可以使用較大的孔徑如0.25mm。如果需要可以在底層放上旁路電容和其他的分立元件。

SMT生產(chǎn)工藝流程中需要注意的問題 元器件貼片

元器件的貼片是SMT生產(chǎn)工藝流程中焊膏印刷后的第二道工序。BGA封裝具有"自對準(zhǔn)"的特性,在元器件貼片這道工序中由于熔化的焊料的表面張力可以使BGA封裝元件自動(dòng)的對準(zhǔn),在一定的偏差范圍內(nèi)使焊點(diǎn)和焊盤更好的結(jié)合。作為慣例,放置BGA封裝元件時(shí)焊盤尺寸50%以內(nèi)的偏差都是允許的。

圖3 通用的PCB板設(shè)計(jì)框圖(略)
圖4 微孔化的PCB板設(shè)計(jì)方法(略)


元器件的貼片通常都是使用能夠根據(jù)BGA金屬球版本來放置BGA封裝器件的設(shè)備完成的。如果金屬球的版本號(hào)對設(shè)備而言無效的話,可以根據(jù)元器件的邊緣來對齊器件,在這種情況下,由于器件的差異性,放置元器件時(shí)可能會(huì)有很大的偏差,推薦使用金屬球的對準(zhǔn)的方式。放置元器件時(shí)注意不要將焊膏濺出,一般200到300克力就可以使得元器件很好地與焊膏接觸了。

回流焊接

回流焊接是BGA裝配過程中最難控制的工序,在回流過程中需要注意檢查PCB板上所有器件回流時(shí)的形態(tài)并確保它們在焊接過程中有充分的回流。當(dāng)使用的回流爐不能使PCB板均勻受熱的情況下,需要在板上不同的位置安裝多重的熱電偶。如果需要的話,還應(yīng)該重新調(diào)節(jié)溫度使元器件有更好的焊接。回流一般經(jīng)過預(yù)熱、浸潤、回流、冷卻幾個(gè)階段。預(yù)熱時(shí)緩慢加熱,較理想的升溫速度為每秒1.5℃到2℃,升溫至120℃到140℃;浸潤階段里,額外的揮發(fā)性物質(zhì)被蒸發(fā)掉,助焊劑也開始揮發(fā)。這個(gè)階段的設(shè)置很大程度上依賴與焊膏的選擇,一般保持120℃到170℃,持續(xù)時(shí)間約120到180秒較好,以確保雜質(zhì)盡可能的揮發(fā)。回流階段應(yīng)該使溫度很快的上升到使焊料熔化成液體的溫度,一般最高的溫度為220℃到235℃,超過180℃的持續(xù)時(shí)間為60到75秒,一旦焊接完畢,進(jìn)入到冷卻的階段,一般降溫的速度控制在2到3℃/秒。

小結(jié)

本文對TI C6000 DSP板級(jí)設(shè)計(jì)時(shí)需要注意的問題進(jìn)行了分析,除了以上提到的這些問題,要想很快設(shè)計(jì)出PCB板,并使BGA封裝可靠的連接,還需要更好的和制板商以及貼片廠家溝通,以了解他們能夠達(dá)到的制造工藝水平,并告知在制作過程中需要他們特別注意問題。

]]>
基于TI C6000系列DSP的C/C++程序優(yōu)化技術(shù)http://www.martymets.com/bbs/dispbbs.asp?BoardID=29&ID=1629&Page=1wangxinxin2010-11-22 14:19:47摘 要:在現(xiàn)代DSP的開發(fā)中,越來越多地采用C/c++作為開發(fā)語言,而C/C++程序的優(yōu)化成為DSP’軟件開發(fā)的重要環(huán)節(jié)。在此介紹TI C6000的軟件開發(fā)流程,重點(diǎn)討論C6000系列的C/C++程序優(yōu)化技術(shù),包括優(yōu)化流程,C/C++代碼優(yōu)化方法,編寫線形匯編代碼優(yōu)化方法等。為DSP的C/C++軟件開發(fā)提供了全面的程序優(yōu)化技術(shù)和方法,對實(shí)際系統(tǒng)的開發(fā)具有重要的現(xiàn)實(shí)意義。

關(guān)鍵詞:C6000;程序優(yōu)化;軟件流水;線性匯編

0 引 言

    目前在DSP平臺(tái)上編程多使用匯編語言與C語言,為了追求代碼的高效,過去一般用匯編語言來編制。DSP程序匯編語言簡潔高效,能夠直接操作DSP的內(nèi)部寄存器、存儲(chǔ)空間、外設(shè),但可讀性、可修改性、可移植性較差;隨著DSP應(yīng)用范圍不斷延伸,應(yīng)用的日趨復(fù)雜,匯編語言程序在可讀性、可修改性、可移植性和可重用性的缺點(diǎn)日益突出,軟件需求與軟件生產(chǎn)力之間的矛盾日益嚴(yán)重。引入高級(jí)語言(如C語言,C++,Java),可以解決該矛盾。在高級(jí)語言中,C語言是一種較為高效的高級(jí)語言,在可讀性、可移植性等方面優(yōu)于匯編指令。各個(gè)DSP芯片公司都相繼推出了相應(yīng)的C語言編譯器。

    但由于DSF結(jié)構(gòu)的特殊性,使得該平臺(tái)上的C語言編譯器無法充分發(fā)揮DSP器件的性能優(yōu)勢。同樣功能的C語言程序,效率往往只有直接書寫的匯編程序的幾分之一甚至幾十分之一,因此有必要根據(jù)DSP的特性對C語言編寫的程序進(jìn)行進(jìn)一步的優(yōu)化。

l TMS320C6000處理器介紹

    TMS320C6000是TMS320系列產(chǎn)品中的新一代高性能DSP芯片,共分為兩大系列。其中定點(diǎn)系列為TMS320C62xx和TMS320C64xx;浮點(diǎn)系列為TMS320C67xx。由于TMS320C6000的開發(fā)主要面向數(shù)據(jù)密集型算法,它有著豐富的內(nèi)部資源和強(qiáng)大的運(yùn)算能力,所以被廣泛地應(yīng)用于數(shù)字通信和圖像處理等領(lǐng)域。

    C6000系列CPU中的8個(gè)功能單元可以并行操作,并且其中兩個(gè)功能單元為硬件乘法運(yùn)算單元,大大地提高了乘法速度。DSP采用具有獨(dú)立程序總線和數(shù)據(jù)總線的哈佛總線結(jié)構(gòu),僅片內(nèi)程序總線寬度就可達(dá)到256位,即每周期可并行執(zhí)行8條32位指令;片內(nèi)兩套數(shù)據(jù)總線的寬度分別為32位;此外,DSP還有一套32位DMA專用總線用于傳輸。靈活的總線結(jié)構(gòu)使得數(shù)據(jù)瓶頸對系統(tǒng)性能的限制大大緩解。C6000的通用寄存器組能支持32位和40位定點(diǎn)數(shù)據(jù)操作,另外C67xx和C64xx還分別支持64位雙精度數(shù)據(jù)和64位雙字定點(diǎn)數(shù)據(jù)操作。除了多功能單元外,流水技術(shù)是提高DSP程序執(zhí)行效率的另一主要手段。由于TMS320C6000的特殊結(jié)構(gòu),功能單元同時(shí)執(zhí)行的各種操作可由VLlW長指令分配模塊來同步執(zhí)行,使8條并行指令同時(shí)通過流水線的每個(gè)節(jié)拍,極大地提高了機(jī)器的吞吐量。

2 C6000軟件開發(fā)流程

    圖1為C6000的軟件開發(fā)流程圖。圖中陰影部分是開發(fā)C代碼的常規(guī)流程,其他部分用于輔助和加速開發(fā)討程.

基于TI C6000系列DSP的C/C++程序優(yōu)化技術(shù) - lzhcqu=

    C/C++源文件首先經(jīng)過C/C++編譯器(C/C++cornpiler)轉(zhuǎn)換為C6000匯編源代碼。編譯器、優(yōu)化器(optimizer)和交疊工具是C/C++編譯器的組成部分。編譯器使用戶能一步完成編譯、匯編和連接;優(yōu)化器調(diào)整合修改代碼以提高C程序的效率;交疊工具把C/C++語句和對應(yīng)的匯編語句交疊列出。

匯編源代碼再經(jīng)過匯編器(Assembier)翻譯為機(jī)器語言目標(biāo)文件。機(jī)器語言是基于通用目標(biāo)文件格式(Common Object File Format,COFF)的。

    連接器(Linker)連接目標(biāo)文件,生成一個(gè)可執(zhí)行文件。它要完成地址的重分配(Relocation)和解析外部引用(Resolve External References)。

    得到可執(zhí)行文件之后就可以進(jìn)行調(diào)試。可用軟件仿真器(Simulator)在PC機(jī)上對指令和運(yùn)行時(shí)間進(jìn)行精確仿真;用XDS硬件仿真器(Emulator)在目標(biāo)板上進(jìn)行調(diào)試。

    調(diào)試通過后即可下載到目標(biāo)板進(jìn)行獨(dú)立運(yùn)行。

3 程序優(yōu)化流程及方法

3.1 程序優(yōu)化階段

    由于DSP應(yīng)用的復(fù)雜度,在用C語言進(jìn)行DSP軟件開發(fā)時(shí),一般先在基于通用微處理器的PC機(jī)或工作站上對算法進(jìn)行仿真,仿真通過后再將C程序移植到DSP平臺(tái)中。

    所以,DSP的軟件開發(fā)與優(yōu)化流程主要分為3個(gè)階段:C代碼開發(fā)階段;C代碼優(yōu)化階段;手工匯編代碼重編寫階段。如圖2所示。

基于TI C6000系列DSP的C/C++程序優(yōu)化技術(shù) - lzhcqu=

    在圖2中,第一階段:沒有C6000知識(shí)的用戶能開發(fā)自己的C代碼,然后使用CCS中的代碼剖析工具,確定C代碼中可能存在的低效率段,為進(jìn)一步代碼優(yōu)化做好準(zhǔn)備。第二階段:C代碼優(yōu)化階段。在這個(gè)階段,主要利用intrinsics函數(shù)以及編譯器編譯選項(xiàng)來提高代碼的性能。優(yōu)化后利用軟件模擬器檢查代碼的效率,如仍不能達(dá)到期望的效率,則進(jìn)入第三階段。第三階段:寫線性匯編優(yōu)化。在這個(gè)階段中,用戶把最耗費(fèi)時(shí)間的代碼抽取出來,重新用線性匯編寫,然后使用匯編優(yōu)化器優(yōu)化這些代碼。在第一次寫線性匯編時(shí),可以不考慮流水線和寄存器分配。然后,提高線性匯編代碼性能,往代碼中添加更多的細(xì)節(jié),如分配寄存器等。由于這一階段所需的時(shí)間要比第二階段多,所以整個(gè)代碼的優(yōu)化盡量放在第二階段來完成,而少使用線性匯編代碼優(yōu)化。

3.2 C/C++代碼優(yōu)化方法

    為了使C/C++代碼獲得最好的性能,可以使用編譯選項(xiàng)、軟件流水、內(nèi)聯(lián)函數(shù)和循環(huán)展開等方法來對代碼進(jìn)行優(yōu)化,以提高代碼執(zhí)行速度,并減小代碼尺寸。

3.2.1 編譯器選項(xiàng)優(yōu)化

    C/C++編譯器可以對代碼進(jìn)行不同級(jí)別的優(yōu)化。高級(jí)優(yōu)化由專門的優(yōu)化器完成,低級(jí)的和目標(biāo)DSP有關(guān)的優(yōu)化由代碼生成器完成。圖3為編譯器、優(yōu)化器和代碼生成器的執(zhí)行圖。

基于TI C6000系列DSP的C/C++程序優(yōu)化技術(shù) - lzhcqu=

    當(dāng)優(yōu)化器被激活時(shí),將完成圖3所示的過程。C/C++語言源代碼首先通過一個(gè)完成預(yù)處理的解析器(Parser),生成一個(gè)中間文件(.if)作為優(yōu)化器(Optimi-zer)的輸入。優(yōu)化器生成一個(gè)優(yōu)化文件(.opt),這個(gè)文件作為完成進(jìn)一步優(yōu)化的代碼生成器(Code Genera-tor)的輸入,最終生成匯編文件(.a(chǎn)sm)。

    最簡單執(zhí)行優(yōu)化的方法是采用cl6x編譯程序,在命令行設(shè)置一On選項(xiàng)即可。n是優(yōu)化的級(jí)別(n為0,1,2,3),它控制優(yōu)化的類型和程度。

3.2.2 軟件流水優(yōu)化

    軟件流水是編排循環(huán)指令,使循環(huán)的多次迭代并行執(zhí)行的技術(shù)。使用一02和一03選項(xiàng)編譯C/C++程序時(shí),編譯器就從程序中收集信息,嘗試對程序循環(huán)做軟件流水。

    圖4顯示一個(gè)軟件流水循環(huán)。圖4中A,B,C,D和E表示1次迭代中的各條指令;A1,A2,A3,A4和A5表示一條指令執(zhí)行的各階段。循環(huán)中,一個(gè)周期最多可并行執(zhí)行5條指令,即圖中陰影部分所示的循環(huán)核(Loop Kernel)部分。循環(huán)核前面的部分稱為流水循環(huán)填充(Pipelined Loop Prolog),循環(huán)核后面部分稱為循環(huán)排空(Pipelined Loop Epilog)。

基于TI C6000系列DSP的C/C++程序優(yōu)化技術(shù) - lzhcqu=

3.2.3 內(nèi)聯(lián)函數(shù)優(yōu)化

     通過下面的方法改進(jìn)C語言程序,可使編譯出的代碼性能顯著提高:

    (1)使用intrinsics(內(nèi)聯(lián)函數(shù))替代復(fù)雜的C/C++代碼;

    (2)使用字(Word)訪問存放在32位寄存器的高16位和低16位字段的數(shù)據(jù);

    (3)使用雙字訪問存放在64位寄存器的32位數(shù)據(jù)(僅指C64xx/C67XX)。

    C6000編譯器提供了許多內(nèi)聯(lián)函數(shù),它們直接對應(yīng)著C62X/C64X/C67X指令可快速優(yōu)化C代碼。這些內(nèi)聯(lián)函數(shù)不易用C/C++語言實(shí)現(xiàn)其功能。內(nèi)聯(lián)函數(shù)用前下劃線“_”特別標(biāo)示,其使用方法與調(diào)用函數(shù)一樣。例如C語言的飽和加法只能寫為需要多周期的函數(shù):

    基于TI C6000系列DSP的C/C++程序優(yōu)化技術(shù) - lzhcqu=

    這段復(fù)雜的代碼可以用_sadd()內(nèi)聯(lián)函數(shù)實(shí)現(xiàn),它是一個(gè)單周期的C6x指令。

    result=_sadd(a,b);

    要提高C6000數(shù)據(jù)處理率,應(yīng)使一條Load/Store指令能訪問多個(gè)數(shù)據(jù)。C6000有與內(nèi)聯(lián)函數(shù)相關(guān)的指令,例如_add2(),_mpyhl(),_mpylh()等,這些操作數(shù)以16位數(shù)據(jù)形式存儲(chǔ)在32位寄存器的高位部分和低位部分。當(dāng)程序需要對一連串短型數(shù)據(jù)進(jìn)行操作時(shí),可使用字1次訪問2個(gè)短型數(shù)據(jù),然后使用C6000相應(yīng)指令來處理數(shù)據(jù)。相似的在C64x或C67x中,有時(shí)需要執(zhí)行64位的LDDW來訪問兩個(gè)32位數(shù)據(jù),4個(gè)16位數(shù)據(jù),甚至8個(gè)8位數(shù)據(jù)。

3.2.4 循環(huán)展開

    循環(huán)展開是改進(jìn)性能的另一種,即把小循環(huán)的迭代展開,以讓循環(huán)的每次迭代出現(xiàn)在代碼中。這種方法可增加并行執(zhí)行的指令數(shù)。當(dāng)每次迭代操作沒有充分利用C6000結(jié)構(gòu)的所有資源時(shí),可使用循環(huán)展開提高性能。

    有3種使循環(huán)展開的方法:

    (1)編譯器自動(dòng)執(zhí)行循環(huán)展開;

    (2)在程序中使用UNROLL偽指令建議編譯器做循環(huán)展開;

    (3)用戶自己在C/C++代碼中展開。

3.3 匯編優(yōu)化

    在對C/C++代碼使用了所有的C/C++優(yōu)化手段之后,如果仍然不滿意代碼的性能,就可以寫線性匯編程序,然后用匯編優(yōu)化器進(jìn)行優(yōu)化,生成高性能的代碼。

3.3.1 寫線性匯編

    使用C6000的剖析工具(Profiling Tools)可以找到代碼中最耗費(fèi)時(shí)間的部分,就是這部分需要用線性匯編重寫。線性匯編代碼與匯編源代碼相似,但是,線性匯編代碼中沒有指令延遲和寄存器使用信息。這樣做的目的是由匯編優(yōu)化器來為自己設(shè)定這些信息。

    寫線性匯編代碼時(shí),需要知道:匯編優(yōu)化器偽指令、影響匯編優(yōu)化器行為的選項(xiàng)、TMS320C6000指令、線性匯編源語句語法、指定寄存器或寄存器組、指定功能單元、源代碼注釋等。

3.3.2 匯編優(yōu)化器優(yōu)化

    匯編優(yōu)化器的任務(wù)主要有:

    (1)編排指令,最大限度的利用C6000的并行能力;

    (2)確保指令滿足C6000的延遲要求(Latency Requirements);

    (3)為源代碼分配寄存器。

4 結(jié) 語

    C6000系列的DSP C/c++代碼優(yōu)化比傳統(tǒng)的代碼優(yōu)化要方便的多,但要真正發(fā)揮其芯片的工作效率還是需要一定的經(jīng)驗(yàn)和技巧。這不僅要求開發(fā)人員熟悉其硬件體系,還要求對編譯器的編譯原理有一定的理解。另外,在C語言層面上要達(dá)到DSP芯片的峰值即8條指令并行是很難的,大多情況下都只能達(dá)到6.7條指令并行。在實(shí)際開發(fā)中,若優(yōu)化結(jié)果已達(dá)到6,7條指令并行卻還離實(shí)時(shí)的要求相差很遠(yuǎn),再花大量的人力去力求達(dá)到8條指令并行是不經(jīng)濟(jì)的,此時(shí)應(yīng)該考慮其他的技術(shù)改進(jìn)或策略上的調(diào)整以求達(dá)到目的。

]]>
TMS320C6000系列DSP的Flash啟動(dòng)設(shè)計(jì)http://www.martymets.com/bbs/dispbbs.asp?BoardID=29&ID=1628&Page=1wangxinxin2010-11-22 14:16:42隨著近年來數(shù)字信號(hào)處理器(DSP)技術(shù)的迅猛發(fā)展,其越來越廣泛地應(yīng)用于國民經(jīng)濟(jì)的各個(gè)領(lǐng)域中圖片點(diǎn)擊可在新窗口打開查看其中,TI公司推出的TMS320C6000系列DSP器件更是在許多需要進(jìn)行大量數(shù)字信號(hào)處理運(yùn)算并兼顧高實(shí)時(shí)性要求的場合得以應(yīng)用圖片點(diǎn)擊可在新窗口打開查看TMS320C6000系列DSP的系統(tǒng)設(shè)計(jì)過程中,DSP器件的啟動(dòng)加載設(shè)計(jì)是較難解決的問題之一圖片點(diǎn)擊可在新窗口打開查看

  C6000系列DSP的啟動(dòng)加載方式包括不加載、主機(jī)加載和EMIF加載3種圖片點(diǎn)擊可在新窗口打開查看

  3種加載方式的比較:不加載方式僅限于存儲(chǔ)器0地址不是必須映射到RAM空間的器件,否則在RAM空間初始化之前CPU會(huì)讀取無效的代碼而導(dǎo)致錯(cuò)誤;主機(jī)加載方式則要求必須有一外部主機(jī)控制DSP的初始化,這將增加系統(tǒng)的成本和復(fù)雜度,在很多實(shí)際場合是難以實(shí)現(xiàn)的;EMIF加載方式的DSP與外部ROM/Flash接口較為自由,但片上Bootloader工具自動(dòng)搬移的代碼量有限(1 KB/64 KB)圖片點(diǎn)擊可在新窗口打開查看本文主要討論常用的EMIF加載方式圖片點(diǎn)擊可在新窗口打開查看

  1 EMIF加載分析

  實(shí)際應(yīng)用中,通常采用的是EMIF加載方式,把代碼和數(shù)據(jù)表存放在外部的非易失性存儲(chǔ)器里(常采用Flash器件)圖片點(diǎn)擊可在新窗口打開查看

  下面以TMS320C6000系列中最新的浮點(diǎn)CPU——TMS320C6713(簡稱“C6713”)為例,詳細(xì)分析其EMIF加載的軟硬件實(shí)現(xiàn)圖片點(diǎn)擊可在新窗口打開查看

  硬件方面,其與16位寬度的Flash器件的接口如圖1所示圖片點(diǎn)擊可在新窗口打開查看

圖片點(diǎn)擊可在新窗口打開查看

  對于不同的DSP器件,加載方式的配置引腳稍有不同圖片點(diǎn)擊可在新窗口打開查看C6713的配置引腳及其定義如表1所列圖片點(diǎn)擊可在新窗口打開查看

圖片點(diǎn)擊可在新窗口打開查看

  應(yīng)用程序的大小決定了片上的Bootloadet工具是否足夠把所有的代碼都搬移到內(nèi)部RAM里圖片點(diǎn)擊可在新窗口打開查看對于C6713,片上的Bootloader工具只能將1 KB的代碼搬入內(nèi)部RAM圖片點(diǎn)擊可在新窗口打開查看通常情況下,用戶應(yīng)用程序的大小都會(huì)超過這個(gè)限制圖片點(diǎn)擊可在新窗口打開查看所以,需要在外部Flash的前1 KB范圍內(nèi)預(yù)先存放一小段程序,待片上Bootloader工具把此段代碼搬移入內(nèi)部并開始執(zhí)行后,由這段代碼實(shí)現(xiàn)將Flash中剩余的用戶應(yīng)用程序搬移入內(nèi)部RAM中圖片點(diǎn)擊可在新窗口打開查看此段代碼可以被稱作一個(gè)簡單的二級(jí)Bootloader圖片點(diǎn)擊可在新窗口打開查看

  圖2所示為使用二級(jí)Bootloader時(shí)的CPU運(yùn)行流程圖片點(diǎn)擊可在新窗口打開查看

圖片點(diǎn)擊可在新窗口打開查看

  使用二級(jí)Bootloader需要考慮以下幾個(gè)事項(xiàng):

  ·需要燒寫的COFF(公共目標(biāo)文件格式)段的選擇;

  ·編寫二級(jí)Bootloader;

  ·將選擇的COFF段燒入Flash圖片點(diǎn)擊可在新窗口打開查看

  一個(gè)COFF段就是占據(jù)一段連續(xù)存儲(chǔ)空間的程序或數(shù)據(jù)塊圖片點(diǎn)擊可在新窗口打開查看COFF段分為3種類型:代碼段、初始化數(shù)據(jù)段和未初始化數(shù)據(jù)段圖片點(diǎn)擊可在新窗口打開查看

  對于EMIF加載方式,需要加載的鏡像由代碼段(如.vectors和.text等)和初始化數(shù)據(jù)段(如.cinit,.const,.switch,.data等)構(gòu)成圖片點(diǎn)擊可在新窗口打開查看另外,可以單獨(dú)定義一個(gè).boot-load段存放二級(jí)Bootloader圖片點(diǎn)擊可在新窗口打開查看此段也需要寫入Flash圖片點(diǎn)擊可在新窗口打開查看

  所有未初始化的數(shù)據(jù)段(如.bss等)都不需要燒入到Flash中圖片點(diǎn)擊可在新窗口打開查看

  2 二級(jí)Bootloader的編寫

  ·由于執(zhí)行二級(jí)Bootloader時(shí)C的運(yùn)行環(huán)境還未建立起來,所以必須用匯編語言編寫圖片點(diǎn)擊可在新窗口打開查看二級(jí)Bootloader可參照其他類似文獻(xiàn)及TI相關(guān)文檔圖片點(diǎn)擊可在新窗口打開查看此處不再贅述圖片點(diǎn)擊可在新窗口打開查看

  ·CCS中用戶工程編譯鏈接后產(chǎn)生的.map文件包含了存儲(chǔ)器的詳細(xì)分配信息圖片點(diǎn)擊可在新窗口打開查看一個(gè)典型的map文件中包含的存儲(chǔ)器分配信息如表2所列圖片點(diǎn)擊可在新窗口打開查看

  ·與cmd文件不同,map文件不僅包含了各段存儲(chǔ)在哪一段內(nèi)存空間的信息,從map文件中還可以具體知道每個(gè)內(nèi)存區(qū)間中有多少被實(shí)際使用(燒寫Flash時(shí)會(huì)用到這個(gè)參數(shù))圖片點(diǎn)擊可在新窗口打開查看內(nèi)存區(qū)間中未被使用部分是不需要寫入Flash內(nèi)容的,實(shí)際被使用的部分才是真正需要寫人到Flash中的內(nèi)容圖片點(diǎn)擊可在新窗口打開查看

  3 Flash的燒寫

  把代碼等寫入Flash的辦法大體上可分為以下幾種:

  ① 使用通用燒寫器寫入圖片點(diǎn)擊可在新窗口打開查看

  ② 使用CCS中自帶的FlashBurn工具圖片點(diǎn)擊可在新窗口打開查看

  ③ 用戶自己編寫燒寫Flash的程序,由DSP將內(nèi)存映像寫入Flash圖片點(diǎn)擊可在新窗口打開查看

  其中,使用通用燒寫器燒寫需要將內(nèi)存映像轉(zhuǎn)換為二進(jìn)制或十六進(jìn)制格式的文件,而且要求Flash器件是可插拔封裝的圖片點(diǎn)擊可在新窗口打開查看這將導(dǎo)致器件的體積較大,給用戶的設(shè)計(jì)帶來不便圖片點(diǎn)擊可在新窗口打開查看

  使用TI公司提供的FlashBurn工具的好處在于使用較為直觀圖片點(diǎn)擊可在新窗口打開查看FlashBurn工具提供的圖形界面可以方便地對Flash執(zhí)行擦除、編程和查看內(nèi)容等操作圖片點(diǎn)擊可在新窗口打開查看但這種力法的缺點(diǎn)也不少:首先,F(xiàn)lashBurn工具運(yùn)行時(shí)需要下載一個(gè).out鏡像(FBTC,F(xiàn)lashBurn Target Component)到DSP系統(tǒng)中,然后由上位PC機(jī)通過仿真器發(fā)送消息(指令和數(shù)據(jù))給下位DSP,具體對Flash的操作由FBTC執(zhí)行圖片點(diǎn)擊可在新窗口打開查看然而,這個(gè)FBTC一般是針對TI公司提供的DSP專門編寫的,與板上使用的Flash的接口寬度(默認(rèn)是8位)、操作關(guān)鍵字(因生產(chǎn)廠商不同而各異)都有關(guān),所以,對用戶自己制作的硬件不一定適合圖片點(diǎn)擊可在新窗口打開查看例如:如果用戶自己的電路板上使用的是與DSK同品牌的Flash芯片,接口為16位數(shù)據(jù)寬度,那么,使用FlashBur’n工具燒寫將最多只有一半的Flash容量能夠被使用,要想正確實(shí)現(xiàn)]EMIF加載就必須選擇8位加載方式圖片點(diǎn)擊可在新窗口打開查看這就造成了Flash存儲(chǔ)器資源的浪費(fèi),同時(shí)限制了用戶開發(fā)的靈活性圖片點(diǎn)擊可在新窗口打開查看

  雖然TI公司提供了FBTC的源代碼供有需要的用戶修改,但這樣用戶需要去了解FBTC的運(yùn)行機(jī)制及其與上位機(jī)的通信協(xié)議,并對Flash燒寫函數(shù)進(jìn)行修改圖片點(diǎn)擊可在新窗口打開查看用戶可能需要修改的幾個(gè)地方如下:對Flash編程的關(guān)鍵字和地址,BurnFlash函數(shù)中的數(shù)據(jù)指針和EMIF口的配置(針對1.0版本FBTC)圖片點(diǎn)擊可在新窗口打開查看這就給用戶開發(fā)帶來了不便圖片點(diǎn)擊可在新窗口打開查看把開發(fā)時(shí)間浪費(fèi)在了解一個(gè)并不算簡單的Flash燒寫工具上并不是一個(gè)好的選擇圖片點(diǎn)擊可在新窗口打開查看

圖片點(diǎn)擊可在新窗口打開查看

  其次,F(xiàn)lashBurn工具不能識(shí)別.out文件,只接受..ex的十六進(jìn)制文件,因此,需要將.out文件轉(zhuǎn)換為.hex文件圖片點(diǎn)擊可在新窗口打開查看這個(gè)轉(zhuǎn)換的工具就是TI公司提供的Hex6x.exe工具圖片點(diǎn)擊可在新窗口打開查看轉(zhuǎn)換過程的同時(shí),需要一個(gè)cmd文件(即圖3中的Hex.cmd)指定作為輸入的.out文件,輸出的.hex文件的格式,板上Flash芯片的類型和大小,需要寫入Flash中的COFF段名等圖片點(diǎn)擊可在新窗口打開查看

圖片點(diǎn)擊可在新窗口打開查看

  使用用戶自己編寫的燒寫Flash的程序較為靈活,避免了文件格式轉(zhuǎn)換的繁瑣圖片點(diǎn)擊可在新窗口打開查看不過,此方法要求用戶對自己使用的Flash芯片較為熟悉圖片點(diǎn)擊可在新窗口打開查看

  通常采用的Flash燒寫程序是單獨(dú)建立一個(gè)工程的辦法:先把用戶應(yīng)用程序(包含二級(jí)Bootloader)編譯生成的.out文件裝載到目標(biāo)DSP系統(tǒng)的RAM中,再把燒寫Flash的工程編譯生成的.out文件裝載到目標(biāo)DSP系統(tǒng)RAM的另一地址范圍,執(zhí)行Flash燒寫程序,完成對Flash的燒寫圖片點(diǎn)擊可在新窗口打開查看這個(gè)辦法要注意避免兩次裝載可能產(chǎn)生的地址覆蓋,防止第2次裝載修改了應(yīng)該寫入Flash的第1次裝載的內(nèi)容圖片點(diǎn)擊可在新窗口打開查看

  實(shí)際上,可以將Flash燒寫程序嵌入到用戶主程序代碼中去,比單獨(dú)建立一個(gè)燒寫Flash的工程更為方便圖片點(diǎn)擊可在新窗口打開查看Flash芯片的燒寫程序段如下:

圖片點(diǎn)擊可在新窗口打開查看
圖片點(diǎn)擊可在新窗口打開查看

  ChipErase函數(shù)和ProgramFlashArray函數(shù)的編寫可參照用戶使用的Flash芯片的Datasheet以及參考文獻(xiàn)[1]圖片點(diǎn)擊可在新窗口打開查看

  ProgramFlashArray函數(shù)的第1個(gè)參數(shù)是源地址指針(指向內(nèi)部Ram),第2個(gè)參數(shù)是目標(biāo)地址指針(指向外部Flash),第3個(gè)參數(shù)是要寫入的數(shù)據(jù)長度(單位為字)圖片點(diǎn)擊可在新窗口打開查看

  編寫Flash燒寫函數(shù)時(shí)有3點(diǎn)需要注意:

  ① 指向Flash地址的指針圖片點(diǎn)擊可在新窗口打開查看由于C6713的低兩位地址用于譯碼作字節(jié)選擇,地址總線的最低位是EA2,所以,邏輯地址需要適當(dāng)?shù)囊莆徊拍苷_地指向日標(biāo)圖片點(diǎn)擊可在新窗口打開查看

  對8位存儲(chǔ)器而言,應(yīng)該左移2位;對16位存儲(chǔ)器而言,應(yīng)該左移1位;對于32位存儲(chǔ)器,則不需要移位圖片點(diǎn)擊可在新窗口打開查看例如要從(往)Flash的0x00000003地址讀(寫)一個(gè)字,其邏輯地址應(yīng)該是0x90000000+(0x0003<<1),而非0x90000003圖片點(diǎn)擊可在新窗口打開查看

  ② map文件中各內(nèi)存區(qū)間被實(shí)際占用的尺寸大小是以字節(jié)為單位的,而ProgramFlashArray函數(shù)寫入Flash的數(shù)據(jù)單位為字,所以需要將map文件中得到的尺寸大小的一半作為ProgramFlashArray函數(shù)的參數(shù)圖片點(diǎn)擊可在新窗口打開查看

  ③ 燒寫函數(shù)中使用了flash_burned常量作為判斷是否需要對Flash操作的依據(jù),且將其初始化為1圖片點(diǎn)擊可在新窗口打開查看這是為了避免Flash加載之后會(huì)執(zhí)行對Flash的操作圖片點(diǎn)擊可在新窗口打開查看此變量應(yīng)在燒寫Flash時(shí)手動(dòng)修改為0圖片點(diǎn)擊可在新窗口打開查看

  在仿真加載方式下,可以在CCS里的watchwindow窗口手動(dòng)修改flash_burned常量為0,強(qiáng)迫CPU進(jìn)入對Flash編程的程序段圖片點(diǎn)擊可在新窗口打開查看實(shí)驗(yàn)證明,在仿真加載方式下手動(dòng)修改flash_burned并不影響寫入到Flash中的flash_burn-ed的值(仍為1),所以,寫入Flash的flash_burned的值仍然是1圖片點(diǎn)擊可在新窗口打開查看在系統(tǒng)Flash加載之后,CPU就會(huì)跳過此段代碼,實(shí)現(xiàn)正確運(yùn)行圖片點(diǎn)擊可在新窗口打開查看

  4 結(jié) 論

  本Flash加載方案以C6713為例,稍加修改即可適用于TMS320C6000系列的其他DSP器件圖片點(diǎn)擊可在新窗口打開查看經(jīng)過在研制的伺服測試平臺(tái)中的應(yīng)用,證明本方法切實(shí)可行且易于實(shí)現(xiàn),避免了目標(biāo)文件格式的轉(zhuǎn)換,比通常采用的FlashBurn工具使用起來更靈活方便,用戶可以通過簡單修改Flash燒寫函數(shù)使之適應(yīng)自己的硬件情況圖片點(diǎn)擊可在新窗口打開查看對于Flash器件接口與TI的DSP不一致的情況,本方案是一個(gè)很好的選擇

]]>
TMS320C6000嵌入式系統(tǒng)優(yōu)化編程的研究http://www.martymets.com/bbs/dispbbs.asp?BoardID=29&ID=1627&Page=1wangxinxin2010-11-22 14:13:571 TMS320C6000的硬件設(shè)計(jì)和指令系統(tǒng)

  TMS320C6000系列DSP(數(shù)字信號(hào)處理器)是TI公司最新推出的一種并行處理的數(shù)字信號(hào)處理器。它是基于TI的VLIW技術(shù)的,其中TMS320C62xx是定點(diǎn)處理器,TMS320C67xx是浮點(diǎn)處理器。本文主要討論TMS320C6201。該處理器的工作頻率最高可以采用50MHz,經(jīng)內(nèi)部4倍頻后升至200MHz,每個(gè)時(shí)鐘周期最多可以并行執(zhí)行8條指令,從而可以實(shí)現(xiàn)1600MIPS的定點(diǎn)運(yùn)算能力,而且完成1024定點(diǎn)FFT的時(shí)間只需70μs。

1.1 TMS320C6000的硬件結(jié)構(gòu)

  圖1是TMS320C6000 CPU的結(jié)構(gòu)圖。

圖片點(diǎn)擊可在新窗口打開查看

TMS320C6000的CPU有兩個(gè)數(shù)據(jù)通道A和B,每個(gè)通道有16個(gè)32位字長的寄存器(A0~A15,B0~B15),四個(gè)功能單元(L,S,M,D),每個(gè)功能單元負(fù)責(zé)完成一定的算術(shù)或者邏輯運(yùn)算。A、B兩通道的寄存器并不是完全共享,只能通過TMS320C6000提供的兩個(gè)交換數(shù)據(jù)通道1X、2X,才能實(shí)現(xiàn)處理單元從不同通道的寄存器堆那里獲取32位字長的操作數(shù)。

  TMS320C6000的地址線為32位,存儲(chǔ)器尋址空間是4G。C6201片內(nèi)集成有1Mbit SRAM——512Kbit的程序存儲(chǔ)器(根據(jù)需要可全部配置成Cache)和512Kbit的數(shù)據(jù)存儲(chǔ)器。通過片內(nèi)的程序存儲(chǔ)空間控制器,CPU一次可以取出256bit,即一次最多可以取出8條32位指令。

  C6201有32位的外部存儲(chǔ)接口EMIF為CPU訪問外圍設(shè)備提供了無縫接口。外圍設(shè)備可以是同步動(dòng)態(tài)存儲(chǔ)器(SDRAM)、同步突發(fā)靜態(tài)存儲(chǔ)器(SBSRAM)、靜態(tài)存儲(chǔ)器(SRAM)、只讀存儲(chǔ)器(ROM),也可以是FIFO寄存器。

  為了便于進(jìn)行多信道數(shù)字信號(hào)處理,TMS320C6000配備了多信道帶緩沖能力的串口McBSP。McBSP的功能非常強(qiáng)大,除具有一般DSP串口功能之外,還可以支持T1/E1、ST-BUS、IOM2、SPI、IIS等不同標(biāo)準(zhǔn)。McBSP最多支持128個(gè)信道;支持多種數(shù)據(jù)格式(8/12/16/20/24/32bit)的傳輸;可自動(dòng)進(jìn)行u律、A律壓擴(kuò)。其工作速率可達(dá)到1/2時(shí)鐘速率。

  TMS320C6000提供的16位主機(jī)接口(HPI)使得主機(jī)設(shè)備可以直接訪問DSP的存儲(chǔ)空間。通過內(nèi)部或外部存儲(chǔ)空間,主機(jī)和DSP可以交換信息。主機(jī)也可以利用HPI直接訪問映射進(jìn)存儲(chǔ)空間的外圍設(shè)備。

  DSP器件一般都帶有DMA控制器,可以在CPU操作的后臺(tái)進(jìn)行數(shù)據(jù)傳輸。TMS320C6201的DMA控制器有4個(gè)獨(dú)立的可編程通道,可以同時(shí)進(jìn)行四個(gè)不同的DMA操作,每個(gè)通道的優(yōu)先級(jí)可以通過編程設(shè)定。每個(gè)通道可以根據(jù)需要傳輸8/16/32bit的數(shù)據(jù),并且DMA控制器可以訪問全部32位的地址空間。此外,還有一個(gè)輔助通道允許DMA控制器響應(yīng)主機(jī)通過HPI口發(fā)來的請求。

1.2 指令系統(tǒng)

  C62xx和C67xx共享同一個(gè)指令集。C67xx可以使用所有的C62xx指令,但因?yàn)镃67xx是浮點(diǎn)芯片,所以C67xx的指令集中有一些指令只能用于浮點(diǎn)運(yùn)算。TMS320C6201CPU的設(shè)計(jì)采用了類似于RISC的結(jié)構(gòu),指令集簡單、運(yùn)算速度快。8個(gè)功能單元負(fù)責(zé)不同功能的運(yùn)算,指令和功能單元之間存在一個(gè)映射關(guān)系。其中,L單元有23條指令,M單元有20條指令,S單元29有條指令,D單元有26條指令。

  TMS320C6201的大部分指令都可在單周期內(nèi)完成,都可以直接對8/16/32bit數(shù)據(jù)進(jìn)行操作。同時(shí),TMS320C6201指令集針對數(shù)字信號(hào)處理算法提供了一些特殊指令:為復(fù)雜計(jì)算提供的40bit的特殊操作的加法運(yùn)算;有效的溢出處理和歸一化處理;簡潔的位操作功能等。TMS320C6201中最多可以有8條指令同時(shí)并行執(zhí)行;所有指令均可條件執(zhí)行。以上所有特點(diǎn)提高了指令的執(zhí)行效率、減小了代碼長度、大大減少了因跳轉(zhuǎn)引起的開銷、提高了編碼效率。

  流水線操作是DSP實(shí)現(xiàn)高速度、高效率的關(guān)鍵技術(shù)之一。TMS320C6000只有在流水線充分發(fā)揮作用的情況下,才能達(dá)到1600MIPS的速度。C6000的流水線分為三個(gè)階段:取指、解碼、執(zhí)行,總共11級(jí)。和以前的C3x、C54x相比,有非常大的優(yōu)勢,主要表現(xiàn)在:簡化了流水線的控制以消除流水線互鎖;增加流水線的深度以消除傳統(tǒng)流水線結(jié)構(gòu)在取指、數(shù)據(jù)訪問和乘法操作上的瓶頸。其中取指、數(shù)據(jù)訪問分為多個(gè)階段,使得C6000可以高速地訪問存儲(chǔ)空間。

2 優(yōu)化編程的幾個(gè)方法

  使用TMS320C6000進(jìn)行程序設(shè)計(jì)時(shí),首先的感覺是匯編指令集太小了。C6000在設(shè)計(jì)時(shí)采用了一種類RISC機(jī)的結(jié)構(gòu),運(yùn)算速度特別快,但是指令集卻非常簡單。象DSP算法中常用的乘加指令、循環(huán)操作指令等,在C54x和C3x中兩條指令就可以完成的功能,而在C6000中卻需要一個(gè)循環(huán)體,所以它的程序設(shè)計(jì)一般比較復(fù)雜。要想充分發(fā)揮C6000的運(yùn)算能力,必須從它的硬件結(jié)構(gòu)出發(fā),最大限度地利用八個(gè)功能單元,使用軟件流水線,盡量讓程序無沖突的并行執(zhí)行。

  并行處理的長處在于,在處理彼此之間沒有承接關(guān)系的運(yùn)算時(shí),在CPU資源允許的情況下可以并行完成。但對于前后有承接關(guān)系或者判斷、跳轉(zhuǎn)頻繁的情況,就無法發(fā)揮并行的優(yōu)勢。一般循環(huán)體都滿足并行處理的條件,并且循環(huán)體往往是程序中耗時(shí)最長的地方。因此進(jìn)行C6000應(yīng)用開發(fā)時(shí)應(yīng)將優(yōu)化重點(diǎn)放在循環(huán)體上。為了降低開發(fā)難度,C6000提供了很多在高級(jí)語言(如ANSI C)一級(jí)對程序進(jìn)行優(yōu)化的方法。在應(yīng)用滿足實(shí)時(shí)性處理要求時(shí),應(yīng)盡量采用這種方法。但是這種方法的效率比較低,C語言優(yōu)化最好的例子是點(diǎn)乘,這種循環(huán)使用C語言進(jìn)行優(yōu)化可以百分之百地的利用CPU資源,程序的并行性達(dá)到最好。但是我們在做20點(diǎn)的點(diǎn)乘時(shí)發(fā)現(xiàn)它的耗時(shí)是匯編語言程序的3倍。所以如果系統(tǒng)的實(shí)時(shí)性要求比較高,就不能使用這種優(yōu)化方法了。

這時(shí)可以考慮使用線性匯編語言進(jìn)行開發(fā)。線性匯編語言是TMS320C6000中獨(dú)有的一種編程語言,介于高級(jí)語言和低級(jí)語言之間。因?yàn)樵谟檬謱憛R編語言進(jìn)行應(yīng)用開發(fā)時(shí),開發(fā)者除了要精通C6000的指令系統(tǒng)之外,還必須為指令分配功能單元、考慮指令的延遲和功能單元之間的配合以及合理分配使用32個(gè)寄存器,才能寫出高效的并行指令,發(fā)揮C6000的威力。上面任何一個(gè)方面出現(xiàn)問題,都會(huì)嚴(yán)重影響算法的效率。

  線性匯編語言的指令系統(tǒng)和匯編語言的指令系統(tǒng)完全相同,但是它有自己的匯編優(yōu)化器指令系統(tǒng),用于和匯編優(yōu)化器配合使用。與匯編語言的最大區(qū)別在于,編寫線性匯編語言時(shí)不需要考慮指令的延時(shí)、寄存器的使用和功能單元的分配,完全可以按照高級(jí)語言的方式進(jìn)行編寫。當(dāng)然由于它不是高級(jí)語言,有許多編程的限制。例如,在優(yōu)化循環(huán)體時(shí),不能使用跳轉(zhuǎn)到循環(huán)體之外的跳轉(zhuǎn)指令;另外計(jì)數(shù)器只能使用減計(jì)數(shù),如果使用加計(jì)數(shù),優(yōu)化器將不能工作等等。但總的說來,它的代碼效率遠(yuǎn)遠(yuǎn)高于高級(jí)語言,而且開發(fā)難度和開發(fā)周期比匯編語言要小得多。

  在實(shí)際開發(fā)過程中需要具體情況具體分析,選擇一種高效、快捷的開發(fā)方法。以下結(jié)合應(yīng)用開發(fā)中的幾個(gè)模塊來簡述我們使用的優(yōu)化方法。

2.1 使用匯編語言

  使用匯編語言進(jìn)行并行編程難度比較大。但在有些情況下,程序中數(shù)據(jù)有非常強(qiáng)的承接關(guān)系,并且該程序體邏輯關(guān)系清楚,使用的寄存器不超過32個(gè),這時(shí)直接使用匯編語言實(shí)現(xiàn),效率會(huì)更高。另外,有些使用C語言比較難實(shí)現(xiàn)的運(yùn)算函數(shù),在C6000的匯編指令集中可能有專用DSP指令,這時(shí)就可以直接使用匯編語言實(shí)現(xiàn)。

  使用匯編語言進(jìn)行編程時(shí)特別需要注意的是C6000指令的延遲情況,有些指令并不是立刻就能得到結(jié)果。C6000指令集中有延遲的指令如表1所示。

圖片點(diǎn)擊可在新窗口打開查看

例1 32位歸一化函數(shù)norm_l()

  short  norm_l(long L_var1)

    {short var_out;

    if (L_var1 == 0L) {

    var_out = (short)0;

    }

  else {

     if (L_var1 == (long)0xffffffffL) {

           var_out = (short)31;

          }

    else {

         if (L_var1 < 0L) {

             L_var1 = *L_var1;

             }

             for(var_out=(short)0;L_var1<(long)0x40000000L;

                var_out++) {

             L_var1 <<= 1L;

    }}}

    return(var_out);

    }

    使用匯編語言進(jìn)行優(yōu)化:

          .global _norm_l

_norm_l:

          B      B3

          CMPEQ  0,A4,B0

[!B0]     NORM   A4,A4

          NOP    3

  消耗時(shí)間(時(shí)鐘周期):C語言norm_l()為723;匯編語言為11。

2.2 使用線性匯編語言重寫整個(gè)函數(shù)

  對于某些以循環(huán)體為主的函數(shù)可以使用線性匯編語言重寫整個(gè)函數(shù)。使用匯編優(yōu)化器進(jìn)行優(yōu)化之后,效率是非常高的。

 

]]>
TMS320C6000系列DSP的Flash啟動(dòng)設(shè)計(jì)http://www.martymets.com/bbs/dispbbs.asp?BoardID=29&ID=1626&Page=1wangxinxin2010-11-22 14:10:37

隨著近年來數(shù)字信號(hào)處理器(DSP)技術(shù)的迅猛發(fā)展,其越來越廣泛地應(yīng)用于國民經(jīng)濟(jì)的各個(gè)領(lǐng)域中。其中,TI公司推出的TMS320C6000系列DSP器件更是在許多需要進(jìn)行大量數(shù)字信號(hào)處理運(yùn)算并兼顧高實(shí)時(shí)性要求的場合得以應(yīng)用。TMS320C6000系列DSP的系統(tǒng)設(shè)計(jì)過程中,DSP器件的啟動(dòng)加載設(shè)計(jì)是較難解決的問題之一。

C6000系列DSP的啟動(dòng)加載方式包括不加載、主機(jī)加載和EMIF加載3種。

3種加載方式的比較:不加載方式僅限于存儲(chǔ)器0地址不是必須映射到RAM空間的器件,否則在RAM空間初始化之前CPU會(huì)讀取無效的代碼而導(dǎo)致錯(cuò)誤;主機(jī)加載方式則要求必須有一外部主機(jī)控制DSP的初始化,這將增加系統(tǒng)的成本和復(fù)雜度,在很多實(shí)際場合是難以實(shí)現(xiàn)的;EMIF加載方式的DSP與外部ROM/Flash接口較為自由,但片上Bootloader工具自動(dòng)搬移的代碼量有限(1 KB/64 KB)。本文主要討論常用的EMIF加載方式。

1 EMIF加載分析

實(shí)際應(yīng)用中,通常采用的是EMIF加載方式,把代碼和數(shù)據(jù)表存放在外部的非易失性存儲(chǔ)器里(常采用Flash器件)。

下面以TMS320C6000系列中最新的浮點(diǎn)CPU——TMS320C6713(簡稱“C6713”)為例,詳細(xì)分析其EMIF加載的軟硬件實(shí)現(xiàn)。

硬件方面,其與16位寬度的Flash器件的接口如圖1所示。

圖片點(diǎn)擊可在新窗口打開查看

對于不同的DSP器件,加載方式的配置引腳稍有不同。C6713的配置引腳及其定義如表1所列。

圖片點(diǎn)擊可在新窗口打開查看

應(yīng)用程序的大小決定了片上的Bootloadet工具是否足夠把所有的代碼都搬移到內(nèi)部RAM里。對于C6713,片上的Bootloader工具只能將1 KB的代碼搬入內(nèi)部RAM。通常情況下,用戶應(yīng)用程序的大小都會(huì)超過這個(gè)限制。所以,需要在外部Flash的前1 KB范圍內(nèi)預(yù)先存放一小段程序,待片上Bootloader工具把此段代碼搬移入內(nèi)部并開始執(zhí)行后,由這段代碼實(shí)現(xiàn)將Flash中剩余的用戶應(yīng)用程序搬移入內(nèi)部RAM中。此段代碼可以被稱作一個(gè)簡單的二級(jí)Bootloader。

圖2所示為使用二級(jí)Bootloader時(shí)的CPU運(yùn)行流程。

圖片點(diǎn)擊可在新窗口打開查看

使用二級(jí)Bootloader需要考慮以下幾個(gè)事項(xiàng):

◇需要燒寫的COFF(公共目標(biāo)文件格式)段的選擇;

◇編寫二級(jí)Bootloader;

◇將選擇的COFF段燒入Flash。

一個(gè)COFF段就是占據(jù)一段連續(xù)存儲(chǔ)空間的程序或數(shù)據(jù)塊。COFF段分為3種類型:代碼段、初始化數(shù)據(jù)段和未初始化數(shù)據(jù)段。

對于EMIF加載方式,需要加載的鏡像由代碼段(如.vectors和.text等)和初始化數(shù)據(jù)段(如.cinit,.const,.switch,.data等)構(gòu)成。另外,可以單獨(dú)定義一個(gè).boot-load段存放二級(jí)Bootloader。此段也需要寫入Flash。

所有未初始化的數(shù)據(jù)段(如.bss等)都不需要燒入到Flash中。

2 二級(jí)Bootloader的編寫

由于執(zhí)行二級(jí)Bootloader時(shí)C的運(yùn)行環(huán)境還未建立起來,所以必須用匯編語言編寫。二級(jí)Bootloader可參照其他類似文獻(xiàn)及TI相關(guān)文檔。此處不再贅述。

CCS中用戶工程編譯鏈接后產(chǎn)生的.map文件包含了存儲(chǔ)器的詳細(xì)分配信息。一個(gè)典型的map文件中包含的存儲(chǔ)器分配信息如表2所列。

圖片點(diǎn)擊可在新窗口打開查看

與cmd文件不同,map文件不僅包含了各段存儲(chǔ)在哪一段內(nèi)存空間的信息,從map文件中還可以具體知道每個(gè)內(nèi)存區(qū)間中有多少被實(shí)際使用(燒寫Flash時(shí)會(huì)用到這個(gè)參數(shù))。內(nèi)存區(qū)間中未被使用部分是不需要寫入Flash內(nèi)容的,實(shí)際被使用的部分才是真正需要寫人到Flash中的內(nèi)容。

3 Flash的燒寫

把代碼等寫入Flash的辦法大體上可分為以下幾種:

① 使用通用燒寫器寫入。

② 使用CCS中自帶的FlashBurn工具。

③ 用戶自己編寫燒寫Flash的程序,由DSP將內(nèi)存映像寫入Flash。

其中,使用通用燒寫器燒寫需要將內(nèi)存映像轉(zhuǎn)換為二進(jìn)制或十六進(jìn)制格式的文件,而且要求Flash器件是可插拔封裝的。這將導(dǎo)致器件的體積較大,給用戶的設(shè)計(jì)帶來不便。

使用TI公司提供的FlashBurn工具的好處在于使用較為直觀。FlashBurn工具提供的圖形界面可以方便地對Flash執(zhí)行擦除、編程和查看內(nèi)容等操作。但這種力法的缺點(diǎn)也不少:首先,FlashBurn工具運(yùn)行時(shí)需要下載一個(gè).out鏡像(FBTC,FlashBurn Target Component)到DSP系統(tǒng)中,然后由上位PC機(jī)通過仿真器發(fā)送消息(指令和數(shù)據(jù))給下位DSP,具體對Flash的操作由FBTC執(zhí)行。然而,這個(gè)FBTC一般是針對TI公司提供的DSP專門編寫的,與板上使用的Flash的接口寬度(默認(rèn)是8位)、操作關(guān)鍵字(因生產(chǎn)廠商不同而各異)都有關(guān),所以,對用戶自己制作的硬件不一定適合。例如:如果用戶自己的電路板上使用的是與DSK同品牌的Flash芯片,接口為16位數(shù)據(jù)寬度,那么,使用FlashBur’n工具燒寫將最多只有一半的Flash容量能夠被使用,要想正確實(shí)現(xiàn)]EMIF加載就必須選擇8位加載方式。這就造成了Flash存儲(chǔ)器資源的浪費(fèi),同時(shí)限制了用戶開發(fā)的靈活性。

雖然TI公司提供了FBTC的源代碼供有需要的用戶修改,但這樣用戶需要去了解FBTC的運(yùn)行機(jī)制及其與上位機(jī)的通信協(xié)議,并對Flash燒寫函數(shù)進(jìn)行修改。用戶可能需要修改的幾個(gè)地方如下:對Flash編程的關(guān)鍵字和地址,BurnFlash函數(shù)中的數(shù)據(jù)指針和EMIF口的配置(針對1.0版本FBTC)。這就給用戶開發(fā)帶來了不便。把開發(fā)時(shí)間浪費(fèi)在了解一個(gè)并不算簡單的Flash燒寫工具上并不是一個(gè)好的選擇。

其次,FlashBurn工具不能識(shí)別.out文件,只接受..ex的十六進(jìn)制文件,因此,需要將.out文件轉(zhuǎn)換為.hex文件。這個(gè)轉(zhuǎn)換的工具就是TI公司提供的Hex6x.exe工具。轉(zhuǎn)換過程的同時(shí),需要一個(gè)cmd文件(即圖3中的Hex.cmd)指定作為輸入的.out文件,輸出的.hex文件的格式,板上Flash芯片的類型和大小,需要寫入Flash中的COFF段名等。

圖片點(diǎn)擊可在新窗口打開查看

使用用戶自己編寫的燒寫Flash的程序較為靈活,避免了文件格式轉(zhuǎn)換的繁瑣。不過,此方法要求用戶對自己使用的Flash芯片較為熟悉。

通常采用的Flash燒寫程序是單獨(dú)建立一個(gè)工程的辦法:先把用戶應(yīng)用程序(包含二級(jí)Bootloader)編譯生成的.out文件裝載到目標(biāo)DSP系統(tǒng)的RAM中,再把燒寫Flash的工程編譯生成的.out文件裝載到目標(biāo)DSP系統(tǒng)RAM的另一地址范圍,執(zhí)行Flash燒寫程序,完成對Flash的燒寫。這個(gè)辦法要注意避免兩次裝載可能產(chǎn)生的地址覆蓋,防止第2次裝載修改了應(yīng)該寫入Flash的第1次裝載的內(nèi)容。

實(shí)際上,可以將Flash燒寫程序嵌入到用戶主程序代碼中去,比單獨(dú)建立一個(gè)燒寫Flash的工程更為方便。Flash芯片的燒寫程序段如下:

圖片點(diǎn)擊可在新窗口打開查看

圖片點(diǎn)擊可在新窗口打開查看

ChipErase函數(shù)和ProgramFlashArray函數(shù)的編寫可參照用戶使用的Flash芯片的Datasheet以及參考文獻(xiàn)[1]。

ProgramFlashArray函數(shù)的第1個(gè)參數(shù)是源地址指針(指向內(nèi)部Ram),第2個(gè)參數(shù)是目標(biāo)地址指針(指向外部Flash),第3個(gè)參數(shù)是要寫入的數(shù)據(jù)長度(單位為字)。

編寫Flash燒寫函數(shù)時(shí)有3點(diǎn)需要注意:

① 指向Flash地址的指針。由于C6713的低兩位地址用于譯碼作字節(jié)選擇,地址總線的最低位是EA2,所以,邏輯地址需要適當(dāng)?shù)囊莆徊拍苷_地指向日標(biāo)。

對8位存儲(chǔ)器而言,應(yīng)該左移2位;對16位存儲(chǔ)器而言,應(yīng)該左移1位;對于32位存儲(chǔ)器,則不需要移位。例如要從(往)Flash的0x00000003地址讀(寫)一個(gè)字,其邏輯地址應(yīng)該是0x90000000+(0x0003<<1),而非0x90000003。

② map文件中各內(nèi)存區(qū)間被實(shí)際占用的尺寸大小是以字節(jié)為單位的,而ProgramFlashArray函數(shù)寫入Flash的數(shù)據(jù)單位為字,所以需要將map文件中得到的尺寸大小的一半作為ProgramFlashArray函數(shù)的參數(shù)。

③ 燒寫函數(shù)中使用了flash_burned常量作為判斷是否需要對Flash操作的依據(jù),且將其初始化為1。這是為了避免Flash加載之后會(huì)執(zhí)行對Flash的操作。此變量應(yīng)在燒寫Flash時(shí)手動(dòng)修改為0。

在仿真加載方式下,可以在CCS里的watchwindow窗口手動(dòng)修改flash_burned常量為0,強(qiáng)迫CPU進(jìn)入對Flash編程的程序段。實(shí)驗(yàn)證明,在仿真加載方式下手動(dòng)修改flash_burned并不影響寫入到Flash中的flash_burn-ed的值(仍為1),所以,寫入Flash的flash_burned的值仍然是1。在系統(tǒng)Flash加載之后,CPU就會(huì)跳過此段代碼,實(shí)現(xiàn)正確運(yùn)行。

4 結(jié) 論

本Flash加載方案以C6713為例,稍加修改即可適用于TMS320C6000系列的其他DSP器件。經(jīng)過在研制的伺服測試平臺(tái)中的應(yīng)用,證明本方法切實(shí)可行且易于實(shí)現(xiàn),避免了目標(biāo)文件格式的轉(zhuǎn)換,比通常采用的FlashBurn工具使用起來更靈活方便,用戶可以通過簡單修改Flash燒寫函數(shù)使之適應(yīng)自己的硬件情況。對于Flash器件接口與TI的DSP不一致的情況,本方案是一個(gè)很好的選擇。


]]>
基于DSP代碼自動(dòng)生成技術(shù)實(shí)現(xiàn)FIR低通濾波器http://www.martymets.com/bbs/dispbbs.asp?BoardID=29&ID=1625&Page=1wangxinxin2010-11-22 14:09:081 引言

DSP芯片以其低成本、低功耗、高運(yùn)算速度等優(yōu)勢得到了飛速發(fā)展與廣泛運(yùn)用。但目前各DSP廠商提供的開發(fā)環(huán)境(如TI的CCS)大多采用G/C++或匯編語言作為開發(fā)語言,與編寫Matlab程序相比,前者要復(fù)雜得多。

Matlab是一個(gè)強(qiáng)大的分析、計(jì)算和可視化工具,且編程非常方便。Simulink是Matlab產(chǎn)品中用來建模、分析和仿真各種動(dòng)態(tài)系統(tǒng)的圖形化工具。通過豐富的功能模塊,可以迅速地創(chuàng)建動(dòng)態(tài)系統(tǒng)模型。同時(shí)Simulink也是Real-Time Workshop(以下簡稱RTW)的支持平臺(tái)。通過RTW可以自動(dòng)生成面向不同目標(biāo)的代碼。

Matlab輔助DSP進(jìn)行混合編程,很多學(xué)者作了許多研究和嘗試。文獻(xiàn)[1]提出了由Matlab向DSP傳送原始數(shù)據(jù)以及DSP反饋處理后數(shù)據(jù)的方法,充分利用了Matlab優(yōu)秀的可視化功能。但仍然要在DSP開發(fā)環(huán)境中編寫復(fù)雜的代碼。文獻(xiàn)[2,3]利用工具包——Matlab Link for CCS Development Tools(以下簡稱CCSLink),實(shí)現(xiàn)了在Matlab、TI開發(fā)環(huán)境和DSP硬件間的雙向連接,極大地降低了開發(fā)人員調(diào)試DSP代碼的難度和工作量。但CCSLink只用于DSP程序的調(diào)試、數(shù)據(jù)傳遞和驗(yàn)證等過程,同樣需要編寫復(fù)雜的DSP代碼。而另一工具包——ETTIC6000,利用RTW直接從Simulink模型生成面向TI C6000 DSP的高效代碼,不再需要傳統(tǒng)的DSP編程過程。本文在此基礎(chǔ)上進(jìn)行研究,設(shè)計(jì)并自動(dòng)生成FIR低通濾波器的DSP代碼。

2 ETTIC6000的功能、特點(diǎn)及開發(fā)DSP代碼過程

ETTIC6000是Math Works公司和TI公司聯(lián)合開發(fā)的工具包。利用RTW直接從Simulink模型生成面向TI的C6701 EVM和C6711 DSK目標(biāo)板的可執(zhí)行文件或CCS工程。在DSP代碼自動(dòng)生成過程中,ETTIC6000必須與Simulink,RTW,CCS和TI目標(biāo)板等軟硬件相結(jié)合才能充分顯現(xiàn)其功能。它們之間的關(guān)系如圖1所示。

應(yīng)用ETTIC6000開發(fā)DSP代碼的過程一般經(jīng)過如下幾步:

(1)概念構(gòu)思和DSP處理算法設(shè)計(jì)。

(2)在Simulink環(huán)境下,利用Matlab基本模塊,Simulink基本模塊,數(shù)字信號(hào)處理工具箱,以及專門面向TI C6000的模塊組等模塊,構(gòu)建算法模型并運(yùn)行仿真。并非所有模塊都可以轉(zhuǎn)化為DSP代碼并順利編譯。例如一些面向Win32的程序模塊在轉(zhuǎn)化為DSP代碼或在CCS中進(jìn)行編譯時(shí)就會(huì)出現(xiàn)無法兼容或找不到相關(guān)頭文件等錯(cuò)誤提示。

(3)對仿真結(jié)果進(jìn)行評(píng)價(jià),若仿真結(jié)果滿意,即可在模型中加入C6701 EVM或C6711 DSK目標(biāo)板的輸入輸出模塊。否則,重新進(jìn)行算法設(shè)計(jì)、建模、仿真。

(4)在設(shè)計(jì)好的面向具體目標(biāo)板的模型中,設(shè)置Simulation選項(xiàng),包括RTW中的編譯連接等選項(xiàng)。

(5)執(zhí)行代碼自動(dòng)生成、編譯、調(diào)試并裝載到目標(biāo)板上運(yùn)行。

從整個(gè)設(shè)計(jì)過程來看,DSP開發(fā)人員只需在Matlab中進(jìn)行Simulink模型設(shè)計(jì)、構(gòu)建與仿真。省去了編寫、調(diào)試復(fù)雜DSP代碼的過程。下面以實(shí)現(xiàn)FIR低通濾波器為例,詳細(xì)闡述應(yīng)用ETTIC6000開發(fā)DSP代碼的全部過程。

圖片點(diǎn)擊可在新窗口打開查看

3 FIR低通濾波器實(shí)現(xiàn)過程

此系統(tǒng)要求對頻率分別為200 Hz,600 Hz和1 000 Hz,幅度為1的混合正弦信號(hào)進(jìn)行低通濾波,保留200 Hz的正弦信號(hào)。采用Simulink環(huán)境下的FDATool工具設(shè)計(jì)FIR低通濾波器。在以下軟硬件環(huán)境中設(shè)計(jì)并通過測試,以下軟件均采用默認(rèn)安裝路徑,若軟硬件環(huán)境不同,相應(yīng)的參數(shù)設(shè)置將有很大差別。

硬件環(huán)境:TMS320C6711 DSK開發(fā)板、PC聲卡、雙頭音頻線等。

軟件環(huán)境:Matlab 7.4(R2007a),CCStudio 3.1,Simulink 6.6,Real-Time Workshop 6.6,Target forTI C6000(tm)3.2,Link for Code ComposerStudio 3.0。

Matlab附帶軟件可以在命令窗口通過ver命令查看,附帶軟件的使用可以充分利用help命令。

3.1 Simulink環(huán)境下構(gòu)建算法模型并仿真

依據(jù)設(shè)計(jì)思想,在Simulink環(huán)境下,通過Simulink基本模塊庫和數(shù)字信號(hào)處理工具箱構(gòu)建如圖2所示系統(tǒng)模型。三個(gè)輸入信號(hào)模塊關(guān)鍵參數(shù)設(shè)置:頻率分別設(shè)置為200 Hz,600 Hz和1 000 Hz;幅度為1;采樣頻率為1 600 Hz。FDA Tool關(guān)鍵參數(shù)設(shè)置:濾波類型選擇低通;階數(shù)為80;采樣頻率為1 600 Hz;起始頻率為100 Hz;截至頻率為500 Hz。

圖片點(diǎn)擊可在新窗口打開查看

對圖2所示模型運(yùn)行仿真,仿真結(jié)果如圖3所示。從濾波后的波形看,此濾波器的參數(shù)設(shè)置比較合理。

圖片點(diǎn)擊可在新窗口打開查看

3.2 構(gòu)建面向C6711 DSK目標(biāo)模型

(1)依據(jù)仿真模型利用ETTIC6000中C6711 DSK輸入輸出模塊構(gòu)建如圖4所示面向C6711 DSK目標(biāo)模型。C6711 DSK ADC與C6711 DSK DAC參數(shù)采用默認(rèn)設(shè)置。FDA Tool參數(shù)與仿真模型中參數(shù)保持一致,設(shè)置完成后將模型保存在Matlab默認(rèn)目錄下,命名為myfilter.mdl。

圖片點(diǎn)擊可在新窗口打開查看

(2)依據(jù)圖4構(gòu)建如圖5所示的硬件平臺(tái)。TMS320C6711 DSK與PC通過并口線連接;信號(hào)源由PC聲卡輸出,經(jīng)C6711 DSK A/D轉(zhuǎn)換后進(jìn)行FIR低通濾波,由Line OUT將濾波后信號(hào)輸出至PC聲卡,最后采集聲卡信號(hào),顯示濾波后波形。

3.3 DSP代碼自動(dòng)生成

進(jìn)行DSP代碼自動(dòng)生成前,首先要安裝、配置相應(yīng)的軟硬件環(huán)境。正確安裝、配置是此系統(tǒng)能夠成功運(yùn)行的關(guān)鍵。具體配置有如下幾個(gè)方面:

(1)依據(jù)圖5實(shí)現(xiàn)硬件連接。在BIOS中將并口傳輸模式改為EPP模式;在DOS模式下,運(yùn)行C:\CCS-tudio v3.1\C6000\DSK6X11\conftest\dsk6xtst.exe文件,可以檢測目標(biāo)板是否連接正常;最后檢查PC聲卡輸入輸出是否正常。

(2)正確配置CCS。點(diǎn)擊Setup CCStudio V3.1,選擇C6711 DSK Port 378 EPP Mode模塊,點(diǎn)擊Add,設(shè)置并口地址為0x378;保存設(shè)置后退出。

(3)打開myfilter.mdl模型,展開simulation>Configuration Paraineters面板,面板中相應(yīng)選項(xiàng)設(shè)置如下:

圖片點(diǎn)擊可在新窗口打開查看

其他選項(xiàng)設(shè)置為默認(rèn)模式。

(4)點(diǎn)擊RTW面板Generate code按鈕,執(zhí)行代碼自動(dòng)生成過程,此時(shí)Matlab命令窗口將顯示如下信息:

圖片點(diǎn)擊可在新窗口打開查看

(5)CCStudio 3.1將自動(dòng)運(yùn)行,窗口中自動(dòng)生成myfilter.pit的工程文件。

3.4 FIR低通濾渡器實(shí)現(xiàn)

(1)對myfiher.pit的工程文件在CCS中進(jìn)行編譯、連接、裝載、運(yùn)行。

(2)利用Matlab中的daqfcengen函數(shù),可以實(shí)現(xiàn)向PC聲卡輸出端輸出波形。在Matlab命令窗口輸入daqfcengen命令,將顯示波形發(fā)生器窗口,將頻率設(shè)置為200 Hz,幅度設(shè)置為1,如圖6所示。點(diǎn)擊Start按鈕。在Matlab命令窗口繼續(xù)輸入daqfcengen命令,相繼實(shí)現(xiàn)頻率為600 Hz,1 000 Hz的波形輸出。這樣PC聲卡就輸出了三個(gè)不同頻率波形的疊加。

圖片點(diǎn)擊可在新窗口打開查看

(3)利用Matlab中的daqscope函數(shù),可以實(shí)現(xiàn)顯示PC聲卡輸入端的波形。在Matlab命令窗口輸入daqscope命令,將顯示波形顯示器窗口,如圖7所示,即為濾波后的輸出波形。

圖片點(diǎn)擊可在新窗口打開查看

4 結(jié) 語

從整個(gè)FIR低通濾波器實(shí)現(xiàn)過程看,沒有編寫一行DSP代碼,全部采用圖形化的編程模式,生成的CCS工程文件既可供初學(xué)者學(xué)習(xí)、借鑒。又可供具有一定編程經(jīng)驗(yàn)的程序開發(fā)者對代碼進(jìn)一步修改或優(yōu)化,提高代碼執(zhí)行效率。

從實(shí)驗(yàn)結(jié)果看,設(shè)計(jì)的FIR低通濾波器濾波效果明顯。充分說明利用DSP代碼自動(dòng)生成技術(shù)實(shí)現(xiàn)FIR低通濾波器的方法是可行的、高效的。Matlab輔助DSP在語音處理、圖像處理、通信、雷達(dá)等領(lǐng)域還有許多值得研究的地方。采用多語言工具進(jìn)行程序開發(fā)也是今后發(fā)展的趨勢.

]]>
TMS320C6000嵌入式系統(tǒng)優(yōu)化編程的研究http://www.martymets.com/bbs/dispbbs.asp?BoardID=29&ID=1624&Page=1wangxinxin2010-11-22 14:08:03
表1 C6000的有延遲指令

圖片點(diǎn)擊可在新窗口打開查看

例1 32位歸一化函數(shù)morm_1()
short morm_1(long L_var1)
{short var_out;
if (L_var1= = 0L){
var_out = (short)0;
}
else {
if (L_var1= = (logn)0xffffffffL{
var_out = (short)31;
}
else {
if (L_var1< 0L) {
L_var1 = ~L_var1;
}
for(var_out=(short)0;L_var1<(long)0x40000000L;
var_out++){
L_var1 <<= 1L;
}}}
return(var_out);
}
使用匯編語言進(jìn)行優(yōu)化;
.global norm_1
_norm1:
B B3
CMPEQ 0,A4,B0
[!B0] NORM A4,A4
NOP 3
消耗時(shí)間(時(shí)鐘周期):C語言norm_1()為723;匯編語言為11。

2.2 使用線性匯編語言重寫整個(gè)函數(shù)

對于某些以循環(huán)體為主的函數(shù)可以使用線性匯編語言重寫整個(gè)函數(shù)。使用匯編優(yōu)化器進(jìn)行優(yōu)化之后,效率是非常高的。

下面例子是算法中計(jì)算幀能量的函數(shù),其中包含兩個(gè)單循環(huán)體。進(jìn)行優(yōu)化時(shí),首先要確定循環(huán)的次數(shù)。對于循環(huán)次數(shù)是變量的情況,優(yōu)化器不進(jìn)行并行優(yōu)化;其次盡量減少數(shù)據(jù)存取次數(shù),例如以32位存取指令對16位數(shù)據(jù)進(jìn)行存取,可以節(jié)省一增的存取周期。仔細(xì)觀察C代碼,會(huì)發(fā)現(xiàn)兩次循環(huán)次數(shù)相同。第二個(gè)循環(huán)要用到第一個(gè)循環(huán)的結(jié)果,因此可以將兩個(gè)循環(huán)合并在一起,這樣就避免了在第二個(gè)循環(huán)中再從存儲(chǔ)器中取結(jié)果,減少了一半的Load操作。

Long Comp_En(short *Dpnt)
{ int i;
long Rez;
short Temp[60];
for (i=0;i<60;i ++) Temp [i] = shr(Dpnt[i],(short) 2);
Rez=(long) 0;
for (i=0; i <60; i ++) Rez=L_mac(Rez,Temp[i],Temp[i]);
return Rez;
}
相應(yīng)的線性匯編程序如下:
.global _Comp_En ;函數(shù)名定義,對c變量前加_
_Comp_En .cproc Dpnt;函數(shù)頭定義,Dpnt是參數(shù)
.reg Rez,Rez1,Rez2,1 ;寄存器定義,不必考慮實(shí)際的寄存器分配
.reg t1,t2,x1,c1,m1,m2
zero Rez
zero Rez1
zero Rez2
mv Dpnt,c1
mvk 30,i ;確定循環(huán)次數(shù)。因?yàn)橛肔DW代替LDH,循五環(huán)次數(shù)減少一半。
loop1 .trip 30
ldw *c1++,x1
sh1 x1,16,t1
shr t1,2,t1
shr x1,2,t2 ;將兩個(gè)循環(huán)合在一起,又減少了一半的從內(nèi)存取數(shù)據(jù)的時(shí)間。
smpyh t1,t1,m1
smpyh t2,t2,m2
sadd Rez1,m1,Rez1
sadd Rez2,m2,Rez2
[i] sub i,1,i ;循環(huán)計(jì)數(shù)器從30遞減
[i] b loop1
sadd Rez1,Rez2,Rez
.return Rez
.endproc
消耗時(shí)間(時(shí)鐘周期):C語言為32971;線性匯編語言為93。

2.3 使用線性匯編改寫復(fù)雜函數(shù)中的循環(huán)體

當(dāng)函數(shù)的邏輯關(guān)系復(fù)雜,判斷、跳轉(zhuǎn)、函數(shù)調(diào)用情況特別多時(shí),上面方法的效果就會(huì)在打折扣。這時(shí)可以使用線性匯編將其中的循環(huán)部分改寫成一個(gè)函數(shù),以優(yōu)化后的函數(shù)調(diào)用代替環(huán)部分,而不是優(yōu)化整個(gè)復(fù)雜函數(shù)。

高速數(shù)字信號(hào)處理器件的應(yīng)用范圍越來越廣,特別是在移動(dòng)通信領(lǐng)域中,軟件無線電、智能天線等新技術(shù)的實(shí)都需要強(qiáng)大的實(shí)時(shí)數(shù)字信號(hào)處理的支持。TMS320C6000系列DSP完全可以滿足此類要求。但目前對于并行DSP技術(shù)的軟硬件開發(fā)還處在摸索階段,如何充分利用高速DSP的資源,是這方面的研究重點(diǎn)。本文研究了最新推出的TMS320C6000的優(yōu)化策略,從工程和系統(tǒng)的角度總結(jié)出一套既能滿足實(shí)時(shí)性又能保證開發(fā)時(shí)效性的實(shí)用的優(yōu)化編程方法,以供分饗。
]]>
TMS320C6000系列DSP的Flash啟動(dòng)設(shè)計(jì)http://www.martymets.com/bbs/dispbbs.asp?BoardID=29&ID=1623&Page=1wangxinxin2010-11-22 14:02:19  隨著近年來數(shù)字信號(hào)處理器(DSP)技術(shù)的迅猛發(fā)展,其越來越廣泛地應(yīng)用于同民經(jīng)濟(jì)的各個(gè)領(lǐng)域中。其中,TI公司推出的TMS320C6000系列DSP器件更是在許多需要進(jìn)行大量數(shù)字信號(hào)處理運(yùn)算并兼顧高實(shí)時(shí)性要求的場合得以應(yīng)用。TMS320C6000系列DSP的系統(tǒng)設(shè)計(jì)過程中,DSP器件的啟動(dòng)加載設(shè)計(jì)是較難解決的問題之一。

  C6000系列DSP的啟動(dòng)加載方式包括不加載、主機(jī)加載和EMIF加載3種。

  3種加載方式的比較:不加載方式僅限于存儲(chǔ)器0地址不是必須映射到RAM空間的器件,否則在RAM空間初始化之前CPU會(huì)讀取無效的代碼而導(dǎo)致錯(cuò)誤;主機(jī)加載方式則要求必須有一外部主機(jī)控制DSP的初始化,這將增加系統(tǒng)的成本和復(fù)雜度,在很多實(shí)際場合是難以實(shí)現(xiàn)的;EMIF加載方式的DSP與外部ROM/Flash接口較為自由,但片上Bootloader工具自動(dòng)搬移的代碼量有限(1KB/64KB)。本文主要討論常用的EMIF加載方式。

  1 EMIF加載分析

  實(shí)際應(yīng)用中,通常采用的是EMIF加載方式,把代碼和數(shù)據(jù)表存放在外部的非易失性存儲(chǔ)器里(常采用Flash器件)。

  下面以TMS320C6000系列中最新的浮點(diǎn)CPUTMS320C6713(簡稱“C6713”)為例,詳細(xì)分析其EMIF加載的軟硬件實(shí)現(xiàn)。

  硬件方面,其與16位寬度的Flash器件的接口如圖1所示。

圖片點(diǎn)擊可在新窗口打開查看

  對于不同的DSP器件,加載方式的配置引腳稍有不同。C6713的配置引腳及其定義如表l所列。

圖片點(diǎn)擊可在新窗口打開查看

 

應(yīng)用程序的大小決定了片上的Bootloader工具是否足夠把所有的代碼都搬移到內(nèi)部RAM里。對于C6713,片上的Bootloader工具只能將1 KB的代碼搬入內(nèi)部RAM。通常情況下,用戶應(yīng)用程序的大小都會(huì)超過這個(gè)限制。所以,需要在外部Flash的前l(fā) KB范圍內(nèi)預(yù)先存放一小段程序,待片上Bootloader工具把此段代碼搬移入內(nèi)部并開始執(zhí)行后,由這段代碼實(shí)現(xiàn)將Flash中剩余的用戶應(yīng)用程序搬移入內(nèi)部RAM中。此段代碼可以被稱作一個(gè)簡單的二級(jí)Bootloader。

  圖2所示為使用二級(jí)Bootloader時(shí)的CPU運(yùn)行流程。

圖片點(diǎn)擊可在新窗口打開查看

  使用二級(jí)Bootloader需要考慮以下幾個(gè)事項(xiàng):

  ◇需要燒寫的COFF(公共目標(biāo)文件格式)段的選擇;

  ◇編寫二級(jí)Bootloader;

  ◇將選擇的COFF段燒入Flash。

  一個(gè)COFF段就是占據(jù)一段連續(xù)存儲(chǔ)空間的程序或數(shù)據(jù)塊。COFF段分為3種類型:代碼段、初始化數(shù)據(jù)段和未初始化數(shù)據(jù)段。

  對干EMIF加載方式,需要加載的鏡像由代碼段(如.vectors和.text等)和初始化數(shù)據(jù)段(如.cinit,.const,.switch,.data等)構(gòu)成。另外,可以單獨(dú)定義一個(gè).bootload段存放二級(jí)Bootloader。此段也需要寫入Flash。

  所有未初始化的數(shù)據(jù)段(如.bss等)都不需要燒入到Flash中。

  2 二級(jí)Bootloader的編寫

  由于執(zhí)行二級(jí)Bootloader時(shí)C的運(yùn)行環(huán)境還未建立起來,所以必須用匯編語言編寫。二級(jí)Bootloader可參照其他類似文獻(xiàn)及TI相關(guān)文檔。此處不再贅述。

  CCS中用戶工程編譯鏈接后產(chǎn)生的.map文件包含了存儲(chǔ)器的詳細(xì)分配信息。一個(gè)典型的map文件中包含的存儲(chǔ)器分配信息如表2所列

]]>
TMS320C6000系列DSP的Flash啟動(dòng)設(shè)計(jì)http://www.martymets.com/bbs/dispbbs.asp?BoardID=29&ID=1622&Page=1wangxinxin2010-11-22 13:59:14  隨著近年來數(shù)字信號(hào)處理器(DSP)技術(shù)的迅猛發(fā)展,其越來越廣泛地應(yīng)用于國民經(jīng)濟(jì)的各個(gè)領(lǐng)域中。其中,TI公司推出的TMS320C6000系列DSP器件更是在許多需要進(jìn)行大量數(shù)字信號(hào)處理運(yùn)算并兼顧高實(shí)時(shí)性要求的場合得以應(yīng)用。TMS320C6000系列DSP的系統(tǒng)設(shè)計(jì)過程中,DSP器件的啟動(dòng)加載設(shè)計(jì)是較難解決的問題之一。

  C6000系列DSP的啟動(dòng)加載方式包括不加載、主機(jī)加載和EMIF加載3種。

  3種加載方式的比較:不加載方式僅限于存儲(chǔ)器0地址不是必須映射到RAM空間的器件,否則在RAM空間初始化之前CPU會(huì)讀取無效的代碼而導(dǎo)致錯(cuò)誤;主機(jī)加載方式則要求必須有一外部主機(jī)控制DSP的初始化,這將增加系統(tǒng)的成本和復(fù)雜度,在很多實(shí)際場合是難以實(shí)現(xiàn)的;EMIF加載方式的DSP與外部ROM/Flash接口較為自由,但片上Bootloader工具自動(dòng)搬移的代碼量有限(1 KB/64 KB)。本文主要討論常用的EMIF加載方式。

  1 EMIF加載分析

  實(shí)際應(yīng)用中,通常采用的是EMIF加載方式,把代碼和數(shù)據(jù)表存放在外部的非易失性存儲(chǔ)器里(常采用Flash器件)。

  下面以TMS320C6000系列中最新的浮點(diǎn)CPU——TMS320C6713(簡稱“C6713”)為例,詳細(xì)分析其EMIF加載的軟硬件實(shí)現(xiàn)。

  硬件方面,其與16位寬度的Flash器件的接口如圖1所示。

與16位寬度的Flash器件的接口

  對于不同的DSP器件,加載方式的配置引腳稍有不同。C6713的配置引腳及其定義如表1所列。

C6713的配置引腳及其定義

  應(yīng)用程序的大小決定了片上的Bootloadet工具是否足夠把所有的代碼都搬移到內(nèi)部RAM里。對于C6713,片上的Bootloader工具只能將1 KB的代碼搬入內(nèi)部RAM。通常情況下,用戶應(yīng)用程序的大小都會(huì)超過這個(gè)限制。所以,需要在外部Flash的前1 KB范圍內(nèi)預(yù)先存放一小段程序,待片上Bootloader工具把此段代碼搬移入內(nèi)部并開始執(zhí)行后,由這段代碼實(shí)現(xiàn)將Flash中剩余的用戶應(yīng)用程序搬移入內(nèi)部RAM中。此段代碼可以被稱作一個(gè)簡單的二級(jí)Bootloader。

  圖2所示為使用二級(jí)Bootloader時(shí)的CPU運(yùn)行流程。

使用二級(jí)Bootloader時(shí)的CPU運(yùn)行流程

  使用二級(jí)Bootloader需要考慮以下幾個(gè)事項(xiàng):

  ◇需要燒寫的COFF(公共目標(biāo)文件格式)段的選擇;

  ◇編寫二級(jí)Bootloader;

  ◇將選擇的COFF段燒入Flash。

  一個(gè)COFF段就是占據(jù)一段連續(xù)存儲(chǔ)空間的程序或數(shù)據(jù)塊。COFF段分為3種類型:代碼段、初始化數(shù)據(jù)段和未初始化數(shù)據(jù)段。

  對于EMIF加載方式,需要加載的鏡像由代碼段(如.vectors和.text等)和初始化數(shù)據(jù)段(如.cinit,.const,.switch,.data等)構(gòu)成。另外,可以單獨(dú)定義一個(gè).boot-load段存放二級(jí)Bootloader。此段也需要寫入Flash。

  所有未初始化的數(shù)據(jù)段(如.bss等)都不需要燒入到Flash中。

  2 二級(jí)Bootloader的編寫

  由于執(zhí)行二級(jí)Bootloader時(shí)C的運(yùn)行環(huán)境還未建立起來,所以必須用匯編語言編寫。二級(jí)Bootloader可參照其他類似文獻(xiàn)及TI相關(guān)文檔。此處不再贅述。

  CCS中用戶工程編譯鏈接后產(chǎn)生的.map文件包含了存儲(chǔ)器的詳細(xì)分配信息。一個(gè)典型的map文件中包含的存儲(chǔ)器分配信息如表2所列。

一個(gè)典型的map文件中包含的存儲(chǔ)器分配信息

  與cmd文件不同,map文件不僅包含了各段存儲(chǔ)在哪一段內(nèi)存空間的信息,從map文件中還可以具體知道每個(gè)內(nèi)存區(qū)間中有多少被實(shí)際使用(燒寫Flash時(shí)會(huì)用到這個(gè)參數(shù))。內(nèi)存區(qū)間中未被使用部分是不需要寫入Flash內(nèi)容的,實(shí)際被使用的部分才是真正需要寫人到Flash中的內(nèi)容。

  3 Flash的燒寫

  把代碼等寫入Flash的辦法大體上可分為以下幾種:

  ① 使用通用燒寫器寫入。

  ② 使用CCS中自帶的FlashBurn工具。

  ③ 用戶自己編寫燒寫Flash的程序,由DSP將內(nèi)存映像寫入Flash。

  其中,使用通用燒寫器燒寫需要將內(nèi)存映像轉(zhuǎn)換為二進(jìn)制或十六進(jìn)制格式的文件,而且要求Flash器件是可插拔封裝的。這將導(dǎo)致器件的體積較大,給用戶的設(shè)計(jì)帶來不便。

]]>
主站蜘蛛池模板: 明光市| 龙江县| 定南县| 辽宁省| 会东县| 涡阳县| 石城县| 怀安县| 晋宁县| 隆化县| 嘉善县| 舟曲县| 普兰店市| 凤台县| 普洱| 清流县| 茌平县| 兴山县| 曲阳县| 永兴县| 龙泉市| 泸州市| 金乡县| 乐山市| 青浦区| 米易县| 博兴县| 宜春市| 龙海市| 太康县| 屯昌县| 通州区| 临颍县| 松原市| 太和县| 邯郸市| 民丰县| 常宁市| 鄂托克前旗| 石渠县| 富裕县|