第1圖為實施例積體電路100的示意圖。積體電路100包括周邊輸入輸出腳位101-10N、通用型輸入輸出腳位111-11N、腳位控制暫存器122、連結網路130及網路控制電路120。連結網路130連結周邊輸入輸出腳位101-10N以及通用型輸入輸出腳位111-11N。網路控制電路120耦接於連結網路130,且根據周邊輸入輸出腳位101-10N以及通用型輸入輸出腳位111-11N的對應關係控制周邊輸入輸出腳位101-10N經由連結網路130連結至通用型輸入輸出腳位111-11N。
腳位控制暫存器122儲存周邊輸入輸出腳位101-10N與通用型輸入輸出腳位111-11N的對應關係。當要動態調整腳位對應關係,如將周邊輸入輸出腳位101連結至通用型輸入輸出腳位118,周邊輸入輸出腳位102連結至通用型輸入輸出腳位116,則將腳位對應關係更新至腳位控制暫存器122。腳位控制暫存器122傳送腳位對應關係至網路控制電路120的硬體計算單元124以產生控制訊號126。連結網路130再依據控制訊號126來做開關控制以完成腳位連接。在本發明的一個實施例中,腳位控制暫存器122亦可獨立在積體電路100外,而係耦接於積體電路100的網路控制電路120。
在本發明的一個實施例中,周邊輸入輸出腳位101-10N可為積體電路的功能腳位。積體電路的功能腳位包含讀取控制(RD)腳位、中斷要求(INT)腳位、寫入控制(WR)腳位 、記憶體存取控制腳位、系統重置(RESET)腳位等,但不限於此。硬體計算單元124計算出控制訊號126後,網路控制電路120便可依不同的需要改變積體電路100的功能腳位和通用型輸入輸出腳位111-11N的連結。
第2圖為實施例汴尼茲網路(Benes network)的示意圖。在本發明的一個實施例中,連結網路130可為汴尼茲網路(Benes network)。在汴尼茲網路(Benes network)中,由於每個輸入端點到輸出端點之間通過的閘門(gate)數量是相同的,因此不會有選擇不同路徑而造成不同閘門延遲(gate delay)的問題。如第2圖所示,由左側000連接至右側000的閘門數量為5。同樣地,由左側100連接至右側100的閘門(gate)數量也為5。使用傳統多工器多級串接(MUX)或縱橫式交換開關(crossbar switch)的方式,隨著想要連接腳位的位置越多,MUX串接起來的複雜度與面積都會變大,導致經過的閘門數量增加,且使用者查表去做設定的過程也會越複雜。此外,因MUX串接方式不同,在某些情形下,不同輸入端點到輸出端點通過的閘門數量會有很大差異,例如一個輸入到輸出通過的閘門數量為1,但另一個輸入到輸出通過的閘門數量可能為19。因此在應用上,汴尼茲網路(Benes network)不會有一般使用多工器多級串接(MUX)與縱橫式交換開關,由於通過的閘門數量不同而造成各個路徑的不同延遲問題。
在本發明的一個實施例中,可以改善電路板因積體電路擺放位置造成的拉線問題。第3A、3B圖為積體電路100與其他複數個積體電路204、206、208拉線的示意圖,如第3A圖所示,積體電路100擺放位置已經固定,在先前技術中,由於積體電路100的輸出腳位是固定不可變的,以致於積體電路206以及積體電路204並不容易與積體電路100拉線。然而透過本發明實施例的網路控制電路120,即可以改變積體電路100輸出腳位的位置,如第3B圖所示,將可以使積體電路206以及積體電路204的拉線容易,也可以減少因不良佈線所造成的電流或電磁干擾。
第4圖為積體電路100使用軟體應用程式402控制周邊輸入輸出腳位101-10N以及通用型輸入輸出腳位111-11N的連結的示意圖。積體電路100包括周邊輸入輸出腳位101-10N、通用型輸入輸出腳位111-11N、連結網路130及網路控制電路120。網路控制電路120可包含軟體應用程式402,網路控制電路120可耦接於連結網路130。連結網路130亦可使用汴尼茲網路(Benes network)連結周邊輸入輸出腳位101-10N以及數個通用型輸入輸出腳位111-11N。當需要動態調整周邊輸入輸出腳位101-10N以及通用型輸入輸出腳位111-11N的對應關係,則將腳位對應關係更新至軟體應用程式402。當軟體應用程式402產生控制訊號406,控制訊號406會使網路控制電路120控制連結網路130。連結網路130再依據控制訊號406來做開關控制以連結周邊輸入輸出腳位101-10N以及數個通用型輸入輸出腳位111-11N。在本發明的一個實施例中,軟體應用程式402亦可獨立在積體電路100外,而將控制訊號406由外部輸入網路控制電路120。
第5圖為實施例的動態腳位控制方法的流程圖。
步驟S502: 將積體電路的周邊輸入輸出腳位101-10N與通用型輸入輸出腳位111-11N的腳位對應關係儲存至腳位控制暫存器122;
步驟S504: 網路控制電路120根據周邊輸入輸出腳位101-10N與通用型輸入輸出腳位111-11N的腳位對應關係產生控制訊號126、406;
步驟S506: 網路控制電路120傳送控制訊號126、406用以控制連結網路130,依據控制訊號126、406將周邊輸入輸出腳位101-10N經由連結網路130連結通用型輸入輸出腳位111-11N。
在步驟S502中,周邊輸入輸出腳位101-10N與通用型輸入輸出腳位111-11N的對應關係儲存至腳位控制暫存器122,若因需求要動態調整腳位,僅需更改腳位控制暫存器122。如第6圖所示,想要把I2C的位置從GPIOA[2] 與GPIOA [3]修改到GPIOA[14] 與GPIOA [15],直接修改腳位控制暫存器122內容即可,也不需要查表。動態調整腳位修改設定後,若要得知目前腳位分配,也是直接讀出此腳位控制暫存器122內容即可。根據腳位控制暫存器122的腳位對應關係,網路控制電路120的硬體計算單元124會產生控制訊號126來控制汴尼茲網路(Benes network)的連接。傳統使用多工器多級串接(MUX)或縱橫式交換開關(crossbar switch)的方式,隨著想要連接腳位的位置越多,多工器多級串接起來的複雜度與面積都會變大,使用者查表去做設定的過程也會越複雜。本發明實施例提供一簡易的方式提供動態腳位設定。
在步驟S504中,網路控制電路120根據周邊輸入輸出腳位101-10N與通用型輸入輸出腳位111-11N的對應關係,使用完整殘餘分樹控制(complete residue partition tree control)及位元控制(bit control)產生控制訊號126。根據實施例的不同,可以由硬體計算單元124產生控制訊號126或軟體應用程式402產生控制訊號406。連結網路130是使用汴尼茲網路(Benes network)。控制訊號126、406主要是用來控制汴尼茲網路(Benes network)中的每一個閘門(gate)開關控制,以達成周邊輸入輸出腳位101-10N以及數個通用型輸入輸出腳位111-11N的連結控制。
第7圖為實施例積體電路示意圖。第7圖右邊的通用型輸入輸出腳位721-728數量,相對於左邊的周邊輸入輸出腳位701-716數量,腳位數量是較少的,若使用傳統的積體電路封裝方式,則無法使用全部的周邊輸入輸出腳位701-716,而必須有所取捨。使用本實施例的動態腳位控制方法,通用型輸入輸出腳位721-728可依需求,透過網路控制電路130控制與周邊輸入輸出腳位701-716的耦接,所以可以有效使用全部的周邊輸入輸出腳位701-716。且連結網路可使用汴尼茲網路(Benes network),通過的閘門(gate)數量相同,而不會有腳位延遲時間相異的問題。
第8圖為汴尼茲網路(Benes network)產生控制訊號實施例的示意圖。將具有N個輸入的汴尼茲網路分兩個區塊。第一區塊801是使用完整殘餘分樹控制(Complete Residue Partition Tree Control, CRPT Control)演算法,第一區塊801的階段數量為K,K=log2
N–1。如第9圖所示,K=1,1層數列,K=2,2層數列,K=3,4層數列,依此類推。在本實施例中,如第8圖所示,若N=16,則第一區塊801具有3個階段。把輸入數列0至16做除2K
的取商運算再使用汴尼茲網路(Benes Network)將數列轉換為兩層數列,各個階段使用相同步驟,利用CRPT控制演算法算出汴尼茲網路(Benes network)的第一區塊801的開關控制結果。第二區塊802使用位元控制(Bit Control),第二區塊802的階段數量是log2
N,在本實施例中,N=16,因此第二區塊802具有4個階段。使用位元控制(bit control)演算法根據數列相對於特定位置的位元(Bit)來做汴尼茲網路(Benes network)的第二區塊802開關控制。
第10圖為汴尼茲網路(Benes network)第一區塊801使用完整殘餘分樹(CRPT Control)控制演算法實施例的流程圖。其中,第一區塊801含有K個階段,K=(log2
N–1),第一區塊801中每一階段包含以下步驟:
步驟S1001: 將輸入的數列轉換為兩層數列,數列中的奇數組成為上位序列(Upper sequence),數列中的偶數組成為下位序列(Lower sequence);
步驟S1002: 將上位序列(Upper sequence)執行除2K
的取商運算,得到第一矩陣Up2K,將下位序列(Lower sequence)執行除2K
的取商運算,得到第二矩陣Low2K;
步驟S1003: 依先標記第一矩陣Up2K再標記第二矩陣Low2K的順序,將0到(N/2 - 1)的數字標記在第一矩陣Up2K以及第二矩陣Low2K中,若標記過程發生搜尋衝突,即數字應標記在第一矩陣Up2K的第i項,但第二矩陣Low2K的第i項已被標記,或數字應標記在第二矩陣Low2K的第i項,但第一矩陣Up2K的第i項已被標記,則執行步驟S1004,否則持續執行步驟S1003,直到完成標記數字=(N/2 - 1)的位置,則跳至步驟S1005;
步驟S1004: 將應標記數字標記在第一矩陣Up2K或第二矩陣Low2K的第i項,清除另一矩陣的第i項,並將另一矩陣的第i項的值儲存為衝突數字,再依第一矩陣Up2K至第二矩陣Low2K的順序重新找出並標記衝突數字不為原先位置的新位置,若再發生搜尋衝突則回到步驟S1004,否則執行步驟S1003;
步驟S1005: 將標記第一矩陣Up2K以及第二矩陣Low2K的結果轉換為開關的控制,若被標記的數字在第一矩陣Up2K的第i項,則第i開關控制即是0,若被標記的數字在第二矩陣Low2K的第i項,則第i開關控制即是1。
在第1階段,當K=1時,依照步驟S1001-S1005,可得到第1階段的開關控制結果。在第2階段,當K=2時,依照步驟S1001-S1005,可得到第2階段的開關控制結果。依序將K從1至(log2
N–1),依照所述步驟S1001-S1005,可以得到第一區塊801的所有開關解。開關的控制方式,如第11A圖所示,當開關控制是0,即平行輸出;如第11B圖所示,當開關控制是1,即交叉輸出。
如第12圖所示,實施例具有16個輸入,即N=16,16個輸入的數列為[0,1,2,3,4,6,5,8,7,10,12,11,14,13,15,9],代表將周邊輸入輸出腳位0欲耦接至通用型輸入輸出腳位0,周邊輸入輸出腳位1欲耦接至通用型輸入輸出腳位1,周邊輸入輸出腳位2欲耦接至通用型輸入輸出腳位2,周邊輸入輸出腳位3欲耦接至通用型輸入輸出腳位3,周邊輸入輸出腳位4欲耦接至通用型輸入輸出腳位4,周邊輸入輸出腳位5欲耦接至通用型輸入輸出腳位6,周邊輸入輸出腳位6欲耦接至通用型輸入輸出腳位5,周邊輸入輸出腳位7欲耦接至通用型輸入輸出腳位8,周邊輸入輸出腳位8欲耦接至通用型輸入輸出腳位7,周邊輸入輸出腳位9欲耦接至通用型輸入輸出腳位10,周邊輸入輸出腳位10欲耦接至通用型輸入輸出腳位12,周邊輸入輸出腳位11欲耦接至通用型輸入輸出腳位11,周邊輸入輸出腳位12欲耦接至通用型輸入輸出腳位14,周邊輸入輸出腳位13欲耦接至通用型輸入輸出腳位13,周邊輸入輸出腳位14欲耦接至通用型輸入輸出腳位15,周邊輸入輸出腳位15欲耦接至通用型輸入輸出腳位9。在第1階段,當K=1時,執行步驟S1001,擷取數列中的奇數組以得到上位序列:[0,2,4,5,7,12,14,15],及擷取數列中的偶數組以得到下位序列:[1,3,6,8,10,11,13,9]。執行步驟S1002,進行除2
1
的取商運算,得到第一矩陣Up2K=[0,1,2,2,3,6,7,7,]以及第二矩陣Low2K=[0,1,3,4,5,5,6,4],顯示如第1表:
Up2K | 0 | 1 | 2 | 2 | 3 | 6 | 7 | 7 |
Low2K | 0 | 1 | 3 | 4 | 5 | 5 | 6 | 4 |
第1表
接下來執行步驟S1003,將0做標記,如第2表所示,0位在第一矩陣Up2K的第0個位置及第二矩陣Low2K的第0個位置,但第一矩陣Up2K比第二矩陣Low2K具有較高的優先次序,因此將0標記在第一矩陣Up2K的第0個位置:
Up2K | “0” | 1 | 2 | 2 | 3 | 6 | 7 | 7 |
Low2K | 0 | 1 | 3 | 4 | 5 | 5 | 6 | 4 |
第2表
接著標記1,如第3表所示,1位在第一矩陣Up2K的第1個位置及第二矩陣Low2K的第1個位置,但第一矩陣Up2K比第二矩陣Low2K具有較高的優先次序,因此將1標記在第一矩陣Up2K的第1個位置:
Up2K | “0” | “1” | 2 | 2 | 3 | 6 | 7 | 7 |
Low2K | 0 | 1 | 3 | 4 | 5 | 5 | 6 | 4 |
第3表
接著標記2,如第4表所示,2位在第一矩陣Up2K的第2個位置及第一矩陣Up2K的第3個位置,但第一矩陣Up2K的第2個位置在第一矩陣Up2K的第3個位置前面,因此將2標記在第一矩陣Up2K的第2個位置:
Up2K | “0” | “1” | “2” | 2 | 3 | 6 | 7 | 7 |
Low2K | 0 | 1 | 3 | 4 | 5 | 5 | 6 | 4 |
第4表
接著標記3,如第5表所示,3位在第一矩陣Up2K的第4個位置及第二矩陣Low2K的第2個位置,但第一矩陣Up2K比第二矩陣Low2K具有較高的優先次序,因此將3標記在第一矩陣Up2K的第4個位置:
Up2K | “0” | “1” | “2” | 2 | “3” | 6 | 7 | 7 |
Low2K | 0 | 1 | 3 | 4 | 5 | 5 | 6 | 4 |
第5表
接著標記4,如第5表所示,4位在第二矩陣Low2K的第3個位置及第二矩陣Low2K的第7個位置,但第二矩陣Low2K的第3個位置在第二矩陣Low2K的第7個位置前面,因此將4標記在第二矩陣Low2K的第3個位置:
Up2K | “0” | “1” | “2” | 2 | “3” | 6 | 7 | 7 |
Low2K | 0 | 1 | 3 | “4” | 5 | 5 | 6 | 4 |
第5表
接著標記5,如第6表所示,5位在第二矩陣Low2K的第4個位置及第二矩陣Low2K的第5個位置,但第二矩陣Low2K的第4個位置在第二矩陣Low2K的第5個位置前面,因此將5標記在第二矩陣Low2K的第4個位置,但此時因為第一矩陣Up2K第4個位置已被標記,發生搜尋衝突,得執行步驟S1004:
Up2K | “0” | “1” | “2” | 2 | “3” | 6 | 7 | 7 |
Low2K | 0 | 1 | 3 | “4” | “5” | 5 | 6 | 4 |
第6表
接下來執行步驟S1004,保留標記5在第二矩陣Low2K的第4個位置,清除第一矩陣Up2K的第4個位置,並儲存衝突數字=3,重新由第一矩陣Up2K至第二矩陣Low2K的順序找出衝突數字=3的新位置,即第二矩陣Low2K的第2個位置,如第7表所示,執行標記動作,但此時因為第一矩陣Up2K的第2個位置已被標記,發生搜尋衝突,得執行步驟S1004:
Up2K | “0” | “1” | “2” | 2 | 3 | 6 | 7 | 7 |
Low2K | 0 | 1 | “3” | “4” | “5” | 5 | 6 | 4 |
第7表
接下來執行步驟S1004,保留標記3在第二矩陣Low2K的第2個位置,清除第一矩陣Up2K的第2個位置,並儲存衝突數字=2,重新由第一矩陣Up2K至第二矩陣Low2K的順序找出衝突數字=2的新位置,即第一矩陣Up2K的第3個位置,如第8表所示,執行標記動作,但此時因為第二矩陣Low2K第3個位置已被標記,發生搜尋衝突,得執行步驟S1004:
Up2K | “0” | “1” | 2 | “2” | 3 | 6 | 7 | 7 |
Low2K | 0 | 1 | “3” | “4” | “5” | 5 | 6 | 4 |
第8表
接下來執行步驟S1004,保留標記2在第一矩陣Up2K的第3個位置,清除第二矩陣Low2K的第3個位置,並儲存衝突數字=4,重新由第一矩陣Up2K至第二矩陣Low2K的順序找出衝突數字=4的新位置,即第二矩陣Low2K的第7個位置,如第9表所示,執行標記動作:
Up2K | “0” | “1” | 2 | “2” | 3 | 6 | 7 | 7 |
Low2K | 0 | 1 | “3” | 4 | “5” | 5 | 6 | “4” |
第9表
接下來執行步驟S1003,接著標記6,如第10表所示,6位在第一矩陣Up2K的第5個位置及第二矩陣Low2K的第6個位置,但第一矩陣Up2K比第二矩陣Low2K具有較高的優先次序,因此將6標記在第一矩陣Up2K的第5個位置:
Up2K | “0” | “1” | 2 | “2” | 3 | “6” | 7 | 7 |
Low2K | 0 | 1 | “3” | 4 | “5” | 5 | 6 | “4” |
第10表
接著標記7,如第11表所示,7位在第一矩陣Up2K的第6個位置及第一矩陣Up2K的第7個位置,但第一矩陣Up2K的第6個位置在第一矩陣Up2K的第7個位置前面,因此將7標記在第一矩陣Up2K的第6個位置,此時完成標記數字7的位置,即完成所有標記(N/2-1),便可執行步驟S1005:
Up2K | “0” | “1” | 2 | “2” | 3 | “6” | “7” | 7 |
Low2K | 0 | 1 | “3” | 4 | “5” | 5 | 6 | “4” |
第11表
接下來執行步驟S1005,若被標記的數字在第一矩陣Up2K的第i項,則第i開關控制即是0,若被標記的數字在第二矩陣Low2K的第i項,則第i開關控制即是1,如第12表所示,可得到開關控制結果為[0,0,1,0,1,0,0,1]。
Up2K | “0” | “1” | 2 | “2” | 3 | “6” | “7” | 7 |
Low2K | 0 | 1 | “3” | 4 | “5” | 5 | 6 | “4” |
開關 | 0 | 0 | 1 | 0 | 1 | 0 | 0 | 1 |
第12表
如第12圖所示,當經過第1階段,依步驟S1001-S1005,可得到第1個階段的開關控制結果為[0,0,1,0,1,0,0,1],由於開關控制是0時代表平行輸出,開關控制是1時代表交叉輸出,因此原數列經由第1個階段的開關會被分為新的兩數列[0,2,6,5,10,12,14,9]及[1,3,4,8,7,11,13,15]。在第2階段,對此兩數列進行取商運算,此時N=8,K=2。先計算第一數列[0,2,6,5,10,12,14,9],執行步驟S1001,擷取數列中的奇數組以得到上位序列:[0,6,10,14],及擷取數列中的偶數組以得到下位序列:[2,5,12,9]。執行步驟S1002,進行除2
2
的取商運算,得到第一矩陣Up2K=[0,1,2,3]以及第二矩陣Low2K=[0,1,3,2],顯示如第13表:
Up2K | 0 | 1 | 2 | 3 |
Low2K | 0 | 1 | 3 | 2 |
第13表
接下來執行步驟S1003,將0做標記,如第14表所示,0位在第一矩陣Up2K的第0個位置及第二矩陣Low2K的第0個位置,但第一矩陣Up2K比第二矩陣Low2K具有較高的優先次序,因此將0標記在第一矩陣Up2K的第0個位置:
Up2K | “0” | 1 | 2 | 3 |
Low2K | 0 | 1 | 3 | 2 |
第14表
接著標記1,如第3表所示,1位在第一矩陣Up2K的第1個位置及第二矩陣Low2K的第1個位置,但第一矩陣Up2K比第二矩陣Low2K具有較高的優先次序,因此將1標記在第一矩陣Up2K的第1個位置:
Up2K | “0” | “1” | 2 | 3 |
Low2K | 0 | 1 | 3 | 2 |
第15表
接著標記2,如第16表所示,2位在第一矩陣Up2K的第2個位置及第二矩陣Low2K的第3個位置,但第一矩陣Up2K比第二矩陣Low2K具有較高的優先次序,因此將2標記在第一矩陣Up2K的第2個位置:
Up2K | “0” | “1” | “2” | 3 |
Low2K | 0 | 1 | 3 | 2 |
第16表
接著標記3,如第17表所示,3位在第一矩陣Up2K的第3個位置及第二矩陣Low2K的第2個位置,但第一矩陣Up2K比第二矩陣Low2K具有較高的優先次序,因此將3標記在第一矩陣Up2K的第3個位置,此時完成標記數字3的位置,完成所有標記(N/2-1),即可執行步驟S1005:
Up2K | “0” | “1” | “2” | “3” |
Low2K | 0 | 1 | 3 | 2 |
第17表
接下來執行步驟S1005,若被標記的數字在第一矩陣Up2K的第i項,則第i開關控制即是0,若被標記的數字在第二矩陣Low2K的第i項,則第i開關控制即是1,如第18表所示,可得到開關控制結果為[0,0,0,0]。
Up2K | “0” | “1” | “2” | “3” |
Low2K | 0 | 1 | 3 | 2 |
開關 | 0 | 0 | 0 | 0 |
第18表
接下來計算第2階段的第二數列[1,3,4,8,7,11,13,15],執行步驟S1001,擷取數列中的奇數組以得到上位序列:[1,4,7,13],及擷取數列中的偶數組以得到下位序列:[3,8,11,15]。執行步驟S1002,進行除2
2
的取商運算,得到第一矩陣Up2K=[0,1,1,3]以及第二矩陣Low2K=[0,2,2,3],顯示如第19表:
Up2K | 0 | 1 | 1 | 3 |
Low2K | 0 | 2 | 2 | 3 |
第19表
接下來執行步驟S1003,將0做標記,如第20表所示,0位在第一矩陣Up2K的第0個位置及第二矩陣Low2K的第0個位置,但第一矩陣Up2K比第二矩陣Low2K具有較高的優先次序,因此將0標記在第一矩陣Up2K的第0個位置:
Up2K | “0” | 1 | 1 | 3 |
Low2K | 0 | 2 | 2 | 3 |
第20表
接著標記1,如第21表所示,1位在第一矩陣Up2K的第1個位置及第一矩陣Up2K的第2個位置,但第一矩陣Up2K的第1個位置在第一矩陣Up2K的第2個位置前面,因此將1標記在第一矩陣Up2K的第1個位置:
Up2K | “0” | “1” | 1 | 3 |
Low2K | 0 | 2 | 2 | 3 |
第21表
接著標記2,如第22表所示,2位在第二矩陣Low2K的第1個位置及第二矩陣Low2K的第2個位置,但第二矩陣Low2K的第1位置在第二矩陣Low2K的第2個位置前面,因此將2標記在第二矩陣Low2K的第1個位置,但此時因為第一矩陣Up2K第1個位置已被標記,發生搜尋衝突,得執行步驟S1004:
Up2K | “0” | “1” | 1 | 3 |
Low2K | 0 | “2” | 2 | 3 |
第22表
接下來執行步驟S1004,保留標記2在第二矩陣Low2K的第1個位置,清除第一矩陣Up2K的第1個位置,並儲存衝突數字=1,重新由第一矩陣Up2K至第二矩陣Low2K的順序找出衝突數字=1的新位置,即第一矩陣Up2K的第2個位置,如第23表所示,執行標記動作:
Up2K | “0” | 1 | “1” | 3 |
Low2K | 0 | “2” | 2 | 3 |
第23表
接下來執行步驟S1003,接著標記3,如第24表所示,3位在第一矩陣Up2K的第3個位置及第二矩陣Low2K的第3個位置,但第一矩陣Up2K比第二矩陣Low2K具有較高的優先次序,因此將3標記在第一矩陣Up2K的第3個位置,此時完成標記數字3的位置,完成所有標記(N/2-1),即可執行步驟S1005:
Up2K | “0” | 1 | “1” | “3” |
Low2K | 0 | “2” | 2 | 3 |
第24表
接下來執行步驟S1005,若被標記的數字在第一矩陣Up2K的第i項,則第i開關控制即是0,若被標記的數字在第二矩陣Low2K的第i項,則第i開關控制即是1,如第25表所示,可得到開關控制結果為[0,1,0,0]。
Up2K | “0” | 1 | “1” | “3” |
Low2K | 0 | “2” | 2 | 3 |
開關 | 0 | 1 | 0 | 0 |
第25表
在第2階段,經由計算第一數列[0,2,6,5,10,12,14,9]得到開關控制結果如第18表,經由計算第二數列[1,3,4,8,7,11,13,15]得到開關控制結果如第25表,可以得到K=2階段的所有開關控制結果[0,0,0,0,0,1,0,0],如第12圖所示。
如第12圖所示,經過第2階段,原數列經過第1個階段以及第2個階段開關,被分為新的四個數列[0,6,10,14]、[2,5,12,9]、[1,8,7,13]、[3,4,11,15]。在第3階段,對此四數列進行取商運算,此時N=4,K=3,計算此四個數列。先計算第一數列[0,6,10,14],執行步驟S1001,擷取數列中的奇數組以得到上位序列:[0,10],及擷取數列中的偶數組以得到下位序列:[6,14]。執行步驟S1002,進行除2
3
的取商運算,得到第一矩陣Up2K=[0,1]以及第二矩陣Low2K=[0,1],顯示如第26表:
第26表
接下來執行步驟S1003,將0做標記,如第27表所示,0位在第一矩陣Up2K的第0個位置及第二矩陣Low2K的第0個位置,但第一矩陣Up2K比第二矩陣Low2K具有較高的優先次序,因此將0標記在第一矩陣Up2K的第0個位置:
第27表
接著標記1,如第28表所示,1位在第一矩陣Up2K的第1個位置及第二矩陣Low2K的第1個位置,但第一矩陣Up2K比第二矩陣Low2K具有較高的優先次序,因此將1標記在第一矩陣Up2K的第1個位置,此時完成標記數字1的位置,完成所有標記(N/2-1),即可執行步驟S1005:
第27表
接下來執行步驟S1005,若被標記的數字在第一矩陣Up2K的第i項,則第i開關控制即是0,若被標記的數字在第二矩陣Low2K的第i項,則第i開關控制即是1,如第28表所示,可得到開關控制結果為[0,0]。
Up2K | “0” | “1” |
Low2K | 0 | 1 |
開關 | 0 | 0 |
第28表
接下來計算第二數列[2,5,12,9],執行步驟S1001,擷取數列中的奇數組以得到上位序列:[2,12],及擷取數列中的偶數組以得到下位序列:[5,9]。執行步驟S1002,進行除2
3
的取商運算,得到第一矩陣Up2K=[0,1]以及第二矩陣Low2K=[0,1],顯示如第29表:
第29表
接下來執行步驟S1003,將0做標記,如第30表所示,0位在第一矩陣Up2K的第0個位置及第二矩陣Low2K的第0個位置,但第一矩陣Up2K比第二矩陣Low2K具有較高的優先次序,因此將0標記在第一矩陣Up2K的第0個位置:
第30表
接著標記1,如第31表所示,1位在第一矩陣Up2K的第1個位置及第二矩陣Low2K的第1個位置,但第一矩陣Up2K比第二矩陣Low2K具有較高的優先次序,因此將1標記在第一矩陣Up2K的第1個位置,此時完成標記數字1的位置,完成所有標記(N/2-1),即可執行步驟S1005:
第31表
接下來執行步驟S1005,若被標記的數字在第一矩陣Up2K的第i項,則第i開關控制即是0,若被標記的數字在第二矩陣Low2K的第i項,則第i開關控制即是1,如第32表所示,可得到開關控制結果為[0,0]。
Up2K | “0” | “1” |
Low2K | 0 | 1 |
開關 | 0 | 0 |
第32表
接下來計算第三數列[1,8,7,13],執行步驟S1001,擷取數列中的奇數組以得到上位序列:[1,7],及擷取數列中的偶數組以得到下位序列:[8,13]。執行步驟S1002,進行除2
3
的取商運算,得到第一矩陣Up2K=[0,0]以及第二矩陣Low2K=[1,1],顯示如第33表:
第33表
接下來執行步驟S1003,將0做標記,如第34表所示,0位在第一矩陣Up2K的第0個位置及第二矩陣Low2K的第0個位置,但第一矩陣Up2K比第二矩陣Low2K具有較高的優先次序,因此將0標記在第一矩陣Up2K的第0個位置:
第34表
接著標記1,如第35表所示,1位在第二矩陣Low2K的第0個位置及第二矩陣Low2K的第1個位置,但第二矩陣Low2K的第0位置在第二矩陣Low2K的第1個位置前面,因此將1標記在第一矩陣Low2K的第0個位置,但此時因為第一矩陣Up2K第0個位置已被標記,發生搜尋衝突,得執行步驟S1004:
第35表
接下來執行步驟S1004,保留標記1在第二矩陣Low2K的第0個位置,清除第一矩陣Up2K第0個位置,並儲存衝突數字=0,重新由第一矩陣Up2K至第二矩陣Low2K的順序找出衝突數字=0的新位置,即第一矩陣Up2K的第1個位置,如第36表所示,此時完成標記數字0的位置,完成所有標記(N/2-1),即可執行步驟S1005:
第36表
接下來執行步驟S1005,若被標記的數字在第一矩陣Up2K的第i項,則第i開關控制即是0,若被標記的數字在第二矩陣Low2K的第i項,則第i開關控制即是1,如第37表所示,可得到開關控制結果為[1,0]。
Up2K | 0 | “0” |
Low2K | “1” | 1 |
開關 | 1 | 0 |
第37表
接下來計算第四數列[3,4,11,15],執行步驟S1001,擷取數列中的奇數組以得到上位序列:[3,11],及擷取數列中的偶數組以得到下位序列:[4,15]。執行步驟S1002,進行除2
3
的取商運算,得到第一矩陣Up2K=[0,1]以及第二矩陣Low2K=[0,1],顯示如第38表:
第38表
接下來執行步驟S1003,將0做標記,如第39表所示,0位在第一矩陣Up2K的第0個位置及第二矩陣Low2K的第0個位置,但第一矩陣Up2K比第二矩陣Low2K具有較高的優先次序,因此將0標記在第一矩陣Up2K的第0個位置:
第39表
接著標記1,如第40表所示,1位在第一矩陣Up2K的第1個位置及第二矩陣Low2K的第1個位置,但第一矩陣Up2K比第二矩陣Low2K具有較高的優先次序,因此將1標記在第一矩陣Up2K的第1個位置,此時完成標記數字1的位置,完成所有標記(N/2-1),即可執行步驟S1005:
第40表
接下來執行步驟S1005,若被標記的數字在第一矩陣Up2K的第i項,則第i開關控制即是0,若被標記的數字在第二矩陣Low2K的第i項,則第i開關控制即是1,如第41表所示,可得到開關控制結果為[0,0]。
Up2K | “0” | “1” |
Low2K | 0 | 1 |
開關 | 0 | 0 |
第41表
在第3階段,經由計算四個數列[0,6,10,14]、[2,5,12,9]、[1,8,7,13]、[3,4,11,15]得到開關控制結果如第28表、第32表、第37表及第41表,結合此四組開關控制結果,即可得到如第12圖中所示之第3階段的所有開關控制結果[0,0,0,0,1,0,0,0],其即為第一區塊801使用CRPT控制演算法的開關控制結果。
第13圖為汴尼茲網路(Benes network)第二區塊802使用位元控制演算法實施例的流程圖。其中,第二區塊802含有P個階段,P=log2
N,第二區塊802中每一個階段包含以下步驟:
步驟S1301: 將輸入的數列轉為兩層數列,數列中的奇數組成為上位序列(Upper sequence);
步驟S1302: 將上位序列(Upper sequence)轉為二進位存入第一矩陣UpBin;
步驟S1303: 將UpBin內的值與2^(log2
N-P)的二進位值做AND運算,若結果為0則開關不做切換,否則開關需做切換。運算結果矩陣為第P個階段的開關控制結果。
在第二區塊802的第1個階段,P=1,依照所述步驟S1301-S1303,可得到第1個階段的開關控制結果。依序將P從1至log2
N,依照所述步驟S1301-S1303,可以得到第二區塊802的所有開關控制結果。
如第14圖所示,延續第12圖的實施例數列,第二區塊802中每一個階段使用位元控制演算法進行運算。實施例的汴尼茲網路(Benes network)之第二區塊802的輸入數列為[0,10,6,14,2,12,5,9,8,7,1,13,3,11,4,15]。在第1個階段,P=1,N=16,依照所述步驟S1301,將輸入的數列轉為兩層數列,數列中的奇數組成為上位序列:[0,6,2,5,8,1,3,4]。執行步驟S1302,將上位序列(Upper sequence)轉為二進位存入第一矩陣UpBin,如第42表的第二列所示。接著執行步驟S1303,UpBin內的值與2^(log
2
N-P)的二進位做AND運算,此時N=16,P=1,即和2
3
做AND運算,以產生第42表的第三列的運算結果,若結果為0000,則開關不做切換,表示為0,否則開關需做切換,表示為1,如第42表的第四列所示。
Up2K | 0 | 6 | 2 | 5 | 8 | 1 | 3 | 4 |
UpBin | 0000 | 0110 | 0010 | 0101 | 1000 | 0001 | 0011 | 0100 |
運算結果 | 0000 | 0000 | 0000 | 0000 | 1000 | 0000 | 0000 | 0000 |
開關 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 |
第42表
第二區塊802的輸入數列經由第1個階段開關,得到數列[0,6,10,14,2,5,12,9,7,1,8,13,3,4,11,15]為第2個階段的輸入。在第2個階段,P=2,N=16,依照所述步驟S1301,將輸入的數列轉為兩層數列,數列中的奇數組成為上位序列:[0,10,2,12,7,8,3,11]。執行步驟S1302,將上位序列(Upper sequence)轉為二進位存入第一矩陣UpBin,如第43表的第二列所示。接著執行步驟S1303,UpBin內的值與2^(log
2
N-P)的二進位做AND運算,此時N=16,P=2,即和2
2
做AND運算,以產生第43表的第三列的運算結果,若結果為0000,則開關不做切換,表示為0,否則開關需做切換,表示為1,如第43表的第四列所示。
Up2K | 0 | 10 | 2 | 12 | 7 | 8 | 3 | 11 |
UpBin | 0000 | 1010 | 0010 | 1100 | 0111 | 1000 | 0011 | 1011 |
運算結果 | 0000 | 0000 | 0000 | 0100 | 0100 | 0000 | 0000 | 0000 |
開關 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 0 |
第43表
第二區塊802的輸入數列經由第1個階段開關以及第2個階段開關,得到數列[0,2,6,5,10,9,14,12,1,3,7,4,8,11,13,15]為第3個階段的輸入。在第3個階段,P=3,N=16,依照所述步驟S1301,將輸入的數列轉為兩層數列,數列中的奇數組成為上位序列:[0,6,10,14,1,7,8,13]。執行步驟S1302,將上位序列(Upper sequence)轉為二進位存入第一矩陣UpBin,如第44表的第二列所示。接著執行步驟S1303,UpBin內的值與2^(log
2
N-P)的二進位做AND運算,此時N=16,P=3,即和2
1
做AND運算,以產生第44表的第三列的運算結果,若結果為0000,則開關不做切換,表示為0,否則開關需做切換,表示為1,如第44表的第四列所示。
Up2K | 0 | 6 | 10 | 14 | 1 | 7 | 8 | 13 |
UpBin | 0000 | 0110 | 1010 | 1110 | 0001 | 0111 | 1000 | 1101 |
運算結果 | 0000 | 0010 | 0010 | 0010 | 0000 | 0010 | 0000 | 0000 |
開關 | 0 | 1 | 1 | 1 | 0 | 1 | 0 | 0 |
第44表
第二區塊802的輸入數列經由第1個階段開關,第2個階段開關以及第3個階段開關,得到數列[0,1,2,3,5,4,6,7,9,8,10,11,12,13,14,15]為第4個階段的輸入。在第4個階段,P=4,N=16,依照所述步驟S1301,將輸入的數列轉為兩層數列,數列中的奇數組成為上位序列:[0,2,5,6,9,10,12,14]。執行步驟S1302,將上位序列(Upper sequence)轉為二進位存入第一矩陣UpBin,如第45表的第二列所示。接著執行步驟S1303,UpBin內的值與2^(log
2
N-P)的二進位做AND運算,此時N=16,P=4,即和2
0
做AND運算,以產生第45表的第三列的運算結果,若結果為0000,則開關不做切換,表示為0,否則開關需做切換,表示為1,如第45表的第四列所示。
Up2K | 0 | 2 | 5 | 6 | 9 | 10 | 12 | 14 |
UpBin | 0000 | 0010 | 0101 | 0110 | 1001 | 1010 | 1100 | 1110 |
運算結果 | 0000 | 0000 | 0001 | 0000 | 0001 | 0000 | 0000 | 0000 |
開關 | 0 | 0 | 1 | 0 | 1 | 0 | 0 | 0 |
第45表
由第42表、第43表、第44表、第45表可得到4個階段的開關控制結果。如第14圖所示,第二區塊802中的開關控制結果。因此,結合完整殘餘分樹控制(CRTC Control)演算法以及位元控制(bit control)演算法可得汴尼茲網路(Benes network)的所有開關控制結果。
本實施例使用完整殘餘分樹控制(CRPT Control)演算法以及位元控制(bit control)演算法,可以快速運算出汴尼茲網路(Benes network)中的每一個閘門(gate)開關控制,以達成動態調整周邊輸入輸出腳位101-10N以及數個通用型輸入輸出腳位111-11N的連結控制。使用本發明實施例,甚至可以達成在不同時間提供變換不同腳位連接的功能。
本實施例提供一種積體電路以及動態腳位控制方法。網路控制電路耦接於連結網路,用以動態控制周邊輸入輸出腳位經由連結網路連結至通用型輸入輸出腳位。周邊輸入輸出腳位可以是積體電路的功能腳位。連結網路可採用汴尼茲網路(Benes network),以達到每個周邊輸入輸出腳位到通用型輸入輸出腳位之間通過的閘門(gate)數量是相同的,因而不會有選擇不同路徑而造成有不同閘門延遲(gate delay)的問題。本實施例將腳位對應關係儲存至腳位控制暫存器,修改設定後,若要參考目前腳位,可直接讀出此腳位控制暫存器設定即可。本實施例可動態設定或調整腳位連結,因而可以解決電路板上部分積體電路(IC)因固定在某些位置造成與主要控制積體電路(control IC)之間不易拉線的問題,使拉線更容易也減少因佈線所造成的電流干擾問題。當製作不同腳位數量與封裝的積體電路(IC),如周邊輸入輸出腳位遠多於通用型輸入輸出腳位,使用本實施例的動態腳位控制方法,將可以有效使用全部的周邊輸入輸出腳位。
以上所述僅為本發明之較佳實施例,凡依本發明申請專利範圍所做之均等變化與修飾,皆應屬本發明之涵蓋範圍。