<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 基于SHARC的并行系統設計

基于SHARC的并行系統設計

作者: 時(shí)間:2012-02-07 來(lái)源:網(wǎng)絡(luò ) 收藏

摘 要: 針對工作的二種方式,提出了軟件時(shí)的方法和技巧,并給出了具體的程序實(shí)現?

本文引用地址:http://dyxdggzs.com/article/149772.htm

隨著(zhù)數字信號處理(Digital Signal ProcESSor,DSP)技術(shù)的發(fā)展,DSP已被廣泛應用于雷達、通信等領(lǐng)域。雖然DSP經(jīng)歷了幾代的發(fā)展,運算速度和能力都有了很大的提高,但在很多情況下,單片DSP已經(jīng)不能滿(mǎn)足實(shí)時(shí)處理的要求,必須尋求多片DSP處理的方案。

結構出發(fā)可以將分為共享存儲器并行和分布存儲器并行系統。AD公司推出的系列DSP芯片同時(shí)支持這二種并行處理器結構。通常,將AD公司的一系列雙位高性能浮點(diǎn)DSP稱(chēng)為(Super Harvard Architecture)。對于共享存儲器系統,通過(guò)SHARC間的外部共享總線(xiàn)實(shí)現。對于分布存儲器系統,通過(guò)2個(gè)SHARC間的鏈路口直接連接,實(shí)現DSP間點(diǎn)對點(diǎn)的通信。

然而,不能認為將多個(gè)SHARC互相進(jìn)行硬件連接就實(shí)現了并行處理。真正的并行處理應該是使互連的各個(gè)DSP能夠協(xié)調工作,縮短系統處理的時(shí)間。這需要并行系統中SHARC間能完成數據流的傳遞。并行系統中各個(gè)SHARC間數據流的傳遞同數據處理同等重要。本文針對這二種并行方式,分別給出了軟件的設計方法和設計技巧,并且給出了針對ADSP2116X的程序實(shí)現。

1 共享存儲器并行系統的設計

SHARC為多處理器系統提供了強大的支持,用戶(hù)可以在不附加任何外圍電路的情況下構成共享存儲器并行系統。SHARC具有一套巧妙的分布式總線(xiàn)仲裁機制。使用2~6片SHARC把各SHARC的相應引腳相連就可以共享外部總線(xiàn)。每片SHARC都可以訪(fǎng)問(wèn)其他SHARC的片內存儲器,還可以通過(guò)設置IOP寄存器啟動(dòng)其他SHARC的DMA操作。

組成共享存儲器并行系統時(shí),每一個(gè)SHARC都有一個(gè)惟一的標識:ID2~0,取值范圍為000~110。ID=001表示該SHARC為1號DSP,ID=010表示該SHARC為2號DSP,依此類(lèi)推。ID=000表示是單DSP系統。在多DSP系統中,ID=001號的DSP是必須存在的,這是DSP加載成功以后的主處理器。

在共享存儲器系統中,任何時(shí)刻都只有一片SHARC可以驅動(dòng)外部總線(xiàn),該SHARC就被稱(chēng)為主處理器。其余的從SHARC如果需要訪(fǎng)問(wèn)總線(xiàn),則必須先申請總線(xiàn)。主處理器如果此時(shí)沒(méi)有數據傳遞或者總線(xiàn)占用時(shí)間到,就會(huì )釋放總線(xiàn)控制權,把自己的外部總線(xiàn)驅動(dòng)為三態(tài),完成總線(xiàn)控制權的轉移。

