国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      用于增強(qiáng)的計算能力的處理器體系結(jié)構(gòu)的制作方法

      文檔序號:6480109閱讀:247來源:國知局
      專利名稱:用于增強(qiáng)的計算能力的處理器體系結(jié)構(gòu)的制作方法
      技術(shù)領(lǐng)域
      本發(fā)明涉及處理器體系結(jié)構(gòu),更具體地,涉及有利于高性能數(shù)字信號 處理計算的數(shù)字信號處理器體系結(jié)構(gòu)。所公開的數(shù)字信號處理器可以隨其 它處理器一起^吏用,或者作為獨立的處理器4吏用。
      背景技術(shù)
      數(shù)字信號處理器(DSP)是被設(shè)計用于對數(shù)字信號處理應(yīng)用的性能進(jìn) 行優(yōu)化的專用計算機(jī),所述數(shù)字信號處理應(yīng)用例如為快速傅里葉變換、教 字濾波、圖像處理、無線系統(tǒng)中的信號處理以及語音識別。數(shù)字信號處理 器應(yīng)用典型地具有實時操作、高中斷率以及密集的數(shù)值計算的特征。此夕卜, 數(shù)字信號處理器應(yīng)用趨向于存儲器訪問操作密集以及需要對大量數(shù)據(jù)的 輸入和輸出。數(shù)字信號處理器體系結(jié)構(gòu)典型地被優(yōu)化用于有效地執(zhí)行這種 計算。
      數(shù)字信號處理器的核心處理器典型地包括計算塊、程序序列發(fā)生器、 指令解碼器、以及執(zhí)行數(shù)字信號計算所需要的所有其它元件。計算塊是數(shù)
      字信號處理器的基本計算元件,并且典型地包括寄存器堆以及一個或更多 個計算單元,所述計算單元例如為乘法器和算術(shù)邏輯單元(ALU)。
      數(shù)字信號計算實際上經(jīng)常是重復(fù)性的。也就是說,可能多次用不同的 數(shù)據(jù)來執(zhí)行相同或相類似的計算。因此,各個計算的l變的任何提高可能 提供數(shù)字信號處理器的性能的顯著增強(qiáng)。
      諸如無線系統(tǒng)中的基站之類的一些應(yīng)用具有超出當(dāng)前數(shù)字信號處理 器的能力的性能需求和時序需求。為了滿足這些需求,設(shè)計者使用了與 ASIC (專用集成電路)和/或FPGA (現(xiàn)場可編程門陣列)相組合的數(shù)字 信號處理器。這種系統(tǒng)缺乏靈活性Jbf目對昂貴。此外,所需要的性能隨著 下一代無線系統(tǒng)的引入而提高。高功耗通常是高性能處理器中存在的問 題。
      可以取決于預(yù)期應(yīng)用而針對不同的操作參數(shù)來優(yōu)化數(shù)字信號處理器設(shè)計,所述不同的操作參數(shù)例如為計算速度、功耗以及編程的簡易性。此
      外,數(shù)字信號處理器可以被設(shè)計用于不同的字長。在1999年9月21日授 權(quán)給Garde的美國專利5954811中7>開了利用長指令字和寬數(shù)據(jù)總線并 且實現(xiàn)了高運算速度的32位體系結(jié)構(gòu)。核心處理器包括兩個計算塊。盡 管具有很高的性能,但是該公開的處理器并未提供用于所有應(yīng)用的優(yōu)化的 解決方案。
      因此,存在對數(shù)字信號處理器體系結(jié)構(gòu)和性能的進(jìn)一步創(chuàng)新的需求。

      發(fā)明內(nèi)容
      根據(jù)本發(fā)明的第一方面, 一種數(shù)字信號處理器包括控制塊,被配置 用于基于已存儲的程序來發(fā)出指令;以及計算陣列,包括兩個或更多個計 算引擎,所述計算陣列被配置成使得所發(fā)出的指令中的每個指令在連續(xù)的 時段、在至少所述計算引擎的子集中的連續(xù)的計算引擎中執(zhí)行。所述計算 陣列可以被配置成使得所發(fā)出的指令中的每個指令在連續(xù)的時段流經(jīng)至 少所述計算引擎的子集中的、連續(xù)的計算引擎。
      所述計算引擎中的每個計算引擎可以包括指令管道,被配置用于控 制指令經(jīng)過計算陣列的流動;以及至少一個流單元,被配置用于對與所述 指令相關(guān)聯(lián)的數(shù)據(jù)執(zhí)行流操作。所述計算引擎中的每個計算引擎還可以包 括 一個或更多個計算單元,用于執(zhí)行數(shù)字信號計算;以及寄存器堆,用 于保存數(shù)字信號計算的操作數(shù)。
      所述計算陣列包括至少一個存儲器。在一些實施例中,所述計算引擎
      中的每個計算引擎包括第一存儲器和第二存儲器。在其它實施例中,所述 計算陣列包括被配置用于隨所述計算引擎中的每個計算引擎一起操作的
      第一存儲器和第二存儲器。所述計算陣列中的計算引擎可以被配置用于對 所述存儲器的內(nèi)容執(zhí)行逐列操作、逐行逐列的操作、以及逐行操作。
      在一些應(yīng)用中,所述流單元可以被配置用于從存儲器加栽數(shù)據(jù)、以及 將數(shù)據(jù)移位到連續(xù)的計算引擎中的一個或更多個所選寄存器中。在其它應(yīng) 用中,所述流單元可以被配置用于從存儲器加載數(shù)據(jù)、以及向所述計算引 擎中的每個計算引擎中的一個或更多個所選寄存器廣播數(shù)據(jù)。在另外的應(yīng) 用中,所述流單元可以被配置用于對來自連續(xù)的計算引擎中的一個或更多 個所選寄存器的數(shù)據(jù)進(jìn)行累加以及存儲結(jié)果。在一些實施例中,流單元中 的寄存器與寄存器堆中的寄存器相交互。在一些應(yīng)用中,可以將所述計算引擎形成為組。在其它應(yīng)用中,可以 使數(shù)據(jù)再循環(huán)經(jīng)過計算陣列。
      根據(jù)本發(fā)明的第二方面, 一種用于數(shù)字信號處理的方法包括提供一 種包括控制塊和計算陣列的數(shù)字信號處理器,其中該計算陣列包括兩個或 更多個計算引擎;在所述控制塊中基于已存儲的程序來發(fā)出指令;以及在 連續(xù)的時段、在至少所述計算引擎的子集中的連續(xù)的計算引擎中執(zhí)行所發(fā) 出的指令中的每個指令。
      根據(jù)本發(fā)明的第三方面, 一種數(shù)字信號處理器包括控制處理器;處 理器,所述處理器包括被配置用于基于已存儲的程序來發(fā)出指令的控制 塊,以及計算陣列,所述計算陣列包括兩個或更多個計算引擎,所述所述 計算陣列被配置成使得在連續(xù)的時段、在至少所述計算引擎的子集中的連 續(xù)的計算引擎中執(zhí)行所發(fā)出的指令中的每個指令;以及能夠被所述控制處 理器和所述處理器訪問的主存儲器。所述計算陣列可以被配置成使得所發(fā) 出的指令中的每個指令在連續(xù)的時段流經(jīng)至少所述計算引擎的子集中的、 連續(xù)的計算引擎。


      為了更好地理解本發(fā)明,參考通過引用而合并于此的附圖,在附圖中
      圖l是根據(jù)本發(fā)明的實施例的數(shù)字信號處理器的示意性框圖2是圖1所示的處理器的實施例的示意性框圖3是圖2所示的計算引擎之一的實施例的示意性框圖4是圖2所示的計算陣列的第二實施例的示意性框圖5是示出了根據(jù)本發(fā)明的實施例的、用于流^Mt的存儲器地址空間 的示意性;f匡圖6是示出了根據(jù)本發(fā)明的實施例的、用于SIMD操作的存儲器地 址空間的示意性4匡圖6A是示出了根據(jù)本發(fā)明的另一實施例的、用于SIMD操作的存儲 器地址空間的示意性框圖7是根據(jù)本發(fā)明的實施例的流單元的示意性框圖8A是執(zhí)行流加載指令的流單元的示意性框圖;圖8B是示出了流加載指令的執(zhí)行的示意性框圖9A是執(zhí)行流存儲指令的流單元的示意性框圖9B是示出了 ;i^儲指令的操作的示意性框圖IO是計算陣列的示意性框圖,其示出了根據(jù)本發(fā)明的實施例的數(shù) 據(jù)通路總線;
      圖11是示出了根據(jù)本發(fā)明的實施例的對稱濾波計算的示意性框圖12是根據(jù)本發(fā)明的實施例的計算引擎的示意性框圖13是示出了計算引擎的分組的示意性框圖14是圖2所示的控制塊的實施例的示意性框圖15是示出了根據(jù)本發(fā)明的實施例的DMA交織的示意性框圖16是示出了使用根據(jù)本發(fā)明的實施例的處理器的逐列處理的示意 性圖示;
      圖17是示出了使用根據(jù)本發(fā)明的實施例的處理器的逐行逐列的處理 的示意性圖示;
      圖18是示出了使用根據(jù)本發(fā)明的實施例的處理器的逐行處理的示意 性圖示;
      圖19是示出了使用根據(jù)本發(fā)明的實施例的處理器的帶移位的逐行處 理的示意性圖示;以及
      圖20是示出了使用根據(jù)本發(fā)明的實施例的處理器的帶移位和廣播的 逐行處理的示意性圖示。
      具體實施例方式
      圖1中示出了根據(jù)本發(fā)明的實施例的數(shù)字信號處理器的示意性框圖。 數(shù)字信號處理器(DSP) 10包括控制處理器12、存儲器14、 1/0端口 16 和處理器20??刂铺幚砥?2與處理器20進(jìn)行交互,并訪問存儲器14。 DMA1總線22在存儲器14與處理器20之間傳送數(shù)據(jù)。DMA2總線24 在存儲器14、處理器20和I/O端口 16之間傳送數(shù)據(jù)。1/0端口 16可以 經(jīng)由FIFO或I/O緩沖器直接與處理器20進(jìn)行通信。I/O端口 16提供了 去向諸如主機(jī)計算機(jī)之類的外部存儲器、外部裝置和/或外部處理器的接 O 。作為示例,控制處理器12可以具有在美國專利5896543中^>開的類 型的體系結(jié)構(gòu),該美國專利5896543在1999年4月20日被授權(quán)給Garde, 并被模擬裝置公司(Analog Devices, Inc.)作為TigerSharc數(shù)字信號處 理器出售。存儲器14可以包括三個獨立的大容量存儲體。在優(yōu)選的實施 例中,所述存儲體中的每個存儲體可以具有64K個各為32位的字的容量。 所述存儲體中的每個存儲體可以具有128位數(shù)據(jù)總線,使得可以在單個時 鐘周期內(nèi),將多達(dá)四個的連續(xù)的對準(zhǔn)的各為32位的數(shù)據(jù)字傳送至每個存 儲體,或從每個存儲體傳送多達(dá)四個的連續(xù)的對準(zhǔn)的各為32位的數(shù)據(jù)字。
      圖2中示出了處理器20的第一實施例的示意性框圖。處理器20可以 包括控制塊30和計算陣列32??刂茐K30可以包括控制邏輯34、 DMA 控制器36、整數(shù)ALU38和40、程序序列發(fā)生器42、程序存儲器44和數(shù) 據(jù)存儲器46??刂茐K30基于已存儲的程序而將指令和數(shù)據(jù)地址發(fā)給計算 陣列32。
      計算陣列32包括兩個或更多個計算引擎。在圖2的實施例中,計算
      陣列32包括八個計算邏輯50、 51、 52.....57。每個計算引擎可以被稱
      為計算陣列的"段"。計算引擎是串聯(lián)的,使得控制塊30發(fā)出的指令以及
      對應(yīng)的數(shù)據(jù)行進(jìn)經(jīng)過或"流動"經(jīng)過計算引擎50、 51、 52.....57,并在
      連續(xù)的時段在所述計算引擎中的每個計算引擎中執(zhí)行。如同下面所公開的 那樣,在利用對計算引擎的分組的應(yīng)用中,控制塊30所發(fā)出的指令以及 對應(yīng)的數(shù)據(jù)流經(jīng)所述計算引擎的子集或組,并在連續(xù)的時段執(zhí)行。在一個 實施例中,指令在連續(xù)的時鐘周期行進(jìn)經(jīng)過連續(xù)的計算引擎。作為示例, 控制塊30發(fā)出的指令可以在時鐘周期1行進(jìn)至計算引擎50,在時鐘周期 2行進(jìn)至計算引擎51,以及在時鐘周期8行進(jìn)至計算引擎57。但是,本 發(fā)明并不限于這方面,并且每個指令可以在任意數(shù)量的時鐘周期之后從一 個計算引擎行進(jìn)至下個計算引擎。此外,指令不一定在第一個計算引擎處
      l計算陣列32,而是可以在所述計算引擎中的任一計算引擎處^。 該特性例如在利用對計算引擎的分組的應(yīng)用中是有益的。所述計算引擎中 的每個計算引擎可以被單獨地流水線化,因此可能需要若干時鐘周期來完 成指令的執(zhí)樸。此外,數(shù)據(jù)在連續(xù)的時段流至連續(xù)的計算引擎,這將在下 面詳細(xì)描述。
      在圖2的實施例中,指令在連續(xù)的時鐘周期流經(jīng)所述計算引擎中的所 有計算引擎或所述計算引擎的子集。在其它實施例中,控制塊30發(fā)出的 指令可以被廣播至所述計算引擎中的所有計算引擎或所述計算引擎的子集。在該實施例中,根據(jù)計算引擎在計算陣列中的位置來延遲所廣播的指 令,使得每個廣播的指令在連續(xù)的時段在連續(xù)的計算引擎中執(zhí)行。例如,
      所廣播的指令可以在計算引擎50中無延遲,在計算引擎51中有一個時鐘 周期的延遲,在計算引擎52中有兩個時鐘周期的延遲,等等。在每種情 況下,每個發(fā)出的指令在連續(xù)的時a^連續(xù)的計算引擎中執(zhí)行。在利用對 計算引擎的分組的情況下,每個指令在連續(xù)的時段在所述組中的連續(xù)的計 算引擎中執(zhí)行。
      圖3中示出了單個計算引擎的實施例的示意性框圖。每個計算引擎包 括指令管道70和流單元72,指令管道70用于控制經(jīng)過計算引擎的陣列 的指令流,流單元72用于控制計算引擎的陣列中的數(shù)據(jù)流。連續(xù)的計算 引擎中的指令管道70通過指令總線120耦合在一起。連續(xù)的計算引擎中 的流單元72通過流總線102耦合在一起。每個計算引擎一般可以配置有 一個或更多個流單元以及一個或更多個流總線。指令管道70保存指令并 向計算引擎提供控制信號以用于執(zhí)行指令。每個計算引擎中的指令管道 70在長度上可以是一個或更多個時鐘周期。在一個實施例中,每個計算 引擎中的指令管道70在長度上是一個時鐘周期。
      每個計算引擎還包括計算塊74、寄存器堆76和DMA緩沖器82。在 圖2的實施例中,每個計算引擎包括X存儲器78和Y存儲器80??梢?將與所述計算引擎中的每個計算引擎相關(guān)聯(lián)的存儲器實現(xiàn)為SRAM。如 同下面所討論的,可以以不同的方式來實現(xiàn)該存儲器。在另一實施例中, 每個計算引擎可以包括單個存儲器。計算塊74可以包括一個或更多個計 算單元。例如,計算塊74可以包括乘法器卯、算術(shù)邏輯單元(ALU) 92 和MAC (乘法累加器)加法器96 (圖12)。計算塊74與寄存器堆76相 交互,以便響應(yīng)于指令管道70中的指令而執(zhí)行數(shù)字信號計算。寄存器堆 76與存儲器78和80以及流單元72相交互,以獲得用于數(shù)字信號計算的 指定數(shù)據(jù)以及將結(jié)果提供給指定目的地。通過指令來指定數(shù)據(jù)的位置和結(jié) 果的目的地。通過DMA緩沖器82以及DMA總線22和24,將數(shù)據(jù)傳送 至存儲器78和80以及從存儲器78和80傳送數(shù)據(jù)。在一些實施例中,計 算塊74可以包括可配置門陣列(CGA) 98。
      流存儲器數(shù)據(jù)(FMD)總線94、流總線102和回流數(shù)據(jù)(BFD)總 線124經(jīng)由開關(guān)104耦合到流單元72的輸入端。FMD總線94、流總線 102和BFD總線124經(jīng)由開關(guān)106耦合到流單元72的輸出端。在正常的 操作模式中,開關(guān)104經(jīng)由流總線102將流單元72的輸入端連接到在先
      12的計算引擎中的流單元,并且流數(shù)據(jù)在流總線102上從在先的計算引擎接 收。在正常模式中,開關(guān)106經(jīng)由流總線102將流單元72的輸出端連接 到下個計算引擎中的流單元,并且流數(shù)據(jù)在流總線102上被提供給下個計 算引擎。如下文所述,當(dāng)利用對計算引擎的分組時,開關(guān)106將流輸出端 102連接到組中的最后一個計算引擎中的BFD總線124,使得流數(shù)據(jù)被保 持在計算引擎的組內(nèi)。在流加載操作的情況下,F(xiàn)MD總線94經(jīng)由開關(guān) 104連接到所選計算引擎中的流單元72的輸入端,由此將存儲器連接到 流單元72。在流存儲操作的情況下,經(jīng)由開關(guān)106將所選計算引擎中的 流單元72的輸出端連接到FMD總線94。如圖10所示,當(dāng)以再循環(huán)模式 使用計算陣列32時,從最后一個計算引擎57輸出的流數(shù)據(jù)在流總線102 上被耦合至第一個計算引擎50的流數(shù)據(jù)輸入端。
      圖4中示出了計算陣列32的第二實施例的示意性框圖。圖2和4中 的相似元件具有相同的附圖標(biāo)記。圖4的實施例包括計算引擎50、 51、 52、 ...、 57。在圖4的實施例中,每個計算引擎不包括單獨的X存儲器和 Y存儲器。替代地,計算陣列32包括由所述計算引擎中的每個計算引擎 所訪問的單個X存儲器84和單個Y存儲器86。每個存儲器84, 86可以 是DRAM,并且可以具有足夠用于與所述計算引擎中的每個計算引擎相 關(guān)的并行的加載/存儲操作的行寬度。例如,存儲器84和86可以為1024 位寬,以便對于所述八個計算引擎中的每個計算引擎并行地加載/存儲四 個32位的字。與八個較小的SRAM相比,使用大的DRAM在空間上更 為有效。替代實現(xiàn)八個存儲器,,可以通it^DRAM與計算引擎之間 插入分級緩沖器來4吏用單個DRAM,以順序地將數(shù)據(jù)按行提供給計算陣 列的每個段。存儲器訪問經(jīng)過與延遲線起類似作用的分m沖器88。分 級緩沖器88中的負(fù)栽延遲線具有隨段號而增加的延遲。也就是說,段0 無延遲,段1具有1個周期的延遲,等等,以及段7具有7個周期的延遲。 對于分M沖器88中的存儲延遲線而言,延遲是相反的。也就是說,段 0具有7個周期的延遲,段1具有6個周期的延遲,等等,以及段7無延 遲。由于分級緩沖器88在8個時鐘周期內(nèi)被清空,因此可以用動態(tài)邏輯 來構(gòu)建分級緩沖器88。
      在本發(fā)明的范圍之內(nèi),計算陣列32可以具有不同的存儲器配置。圖 2示出了每個計算引擎包括X存儲器78和Y存儲器80的實施例,圖4 示出了計算陣列32包括單個X存儲器84和單個Y存儲器86的實施例。 在其它實施例中,每個計算引擎可以包括單個存儲器或多于兩個的存儲 器。在另外的實施例中,單個存儲器可以服務(wù)于整個計算陣列。在另外的實施例中,計算陣列可以包括與相應(yīng)的計算引擎相關(guān)聯(lián)的單獨的段存儲器 (典型地是較小的存儲器),以及一個服務(wù)于整個計算陣列的存儲器(典 型地是較大的存儲器)。在這些具有八個計算引擎的實施例中一般可以配
      置一個或更多個存儲器來服務(wù)于l個、2個、4個或8個計算引擎。
      計算陣列32可以包括行高速緩存130 (圖4 ),行高速緩存130允許 在單個周期內(nèi)緩存1024位的數(shù)據(jù)行以用于流訪問。這在后續(xù)對該行的流 訪問中釋放了存儲器。由于行高速緩存,程序員不需要訪問四倍長字,從 而最小化存儲器訪問。這通常簡化和減小了程序大小。這還減少了功耗, 并且允許對存儲器的較優(yōu)的DMA訪問。行高速緩存130優(yōu)選地包括加載 行高速緩存(LRC)和存儲行高速緩存(SRC)。優(yōu)選地,行高速緩存只 支持流訪問而不支持SIMD訪問。行高速緩存可以在圖2和2A的實施例 中使用。計算陣列32可以包括一個或更多個加載行高速緩存以及一個或 更多個存儲行高速緩存。
      加載行高速緩存保存存儲器中當(dāng)前訪問的整個行。該行是在第一次執(zhí) 行流加載指令時自動加載的。加載行高速緩存的功能是如同高速緩存一樣 起作用,以減少后續(xù)對存儲器的流訪問的數(shù)量。加載行高速緩存還提供了 拆分功能,特別是用于短字。控制器不再對存儲器進(jìn)行流訪問,直到行地 址改變。例如,該緩沖器可以保存64個短字,并省去了 63次對存儲器的 訪問。
      存儲行高速緩存在被充滿之前對輸入流結(jié)果進(jìn)行打包。當(dāng)被充滿時, 存儲行高速緩存^向存儲器的存儲。存儲行高速緩存如同高速緩存一樣 起作用,以減少對存儲器的多次單獨訪問。存儲行高速緩存還提供打包功 能,特別是用于短字??刂破鞑粚⒋鎯π懈咚倬彺娴膬?nèi)M儲到存儲器中, 直到行地址改變或者直到行高速緩存被充滿。例如,該緩沖器可以保存 64個短字結(jié)果,并省去對存儲器的63次訪問。
      控制塊30發(fā)出用于計算陣列32的加載/存儲指令和計算指令。指令 從左側(cè)1計算陣列,并在每個時鐘周期從一個段流到下個段,直到它們 在八個時鐘周期之后離開該陣列。進(jìn)入陣列的數(shù)據(jù)按照指令所指定地以相 同的方式流經(jīng)該陣列。計算的結(jié)果按照指令所指定地以類似的方式跨計算 引擎地流動,當(dāng)流動結(jié)束時,可以將結(jié)果存儲在存儲器中。如果應(yīng)用需要 多于八個的計算引擎,則數(shù)據(jù)和結(jié)果可以再循環(huán)經(jīng)過計算陣列32。相反 地,對于需要較少的計算引擎的應(yīng)用,八個計算引擎可以被配置成組。通 過每個計算引擎中的開關(guān)來實現(xiàn)組。每個計算引擎中的存儲器在使用流指令時是所有計算引擎的共用資源,但是對于SIMD (單個指令,多個數(shù)據(jù)) 指令而言是局部資源。
      指令、數(shù)據(jù)和結(jié)果在每個時鐘周期水平地逐段流過陣列。該流產(chǎn)生了 以下編程假象不管處理是水平地跨過陣列、是以SIMD方式垂直,過 陣列、還是以二者的組合(因此是SIMD-流)跨過陣列,都存在一個處 理器和一個存儲器。同時執(zhí)行SIMD操作和流操作的能力顯著地增強(qiáng)了體 系結(jié)構(gòu)的通用性。通it^流操作期間對段進(jìn)行分組以允許需要較少量操作 的任務(wù)得到優(yōu)化管理的能力,來增強(qiáng)流體系結(jié)構(gòu)的通用性。利用SIMD 操作,每個段所作的工作可以有相當(dāng)大的差別。這是因為,大多數(shù)指令可 以是有條件的,或者可以根據(jù)每個段的唯一 ID來進(jìn)行修改。
      在計算陣列的每個段中包括單獨的存儲器的實施例中,每個段可以執(zhí) 行獨立的表查找。通過由控制塊30中的地址生成器將每個段中的地址偏 移量寄存器的內(nèi)容與廣播給所有段的公共地址相加,可以在每個段中執(zhí)行 對存儲器的表查找。這允許在每個段中執(zhí)行單獨的表查找。在每個段中復(fù) 制表以允許同時查找。存儲器訪問指令具有指定是否調(diào)用地址偏移量寄存 器的位。
      可以利用不同的尋址方案來進(jìn)行SIMD操作(單個計算引擎中的非 流操作)和流操作(跨計算引擎的操作)。基于指令類型來選擇尋址方案。
      對于流存儲器訪問,存儲器表現(xiàn)為單個字長很寬的存儲器,并且在包 括八個段的實施例中每一行具有1024位或具有32個各為32位的字,其 中每一段具有存儲器行,所述存儲器行具有四個32位的字。為實現(xiàn)它, 每個存儲器段只響應(yīng)于其列地址。流地址只應(yīng)用于一個存儲器段。所選的 段將其數(shù)據(jù)置于FMD總線94上。當(dāng)使用組時,流地址為每個組所共用。 因此,對于各具有四個段的兩個組而言,行大小為16個字,但是存在兩 組該行地址。圖5中示出了賴^據(jù)本發(fā)明的實施例的流尋址方案。如圖5 所示,流地址跨所有段地線性增加。
      對于SIMD存儲器訪問,X存儲器和Y存儲器各表現(xiàn)為八個并列的 存儲體。每個存儲器段接JlM目同的地址并相同地進(jìn)行操作。因此,數(shù)據(jù)被 存儲為八+數(shù)據(jù)集。用于存儲器段的地址和控制在每個時鐘周期在指令流 總線120上從左流向右,使得連續(xù)的段在連續(xù)的周期進(jìn)行響應(yīng)。SIMD存 儲器可以被概括為包括八個相同的存儲器,每個段具有公共地址。該地址 被廣播給所有段,并且每個段每行有四個32位的字。地址空間是一個段 的地址空間。因此,加載指令從每個存儲器段中的相同地址處加載每個段中的一個或更多個寄存器的內(nèi)容。但是,由于指令跨陣列地流動,因此每
      個段比在先段晚一個周期進(jìn)行響應(yīng)。圖6中示出了根據(jù)本發(fā)明的實施例的 SIMD存儲器尋址方案。如圖6所示,在每個段中SIMD地址增加。
      雖然圖5和6示出了針對流操作和SIMD操作的不同尋址方案,但 是應(yīng)當(dāng)理解,并不要求不同的尋址方案。更具體地,可以^使用線性地址空 間來進(jìn)行流操作和SIMD操作。在這種情況下,SIMD存儲器訪問使用較 大的地址增量來訪問下個存儲器行。
      圖6A中示出了根據(jù)本發(fā)明的另一實施例的SIMD存儲器尋址方案。 該尋址方案允許使用相同的存儲器地址空間來進(jìn)行流操作和SIMD操作。 對于SIMD存儲器訪問,地址生成器在每個四倍邊界處基于模數(shù)32來增 加SIMD地址,即,來自地址位al的進(jìn)位進(jìn)位到地址位a5。這是因為計 算陣列自身隱含地增加位a4:2。因此,對于SIMD操作和流操作而言, 地址空間可以保持為相同的和線性的。地址生成器修改地址使得來自位 al的進(jìn)位被關(guān)聯(lián)到位a5,以針對中間的位在陣列中被隱含地增加的事實 而進(jìn)4亍調(diào)整。因此,增加一將4吏地址從0、 1、 2、 3、 32、 34、 35、 64、 65、 66等處開始。中間的地址在陣列中被隱含地用于SIMD訪問。X存 儲器和Y存儲器各表現(xiàn)為八個并列的存儲體。每個存儲器段接i!M目同的 地址并相同地進(jìn)行操作。因此,數(shù)據(jù)被存儲為八個數(shù)據(jù)集。用于存儲器段 的地址和控制在每個時鐘周期(在指令流總線上)從左流向右,使得連續(xù) 的段在連續(xù)的時鐘周期進(jìn)行響應(yīng)。
      圖7中示出了才艮據(jù)本發(fā)明的實施例的流單元72的示意性框圖。四位 (quad) D寄存器100 (D3:0 )接收流總線102上的輸入,并在流總線 102上提供輸出。D寄存器100與寄存器堆76中的所選寄存器進(jìn)行交互。 流單元72還可以包括四位加法器110和四位A寄存器112 (A3:0 )。加法 器110接收流總線102上的輸入以及來自寄存器堆76中的所選寄存器的 輸入。結(jié)果被置于A寄存器112中,并且A寄存器112在流總線102上 提供輸出。流單元72還可以包括四位D,寄存器114 (D,3:0),該四位D' 寄存器接收BFD總線124上的輸入并在BFD總線124上提供輸出。流單 元72可以包括可配置門陣列(CGA) 117以及諸如傳送、比較、異或之 類的其它功能116,以提供靈活性。
      流操作有兩種基本類型(l)M儲器進(jìn)行流加載的操作,其利用諸 如跨所有段的移位之類的操作,以及(2)向存儲器進(jìn)行流存儲的操作, 其利用諸如跨所有段的累加之類的操作。除了流存儲器訪問是按行訪問存儲器而不是按列訪問存儲器之夕卜,流存儲器訪問與SIMD存儲器訪問相類 似。
      以下指令支持流操作
      OP Rm = = [Jml; 〃流加載指令
      [JmOP = = Rm; 〃流存儲指令
      流加載指令從存儲器位置Jm處加載Rm寄存器的內(nèi)容,并跨所有段 地執(zhí)行操作OP (典型地是延遲線移位或廣播)。流存儲指令跨所有段地 對寄存器Rm執(zhí)行操作OP (典型地是累加),并將結(jié)果存儲到存儲器位 置Jm處。"==,,符號表示流指令。OP操作表示可以在流操作期間執(zhí)行 的若干類型的操作,例如累加、移位、傳送、廣播以及異或。流操作是在 流單元72中執(zhí)行的,流單元72可以以與存儲器訪問相類似的方式來訪問 寄存器堆76,并且可以被看作替代性的存儲器訪問。
      參照圖8A和8B來描述流加載^Mt或DFLOW操作。針對流加載操 作,每個計算引擎中的流單元72利用定義流加載路徑的四位D寄存器100 (D3:0 )。在第一計算引擎50中,流加栽操作包括從FMD總線94上的 存儲器進(jìn)行加載。在其它計算引擎51、 52、 ...、 57中的每個計算引擎中, 流加載操作包括在流總線102上的段之間的流,其細(xì)節(jié)取決于指定的操作 OP以及指定的一個或多個寄存器。
      考慮通過SH R6 = = [J3 + = 1給出的流移位IMt的示例,該示例實現(xiàn) 了每個段中三個周期的延遲。流加栽操作在連續(xù)的時鐘周期在計算陣列 32的連續(xù)段中開始。該指令包括在每個計算引擎中的以下操作。首先, 從寄存器堆76中將寄存器R6:4的內(nèi)容讀取到四位D寄存器100中的位置 D2:0中。接著,將寄存器D0的內(nèi)^位出到流總線102上。然后,將寄 存器D2:1的內(nèi)容移位到寄存器D1:0中,并將輸入流移位到寄存器D2中。 在第一段(計算引擎50)中,輸入流來自FMD總線94上的存儲器。在 其它段中,輸入流來自流總線102上的在先段。最終,將寄存器D2:0的 內(nèi)容寫入寄存器堆76中的寄存器R6:4中。
      在流加載操作中,通過DFLOW指令的入口點來確定移位寄存器長 度。在流加載指令中,寄存器編號是指定的模數(shù)4。因此,SH R2和SH R14 均定義了長度為三個字的移位寄存器。此外,該指令可以指定一個至四個 字。被移位出內(nèi)容的寄存器的數(shù)量與被移位入內(nèi)容的寄存器的數(shù)量相同。 針對流加載操作的寄存器選項為R0、 Rl、 R1:0、 R2、 R2:l、 R2:0、 R3、R3:2、 R3:1以及R3:0。使用模4符號來指定較高編號的寄存器。
      B類型的廣播指令R15:12 = = [mem將存儲器內(nèi)容廣播到計算陣列 的每個段中的寄存器R15:12中。
      參照圖9A和9B來描述^^儲操作或AFLOW操作。針對流存儲操 作,流單元72利用定義流存儲路徑的加法器110和四位A寄存器112 (A3:0)。流單元72在數(shù)據(jù)在計算陣列的段之間流動時對該數(shù)據(jù)進(jìn)行操 作。主要的AFLOW操作是累加,但是可以利用其它操作,例如異或、 比較、取最大值/最小值、傳送、邏輯和移位。流可以來自寄存器堆76中 的任何寄存器。A寄存器112^^段之間的累加結(jié)果。最后一個段(計算 引擎57)的輸出被存儲在FMD總線94上的存儲器中。^W^可以對來 自計算陣列的每個段的Rn寄存器的內(nèi)M行求和,使得AFLOW輸出是 計算陣列中的所有Rn寄存器的內(nèi)容的總和。當(dāng)AFLOW數(shù)據(jù)i^V段時, 該數(shù)據(jù)被與局部Rn寄存器的內(nèi)斜目加,并在l^的周期中被輸出至接收 數(shù)據(jù)的下個段。對所有段重復(fù)此操作。在八個時鐘周期之后在最后一個段 處出現(xiàn)結(jié)果。例如,指令[3^1+ = = 110;對來自計算陣列的八個段中的每 個段的寄存器R0的內(nèi)M行求和,并將結(jié)果存儲在存儲器中的地址adrl 處。AFLOW操作將去向計算陣列的第一段的流輸入初始化為零。
      考慮如圖9A所示的、通過[13 + = 1==+ 115:4給出的流累加指令的 示例。流存儲操作在連續(xù)的時鐘周期在計算陣列32的連續(xù)的段中開始。 首先,從寄存器堆76中讀取寄存器R5:4的內(nèi)容,并將寄存器R5:4的內(nèi) 容與輸入^^目加。結(jié)果被暫時置于A寄存器112中。從A寄存器112輸 出的總和表示流輸入加上寄存器R5:4的內(nèi)容的結(jié)果。
      上文描述了流單元72與寄存器堆76中的所選寄存器相交互。例如, 可以將D寄存器100的內(nèi)容寫入到寄存器堆76中的所選寄存器中,>^之 也可以將寄存器堆76的所選寄存器的內(nèi)容寫入到D寄存器100中。此外, 可以將寄存器堆76中的所選寄存器的內(nèi)容與流數(shù)據(jù)相加。在其它的實施 例中,流單元72并不與寄存器堆76相交互。替代地,計算塊74可以對 流單元72中的寄存器進(jìn)M取和寫入。
      參照圖IO來描述計算陣列32的計算引擎50-57之間的數(shù)據(jù)通路總線。 指令總線120連接在連續(xù)的計算引擎的指令管道70之間。指令i^指令 總線120上的計算陣列,并流經(jīng)該計算陣列。指令l第一段(計算引擎 50),并被時鐘控制為在每個時鐘周期1每個連續(xù)的段。該總線提供用 于兩次或三次存儲器訪問的地址以及用于兩個計算操作的控制。計算陣列的大部分控制邏輯可以位于控制塊30中,以避免每個段中的重復(fù)。每個 周期中的三次存儲器訪問可以是針對X存儲器78或84、針對Y存儲器 80或86、以及針對DMA緩沖器82。 DMA總線22和24向計算陣列提 供DMA數(shù)據(jù),可以通過若干輸入源之一來驅(qū)動該DMA數(shù)據(jù),或者可以 將該DMA數(shù)據(jù)發(fā)送至若干輸出目的地。DMA數(shù)據(jù)被置于每個段中的兩 個四倍長字的DMA緩沖器82中。主處理器12可以使用DMA總線來直 接訪問計算陣列存儲器。DMA總線22和24可以用作兩個128位總線或 單個256位總線。DMA總線22和24可以經(jīng)由緩沖器122而相耦合。
      流總線102允許數(shù)據(jù)逐段地傳送、廣播或移位以及在需要多于八個的 段的情況下進(jìn)行再循環(huán)。典型地,要共享的或要跨計算陣列地進(jìn)行移位的 流數(shù)據(jù)在第一段中ii^陣列,并被跨所有段地進(jìn)行移位。流總線102也用 于通過使計算結(jié)果在每個段中從左流向右來對該結(jié)果進(jìn)行累加或以其它 方式進(jìn)行操作。通常都需要用于移位功能的流以及用于累加或廣播功能的 流,但是不一定要在同一周期中。由于可以配置流操作以使其不需要在每 個周期進(jìn)行,因此在在不同的周期中使用流總線102的情況下,可以將流
      總線102用于DFLOW^Mt和AFLOW^Mt。在其它的實施例中,計算 陣列32可以包括兩個或更多個流總線,并且DFLOW操作和AFLOW操 作可以同時執(zhí)行。
      在未選擇分組時,使用FMD總線94來加載數(shù)據(jù)。FMD總線94還 用于將流數(shù)據(jù)存儲到存儲器中。組中的最后一個計算引擎提供數(shù)據(jù)以及存 儲位置的地址標(biāo)記。對于加載,只有第一段提供地址,并且段l-7之一通 過將其數(shù)據(jù)驅(qū)動至段0來進(jìn)行響應(yīng)。對于無分組的存儲,最后一個段提供 數(shù)據(jù)和地址。FMD總線94經(jīng)由緩沖器122耦合到控制塊30。
      在選擇了兩個或四個計算引擎的組時,使用BFD總線124。 BFD總 線124被切換以支持段的分組。BFD總線124允許流數(shù)據(jù)返回至組的起 始處,并且還用于組內(nèi)的流存儲器訪問。對于兩個或四個計算引擎的組, BFD總線124用于再循環(huán)、數(shù)據(jù)置亂以及流存儲器訪問。
      DFLOW通路允許對對稱濾波器的抽頭進(jìn)行預(yù)先相加以使性能加倍。 對稱濾波器具有關(guān)于濾波器的中心點對稱的系數(shù)??梢栽趯⑴c相等的系數(shù) 相對應(yīng)的數(shù)據(jù)值與所述系數(shù)相乘之前,對所述數(shù)據(jù)值進(jìn)行預(yù)先相加,從而 減少所需要的相乘的數(shù)量。通過如圖11所示地使BFD總線124流經(jīng)D' 3:0 寄存器,可以使預(yù)先相加所需要的抽頭可用。當(dāng)使用16位數(shù)據(jù)時,將該 數(shù)據(jù)作為兩對長字來進(jìn)行訪問。寄存器D'1:0和D1:0的內(nèi)容在ALU中被相加,然后被與四個帶數(shù)位疊加和的短系數(shù)相乘。對于32位數(shù)據(jù),每 段的抽頭數(shù)量可以是兩個、四個或八個。對于16位數(shù)據(jù),最有效的使用 是每段有八個或十六個抽頭。為了實現(xiàn)回流移位寄存器,BFD總線124 的16位或32位被重定向為流經(jīng)D'3:0寄存器。這是沿DFLOW通路的 相反方向移位。
      在從X存儲器78或84或者Y存儲器80或86進(jìn)行加載或存儲時, 存儲器地址總線118 (圖4)提供了流存儲器地址。該地址可以在相同的 周期用于組中的所有段,但是只有該組中的具有對應(yīng)地址的段作出響應(yīng)。
      圖12中更詳細(xì)地示出了計算引擎之一。寄存器堆76可以是具有32 個至64個之間的寄存器的多端口寄存器堆。寄存器堆76支持乘法器卯、 ALU 92、流單元72、 MAC加法器96、以及存儲體78或84和80或86, 并且可以具有用于支持這些單元的十個端口 。乘法器90和流單元72在每 個周期中執(zhí)M-改-寫。寄存器堆76還可以具有可用于單周期上下文切 換的陰影副本(shadow copy ),以支持在流式傳輸數(shù)據(jù)時的中斷。
      乘法器卯可以是32 x 32定點乘法器,并且具有內(nèi)置的相關(guān)功能和可 選的數(shù)據(jù)精度。乘法器可以執(zhí)行具有實數(shù)數(shù)據(jù)類型和復(fù)數(shù)數(shù)據(jù)類型的四倍 的16位相乘。復(fù)數(shù)16位數(shù)據(jù)包括8位實數(shù)數(shù)據(jù)和8位虛數(shù)數(shù)據(jù)。對于 32x32相乘,需要附加的延遲周期。MAC加法器96和乘法器卯是半獨 立的單元。從乘法器至MAC加法器的通路可以包含可在MAC加法器中 分解的部分和。
      通過用于在流操作期間對段進(jìn)行分組的能力可以增強(qiáng)流體系結(jié)構(gòu)的 通用性。這允許優(yōu)化地管理需要較小數(shù)量的^Mt的任務(wù)。示例包括4抽頭 FIR (有限脈沖響應(yīng))操作和4x4矩陣操作。分組使用對BFD總線124 的特定組織,以選擇不同的存儲器段用于該目的。在逐個周期的基礎(chǔ)上通 過流指令來指定組操作。分組允許流操作在八個段的子集中進(jìn)行。如圖8 所示,例如可以將前四個段(0-3)組合成第一組140,并且可以將后四個 段(4-7)組合成第二組142。每個組在該組內(nèi)對其數(shù)據(jù)進(jìn)行再循環(huán),并且 每個組可以對不同的數(shù)據(jù)進(jìn)行操作。計算陣列可以被細(xì)分成四組、每組兩 個,或者可以被細(xì)分成兩組、每組四個。分組也可用于提供一起工作的奇 數(shù)數(shù)量的段,例如三個或七個段。未使用的段應(yīng)用自動補(bǔ)零。組控制可以 應(yīng)用兩種類型的動作(a)為所有組所共用的數(shù)據(jù),或(b)在組內(nèi)使用 組存儲器數(shù)據(jù)的獨立的組。
      使用適當(dāng)?shù)挠嬎阋嬷械拈_關(guān)104和106 (圖3)來配置組。圖13中示意性地示出了被配置為組140和142的計算陣列32的示例,其中每 個組具有四個計算引擎,并且每個組具有流數(shù)據(jù)的再循環(huán)。段3和4之間 的開關(guān)150將段3的流總線102的輸出端連接到段3中的BFD總線124, 并將段4的流總線102的輸入端連接到段4中的BFD總線124。此外, 段0中的開關(guān)152將段0的流總線102的輸入端連接到段0中的BFD總 線124。這允許組140和142內(nèi)的獨立的流^Mt。
      當(dāng)應(yīng)用需要多于八個的段時,計算陣列允許流操作再循環(huán),從而產(chǎn)生 了很長的流陣列的效果。再循環(huán)的次數(shù)實際上是無限制的,但是吞吐量仍 然受到計算引擎的數(shù)量的限制,即,計算引擎是分時的。再循環(huán)將來自最 后一個段的DFLOW操作和AFLOW操作^J績到第一個段,或者從組的 末端反饋到組的起始處。在再循環(huán)序列結(jié)束時,將累加結(jié)果寫入存儲器。
      置亂是在計算陣列的段之間互換存儲器數(shù)據(jù)的操作??梢砸詢蓚€、四 個或八個為一組來置亂數(shù)據(jù)或互換數(shù)據(jù)。該操作可用于當(dāng)數(shù)據(jù)被順序地按 行存儲在存儲器中時前三級在段間互換數(shù)據(jù)的快速傅里葉變換。置亂操作 使用加載行高速緩存和存儲行高速緩存作為緩沖器。數(shù)據(jù)最初從每段中的 所選存儲器位置中被傳送至加載行高速緩存。然后,在置亂操作中,使用 流總線和BFD總線#*段的加栽行高速緩存的內(nèi)容移動至下個段的存儲 行高速緩存中。針對期望的置亂移位而重復(fù)該操作。然后,將存儲行高速 緩存的內(nèi)^儲到所有段中的指定存儲器位置。每次執(zhí)行置亂操作時傳送 四倍長字。如果置亂是在最近的相鄰段之間進(jìn)行的,則執(zhí)行一次置亂操作。 如果置亂是在相隔四個間隔的段間進(jìn)行的,則重復(fù)兩次置亂操作。如果置 亂是在相隔八個間隔的段間進(jìn)行的,則重復(fù)四次置亂操作。
      圖14示出了控制塊30的元件以及所述元件與計算陣列32和系統(tǒng)總 線之間的交互??刂茐K30包括程序存儲器44、程序序列發(fā)生器42、整數(shù) ALU JALU 38和KALU 40 、中斷控制器和中斷堆棧48 、 DMA控制器36 、 以及控制邏輯34。此外,數(shù)據(jù)存儲器46用于存儲參數(shù)以及在上下文切換 期間進(jìn)行保存和恢復(fù)。數(shù)據(jù)存儲器46可以包括例如兩個1K字的小存儲 體??刂茐K30還可以包括解碼單元60和數(shù)字振蕩器62。控制塊30中的 兩個局部總線允許ALU 38和40保存和恢復(fù)到數(shù)據(jù)存儲器46的存儲體的 內(nèi)容。M/恢復(fù)可以同時在計算陣列32和控制塊30中進(jìn)行操作,從而 使性能與主處理器相比加倍。
      控制塊30向計算陣列32發(fā)出指令(加載/存儲和計算)。指令在計算 引擎50處i^計算陣列32,并在連續(xù)的時鐘周期順序地1每個計算引擎,直到所述指令在八個時鐘周期后離開。在指令中指定的流數(shù)據(jù)i^陣 列,并以相同的方式流經(jīng)計算陣列。
      DMA總線22只連接到計算陣列32,并且主要用于將I/O數(shù)據(jù)傳送 至計算陣列32的存儲器。DMA總線22還可以用于從主存儲器14傳送 數(shù)據(jù)。DMA總線24可以連接到計算陣列32或控制塊30,并且允許在處 理器20和主存儲器14之間沿任一方向直接進(jìn)#^取/寫入。所述傳送可 以經(jīng)由DMA或程序控制??刂铺幚砥?2 (圖1)可以經(jīng)由DMA總線24 訪問處理器20,以便對特定寄存器進(jìn)行讀取或?qū)懭?、寫入中斷矢量或檢 查狀態(tài)、下載程序存儲器的內(nèi)容、或者下載或上傳控制塊30或計算陣列 32中的數(shù)據(jù)存儲器的內(nèi)容。
      程序存儲器44與控制處理器12中可用的程序存儲器相比相對小。該 存儲器可以是4K個32位的字,并且可以被實現(xiàn)為高速緩存。程序存儲 器可以是256位寬,以允許每周期發(fā)出多達(dá)八個指令,包括用于IALU的 兩個指令、用于程序序列發(fā)生器的一個指令、用于計算陣列計算的兩個指 令、加上一個額外的用于即時數(shù)據(jù)的指令。數(shù)據(jù)存儲器46主要用于* 用于IALU的附加^故以及與上下文切換相關(guān)的*/恢復(fù)。程序序列發(fā) 生器42是在主處理器12中使用的程序序列發(fā)生器的簡化版本,并且每周 期取出多達(dá)八個指令。程序序列發(fā)生器包括程序計數(shù)器、分支硬件、分支 目標(biāo)緩沖器、中斷矢量表等。JALU 38和KALU 40是具有32位的地址 空間的整數(shù)ALU。 JALU 38和KALU 40中的每個都可以訪問任一計算陣 列存儲體。中斷堆棧48允許多個中斷根據(jù)其優(yōu)先級而順序地得到服務(wù)。
      處理器20可以支持從DMA或直接從I/O端口經(jīng)由FIFO流式傳輸 至流路徑的數(shù)據(jù)。流式傳輸?shù)臄?shù)據(jù)經(jīng)過計算陣列32,并且在不從存儲器 加載所述流式傳輸?shù)臄?shù)據(jù)的情況下處理所述流式傳輸?shù)臄?shù)據(jù)??梢酝ㄟ^快 速上下文切換來支持?jǐn)?shù)據(jù)流式傳輸。在數(shù)據(jù)流式傳輸中,I/O數(shù)據(jù)并不被 寫入存儲器中,而是被置于DMA緩沖器82中,以便直接由計算引擎進(jìn) 行處理。
      可以如圖15所示地使用DMA交織。在圖15中示出了用于每個段的 DMA緩沖器82。如圖15的第一行所示,為了按四進(jìn)行交織,將兩個四 倍長字加載到每個緩沖器中的位置DMAB(0)中。然后將兩個四倍長字加 載到每個DMA緩沖器中的DMAB(1)中,將兩個四倍長字加載到每個 DMA緩沖器中的DMAB(2)中,并將兩個四倍長字加載到每個DMA緩沖 器中的DMAB(3)中。如圖15的第二行所示,為了按二進(jìn)行交織,將四四倍長字加載到每個DMA緩沖器中的位置DMAB(2, O)中,然后將四個 四倍長字加載到每個DMA緩沖器中的位置DMAB(3,1)中。如圖15的第 三行所示,為了按對進(jìn)行交織,將四個四倍長字加載到每個DMA緩沖器 中的位置DMAB(l, O)中,然后將四個四倍長字加載到每個DMA緩沖器 中的位置DMAB(3, 2)中。對于無交織的DMA傳送,按段順序地加載四 倍長字。為了執(zhí)行SIMD加載, 一次對DMA緩沖器中的一段進(jìn)行加栽。 此外,可以通過對DMA緩沖器組進(jìn)行加載來執(zhí)行組加栽。
      計算陣列32的SIMD-FLOW體系結(jié)構(gòu)良好地適合于按列或按行或按 行和列的組合來對數(shù)據(jù)集進(jìn)行操作。以下示例舉例說明了這種^Mt。
      圖16中示出了其中計算陣列的每一段在單個通道(八個通道DA至 DH )上進(jìn)行SIMD型操作的逐列點積。在計算陣列的段之間不共享數(shù)據(jù)。 這在到達(dá)的數(shù)據(jù)集被按列布置并且沒有數(shù)據(jù)要共享的情況下良好地工作。 因此,在段0中,將系數(shù)CA0與數(shù)據(jù)DA0相乘,將系數(shù)CA1與數(shù)據(jù)DA1 相乘,等等,并且對結(jié)果進(jìn)行累加以提供通道A總和。在其它段中執(zhí)行 類似的操作。
      圖17中示出了逐行逐列的處理。系數(shù)CA0-CA7被按行水平地布置 在存儲器中,而數(shù)據(jù)DAO-Dan被按列垂直地布置在存儲器中。使每個系 數(shù)利用DFLOW通路而跨整個陣列地流動(廣播)。系數(shù)連同對應(yīng)的指令 一起流經(jīng)每個段,使每個M似執(zhí)行相同的^時間延遲的操作。這是有 共享系數(shù)的SIMD乘法累加操作的示例。對于波束形成,這允許由每個天 線(水平的)的所有時間樣本共享一組系數(shù),而跨所有天線地(垂直地) 完成求和。如果對數(shù)據(jù)和系數(shù)進(jìn)行互換,則可以實現(xiàn)多相FIR濾波器, 其中每一段根據(jù)相同的數(shù)據(jù)實現(xiàn)了該濾波器的不同相位。利用圖17的方 法可以完成矩陣相乘。 一個矩陣C的M廣播并被與第二矩陣D的八列 相乘。八個結(jié)果位于每一段的MAC中。
      圖18中示出了逐行處理。圖18的示例示出了逐個矢量的相乘中的逐 行點積。在逐行操作中,數(shù)據(jù)或系數(shù)均不流動,而是在AFLOW通路中 對來自每一段的乘法器結(jié)果進(jìn)行累加。每一段對其乘積和到達(dá)的總和進(jìn)行 求和,并將結(jié)果傳遞至下一段。
      圖19中示出了帶移位的逐行^Mt。圖19的示例示出了可以如何利用 逐行操作來實現(xiàn)FIR濾波器。數(shù)據(jù)^L存儲在移位寄存器(DFLOW通 路)中,以實現(xiàn)帶抽頭的延遲線。數(shù)據(jù)被保持在存儲器中,然后被加載到 流路徑中,被移位,并且可選地被返回到存儲器中。為了節(jié)省功率和存儲器帶寬,可以在多次移位之后執(zhí)行加載操作和存儲操作。當(dāng)在小數(shù)量的通
      道上進(jìn)行操作時,DFLOW數(shù)據(jù)可以被保留在寄存器堆中,并且不將該數(shù) 據(jù)復(fù)制到存儲器中。
      圖20的示例中示出了具有移位和廣播的逐行處理。圖20示出了 FIR 濾波器實施方案的變型,其中數(shù)據(jù)如常地在延遲線中被移位,但是系數(shù)被 流廣播至所有段。在每個段中的累加寄存器MRO中原地完成累加,并利 用SIMD指令存儲這些結(jié)果。
      圖1中示出了處理器20,并且在上文中將其描述為隨控制處理器一 起進(jìn)行操作。但是,處理器20不限于這方面。處理器20的體系結(jié)構(gòu)允許 作為被配置用于計算密集的應(yīng)用的獨立處理器來進(jìn)行IMt。
      如上文所述,處理器20可以執(zhí)行在連續(xù)的周期從計算引擎流向計算 引擎的流操作,可以在單獨的計算引擎內(nèi)執(zhí)行SIMD操作,并且可以執(zhí)行 流操作和SIMD操作的組合。流操作由流指令驅(qū)動,SIMD操作由SIMD 指令驅(qū)動??梢愿鶕?jù)正在執(zhí)行的操作的類型來訪問存儲器。在計算陣列中, 多個計算引擎接^目同的^fr時間上有延遲的指令。處理器20包括公用 序列發(fā)生器和用于多個計算引擎的地址生成器。
      在此描述的處理器體系結(jié)構(gòu)實現(xiàn)了低功耗。該設(shè)計是緊湊的,并且使 用了短的總線長度和小驅(qū)動器??刂茐K中的功耗被分?jǐn)偟蕉鄠€計算引擎 上。利用了小的存儲器,并且對于許多應(yīng)用而言需要減少的數(shù)據(jù)移動。寄 存器堆可以具有256字的容量,使得需要較少的存儲器訪問。該設(shè)計可以 被優(yōu)化用于深流水線和低電壓,而不是用于快速設(shè)備。
      應(yīng)當(dāng)理解,在具有本發(fā)明的至少一個實施例的上述若干方面的情況 下,本領(lǐng)域的技術(shù)人員可以容易地想到各種更改、修改和改進(jìn)。這種更改、 修改和改進(jìn)旨在為本公開的 一部分,并且旨在在本發(fā)明的精神和范圍之 內(nèi)。因此,上述描述和附圖僅>(31作為示例。
      權(quán)利要求
      1. 一種數(shù)字信號處理器,包括控制塊,被配置用于基于存儲的程序來發(fā)出指令;以及計算陣列,包括兩個或更多個計算引擎,所述計算陣列被配置成使得發(fā)出的指令中的每個指令在連續(xù)的時段、在至少所述計算引擎的子集中的連續(xù)的計算引擎中執(zhí)行。
      2. 根據(jù)權(quán)利要求1所述的數(shù)字信號處理器,其中所述計算陣列被配 置成使得發(fā)出的指令中的每個指令在連續(xù)的時段流經(jīng)至少所述計算引擎 的子集中的、連續(xù)的計算引擎。
      3. 根據(jù)權(quán)利要求2所述的數(shù)字信號處理器,其中所述計算引擎中的 每個計算引擎包括:指令管道,被配置用于控制指令經(jīng)過計算陣列的流動。
      4. 根據(jù)權(quán)利要求3所述的數(shù)字信號處理器,其中所述計算引擎中的 每個計算引擎還包括至少一個流單元,被配置用于對與發(fā)出的指令相關(guān) 聯(lián)的數(shù)據(jù)執(zhí)行流操作。
      5. 根據(jù)權(quán)利要求4所述的數(shù)字信號處理器,其中所述計算引擎中的 每個計算引擎還包括 一個或更多個計算單元,用于執(zhí)行數(shù)字信號計算; 以及寄存器堆,用于保存數(shù)字信號計算的操作數(shù)。
      6. 根據(jù)權(quán)利要求5所述的數(shù)字信號處理器,其中所述計算引擎中的 每個計算引擎還包括至少一個存儲器。
      7. 根據(jù)權(quán)利要求2所述的數(shù)字信號處理器,其中所述計算陣列還包 括至少一個存儲器,被配置用于隨所述計算引擎中的每個計算引擎一起 進(jìn)行操作。
      8. 根據(jù)權(quán)利要求7所述的數(shù)字信號處理器,其中所述計算陣列還包 括耦合在存儲器與計算引擎之間的分級緩沖器,所述分級緩沖器具有有 延遲的段,所^J1遲與對應(yīng)的計算引擎在計算陣列中的位置相對應(yīng)。
      9. 根據(jù)權(quán)利要求7所述的數(shù)字信號處理器,其中所述計算陣列中的 計算引擎被配置用于對存儲器的內(nèi)容執(zhí)行逐列操作。
      10. 根據(jù)權(quán)利要求7所述的數(shù)字信號處理器,其中所述計算陣列中的 計算引?^配置用于對存儲器的內(nèi)容執(zhí)行逐行逐列的操作。
      11. 根據(jù)權(quán)利要求7所述的數(shù)字信號處理器,其中所述計算陣列中的計算引擎被配置用于對存儲器的內(nèi)容執(zhí)行逐行操作。
      12. 根據(jù)權(quán)利要求7所述的數(shù)字信號處理器,其中所述計算引擎中的 每個計算引擎還包括DMA緩沖器,其與所述存儲器相關(guān)聯(lián),并被配置 用于將數(shù)據(jù)傳送至所述存儲器以及從所述存儲器傳送數(shù)據(jù)。
      13. 根據(jù)權(quán)利要求l所述的數(shù)字信號處理器,其中所述計算引擎中的 每個計算引擎具有流水線體系結(jié)構(gòu)。
      14. 根據(jù)權(quán)利要求2所述的數(shù)字信號處理器,其中所述指令中的每個 指令在連續(xù)的時鐘周期流經(jīng)所述連續(xù)的計算引擎。
      15. 根據(jù)權(quán)利要求2所述的數(shù)字信號處理器,其中所述計算陣列包括: 一個或更多個開關(guān),被配置用于將計算引擎形成為組。
      16. 根據(jù)權(quán)利要求2所述的數(shù)字信號處理器,其中所述計算陣列被配 置用于使數(shù)據(jù)再循環(huán)經(jīng)過計算引擎。
      17. 根據(jù)權(quán)利要求2所述的數(shù)字信號處理器,其中所述計算陣列包括 以串聯(lián)配置的八個計算引擎。
      18. 根據(jù)權(quán)利要求7所述的數(shù)字信號處理器,其中所述計算陣列包括 至少一個加載行高速緩存,用于保存來自存儲器行的數(shù)據(jù)以用于加載操 作。
      19. 根據(jù)權(quán)利要求7所述的數(shù)字信號處理器,其中所述計算陣列包括 至少一個存儲行高速緩存,用于*數(shù)據(jù)以用于存儲器行中的存儲操作。
      20. 根據(jù)權(quán)利要求7所述的數(shù)字信號處理器,其中所述計算陣列包括 一個或更多個總線,被配置用于在計算引擎之間傳送指令和數(shù)據(jù)。
      21. 根據(jù)權(quán)利要求20所述的數(shù)字信號處理器,其中所述計算引擎中 的每個計算引擎包括 一個或更多個總線,被配置用于向存儲器傳送信息 以及從存儲器傳送信息。
      22. 根據(jù)權(quán)利要求5所述的數(shù)字信號處理器,其中所述流單元被配置 用于從存儲器加載數(shù)據(jù)、以及使數(shù)據(jù)在連續(xù)的計算引擎中的一個或更多個 所選寄存器之間進(jìn)行移位。
      23. 根據(jù)權(quán)利要求5所述的數(shù)字信號處理器,其中所述流單元被配置 用于M儲器加載數(shù)據(jù)、以及向所述計算引擎中的每個計算引擎中的一個 或更多個寄存器廣播數(shù)據(jù)。
      24. 根據(jù)權(quán)利要求5所述的數(shù)字信號處理器,其中所述流單元被配置 用于對來自連續(xù)的計算引擎中的一個或更多個所選寄存器的數(shù)據(jù)進(jìn)行累 加以及存儲結(jié)果。
      25. 根據(jù)權(quán)利要求7所述的數(shù)字信號處理器,其中所述計算陣列被配 置用于訪問寬的存儲器字以用于流操作,并被配置用于訪問與每個計算引 擎相關(guān)聯(lián)的存儲器段以用于計算引擎內(nèi)的操作。
      26. 根據(jù)權(quán)利要求12所述的數(shù)字信號處理器,其中所述DMA緩沖 器被配置用于4艮據(jù)指定的交織^iM"lt據(jù)ii行交織。
      27. 根據(jù)權(quán)利要求2所述的數(shù)字信號處理器,其中所述計算陣列被配 置用于響應(yīng)于第一類型的指令而執(zhí)行各個計算引擎內(nèi)的操作,并被配置用 于響應(yīng)于第二類型的指令而執(zhí)行跨計算引擎的流操作。
      28. 根據(jù)權(quán)利要求6所述的數(shù)字信號處理器,其中所述計算引擎中的 每個計算引擎被配置用于在其存儲器中執(zhí)行獨立的表查找。
      29. —種用于數(shù)字信號處理的方法,包括提供包括控制塊和計算陣列的數(shù)字信號處理器,所述計算陣列包括兩 個或更多個計算引擎;在所述控制塊中基于所存儲的程序而發(fā)出指令;以及在連續(xù)的時段、在至少所述計算引擎的子集中的連續(xù)的計算引擎中執(zhí) 行發(fā)出的指令中的每個指令。
      30. 根據(jù)權(quán)利要求29所述的方法,其中對發(fā)出的指令中的每個指令 的執(zhí)行包括執(zhí)行流加載操作,所述流加載操作從存儲器位置處加栽寄存 器的內(nèi)容并執(zhí)行跨計算引擎的操作。
      31. 根據(jù)權(quán)利要求29所述的方法,其中執(zhí)行發(fā)出的指令中的每個指 令包括執(zhí)行it^儲操作,所述流存儲操作執(zhí)行跨計算引擎的操作并將結(jié) 果存儲到存儲器位置中。
      32. 根據(jù)權(quán)利要求29所述的方法,其中執(zhí)行發(fā)出的指令中的每個指 令包括形成計算引擎的組,以用于單獨的控制。
      33. 根據(jù)權(quán)利要求29所述的方法,其中執(zhí)行發(fā)出的指令中的每個指 令包括使數(shù)據(jù)再循環(huán)經(jīng)過所述計算陣列的計算引擎。
      34. 根據(jù)權(quán)利要求29所述的方法,其中執(zhí)行發(fā)出的指令中的每個指令包括通過數(shù)據(jù)流式傳輸來向所述計算引擎提供數(shù)據(jù),而不進(jìn)行存儲器 訪問。
      35. —種數(shù)字信號處理器,包括 控制處理器;處理器,包括控制塊和計算陣列,所述控制塊被配置用于基于已存儲 的程序來發(fā)出指令,所述計算陣列包括兩個或更多個計算引擎,所述計算 陣列被配置成使得發(fā)出的指令中的每個指令在連續(xù)的時段、在至少所述計 算引擎的子集中的連續(xù)的計算引擎中執(zhí)行;以及主存儲器,其能夠被所述控制處理器和所述處理器訪問。
      36. 根據(jù)權(quán)利要求35所述的數(shù)字信號處理器,其中所述計算陣列被 配置成使得發(fā)出的指令中的每個指令在連續(xù)的時段流經(jīng)至少所述計算引 擎的子集中的、連續(xù)的計算引擎。
      37. 根據(jù)權(quán)利要求36所述的數(shù)字信號處理器,其中所述計算引擎中 的每個計算引擎包括指令管道,被配置用于控制指令經(jīng)過計算陣列的流動。
      38. 根據(jù)權(quán)利要求37所述的數(shù)字信號處理器,其中所述計算引擎中 的每個計算引擎還包括流單元,被配置用于對與發(fā)出的指令相關(guān)聯(lián)的數(shù) 據(jù)執(zhí)行流操作。
      39. 根據(jù)權(quán)利要求38所述的數(shù)字信號處理器,其中所述計算引擎中 的每個計算引擎還包括: 一個或更多個計算單元,用于執(zhí)行數(shù)字信號計算;以及寄存器堆,用于保存數(shù)字信號計算的操作數(shù)。
      40. 根據(jù)權(quán)利要求39所述的數(shù)字信號處理器,其中所述計算引擎中 的每個計算引擎還包括至少一個計算陣列存儲器,被配置用于隨所述寄存器堆一起進(jìn)行操作。
      41. 根據(jù)權(quán)利要求38所述的數(shù)字信號處理器,其中所述計算陣列還 包括至少一個存儲器,被配置用于隨所述計算引擎中的每個計算引擎一 起進(jìn)行操作;其中所述計算陣列存儲器能夠被所述控制處理器所訪問。
      42. 根據(jù)權(quán)利要求41所述的數(shù)字信號處理器,其中所述計算陣列還包括分級緩沖器,其耦合在所述計算陣列存儲器與所述計算引擎中的每 個計算引擎之間。
      43. 根據(jù)權(quán)利要求41所述的數(shù)字信號處理器,其中所述計算陣列中的計算引擎被配置用于對所述計算陣列存儲器的內(nèi)容執(zhí)行逐列^Mt。
      44. 根據(jù)權(quán)利要求41所述的數(shù)字信號處理器,其中所述計算陣列中 的計算引擎被配置用于對所述計算陣列存儲器的內(nèi)容執(zhí)行逐行逐列的操 作。
      45. 根據(jù)權(quán)利要求41所述的數(shù)字信號處理器,其中計算陣列中的計 算引擎被配置用于對所述計算陣列存儲器的內(nèi)容執(zhí)行逐行操作。
      46. 根據(jù)權(quán)利要求36所述的數(shù)字信號處理器,其中所述計算陣列包 括 一個或更多個開關(guān),被配置用于將所述計算引擎形成為組。
      47. 根據(jù)權(quán)利要求36所述的數(shù)字信號處理器,其中所述計算陣列被 配置用于使數(shù)據(jù)再循環(huán)經(jīng)過所述計算引擎。
      48. 根據(jù)權(quán)利要求41所述的數(shù)字信號處理器,其中所述計算陣列包 括至少一個加載行高速緩存,用于保存來自存儲器行的數(shù)據(jù)以用于加載 操作。
      49. 根據(jù)權(quán)利要求41所述的數(shù)字信號處理器,其中所述計算陣列包 括至少一個存儲行高速緩存,用于M數(shù)據(jù)以用于存儲器行中的存儲操 作。
      50. 根據(jù)權(quán)利要求40所述的數(shù)字信號處理器,其中所述計算引擎中 的每個計算引擎被配置用于在其計算陣列存儲器中進(jìn)行獨立的表查找。
      全文摘要
      公開了一種用于增強(qiáng)的計算能力的處理器體系結(jié)構(gòu)。一種數(shù)字信號處理器包括控制塊,被配置用于基于存儲的程序來發(fā)出指令;以及計算陣列,包括兩個或更多個計算引擎,所述計算陣列被配置成使得所發(fā)出的所述指令中的每個指令在連續(xù)的時段、在至少所述計算引擎的子集中的連續(xù)的計算引擎中執(zhí)行。該數(shù)字信號處理器可以隨控制處理器一起使用,或者可以作為獨立的處理器來使用。該計算陣列可以被配置成使得所發(fā)出的指令中的每個指令在連續(xù)的時段流經(jīng)至少所述計算引擎的子集中的、連續(xù)的計算引擎。
      文檔編號G06F9/38GK101482811SQ200910000709
      公開日2009年7月15日 申請日期2009年1月7日 優(yōu)先權(quán)日2008年1月9日
      發(fā)明者道格拉斯·戈德 申請人:模擬裝置公司
      網(wǎng)友詢問留言 已有0條留言
      • 還沒有人留言評論。精彩留言會獲得點贊!
      1