專利名稱:蒙哥馬利乘法器處理元件中的部件精簡的制作方法
技術(shù)領(lǐng)域:
本發(fā)明一般地涉及計(jì)算機(jī)。具體而言,本發(fā)明涉及在蒙哥馬利(Montgomery)乘法器中使用的處理元件。
背景技術(shù):
許多應(yīng)用對大的數(shù)所采用的算法使用了乘法和模塊精簡的組合,這些應(yīng)用包括諸如Rivest-Shamir-Adleman(RSA)算法的公共密鑰數(shù)據(jù)加密/解密。具體而言,RSA算法重復(fù)地實(shí)現(xiàn)XY mod Z的運(yùn)算(X乘以Y除以Z的余數(shù))。當(dāng)處理大的數(shù)字(例如在基于RSA的數(shù)據(jù)安全中常用的1024位的數(shù))時,此算法包括至少兩個耗時的運(yùn)算(乘法和除法)以及余數(shù)的檢測。通常使用Montgomery乘法器來實(shí)現(xiàn)此算法。通過將X、Y和Z轉(zhuǎn)換成諸如A、B和M的其他數(shù),執(zhí)行被轉(zhuǎn)換的運(yùn)算以及將結(jié)果逆轉(zhuǎn)換,Montgomery乘法器使用該轉(zhuǎn)換來在單次運(yùn)算中執(zhí)行XY mod Z。對于長序列的乘法,如果被轉(zhuǎn)換的運(yùn)算比實(shí)際的運(yùn)算耗時更少,那么用Montgomery乘法器來確定最后答案的總時間可以顯著地減少。
一些Montgomery乘法器使用線性脈動陣列(linear systolic array),即一串相同的處理元件(PE),其中每個PE對每個所涉及數(shù)的一部分(例如4位)進(jìn)行處理。該串包含足夠多的PE來容納所涉及的最大的數(shù),這包括中間結(jié)果。運(yùn)算期間,在相鄰的PE之間中間信息沿兩個方向輸入。
在傳統(tǒng)的線性脈動陣列Montgomery乘法器(LSAMM)中,三個參數(shù)中的兩個(通常是B和M)通過連接到每個PE的總線被預(yù)裝到PE中。將多位的總線按線路連接到上百個PE所需的連接使得電路的復(fù)雜度顯著增加。傳統(tǒng)的LSAMM在每個PE中結(jié)合了解碼電路來解碼多位進(jìn)位運(yùn)算。每個PE必須包括專用來執(zhí)行總線接口和進(jìn)位解碼操作的電路系統(tǒng),所以總線操作和多位進(jìn)位所需的總電路系統(tǒng)可通過將此額外邏輯乘以LSAMM中PE的數(shù)量而確定。因?yàn)镸ontgomery乘法器通常實(shí)現(xiàn)為具有固定量的可用電路系統(tǒng)的現(xiàn)場可編程門陣列(FPGA),所以所有額外的邏輯占用了許多門電路,否則這些門電路可用來增加PE的數(shù)量或者可用于其他功能。
在Montgomery乘法開始之前,至少一個參數(shù)的倍數(shù)必須被載入傳統(tǒng)的Montgomery乘法器中。在軟件中預(yù)先計(jì)算這些非常大的數(shù)的倍數(shù)是一個耗時的過程,這使得任何需要Montgomery乘法器的運(yùn)算變慢。
通過參考以下說明和用來圖示本發(fā)明實(shí)施例的附圖,可以最好地理解本發(fā)明。在附圖中圖1示出了根據(jù)本發(fā)明一個實(shí)施例的系統(tǒng)。
圖2示出了根據(jù)本發(fā)明一個實(shí)施例的Montgomery乘法器。
圖3示出了根據(jù)本發(fā)明一個實(shí)施例的處理元件的示意圖。
圖4A示出了根據(jù)本發(fā)明的一個實(shí)施例,直接將初始參數(shù)載入處理元件串中的回送邏輯。
圖4B示出了根據(jù)本發(fā)明的一個實(shí)施例,間接將初始參數(shù)載入處理元件串中的回送邏輯。
圖5示出了根據(jù)本發(fā)明的一個實(shí)施例,使用回送邏輯的一種實(shí)現(xiàn)的流程圖。
具體實(shí)施例方式
在以下說明中,給出了大量的具體細(xì)節(jié)以提供對本發(fā)明的透徹理解。但是,應(yīng)該理解到?jīng)]有這些具體細(xì)節(jié)也可以實(shí)施本發(fā)明。在其他情況下,沒有詳細(xì)示出公知的電路、結(jié)構(gòu)和技術(shù),以免混淆本發(fā)明。
可以在硬件、軟件或固件中實(shí)現(xiàn)本發(fā)明。本發(fā)明還可實(shí)現(xiàn)為存儲在機(jī)器可讀介質(zhì)上的指令,該指令可被至少一個處理器讀取并執(zhí)行來運(yùn)行這里所描述的操作。機(jī)器可讀介質(zhì)可包括能以機(jī)器(例如計(jì)算機(jī))可讀的形式存儲或傳送信息的任何結(jié)構(gòu)。例如,機(jī)器可讀介質(zhì)可包括只讀存儲器(ROM);隨機(jī)訪問存儲器(RAM);磁盤存儲介質(zhì);光存儲介質(zhì);閃存設(shè)備;電、光、聲或其他形式的傳播信號(例如載波、紅外信號、數(shù)字信號等)以及其他。
本說明的各個部分用術(shù)語“右”、“左”、“右手”、“左手”、“最右”或“最左”來指本發(fā)明的多個部分。這些術(shù)語指的是圖中所示出的相對方向,不應(yīng)解釋為對本發(fā)明物理實(shí)現(xiàn)的限制。
各個實(shí)施例使用線性脈動陣列Montgomery乘法器(LSAMM)設(shè)計(jì),將初始參數(shù)的多個位載入具體的處理元件(PE)中并通過串行連接的PE串來傳播這些位,這樣就不再需要并行連接到所有PE的總線了。串行串中的多個PE不會阻止位組在PE之間被并行地轉(zhuǎn)移。在本發(fā)明的上下文中,“傳播”指將位組在PE串中從PE傳送到PE?!皞鞑ネㄟ^”某個具體的PE包括以下的任意一種1)開始傳播(未從一個相鄰的PE接收位組,但向另一個相鄰的PE發(fā)送位組);2)結(jié)束傳播(從一個相鄰的PE接收位組,但不向另一個相鄰的PE發(fā)送位組);和3)繼續(xù)傳播(從一個相鄰的PE接收位組,并向另一個相鄰的PE發(fā)送位組)。傳播不要求每個位組都到達(dá)串中的每個PE。
在一個實(shí)施例中,LSAMM還使用執(zhí)行Montgomery乘法的同一電路系統(tǒng),來對參數(shù)所有所需的倍數(shù)進(jìn)行預(yù)先計(jì)算。當(dāng)與傳統(tǒng)的LSAMM相比時,多次使用各個電路元件降低了每個PE所需的邏輯的數(shù)量。在一個實(shí)施例中,Montgomery乘法器實(shí)施為具有固定量的可用邏輯的FPGA。節(jié)省了電路系統(tǒng)就可在FPGA中包括更多的PE。
圖1示出了根據(jù)本發(fā)明一個實(shí)施例的系統(tǒng)。在圖1所圖示的實(shí)施例中,系統(tǒng)100包括通過輸入/輸出(I/O)邏輯130和存儲器總線160被耦合到LSAMM 150的處理器(CPU)110。在一個實(shí)施例中,系統(tǒng)100還包括耦合到I/O邏輯130的加速圖形處理器(AGP)120和存儲器140、以及將各個其他設(shè)備(未示出)耦合到I/O邏輯130的I/O總線170。在圖1的實(shí)施例中,LSAMM 150包括連接到存儲器總線160的Montgomery乘法器(MM)控制器180,這允許LSAMM 150可作為一塊存儲器來由CPU 110和/或其他設(shè)備尋址,但其他實(shí)施例具有以其他方式耦合的LSAMM 150。LSAMM 150還包括一串串行連接的處理元件(PE)190-x,其通過該串的末端而連接到MM控制器180,使得可通過在該串的末端處的PE,來向串提供一組參數(shù)(例如A、B、M)以及從串接收結(jié)果(例如R)。在圖1的實(shí)施例中,能向LSAMM 150寫入一組參數(shù)并能從LSAMM 150讀取最終結(jié)果的任何設(shè)備,可以使用LSAMM 150來執(zhí)行Montgomery乘法。盡管在整個本公開中使用術(shù)語“A”、“B”和“M”來表示Montgomery乘法中的參數(shù),但是這些只是一般的名稱。可以使用任何其他的術(shù)語而不偏離本發(fā)明的精神和范圍。
圖2示出了根據(jù)本發(fā)明一個實(shí)施例的線性脈動陣列Montgomery乘法器。在圖2所圖示的實(shí)施例中,一串串行連接的PE被用來執(zhí)行具有一組參數(shù)A、B、M的Montgomery乘法,其中每個參數(shù)都以每個PE一個數(shù)位(digit)分布在PE中。數(shù)位定義為由每個PE處理的每個參數(shù)的位數(shù)。在整個本公開內(nèi)所使用的示例實(shí)施例中,一個數(shù)位是4位的十六進(jìn)制數(shù),并且每個PE一次運(yùn)算A的4位和/或B的4位和/或M的4位。在其他實(shí)施例中,使用其他大小的數(shù)位,并且相應(yīng)地每個PE的邏輯就不同于這些示例。
圖2所圖示的實(shí)施例示出了一串N+3個PE,編號190-0到190-(N+2),并標(biāo)為PE-0到PE-(N+2)。在一個實(shí)施例中,LSAMM 150對1024位的參數(shù)進(jìn)行運(yùn)算,N的值是256。在本實(shí)施例中PE的數(shù)目是259,包括256個PE來容納參數(shù)的256個十六進(jìn)制數(shù)位,以及3個附加的PE來容納處理期間的中間結(jié)果。Montgomery乘法器(MM)控制器180通過每次使一個數(shù)位經(jīng)過PE-0將參數(shù)A、B、M傳遞到串中來控制處理。MM 180還將下面所描述的控制代碼c和其他值q傳送到PE-0中,以傳播通過PE串。
在一個實(shí)施例中,通過順序地將每個參數(shù)B和M每次一個數(shù)位地、從MM控制器180到PE-0、PE-1、PE-2等向左傳遞,直到每個參數(shù)都分布在PE-0到PE-N中,這樣來設(shè)置PE串以用于Montgomery乘法。在一個實(shí)施例中,在PE中計(jì)算每個參數(shù)B和M的倍數(shù)并存儲在PE中。為執(zhí)行實(shí)際的Montgomery乘法,參數(shù)A隨后被順序地每次一個數(shù)位地、從MM控制器180到PE-0、PE-1、PE-2等向左傳遞,以對所存儲的B和M的倍數(shù)進(jìn)行運(yùn)算。當(dāng)A的所有數(shù)位都已經(jīng)傳遞通過PE串時,該乘法運(yùn)算完成,其結(jié)果R保留在PE中。如果Montgomery乘法結(jié)束了,則結(jié)果R通過PE被向右傳遞到MM控制器180中。在一個實(shí)施例中,如果結(jié)果R是下一個Montgomery乘法的初始參數(shù),這在RSA操作中是很常見的情況,那么就計(jì)算R的倍數(shù)并存儲在PE中,而不傳遞到MM控制器180中,并且一個新參數(shù)A和前面一樣地傳播通過PE來執(zhí)行下一個Montgomery乘法。
在圖示的實(shí)施例中,參數(shù)A、B、M和結(jié)果R每個都表示一個分布在PE串中的大的數(shù)。控制代碼c每個都足夠小以裝入單個PE中,并且每個控制代碼都指示其當(dāng)前所處的PE來對當(dāng)前包含在該P(yáng)E中的值執(zhí)行運(yùn)算??刂拼a與相關(guān)聯(lián)參數(shù)的數(shù)位一起被向左傳遞通過PE。對于每種類型的運(yùn)算,傳遞通過PE的控制代碼序列是預(yù)先確定的。在一個實(shí)施例中,預(yù)先確定的序列被存儲在MM控制器180中,并按需要被提供給PE-0。在另一個實(shí)施例中,預(yù)先確定的序列存儲在MM控制器180之外,并被提供給MM控制器180以傳遞給PE-0。
q值也足夠小以裝入每個PE中,并且與相關(guān)聯(lián)參數(shù)的數(shù)位一起被向左傳遞通過PE,以進(jìn)一步定義每個PE中的運(yùn)算。在一個實(shí)施例中,用于Montgomery乘法運(yùn)算的q值在PE-0中確定并被傳遞,而用于其他運(yùn)算的q值則和控制代碼一樣,是存儲在MM控制器180之中或者之外被預(yù)先確定的序列。
在LSAMM 150的運(yùn)算期間,每個PE沿兩個方向?qū)⑿畔鬟f到相鄰的PE。在一個實(shí)施例中,每個PE在一個時鐘周期期間執(zhí)行由該P(yáng)E的當(dāng)前c、q值和A的數(shù)位所指明的內(nèi)部運(yùn)算,隨后等待一個時鐘周期來將信息傳遞到相鄰的PE以及從相鄰的PE接收信息。在一個實(shí)施例中,偶數(shù)編號的PE在偶數(shù)時鐘周期中執(zhí)行一個具體Montgomery乘法中的運(yùn)算,并在奇數(shù)時鐘周期中等待來自相鄰奇數(shù)編號的PE的信息,而奇數(shù)編號的PE則在奇數(shù)時鐘周期中執(zhí)行同一個Montgomery乘法中的運(yùn)算,并在偶數(shù)時鐘周期中等待來自相鄰偶數(shù)編號的PE的信息。在一個實(shí)施例中,通過每隔一個時鐘周期將所需的參數(shù)數(shù)位和控制代碼輸入到PE-0中,并在其間的時鐘周期時將零和非運(yùn)算控制代碼輸入到PE-0中,來產(chǎn)生這些交替的運(yùn)算和等待的周期。此非運(yùn)算周期隨后與運(yùn)算周期交織地沿著串傳播下去。于是,在一個實(shí)施例中將1024位的數(shù)載入一串4位的PE花費(fèi)了512個時鐘周期。
圖3示出了根據(jù)本發(fā)明一個實(shí)施例的處理元件的示意圖。在圖3所圖示的實(shí)施例中,PE 190包括PE控制邏輯310、兩個存儲元件(B-RAM312和M-RAM 314)、兩個地址寄存器(Q-寄存器324和A-寄存器322)、兩個加法器(S+B加法器330和S+B+M加法器340)、兩個復(fù)用器(第一復(fù)用器335和第二復(fù)用器355)、兩個進(jìn)位寄存器(進(jìn)位-1-寄存器332和進(jìn)位-2-寄存器342)、一個累加寄存器(S-寄存器345)和一個結(jié)果寄存器(R-寄存器360)。雖然只描述了單個PE 190,但在一個實(shí)施例中PE 190對串中的每個PE 190-x是普遍的。在圖示的實(shí)施例中,圖3底部所示出的連接對于多個PE都是共同的,所示出的右邊的連接與右邊的PE相接口,所示出左邊的連接與左邊的PE相接口,從一個PE的輸出被連接到相鄰PE被類似命名的輸入。例外的是PE-0和PE-(N+2),PE-0右邊與MM控制器180接口,PE-(N+2)左邊沒有PE并在一個實(shí)施例中被耦合到回送電路(loopback circuit)以允許回送某些數(shù)據(jù)。在一個實(shí)施例中,所有PE都具有共同的時鐘輸入Clk。在另一個實(shí)施例中,時鐘信號被緩沖并被分開到PE的多個組間以避免信號加載問題。
在一個實(shí)施例中,Clk、Carry-In-1、Carry-Out-1、Carry-In-2、Carry-Out-2和傳播這些信號的所有內(nèi)部連接每個都包含1位,而Cntl-In和Cntl-Out包含容納各個控制代碼所必須的位數(shù)。圖3中示出的所有其他連接包含正由每個PE處理的位數(shù),例如對圖示實(shí)施例是每個4位。在一個實(shí)施例中,每個PE按需要還包括其他輸入和輸出,例如“重啟”輸入(未示出)。
在一個實(shí)施例中,圖3的各個邏輯元件執(zhí)行以下操作控制邏輯310鎖存從右邊的PE接收的控制代碼,使用該控制代碼在當(dāng)前時鐘周期期間控制此PE的邏輯元件,并隨后將控制代碼傳遞到左邊的PE。存儲元件B-RAM 312用來存儲在PE串中存儲的B的每個倍數(shù)的一個數(shù)位,而存儲元件M-RAM 314用來存儲在PE串中存儲的M的每個倍數(shù)的一個數(shù)位。A-寄存器322和Q-寄存器324分別容納選擇B-RAM 312和M-RAM 314中所需存儲單元的地址(兩者都用于讀和寫),還將這些地址傳遞到左邊的PE。S+B加法器330用來將B-RAM 312中所選存儲單元的內(nèi)容與左邊PE中S-寄存器的內(nèi)容相加,包括從右邊PE中的S+B加法器通過Carry-In-1接收的任何進(jìn)位。進(jìn)位-1-寄存器332鎖存來自S+B加法器330的任何進(jìn)位,并在下一個時鐘周期期間將其作為進(jìn)位提供給左邊PE中的S+B加法器。當(dāng)選擇了第一復(fù)用器335的左手輸入時,S+B+M加法器340將S+B加法器330的輸出與M-RAM 314中所選存儲單元的內(nèi)容相加。當(dāng)選擇了第一復(fù)用器335的右手輸入時,S+B+M加法器340將S-寄存器345的內(nèi)容與M-RAM 314中所選存儲單元的內(nèi)容相加。任何接收到的進(jìn)位從右邊的PE通過Carry-In-2輸入而被提供,任何生成的進(jìn)位被鎖存到進(jìn)位-2-寄存器342中以由左邊的PE在下一個時鐘周期中使用。S+B+M加法器340的輸出被鎖存到S-寄存器345中,S-寄存器345用作中間結(jié)果的累加寄存器。S-寄存器345的輸出被分布到B-RAM 312、M-RAM 314、第一復(fù)用器335、第二復(fù)用器355和S-Out輸出的每個中。如果選擇了第二復(fù)用器355的右手輸入,那么R-寄存器360則鎖存S-寄存器345的輸出,否則就鎖存左邊PE中R-寄存器的內(nèi)容。
在圖3的實(shí)施例中,Clk被用來將數(shù)據(jù)鎖存到控制邏輯中,鎖存到Q-、A-、S-、R-、進(jìn)位-1-和進(jìn)位-2-寄存器中,以及對B-和M-RAM中的寫操作計(jì)時,而兩個加法器、兩個復(fù)用器以及B-和M-RAM中的讀操作是組合的,即輸入處的任何改變都不管時鐘狀態(tài)而被傳播通過到邏輯元件的輸出。在另一個實(shí)施例中,B-和M-RAM使用時鐘輸入來用于讀及寫操作。在一個實(shí)施例中,選擇時鐘速度以使得PE 190中最壞情況下的組合延遲小于一個時鐘周期。在圖3中未示出從Clk輸入到其他電路元件的具體連接,以避免使該圖過分復(fù)雜。
控制邏輯310包含控制PE 190的操作所必須的邏輯,這種控制是基于通過Cntl-In接收的控制代碼的。在一個實(shí)施例中,控制邏輯310包括將控制代碼轉(zhuǎn)換成必要的控制信號的解碼器電路。在另一個實(shí)施例中,控制代碼僅被鎖存,其中控制代碼的每一位表明一個具體的控制信號。在一個實(shí)施例中,控制代碼所指明的操作包括但不限于選擇第一復(fù)用器335的兩個輸入中的一個,選擇第二復(fù)用器355的兩個輸入中的一個,寫入B-RAM 312,寫入M-RAM 314,重啟A、Q、S和R寄存器中的一個或多個,以及對各個邏輯元件禁止時鐘信號。
因?yàn)镸ontgomery乘法用B和M的倍數(shù)來運(yùn)算,所以一個實(shí)施例使用與Montgomery乘法所用的同樣的邏輯,來在PE中預(yù)先計(jì)算倍數(shù)。在圖3所圖示的實(shí)施例中,存儲元件包括隨機(jī)訪問存儲器(RAM)、標(biāo)號的B-RAM和M-RAM以指示被存儲的參數(shù)。另一個實(shí)施例對于存儲元件B-RAM 312和M-RAM 314使用了不同于RAM的一種存儲器技術(shù)??偟貋砜矗琍E串中的所有B-RAM 312為(0×B)、(1×B)、(2×B)等的值提供存儲空間。每個PE的B-RAM 312為B的每個倍數(shù)的一個數(shù)位提供存儲空間。在一個每個PE對十六進(jìn)制數(shù)位進(jìn)行運(yùn)算的實(shí)施例中,B-RAM312包括16個4位存儲單元來容納(0×B)到(15×B)相應(yīng)的數(shù)位,而M-RAM 314包括16個4位存儲單元來容納(0×M)到(15×M)相應(yīng)的數(shù)位。在每個PE處理不同于4位的多位的實(shí)施例中,每個RAM中存儲單元的數(shù)量相應(yīng)地變化以尋址并存儲所需數(shù)量的倍數(shù)。
PE 190的邏輯可以各種方式來使用,這取決于此時所執(zhí)行的操作。在一個實(shí)施例中,PE執(zhí)行以下步驟的每一個,這些步驟將在以下部分中詳細(xì)描述1)將初始參數(shù)載入B-RAM和/或M-RAM。
2)預(yù)先計(jì)算B的倍數(shù)并存儲在B-RAM中。
3)預(yù)先計(jì)算M的倍數(shù)并存儲在M-RAM中。
4)執(zhí)行Montgomery乘法。
將初始參數(shù)載入B-RAM和/或M-RAM在LSAMM中,每次Montgomery乘法都以PE中的初始參數(shù)B和M開始。在某些情況下,一次Montgomery乘法的結(jié)果是下一次Montgomery乘法的初始參數(shù),使得不必載入初始參數(shù)。在一個實(shí)施例中,在乘法結(jié)束時S-寄存器345包含所累加結(jié)果的一個數(shù)位,其隨后在由A-寄存器322(或Q-寄存器324)指定的地址處被載入B-RAM 312(或M-RAM 314)中,作為下一次Montgomery乘法的初始參數(shù)的一個數(shù)位。
在其他情況下,在PE中不包含初始參數(shù),于是從外部來源提供初始參數(shù)。在一個實(shí)施例中,一個初始參數(shù)被輸入到串的一端并通過PE的S-寄存器傳播,直到每個數(shù)位都在其正確的PE的S-寄存器中,因此該數(shù)位就被寫入相應(yīng)的RAM中了。參考圖3,通過將B-RAM 312和M-RAM314的輸出置零,并選擇第一復(fù)用器335的左手輸入,加法器330和340將S-In處的值不改變地傳遞通過并將其載入S-寄存器345,從這里該值在S-Out處可用,由此使得能夠通過S-寄存器傳播一個值。但是,因?yàn)镾-寄存器被設(shè)計(jì)成從左向右傳遞數(shù)據(jù),所以在一個實(shí)施例中參數(shù)從PE-(N+2)開始傳播通過S-寄存器。在一個實(shí)施例中,MM控制器180具有對PE-(N+2)的S-In的單獨(dú)輸出并將初始參數(shù)的數(shù)位輸入到PE-(N+2)中。在另一個實(shí)施例中,MM控制器180將初始參數(shù)的數(shù)位輸入到PE-0的地址寄存器中,并將這些數(shù)位從右到左通過PE串來傳播?;厮碗娐冯S后將PE-(N+2)的地址寄存器輸出回送到PE-(N+2)的S-In輸入,從這里如同剛才所描述地,數(shù)位從左到右通過S-寄存器來傳播?;厮筒僮骱碗娐返膶?shí)施例將在以下的段落中描述。
圖4A示出了根據(jù)本發(fā)明的一個實(shí)施例,直接將初始參數(shù)載入處理元件串中的回送邏輯。圖4B示出了根據(jù)本發(fā)明的一個實(shí)施例,間接將初始參數(shù)載入處理元件串中的回送邏輯。圖5示出了根據(jù)本發(fā)明的一個實(shí)施例,使用回送邏輯的一種實(shí)現(xiàn)的流程圖。相對于圖4A、4B并進(jìn)一步相對于圖3的PE來描述圖5的流程圖500。在流程圖500的框510中,一個初始參數(shù)的數(shù)位從MM控制器180輸出。在一個使用圖4A的電路的實(shí)施例中,初始參數(shù)的數(shù)位被直接提供給回送復(fù)用器425,而框520被跳過。在另一種使用圖4B的電路的實(shí)施例中,初始參數(shù)的數(shù)位被輸出到PE-0的A-寄存器322,從此處它們在框520中傳播通過PE串的A-寄存器,直到到達(dá)PE-(N+2)。從PE-(N+2)的A-寄存器322,初始參數(shù)的數(shù)位被提供給回送復(fù)用器425。在一個實(shí)施例中,使用Q-寄存器代替A-寄存器,來將初始參數(shù)的數(shù)位從PE-0傳播到PE-(N+2)。在圖4A和4B兩者的實(shí)施例中,在框530,初始值的數(shù)位通過回送復(fù)用器425而被回送到PE-(N+2)的S-In輸入。在框540,初始參數(shù)的數(shù)位通過S-寄存器來傳播,直到每個數(shù)位以前面所描述的方式到達(dá)其正確的PE。
當(dāng)加載初始參數(shù)時,信號LoopSel選擇回送復(fù)用器425的右手輸入,使得初始參數(shù)的數(shù)位被輸入到S-In。如果初始參數(shù)未被加載到PE串中,那么信號LoopSel選擇回送復(fù)用器425的左手輸入,其將零輸入到S-In中。在一個實(shí)施例中,信號LoopSel由MM控制器180提供。在另一個實(shí)施例中,由附加的回送邏輯(未示出)響應(yīng)于控制代碼或只有該回送邏輯辨識出的控制代碼序列,來生成信號LoopSel。
在另一個實(shí)施例中,回送復(fù)用器425連接到一個內(nèi)部PE,例如回送復(fù)用器425連接到PE-N而非PE-(N+2),回送復(fù)用器425的左手輸入連接到左邊PE的S-Out輸出。此實(shí)施例允許加載初始參數(shù),而不必將數(shù)據(jù)傳遞通過在串末端的附加PE,這些附加PE正常情況下不容納初始參數(shù)的任何部分。
預(yù)先計(jì)算B的倍數(shù)并存儲在B-RAM中在圖3所圖示的實(shí)施例中,通過在每個PE中執(zhí)行以下操作,來計(jì)算B的每個倍數(shù)的數(shù)位并將這些數(shù)位存儲在B-RAM 312中1)通過向B-RAM 312中的存儲單元0全寫入0來將存儲單元0的內(nèi)容清除成零。在一個實(shí)施例中,此操作通過這樣來執(zhí)行,將A-寄存器322的內(nèi)容置零來選擇存儲單元0,并將S-寄存器345的內(nèi)容置零來提供寫入存儲單元0的數(shù)據(jù)。
2)通過前面在“將初始參數(shù)載入B-RAM和/或M-RAM”部分中描述的過程,來將B正確的數(shù)位載入S-寄存器345。
3)清除Q寄存器,設(shè)置M-RAM成“寫入”,并將來自S-寄存器345的B的數(shù)位寫入M-RAM 314的存儲單元0。M-RAM 314是此數(shù)位的臨時保持位置,并可在預(yù)先計(jì)算步驟結(jié)束時清除。
4)將M-RAM 314設(shè)置成“讀取”,并讓Q-寄存器324被清除以從M-RAM 314連續(xù)讀取B的數(shù)位。將B-RAM 312設(shè)置成“寫入”,清除S-寄存器345并將A-寄存器322設(shè)置成“0”。
5)選擇復(fù)用器335的右手輸入,使得S+B+M加法器340將用來自M-RAM 314的B的數(shù)位與S-寄存器345中的當(dāng)前值相加,并將和作為新值存儲在S-寄存器345中,包括在Carry-In-2處接收的任何相關(guān)進(jìn)位的影響。(此相加產(chǎn)生的任何進(jìn)位都被鎖存到進(jìn)位-2-寄存器342中以由左邊的PE使用。)6)將A-寄存器322中的值用S-寄存器345中的每個新值進(jìn)行遞增,以使得S-寄存器345中的變化值被存儲到B-RAM 312中連續(xù)的存儲單元0、1、2、3等中。在增加過B的所有倍數(shù)之后,B-RAM 312中的結(jié)果是存儲單元0包含0×B=0的數(shù)位,存儲單元1包含1×B同樣的數(shù)位,存儲單元2包含2×B同樣的數(shù)位,存儲單元3包含3×B同樣的數(shù)位等。當(dāng)已經(jīng)將此過程應(yīng)用到PE0到N時,就完成了B的倍數(shù)的預(yù)先計(jì)算和存儲。
預(yù)先計(jì)算M的倍數(shù)并存儲在M-RAM中在圖3所圖示的實(shí)施例中,通過在每個PE中執(zhí)行以下操作,來計(jì)算B的每個倍數(shù)的數(shù)位并將這些數(shù)位存儲在M-RAM 314中1)通過向每個存儲單元寫入零來將M-RAM的內(nèi)容清除。在一個實(shí)施例中,這通過如此來執(zhí)行,將S-寄存器345的內(nèi)容置零,并向M-RAM重復(fù)地寫入零值,同時增加Q-寄存器324的內(nèi)容。
2)通過以上在“將初始參數(shù)載入B-RAM和/或M-RAM”部分中描述的過程,來將M正確的數(shù)位載入S-寄存器345。
3)清除Q寄存器,并將來自S-寄存器345的M的數(shù)位寫入M-RAM314的存儲單元0。存儲單元0是此數(shù)位的臨時保持位置,并可在預(yù)先計(jì)算步驟結(jié)束時清除。
4)選擇復(fù)用器335的右手輸入,使得S+B+M加法器340將用從M-RAM 314讀取的值與S-寄存器345中的當(dāng)前值相加,并將和作為新值存儲在S-寄存器345中,包括在Carry-In-2處接收的任何相關(guān)進(jìn)位的影響。(此相加產(chǎn)生的任何進(jìn)位都被鎖存到進(jìn)位-2-寄存器342中以由左邊的PE使用。)這樣,S-寄存器345中的值將隨著每次相加,而相繼變化經(jīng)過M、2M、3M等的相同數(shù)位。
5)使Q-寄存器324的內(nèi)容在增加的計(jì)數(shù)器和零之間交替1、0、2、0、3、0等。當(dāng)Q-寄存器保持為零時,將M-RAM 314置于讀狀態(tài)以從存儲單元0讀出M的值。當(dāng)Q-寄存器保持為在增加的計(jì)數(shù)器值中的一個時,將M-RAM 314置于寫狀態(tài)以將來自S-寄存器345的累加值寫入該存儲單元。這樣,M的數(shù)位將從M-RAM 314中的存儲單元0讀取并被加到S-寄存器345中的累加值上,包括任何接收到的進(jìn)位的影響??偤碗S后將被寫到M-RAM 314中的存儲單元,該存儲單元隨著每次寫的操作而增加。M-RAM 314中的結(jié)果是存儲單元1包含M的數(shù)位,存儲單元2包含2M同樣的數(shù)位,存儲單元3包含3M同樣的數(shù)位等。
6)將S-寄存器345和Q-寄存器324置零,并將S-寄存器345的零內(nèi)容寫入M-RAM 314的存儲單元0。當(dāng)已經(jīng)將此過程應(yīng)用到PE0到N時,就完成了M的倍數(shù)的預(yù)先計(jì)算和存儲。
在用于實(shí)施以上操作的一個實(shí)施例中,A-寄存器322和Q-寄存器324的內(nèi)容通過控制代碼而被清除成零。在另一個實(shí)施例中,通過將零值如同A-和Q-寄存器中的其他值一樣傳播通過PE串,來將A-寄存器322和Q-寄存器324的內(nèi)容設(shè)成零。
執(zhí)行Montgomery乘法在圖3所圖示的實(shí)施例中,每個PE以如下的方式來在Montgomery乘法中執(zhí)行A-寄存器322鎖存A的一個數(shù)位來選擇B-RAM 312中B的倍數(shù)的一個數(shù)位,Q-寄存器324鎖存一個q值來選擇M-RAM 314中M的倍數(shù)的一個數(shù)位,而控制邏輯310鎖存控制代碼來在當(dāng)前時鐘周期期間控制PE 190的邏輯元件。所有這三個值都在下一個時鐘周期從右邊的PE接收并傳遞給左邊的PE。使用S+B加法器330,B-RAM 312的所選存儲單元被加到左邊PE中的S-寄存器的當(dāng)前內(nèi)容。使用Carry-In-1輸入和Carry-Out-1輸出來將進(jìn)位從右向左傳播,使得當(dāng)前PE的S+B加法器330與其他PE的S+B加法器合作,來將B的所選倍數(shù)的值加到S寄存器中中間結(jié)果的右移(一個數(shù)位)值。以類似的方式,S+B+M加法器340使用Carry-In-2和Carry-Out-2處的傳播進(jìn)位,而與其他PE的S+B+M加法器合作來執(zhí)行更大的加法。選擇第一復(fù)用器335的左手輸入,使得S+B加法器330的輸出被加到在M-RAM 314的所選存儲單元中M的倍數(shù)??偤捅绘i存到S-寄存器345作為新的中間結(jié)果,完成了由當(dāng)前時鐘周期的控制代碼所確定的操作。如前所述,接著是等待來自相鄰PE的信息的一個時鐘周期,然后剛才描述的過程重復(fù)盡可能多次將A的所有數(shù)位傳播通過PE。當(dāng)A的所有數(shù)位已經(jīng)傳播通過PE時,S-寄存器345中的值就是Montgomery乘法的結(jié)果的數(shù)位。當(dāng)A的所有數(shù)位已經(jīng)傳播通過所有PE時,Montgomery乘法就完成了。
如果該結(jié)果被用作一系列連續(xù)的Montgomery乘法中新的初始參數(shù),那么S-寄存器345中的內(nèi)容就隨后被載入到B-RAM 312中作為B的數(shù)位,并按前面“預(yù)先計(jì)算B的倍數(shù)并存儲在B-RAM中”所描述的來計(jì)算倍數(shù)。如果該結(jié)果是最終結(jié)果,那么結(jié)果就被移位通過右邊的PE,直到結(jié)果的所有數(shù)位已移入MM控制器180,從此處該結(jié)果可被系統(tǒng)中的其他設(shè)備使用。在一個實(shí)施例中,在每個PE中,S-寄存器345的內(nèi)容通過復(fù)用器355的右手輸入被載入R-寄存器360,然后通過在每個PE中選擇復(fù)用器355的左輸入,所有R-寄存器360的內(nèi)容被向右相互傳遞到MM控制器180中。在另一個實(shí)施例中,R-寄存器360和第二復(fù)用器355并不包括在PE中,并且使用S-In和S-Out連接來將結(jié)果向右傳遞通過每個PE的S-寄存器,其方式與以上在“將初始參數(shù)載入B-RAM和/或M-RAM”中描述的加載初始參數(shù)的方式基本相同。
以上說明意于解釋而非限制。本領(lǐng)域技術(shù)人員將想到多種變化。這些變化意于包括在僅由所附權(quán)利要求的精神和范圍所限制的本發(fā)明中。
權(quán)利要求
1.一種裝置,包括線性脈動陣列蒙哥馬利乘法器中的第一處理元件,所述第一處理元件包括第一存儲元件;和第一累加寄存器,其被耦合到相鄰的第二處理元件中的第二累加寄存器,來將第一初始參數(shù)傳播通過所述第一和第二累加寄存器,所述第一累加寄存器還被耦合到所述第一存儲元件,來將所述第一初始參數(shù)的一部分載入所述第一存儲元件。
2.如權(quán)利要求1所述的裝置,其中所述第一累加寄存器還將所述第一初始參數(shù)的第一組倍數(shù)的一部分載入所述第一存儲元件。
3.如權(quán)利要求1所述的裝置,其中所述第一處理元件還包括第二存儲元件,所述第二存儲元件被耦合到所述第一累加寄存器,來存儲傳播通過所述第一和第二累加寄存器的第二初始參數(shù)的一部分。
4.如權(quán)利要求3所述的裝置,其中所述第一累加寄存器還將所述第二初始參數(shù)的第二組倍數(shù)的一部分載入所述第二存儲元件。
5.如權(quán)利要求1所述的裝置,其中所述第一處理元件還包括第一地址寄存器,所述第一地址寄存器被耦合到所述第一存儲元件來對所述第一存儲元件中的存儲單元尋址,并且被耦合到所述第二處理元件中的第二地址寄存器,以在將所述第一初始參數(shù)傳播通過所述第一和第二累加寄存器之前,來將所述第一初始參數(shù)傳播通過所述第一和第二地址寄存器。
6.如權(quán)利要求5所述的裝置,其中所述第一初始參數(shù)將沿與傳播通過所述第一和第二累加寄存器相反的方向,來傳播通過所述第一和第二地址寄存器。
7.如權(quán)利要求1所述的裝置,其中所述第一累加寄存器還將在蒙哥馬利乘法期間來累加中間結(jié)果。
8.一種系統(tǒng),包括處理器;存儲器,其被耦合到所述處理器;和線性脈動陣列蒙哥馬利乘法器,被耦合到所述處理器并包括一組具有累加寄存器的串連處理元件,在開始蒙哥馬利乘法之前,所述串連處理元件組將初始參數(shù)傳播通過所述累加寄存器,并將來自所述累加寄存器的所述初始參數(shù)存儲到所述處理元件中的存儲元件中,其中所述累加寄存器將在所述蒙哥馬利乘法期間保持中間結(jié)果。
9.如權(quán)利要求8所述的系統(tǒng),其中所述串連處理元件組還包括地址寄存器,所述地址寄存器被耦合到所述存儲元件以對所述存儲元件中的存儲單元尋址,并且在所述初始參數(shù)傳播通過所述累加寄存器之前,所述地址寄存器還將所述初始參數(shù)傳播通過所述地址寄存器。
10.如權(quán)利要求9所述的系統(tǒng),其中所述地址寄存器還將沿與所述初始參數(shù)傳播通過所述累加寄存器相反的方向,來將所述初始參數(shù)傳播通過所述地址寄存器。
11.一種裝置,包括線性脈動陣列蒙哥馬利乘法器中的第一處理元件,所述第一處理元件包括第一存儲元件;加法器,其被耦合到所述第一存儲元件,來計(jì)算第一初始參數(shù)的倍數(shù)的一部分;和累加寄存器,其被耦合到所述加法器和所述第一存儲元件,以將所述第一初始參數(shù)的倍數(shù)的一部分載入所述第一存儲元件;其中所述第一存儲元件、所述加法器和所述累加寄存器還將用所述第一初始參數(shù)的倍數(shù)的所述部分來執(zhí)行蒙哥馬利乘法。
12.如權(quán)利要求11所述的裝置,其中所述第一處理元件還包括第二存儲元件,所述第二存儲元件被耦合到所述加法器和所述累加寄存器;以及所述加法器將計(jì)算第二初始參數(shù)的倍數(shù)的一部分,并且所述累加寄存器將所述第二初始參數(shù)的倍數(shù)的所述部分載入所述第二存儲元件。
13.如權(quán)利要求12所述的裝置,還包括所述線性脈動陣列蒙哥馬利乘法器中的第二處理元件;其中在所述加法器的計(jì)算之前,所述累加寄存器還將所述第一初始參數(shù)傳播通過所述第一和第二處理元件。
14.如權(quán)利要求13所述的裝置,其中所述第一處理元件還包括地址寄存器,所述地址寄存器對所述第一存儲元件中的存儲單元尋址,并且在傳播通過所述累加寄存器之前來將所述第一初始參數(shù)傳播通過所述第一和第二處理元件。
15.如權(quán)利要求14所述的裝置,其中通過所述地址寄存器的傳播方向與通過所述累加寄存器的傳播方向相反。
16.如權(quán)利要求14所述的裝置,還包括被耦合到所述地址寄存器和所述累加寄存器的邏輯,以將來自所述地址寄存器的所述第一初始參數(shù)循環(huán)給所述累加寄存器。
17.一種方法,包括通過以下步驟來將初始參數(shù)載入線性脈動陣列蒙哥馬利乘法器的一組處理元件將所述初始參數(shù)傳播通過所述處理元件;以及將所述初始參數(shù)載入所述處理元件中的存儲元件中。
18.如權(quán)利要求17所述的方法,其中傳播所述初始參數(shù)包括將所述初始參數(shù)傳播通過所述處理元件中的累加寄存器。
19.如權(quán)利要求18所述的方法,還包括沿與傳播通過所述累加寄存器相反的方向,來將所述初始參數(shù)傳播通過所述處理元件中的地址寄存器;以及在所述初始參數(shù)的所述傳播通過所述累加寄存器之前,在某個處理元件處回送所述初始參數(shù)。
20.一種提供指令的機(jī)器可讀介質(zhì),所述指令當(dāng)被一個或多個的一組處理器執(zhí)行時,使得所述處理器組執(zhí)行操作,所述操作包括將初始參數(shù)和控制代碼載入線性脈動陣列蒙哥馬利乘法器,使得所述線性脈動陣列蒙哥馬利乘法器中的處理元件將所述初始參數(shù)傳播通過所述處理元件,并將所述初始參數(shù)載入所述處理元件中的存儲元件中。
21.如權(quán)利要求20所述的介質(zhì),其中傳播所述初始參數(shù)包括將所述初始參數(shù)傳播通過所述處理元件中的累加寄存器。
22.如權(quán)利要求21所述的介質(zhì),其中傳播所述初始參數(shù)還包括沿與傳播通過所述累加寄存器相反的方向,來將所述初始參數(shù)傳播通過所述處理元件中的地址寄存器,以及在傳播通過所述累加寄存器之前,在某個處理元件處回送所述初始參數(shù)。
23.如權(quán)利要求20所述的介質(zhì),還包括將控制代碼載入所述線性脈動陣列蒙哥馬利乘法器,使所述處理元件預(yù)先計(jì)算所述處理元件中的所述初始參數(shù)的倍數(shù),并將所述倍數(shù)存儲在所述存儲元件中。
全文摘要
一種具有一串處理元件的蒙哥馬利乘法器電路,通過使初始參數(shù)傳播通過用于其他目的的寄存器,而在每個處理元件中使用更少的電路邏輯。每個處理元件中的累加寄存器被用來將初始參數(shù)傳播通過所述串。在一個實(shí)施例中,初始參數(shù)首先被傳播通過地址寄存器直到其到達(dá)所述串的末端,并隨后通過累加寄存器以相反方向回送。在一個實(shí)施例中,使用在執(zhí)行蒙哥馬利乘法中所使用的同樣的邏輯元件,以在蒙哥馬利乘法器的處理元件中,預(yù)先計(jì)算蒙哥馬利乘法中使用的至少一個參數(shù)的倍數(shù)。
文檔編號G06F7/72GK1561479SQ02819245
公開日2005年1月5日 申請日期2002年9月13日 優(yōu)先權(quán)日2001年9月28日
發(fā)明者邁克·呂勒 申請人:英特爾公司