主處理器對從SHARC的內存訪(fǎng)問(wèn)和對自己的內存訪(fǎng)問(wèn)一樣簡(jiǎn)單,既可以通過(guò)內核直接讀寫(xiě)完成,也可以通過(guò)外部口DMA實(shí)現。在共享存儲器并行系統中,每一片SHARC根據自己的ID號都有一個(gè)映射的多處理器存儲空間。例如對于A(yíng)DSP2116X,ID=001的SHARC對應的多處理器存儲空間為0x100000~0x1F FFFF,ID=010的SHARC對應的多處理器存儲器空間為0x20 0000~0x2F FFFF等。共享存儲系統的LDF文件與單DSP系統有些不同。下面給出它的一個(gè)示例(以2個(gè)SHARC為例)。

  例1:共享存儲器系統LDF文件。

  ARCHITECTURE(ADSP-21160)

  SEARCH_DIR($ADI_DSP211xxlib)

  MPMEMORY{

  DSP1{START(0X100000)}    //第一片DSP在多處理

  //器空間的映射地址

  DSP2{START(0X200000)} }   //第二片DSP在多處理

  //器空間的映射地址

  MEMORY

  {pm_rsTI { TYPE(PM RAM)START(0x00040004)END

  (0x0004000f)WIDTH(48) }

  pm_code { TYPE(PM RAM)START(0x00040100)END

  (0x00049fff)WIDTH(48) }

  dm_data { TYPE(DM RAM)START(0x00050000)END

  (0x00059fff)WIDTH(32) } }

  PROCESSOR DSP1

  {LINK_AGAINST(DSP2.DXE)    //需要重新連接的

  //DSP2的目標文件

  OUTPUT(DSP1.DXE)       //DSP1輸出的目標文件

  ……             //和單DSP系統相同,故略去,下同

  }

  PROCESSOR DSP2

  {LINK_AGAINST(DSP1.DXE)    //需要重新連接的

  //DSP1的目標文件

  OUTPUT(DSP2.DXE)        //DSP2輸出的目標文件

  ……

  }

這樣,這二片DSP便可以通過(guò)外部總線(xiàn)訪(fǎng)問(wèn)對方的內部資源。當DSP1需要直接訪(fǎng)問(wèn)DSP2中的某一變量時(shí),只需要DSP2將該變量設置為global類(lèi)型,DSP1就可以在多處理器空間中通過(guò)外部總線(xiàn)直接訪(fǎng)問(wèn)該變量,當然,也可以根據變量的內存地址直接訪(fǎng)問(wèn)。

在共享存儲器并行系統中,當二個(gè)SHARC之間通過(guò)總線(xiàn)進(jìn)行數據傳遞時(shí),如果此時(shí)其他的DSP需要訪(fǎng)問(wèn)外部總線(xiàn),則只有掛起等待。這樣,在多個(gè)DSP間數據交換比較頻繁時(shí),系統的效率就會(huì )大大降低。另外,在共享存儲器并行系統中,最多只能有6個(gè)DSP互相連接。如果需要更多的DSP并行工作,共享存儲器并行系統便無(wú)能為力。采用以下介紹的分布存儲器并行系統,可以有效地解決這個(gè)問(wèn)題。

2 分布存儲器并行系統的設計

ADSP2116X提供了獨立的6個(gè)鏈路口,每個(gè)鏈路口可以實(shí)現與其他ADSP2116X或者外圍設備點(diǎn)對點(diǎn)的通信。每個(gè)鏈路口包括8位雙向數據線(xiàn)(LxDAT7~0),1個(gè)雙向時(shí)鐘信號(LxCLK),1個(gè)雙向確認信號(LxACK)。但是,鏈路口沒(méi)有為發(fā)送和接收提供2套管腳,所以在任何時(shí)刻鏈路口只能工作在單工狀態(tài)。依靠鏈路口進(jìn)行雙DSP間的數據傳遞時(shí),只需要把2個(gè)DSP的10個(gè)管腳對應連接即可,不需要任何外部附加邏輯。

