<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > SHARC并行系統(tǒng)軟件設(shè)計(jì)方法

          SHARC并行系統(tǒng)軟件設(shè)計(jì)方法

          作者: 時(shí)間:2014-02-17 來源:網(wǎng)絡(luò) 收藏
          l; font-size: 14px; line-height: 25px; background-color: rgb(255, 255, 255); ">  在共享存儲(chǔ)器并行系統(tǒng)中,當(dāng)二個(gè)之間通過總線進(jìn)行數(shù)據(jù)傳遞時(shí),如果此時(shí)其他的DSP需要訪問外部總線,則只有掛起等待。這樣,在多個(gè)DSP間數(shù)據(jù)交換比較頻繁時(shí),系統(tǒng)的效率就會(huì)大大降低。另外,在共享存儲(chǔ)器并行系統(tǒng)中,最多只能有6個(gè)DSP互相連接。如果需要更多的DSP并行工作,共享存儲(chǔ)器并行系統(tǒng)便無能為力。采用以下介紹的分布存儲(chǔ)器并行系統(tǒng),可以有效地解決這個(gè)問題。2 分布存儲(chǔ)器并行系統(tǒng)的設(shè)計(jì)

          本文引用地址:http://www.ex-cimer.com/article/241699.htm

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

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

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

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

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

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

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

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

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

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

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

            例2:利用鏈路口0進(jìn)行數(shù)據(jù)發(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ā)送數(shù)據(jù)的起始地址*/

            r0=1;

            dm(IM4)=r0;

            r0=size;

            dm(C4)=r0;

            ustat1=dm(LCTL0);

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

            dm(LCTL0)=ustat1;

            如果傳輸?shù)臄?shù)據(jù)不在一段連續(xù)的內(nèi)存區(qū),而是在多段數(shù)據(jù)塊中,可以利用鏈?zhǔn)紻MA。鏈?zhǔn)紻MA可以在當(dāng)前DMA操作結(jié)束后自動(dòng)重新配置當(dāng)前通道并開始新的DMA,所有這些操作都不需要內(nèi)核的干預(yù)。在鏈?zhǔn)紻MA過程中,用戶只要對(duì)DMA參數(shù)配置一次,就可以方便地完成多塊數(shù)據(jù)的DMA傳輸。

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



          關(guān)鍵詞: SHARC 并行系統(tǒng)軟件

          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();