在A(yíng)DSP2116X內部有6個(gè)鏈路緩沖器。用戶(hù)通過(guò)定義LAR寄存器,可以為每個(gè)鏈路口選擇一個(gè)或幾個(gè)緩存器。鏈路緩沖器一端與內部總線(xiàn)相連,另一端通過(guò)LAR寄存器與不同的鏈路口相連。需要注意的是,鏈路口與鏈路緩存器是完全不同的概念。鏈路緩沖器可以理解為一個(gè)雙向的FIFO,而鏈路口僅僅代表其對外的10個(gè)管腳。鏈路口的特性很大程度上是由其正在使用的緩沖器的特性決定的。

ADSP2116X的鏈路口發(fā)送時(shí)鐘頻率可以通過(guò)LCTLx寄存器的LxCLKD位設置(1,1/2,1/3,1/4核時(shí)鐘頻率),鏈路口數據線(xiàn)根據需要可以選擇為8位或4位。發(fā)送方在時(shí)鐘LxCLK的上升沿送出8/4位碼,接收方利用時(shí)鐘下降沿鎖存8/4位碼,并且接收方使LxACK有效,表示已準備好接收下一個(gè)字。在每個(gè)字開(kāi)始發(fā)送時(shí),發(fā)送方如果看到LxACK無(wú)效,則將LxCLK保持為高,并等待LxACK有效后才開(kāi)始發(fā)送新字。當發(fā)送緩沖為空時(shí),LxCLK將保持為低電平。

鏈路口數據傳輸可以通過(guò)DMA方式和內核直接訪(fǎng)問(wèn)二種方式。DMA方式傳輸時(shí)不需要內核干預,在傳輸數據量比較大時(shí)效率很高,但是需要首先進(jìn)行DMA參數設置。當僅有個(gè)別數據需要通過(guò)鏈路口傳遞的情況下,往往不使用DMA方式,而是通過(guò)ADSP2116X的內核直接訪(fǎng)問(wèn)。用戶(hù)可以通過(guò)LCOM寄存器中緩沖器的狀態(tài)來(lái)控制內核對鏈路口緩沖進(jìn)行讀寫(xiě)操作,也可以通過(guò)相應的中斷從鏈路口緩沖器中讀寫(xiě)數據,如“DM(LBUF0)=R0;”或者“R0=DM(LBUF0);”等。值得注意的是,無(wú)論是試圖從一個(gè)空的鏈路緩沖中讀,還是試圖向滿(mǎn)的緩沖中寫(xiě),內核的指令都會(huì )掛起,直到操作成功為止。因此,內核指令直接讀寫(xiě)鏈路緩存時(shí),需要首先判斷鏈路緩沖狀態(tài)。

ADSP2116X為每個(gè)鏈路口提供了一個(gè)專(zhuān)用的DMA通道,它們分別占用DMA中的4~9通道。鏈路口的DMA使用非常方便,只需將對應的DMA參數寄存器(IIx,IMx,Cx)設置完畢,使能LCTLx中對應通道的LxDEN即可。在當前DMA結束(或者鏈式DMA全部結束)后,會(huì )觸發(fā)一個(gè)可屏蔽中斷通知用戶(hù)。啟動(dòng)鏈路口DMA的順序如下:

  (1)由LAR寄存器的AxLB為鏈路口分配一個(gè)LBUFx;

  (2)由LCTL寄存器的LxEN使能這個(gè)LBUFx,并設置好LCTL控制寄存器;

  (3)設置DMA參數(IIy,IMy,Cy);

  (4)置位LCTL寄存器的LxDEN,就啟動(dòng)了DMA。

  其中:x=0~5,y=4~9。

  下面給出一個(gè)利用鏈路口DMA發(fā)送數據的示例。

  例2:利用鏈路口0進(jìn)行數據發(fā)送。

  .SECTION/dm dm_data;

  .VAR trans_data[size];

  .SECTION/pm pm_code:

  ……

  r0=0x0002c688;

  dm(LAR)=r0;

  r9=0x00000229; /*LBUF0使能、發(fā)送、8位字寬、核時(shí)鐘速率*/

  dm(LCTL0)=r9;

  r0=trans_data;

  dm(II4)=r0;  /*需要發(fā)送數據的起始地址*/

  r0=1;

  dm(IM4)=r0;

  r0=size;

  dm(C4)=r0;

  ustat1=dm(LCTL0);

  bit set ustat1 L0DEN;  /*啟動(dòng)發(fā)送DMA*/

  dm(LCTL0)=ustat1;

如果傳輸的數據不在一段連續的內存區,而是在多段數據塊中,可以利用鏈式DMA。鏈式DMA可以在當前DMA操作結束后自動(dòng)重新配置當前通道并開(kāi)始新的DMA,所有這些操作都不需要內核的干預。在鏈式DMA過(guò)程中,用戶(hù)只要對DMA參數配置一次,就可以方便地完成多塊數據的DMA傳輸。

鏈式DMA是通過(guò)CPx寄存器實(shí)現的。對于A(yíng)DSP2116X來(lái)說(shuō),CPx是一個(gè)19位的寄存器。寄存器中低18位表示相對于基地址0x40000的偏移量,用戶(hù)在這個(gè)地址的內部存儲器中存放下一次DMA的參數,這些參數叫做TCB(Transfer Control Blocks)。CPx中的第19位是控制當前鏈式DMA完成后是否產(chǎn)生中斷的PCI位。如果把全局地址賦給CPx,則PCI位一定為1,表明一定會(huì )產(chǎn)生中斷。

用戶(hù)只需要在內存區填寫(xiě)多個(gè)TCB的表格,用其中的CPx字段將每個(gè)表格串起來(lái)并將第一個(gè)表格的結束地址放入CPx寄存器,就可以啟動(dòng)鏈式DMA。要終止一個(gè)鏈式DMA,只需要把最后一個(gè)TCB中的CPx字段填0即可。TCB結構如圖1所示。

下面是建立一個(gè)鏈式DMA的順序:

  (1)在片內存儲器中建立需要的TCB數據塊;

  (2)設置DMA參數寄存器,使能相應的LxDEN和LxCHEN;

  (3)將第一個(gè)TCB的最后一個(gè)地址的偏移量寫(xiě)入CPx寄存器中,即啟動(dòng)了鏈式DMA。

鏈路口的數據傳遞可以依靠中斷。鏈路口中斷的產(chǎn)生有以下3種情況:

  (1)DMA使能時(shí),DMA完成后將產(chǎn)生一個(gè)可屏蔽中斷。

  (2)DMA禁止時(shí),發(fā)送時(shí)LxBUF非滿(mǎn),接收時(shí)LxBUF非空。

  (3)外部設備訪(fǎng)問(wèn)一個(gè)未指定的鏈路口,或者訪(fǎng)問(wèn)一個(gè)已指定但LBUF被禁止的鏈路口時(shí),將產(chǎn)生一個(gè)鏈路服務(wù)請求(LSRQ)中斷,且所有的鏈路口公用一個(gè)中斷矢量。

前2種情況比較簡(jiǎn)單,只需要注意:ADSP2116X鏈路口的中斷屏蔽、鎖存與ADSP2106X不同,它從IRPTL/IMASK中分離出來(lái),單獨存在于寄存器LIRPTL中,并且在IMASK中加了一個(gè)鏈路口中斷總開(kāi)關(guān)LPISUMI。如果要使能某個(gè)鏈路口中斷,則需要設置3個(gè)控制位。例如使能L0BUF中斷,需要以下指令:“bit set imask LPISUMI;bit set lirptl LP0MSK;bit set mode1 IRPTEN;”。

對于上面的鏈路服務(wù)請求中斷(LSRQ),在多SHARC通信時(shí)比較有效。通過(guò)該中斷可以實(shí)現使用同一個(gè)鏈路口完成接收和發(fā)送數據的功能,并且在2個(gè)SHARC一個(gè)主動(dòng)、另一個(gè)被動(dòng)的情況下不依靠外部邏輯實(shí)現2個(gè)鏈路口的數據傳遞同步。例如SHARC-1需要通過(guò)鏈路口向SHARC-2傳送數據,由于SHARC-1主動(dòng)發(fā)送,因此只需配置好DMA參數,啟動(dòng)DMA即可。但是對于SHARC-2,由于被動(dòng)接收,事先并不知道SHARC-1何時(shí)向自己發(fā)送數據,因此很難在適當的時(shí)候啟動(dòng)DMA接收。通過(guò)LSRQ中斷,就可以很容易地解決這個(gè)問(wèn)題。

首先將雙方的鏈路口設置為無(wú)效。當SHARC-1需要向SHARC-2通信時(shí)(發(fā)送或接收)將自己的鏈路口設為有效,并根據需要從自己的鏈路緩沖中讀寫(xiě)數據。由于鏈路通信協(xié)議規定:當發(fā)送數據時(shí),如果對方?jīng)]有響應,則將LxCLK置為高電平,數據線(xiàn)保持不變;當需要接收數據時(shí),如果對方?jīng)]有響應,則LxACK保持為高電平。這樣,SHARC-2就會(huì )觸發(fā)LSRQ中斷。由于LSRQ中斷的所有鏈路口公用一個(gè)中斷矢量,因此在中斷服務(wù)子程序中,首先需要判斷哪個(gè)鏈路口有服務(wù)請求,且要區分是發(fā)送還是接收請求,然后配置相應的DMA參數,使能該鏈路口,從而在雙方之間建立一個(gè)單向的數據通路。雙方傳遞數據完成,會(huì )產(chǎn)生一個(gè)如上文中鏈路口中斷情況(1)所示的中斷。在中斷服務(wù)程序中,仍然將各自的鏈路口設置為無(wú)效,等待下一次通信請求。下面給出一個(gè)利用LSRQ中斷實(shí)現數據傳遞的示例。

例3:配置L0BUF,利用LSRQ中斷實(shí)現數據傳遞。

  r0=0x0002c688;

  dm(LAR)=r0;

  ustat1=dm(LCTL0);

  bit clr ustat1 L0EN;  /*禁止鏈路緩沖0*/

  dm(LCTL0)=ustat1;

  ustat1=dm(LSRQ);

  bit set ustat1 L0TM;  /*鏈路0發(fā)送屏蔽*/

  bit set ustat1 L0RM;  /*鏈路0接收屏蔽*/

  dm(LSRQ)=ustat1;

  bit set imask LSRQI;  /*使能LSRQ中斷*/

  bit set mode1 IRPTEN;

  ……

上面的程序段可以放在主程序的開(kāi)始。經(jīng)過(guò)以上的配置,就可以通過(guò)LSRQ中斷方便地實(shí)現與另一片SHARC的鏈路口通信(發(fā)送、接收)。另外需要注意的是,當修改鏈路緩沖器的使能位LxEN時(shí),必須將該中斷屏蔽(bit clr imask LSRQI),否則有可能產(chǎn)生不可預料的LSRQ中斷。

3 結束語(yǔ)

采用共享存儲器并行系統和分布存儲器并行系統各有特色,結合這二種系統設計的思想更易于構建并行處理系統。設計時(shí),可以采用子模塊結構把這二者結合起來(lái)。子模塊內部,采用共享存儲器和分布存儲器并存,各個(gè)SHARC間根據需要既可以通過(guò)總線(xiàn)傳送數據,又可以通過(guò)鏈路口傳送數據。子模塊之間采用分布式存儲器系統,通過(guò)鏈路口進(jìn)行數據傳遞。采用以上設計,可以實(shí)現有效的并行處理,使系統整體性能有很大的提高。



關(guān)鍵詞: 設計 系統 并行 SHARC 基于

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>