專利名稱:可編程邏輯設(shè)備上的錯誤檢測的制作方法
對相關(guān)申請的引用本申請要求獲得2001年10月11日提交的美國臨時專利申請60/328668號的權(quán)利,這里通過引用將該臨時申請全部包括進來。
背景技術(shù):
本發(fā)明涉及可編程邏輯設(shè)備。更具體地說,本發(fā)明涉及提供可編程邏輯設(shè)備上的錯誤檢測。
可編程邏輯設(shè)備是一種通用集成電路,可以對這種電路進行編程以執(zhí)行多種邏輯任務(wù)。眾所周知的可編程邏輯設(shè)備的例子包括可編程邏輯器件(PLDs)和現(xiàn)場可編程門陣列(FPGAs)。在可編程邏輯設(shè)備上提供了存儲器模塊,可用來儲存和輸出數(shù)據(jù),或是執(zhí)行用戶所需的各種功能。
數(shù)據(jù)可以被儲存在存儲器模塊中作為可編程邏輯設(shè)備配置數(shù)據(jù)。當(dāng)數(shù)據(jù)被寫入存儲器模塊中或是在數(shù)據(jù)已經(jīng)被儲存在存儲器模塊中時,可編程邏輯設(shè)備配置數(shù)據(jù)的表示中可能會出現(xiàn)錯誤。這種錯誤包括硬錯誤和軟錯誤。硬錯誤是由可編程邏輯設(shè)備中的缺陷或是由可編程邏輯設(shè)備受到的物理損傷引起的。軟錯誤則是在可編程邏輯設(shè)備工作期間,如有一個阿爾法粒子或是宇宙射線擊中了可編程邏輯設(shè)備的硅,造成電子-空穴對結(jié)構(gòu)改變從而改變了存儲單元的內(nèi)容時出現(xiàn)的。由于可編程邏輯設(shè)備中含有大量的小容量存儲節(jié)點,因此這些設(shè)備特別容易受到軟錯誤的影響。一個軟錯誤會直接影響可編程邏輯設(shè)備的邏輯功能,從而造成邏輯故障。目前,還沒有可行的方法可用于檢測可編程邏輯設(shè)備中的這類錯誤。
綜上所述,我們迫切需要提供用于檢測可編程邏輯設(shè)備中的錯誤的系統(tǒng)和方法。
發(fā)明內(nèi)容
因此本發(fā)明的一個目標是要提供用于檢測可編程邏輯設(shè)備中的錯誤的系統(tǒng)和方法。
根據(jù)本發(fā)明,提供了錯誤檢測電路,它能檢測可編程邏輯設(shè)備配置數(shù)據(jù)中的錯誤。在將數(shù)據(jù)寫入可編程邏輯設(shè)備上的存儲器之前或是當(dāng)數(shù)據(jù)正在被寫入可編程邏輯設(shè)備上的存儲器時,可以通過一個控制表達式去除數(shù)據(jù)并取余數(shù)來算得一個校驗和。該計算可以在軟件中實現(xiàn)或是借助于錯誤檢測電路實現(xiàn)??刂票磉_式可以是任意合適的數(shù)據(jù)表示法,包括多項式,比如32位循環(huán)冗余校驗(CRC-32)、電器和電子工程師協(xié)會(IEEE)802標準。該校驗和,也被稱為期望值,可以被儲存在可編程邏輯設(shè)備上任意合適的位置中(例如,在一個專用寄存器中),并且可以在錯誤檢測過程中被取出。
用戶可以初始化一個標志—比如寄存器中的一個專用比特—來表示錯誤檢測的開始。在數(shù)據(jù)被寫入存儲器之后,該標志可以被設(shè)置,并通過一個有限狀態(tài)機來激活錯誤檢測,該有限狀態(tài)機控制將可編程邏輯設(shè)備配置數(shù)據(jù)載入錯誤檢測電路。當(dāng)可編程邏輯設(shè)備配置數(shù)據(jù)被載入錯誤檢測電路中時,錯誤檢測電路開始使用與計算期望值時所用的控制表達式相同或等價的表達式、結(jié)合載入的數(shù)據(jù)計算校驗和。當(dāng)所有的可編程邏輯設(shè)備配置數(shù)據(jù)被載入以后,有限狀態(tài)機控制將期望值載入錯誤檢測電路。
在本發(fā)明的一個實施例中,計算出了可編程邏輯設(shè)備配置數(shù)據(jù)的校驗和,并將該校驗和與期望值進行比較。如果校驗和與期望值滿足某些預(yù)定的關(guān)系(比如說,校驗和與期望值相等,校驗和與期望值相差一個預(yù)定的偏差量或是倍數(shù)),那么就不會檢測到錯誤。
在本發(fā)明的另一個實施例中,可編程邏輯設(shè)備配置數(shù)據(jù)首先被載入一個異或(XOR)樹。在可編程邏輯設(shè)備配置數(shù)據(jù)被載入之后,接著將期望值載入XOR樹。XOR樹根據(jù)控制表達式對載入的數(shù)據(jù)與期望值計算一個校驗和。如果校驗和等于某個預(yù)定值(比如說,校驗和是0,校驗和是一個預(yù)定的偏差量),那么就不會檢測到錯誤。錯誤檢測電路產(chǎn)生的輸出被送到可編程邏輯設(shè)備的一個輸出管腳上,該管腳可由用戶邏輯進行查看。
結(jié)合附圖考慮下面的詳細說明時,本發(fā)明的上述及其他目標以及優(yōu)點會更加明顯,附圖中相同的附圖標記指代類似的部件,其中圖1示出了根據(jù)本發(fā)明一個實施例的帶有錯誤檢測電路的可編程邏輯設(shè)備的結(jié)構(gòu)框圖;圖2示出了根據(jù)本發(fā)明另一個實施例的帶有錯誤檢測電路的可編程邏輯設(shè)備的結(jié)構(gòu)框圖;圖3示出了圖1中根據(jù)本發(fā)明一個實施例的帶有錯誤檢測電路的可編程邏輯設(shè)備的更詳細的原理框圖;圖4示出了根據(jù)本發(fā)明一個實施例的向一個多輸入XOR樹中輸入數(shù)據(jù)的示意圖;圖5示出了根據(jù)本發(fā)明一個實施例的可以被實現(xiàn)在錯誤檢測電路中的一個示例性單輸入XOR樹的示意圖;圖6示出了根據(jù)本發(fā)明一個實施例的可以被實現(xiàn)在錯誤檢測電路中的一個示例性多輸入XOR樹的示意圖;圖7示出了根據(jù)本發(fā)明一個實施例的展示了可編程邏輯設(shè)備配置數(shù)據(jù)是如何存儲的結(jié)構(gòu)框圖;圖8示出了根據(jù)本發(fā)明一個實施例的展示了可編程邏輯設(shè)備配置數(shù)據(jù)是如何存儲的示意圖;圖9-15示出了根據(jù)本發(fā)明一個實施例的向錯誤檢測電路載入可編程邏輯配置數(shù)據(jù)中所涉及的示例性步驟的流程圖;圖16示出了根據(jù)本發(fā)明一個實施例的在一個可編程邏輯設(shè)備上實現(xiàn)錯誤檢測中所涉及的示例性步驟的流程圖;以及圖17示出了根據(jù)本發(fā)明一個實施例的一個使用了電路的示例性系統(tǒng)的簡化框圖。
具體實施例方式
本發(fā)明提供了用于檢測可編程邏輯設(shè)備中錯誤的系統(tǒng)和方法??删幊踢壿嬙O(shè)備包括例如可編程邏輯器件、現(xiàn)場可編程門陣列,或是任何其他合適的可編程裝置。錯誤則包括軟錯誤、硬錯誤,或是兩者都有。錯誤可能歸因于電壓脈沖、系統(tǒng)故障、包括線上傳輸錯誤和硬件故障在內(nèi)的其他外部影響,或是任何其他會影響可編程邏輯設(shè)備中數(shù)據(jù)表示的事件。
一個可編程邏輯設(shè)備保存有一些數(shù)據(jù)用來對可編程邏輯設(shè)備進行編程,以實現(xiàn)一種或多種應(yīng)用。這種數(shù)據(jù)在這里被稱為可編程邏輯設(shè)備配置數(shù)據(jù)??删幊踢壿嬙O(shè)備配置數(shù)據(jù)被表示為一組二進制數(shù)(也就是,二進制“1”和“0”),并且可以被儲存在任何合適的存儲器中,比如一個配置隨機存取存儲器(CRAM)。另外,可編程邏輯設(shè)備配置數(shù)據(jù)也可以被儲存在任何其他合適的易失性或非易失性存儲器中,包括例如靜態(tài)隨機存取存儲器(SRAM)、動態(tài)隨機存取存儲器(DRAM)、Rambus DRAM(RDRAM)、同步DRAM(SDRAM)、雙倍數(shù)據(jù)率同步DRAM(DDR SDRAM)、可擦除可編程只讀存儲器(EPROM)、FLASH存儲器,以及磁性RAM(MRAM)。
儲存在存儲器中的可編程邏輯設(shè)備配置數(shù)據(jù)可能與一個或多個應(yīng)用相關(guān)聯(lián)。舉例來說,一些可編程邏輯設(shè)備配置數(shù)據(jù)可能被用來規(guī)定可編程邏輯設(shè)備中的可編程部件應(yīng)該被如何設(shè)置(也就是實現(xiàn)某具體應(yīng)用)??删幊踢壿嬙O(shè)備配置數(shù)據(jù)中的一些二進制數(shù)位可以被用來表示數(shù)據(jù)(例如,一個控制表達式,一個期望值)??删幊踢壿嬙O(shè)備配置數(shù)據(jù)的其他二進制數(shù)位可以被用作可編程邏輯設(shè)備所實現(xiàn)的一種應(yīng)用的實時操作的一部分(比如說,如果應(yīng)用指定了存儲器的讀寫)。可編程邏輯設(shè)備配置數(shù)據(jù)可能被改變,使得某些二進制數(shù)位被錯誤地表示出來(比如說,原來是二進制“1”的一個二進制數(shù)位現(xiàn)在成了二進制“0”,反之亦然)。本發(fā)明提供了一種方法來檢測這種錯誤。
這里主要根據(jù)循環(huán)冗余校驗(CRC)校驗和分析以檢測可編程邏輯設(shè)備中錯誤的方法來討論本發(fā)明,使說明具體和清晰,但是也可以使用任何其他合適的方法來檢測可編程邏輯設(shè)備中的錯誤。在CRC校驗和分析中,計算出一個校驗和。該校驗和可能是,例如從涉及數(shù)據(jù)與一個控制表達式的除法操作中得出的一個余數(shù)。另外,還可以利用任何其他合適的操作或是操作組合計算出校驗和??刂票磉_式可以是任何合適的數(shù)據(jù)表示,該數(shù)據(jù)表示是被用來為可編程邏輯設(shè)備配置數(shù)據(jù)計算期望值的。
期望值是從某種操作中得到的校驗和,在這種操作中,待寫入的數(shù)據(jù)或是正在被寫入可編程邏輯設(shè)備的數(shù)據(jù)以及控制表達式都是操作對象。這個期望值可以是用戶定義的或是任何其他合適的實體。期望值可以被儲存在可編程邏輯設(shè)備的一個寄存器或是存儲器中,或是儲存在任何其他合適的位置。
在一個實施例中,根據(jù)可編程邏輯設(shè)備配置數(shù)據(jù)計算出一個校驗和,并將其與期望值對比。如果校驗和與期望值滿足某種預(yù)定的關(guān)系(比如說,校驗和與期望值相等,校驗和與期望值相差一個預(yù)定的偏差量或是倍數(shù)),那么就不會檢測到錯誤。
在本發(fā)明的另一個實施例中,可編程邏輯設(shè)備配置數(shù)據(jù)首先被載入一個異或(XOR)樹。在可編程邏輯設(shè)備配置數(shù)據(jù)被載入之后,接著將期望值載入XOR樹。XOR樹根據(jù)控制表達式對載入的數(shù)據(jù)與期望值計算一個校驗和。如果校驗和等于某個預(yù)定值(比如說,校驗和是0,校驗和是一個預(yù)定的偏差量),那么就不會檢測到錯誤。
錯誤檢測電路產(chǎn)生的輸出被送到可編程邏輯設(shè)備的一個輸出管腳上,該管腳可由用戶邏輯進行查看。如果檢測到了錯誤,那么可編程邏輯設(shè)備的用戶有機會重新載入全部的或部分可編程邏輯設(shè)備配置數(shù)據(jù),或是響應(yīng)于錯誤檢測來執(zhí)行任何其他合適的操作。
可以使用一個CRC模塊來執(zhí)行CRC校驗和分析。CRC模塊可以用任何合適的結(jié)構(gòu)來實現(xiàn)。舉例來說,在一個實施例中,CRC模塊可能是駐留在可編程邏輯設(shè)備上的硬線電路。在另一個實施例中,CRC模塊可能被編程到一個可編程邏輯設(shè)備中。在另一個實施例中,CRC模塊可能被實現(xiàn)為可編程邏輯設(shè)備外部的一個單獨裝置,在這種情況下,可以利用例如輸入/輸出(I/O)管腳將CRC模塊連接到可編程邏輯設(shè)備上。在另一個實施例中,CRC模塊可能被實現(xiàn)在軟件中,該軟件由一個微處理器(比如說在一臺計算機上)執(zhí)行。任何這種實施方式都可以依照本發(fā)明進行使用。為了簡潔而又不產(chǎn)生局限性,這里主要按照布線在可編程邏輯設(shè)備上的CRC模塊來說明本發(fā)明。
實現(xiàn)可編程邏輯設(shè)備上的錯誤檢測可能還需要額外的信號、寄存器以及控制邏輯,下面將結(jié)合附圖1-3對此進行詳細說明。例如,某個特定寄存器中的一個數(shù)據(jù)比特可能被標記來指示錯誤檢測的開始??赡苓€需要額外的信號來設(shè)置錯誤檢測電路,包括例如用來清除寄存器的信號、預(yù)置計數(shù)器的信號、使能及禁用各種控制信號的信號。可能還需要額外的寄存器,包括例如一個地址寄存器用來索引可編程邏輯設(shè)備配置數(shù)據(jù)中的一個幀,以及一個數(shù)據(jù)寄存器用來在數(shù)據(jù)被載入錯誤檢測電路之前臨時儲存索引幀。
在一種合適的方法中,可以使用一個有限狀態(tài)機(FSM)來處理CRC模塊與可編程邏輯設(shè)備之間的數(shù)據(jù)通信。更具體地說,F(xiàn)SM控制將CRAM中的數(shù)據(jù)載入并傳送給CRC模塊。另外,F(xiàn)SM也可以控制將CRAM中的數(shù)據(jù)載入并傳送給一個臨時數(shù)據(jù)寄存器,接著再從數(shù)據(jù)寄存器送入CRC模塊。CRC模塊中包括一個子模塊,用來對可編程邏輯設(shè)備數(shù)據(jù)計算校驗和,在某些例子中還要計算期望值。該子模塊可以是用來執(zhí)行校驗和分析的任意合適的電路,它使用例如一個標準多項式(比如說,CRC-32 IEEE 802標準)、數(shù)據(jù)和,或是任何其他合適的數(shù)據(jù)表示來進行校驗和分析。
計算得出的校驗和接著就被送到比較電路,在比較電路中將校驗和與期望值、或是任何合適的預(yù)定值進行比較。比較電路可以用一個比較器、一個OR門、一個XOR門或是任何合適的邏輯門或邏輯門的組合來實現(xiàn)。
圖1示出了一個示例性可編程邏輯設(shè)備100的結(jié)構(gòu)框圖,該設(shè)備具有一個期望值102、可編程邏輯設(shè)備配置數(shù)據(jù)104、一個有限狀態(tài)機(FSM)108以及一個CRC模塊116。期望值102可以被儲存在可編程邏輯設(shè)備100上的一個寄存器或是存儲器中??删幊踢壿嬙O(shè)備配置數(shù)據(jù)104可以被儲存在可編程邏輯設(shè)備100上任何合適的存儲器中,例如配置隨機存取存儲器(CRAM)。可編程邏輯設(shè)備配置數(shù)據(jù)104通過一條數(shù)據(jù)通路112向CRC模塊116發(fā)送數(shù)據(jù)。通路112可以是用于串行、并行或是以兩者組合方式傳輸數(shù)據(jù)的任何合適的通路。
FSM 108可以被用來控制CRC模塊116與可編程邏輯設(shè)備100之間的數(shù)據(jù)通信。FSM 108發(fā)現(xiàn)錯誤檢測啟動之后,會生成并通過通路106發(fā)送一個時鐘信號以及其他信號給可編程邏輯設(shè)備配置數(shù)據(jù)104,以便控制通過通路112向CRC模塊116載入數(shù)據(jù)104。FSM108可以通過通路114來控制CRC模塊116中的錯誤檢測分析。通路106、112和114可以是用于發(fā)送數(shù)據(jù)和各種信號如時鐘、預(yù)置信號或標志的任何合適的通路。
數(shù)據(jù)通路106、112和114可能是直接連接、可能包括中間電路,或是兩者都有。這種中間電路可能包括例如寄存器、流水線電路、多路復(fù)用器或是任何其他合適的電路,這些電路允許各種信號在適當(dāng)?shù)臅r刻被聲明/取消聲明、使能/禁用、或同時進行兩種操作,以便協(xié)調(diào)數(shù)據(jù)的載入與校驗和的計算。
圖2示出了一個示例性可編程邏輯設(shè)備200的結(jié)構(gòu)框圖,該設(shè)備在可編程邏輯設(shè)備配置數(shù)據(jù)104、FSM 108以及CRC模塊116之間的通路中帶有中間電路202。應(yīng)該明白,這里所示出的用來輔助組件之間通信的通路都可以含有任何合適的中間電路。
參照圖1,CRC模塊116包括校驗和計算電路118和比較電路122。校驗和計算電路118通過通路112接收可編程邏輯設(shè)備配置數(shù)據(jù)104。校驗和計算電路118對可編程邏輯設(shè)備配置數(shù)據(jù)計算一個校驗和,該校驗和可以被使用在CRC校驗和分析中??梢允褂萌魏魏线m的方法來對可編程邏輯設(shè)備配置數(shù)據(jù)104計算校驗和。舉例來說,可以用一個控制表達式來計算校驗和,該控制表達式可以用以下CRC-32 IEEE 802標準這樣的多項式來表示G(X)=X32+X26+X23+X22+X16+X12+X11+X10+X8+X7+X5+X4+X2+X1+1(1)在一個實施例中,可以利用控制表達式(1)對數(shù)據(jù)(比如說,可編程邏輯設(shè)備配置數(shù)據(jù)104)取模(mod)來算得一個校驗和,該校驗和是用數(shù)據(jù)除以控制表達式后得到的余數(shù)。在另一個實施例中,在對數(shù)據(jù)執(zhí)行取模操作前,先對數(shù)據(jù)進行乘法或移位操作。應(yīng)該明白,任何其他合適的控制表達式都可以依照本發(fā)明被用來生成校驗和。
當(dāng)可編程邏輯設(shè)備數(shù)據(jù)104被載入CRC模塊116后,期望值102也被載入CRC模塊116??梢詮娜魏魏线m的來源取得期望值102。在一個實施例中,可以在向可編程邏輯設(shè)備100中寫入數(shù)據(jù)的時候用軟件計算出期望值。在另一個實施例中,可以在向可編程邏輯設(shè)備100中寫入數(shù)據(jù)的時候用CRC模塊116計算出期望值。舉例來說,在數(shù)據(jù)被寫入可編程邏輯設(shè)備100的時候,該數(shù)據(jù)同時也被發(fā)送給CRC模塊116,在CRC模塊116中計算出期望值。最好用和在CRC模塊116中計算校驗和所用的相同的校驗和計算方法計算出期望值。
在本發(fā)明的一個實施例中,可編程邏輯設(shè)備配置數(shù)據(jù)104可以被送入校驗和計算電路118,以產(chǎn)生一個校驗和。計算得到的這個校驗和經(jīng)數(shù)據(jù)通路120被送入比較電路122。期望值102也被送到比較電路122。在比較電路122中,使用任意合適的邏輯門或是邏輯門組合(比如說,一個比較器,一個XOR門,一個減法器)來比較計算出的校驗和與期望值102。如果校驗和與期望值102滿足某種預(yù)定的關(guān)系(比如說,校驗和與期望值102相等,校驗和與期望值相差一個預(yù)定的偏差量或是倍數(shù)),那么比較電路122就會產(chǎn)生一個表示沒有檢測到錯誤的輸出(比如說,一個二進制“0”)。但是,如果校驗和與期望值102不滿足這種預(yù)定的關(guān)系(比如說,校驗和與期望值102不相等,校驗和與期望值102相差一個不同的偏差量),那么比較電路122就會產(chǎn)生一個不同的輸出(比如說,一個二進制“1”)來表示已經(jīng)檢測到了一個錯誤。比較電路122的輸出通過通路124被發(fā)送到CRC錯誤管腳126。CRC錯誤管腳126可以被用戶訪問,以查看可編程邏輯設(shè)備配置數(shù)據(jù)104中是否存在錯誤。
在本發(fā)明的另一個實施例中,可編程邏輯設(shè)備配置數(shù)據(jù)104和期望值102都被發(fā)送給校驗和計算電路118來計算一個校驗和。舉例來說,可編程邏輯設(shè)備配置數(shù)據(jù)被乘以或是移位若干個比特,比特數(shù)等于控制表達式的次數(shù)(比如說,對于CRC-32 IEEE 802標準來說,次數(shù)就是最高階單項式的指數(shù)32)。期望值102(用同樣的計算方法計算得到)可以被附加在可編程邏輯設(shè)備配置數(shù)據(jù)104的最后(也就是說,代表了期望值102的比特可以被附加在代表可編程邏輯設(shè)備配置數(shù)據(jù)104的比特之后)并通過校驗和計算電路118發(fā)送。
計算出來的校驗和接著通過數(shù)據(jù)通路120被送到比較電路122。在比較電路122中,可以使用例如一個邏輯門或是邏輯門組合(比如說,一個比較器,一個OR門,一個加法器,等等)來對計算出的校驗和進行邏輯操作。如果校驗和等于某個預(yù)定值(比如說,校驗和是0,校驗和是一個預(yù)定的偏差量),那么比較電路122就會產(chǎn)生一個表示沒有檢測到錯誤的輸出(比如說,一個二進制“0”)。但是,如果校驗和是預(yù)定值以外的其他值(比如說,校驗和不等于0,校驗和不同于預(yù)定的偏差量),那么比較電路122就會產(chǎn)生一個不同的輸出(比如說,一個二進制“1”)來表示檢測到了一個錯誤。比較電路122可以產(chǎn)生任意合適的輸出來表示是否檢測到了錯誤。這個輸出會通過通路124被送給CRC錯誤引腳126。
圖3示出了一個示例性可編程邏輯設(shè)備300的結(jié)構(gòu)框圖。CRC模塊320可能包括多路復(fù)用器322和332、一個XOR樹324、寄存器326、328、330和334,以及一個或多個邏輯門,如OR門336。可編程邏輯設(shè)備配置數(shù)據(jù)104和期望值102可以被輸入到多路復(fù)用器322中。多路復(fù)用器根據(jù)一個選擇信號的值選擇一個輸入送到它的輸出端,該選擇信號是由FSM 108監(jiān)控的。舉例來說,F(xiàn)SM 108可以設(shè)置選擇信號為第一二進制比特(比如說,一個二進制“0”),該信號指示多路復(fù)用器322選擇第一個輸入端發(fā)送給輸出端,該輸入端通過通路112接收可編程邏輯設(shè)備配置數(shù)據(jù)104。當(dāng)可編程邏輯設(shè)備配置數(shù)據(jù)104被發(fā)送到輸出端之后,F(xiàn)SM 108可以設(shè)置選擇信號為第二二進制比特(比如說,一個二進制“1”),該信號指示多路復(fù)用器322選擇第二個輸入端發(fā)送給輸出端,該輸入端通過通路110接收期望值102。多路復(fù)用器322的輸出被送往XOR樹324,在那里計算出校驗和。
在一個實施例中,XOR樹324可以利用一個控制表達式如表達式(1)中的CRC-32 IEEE 802標準來計算校驗和。盡管可以使用任何合適的控制表達式來計算期望值102,但最好用(與計算校驗和所用的)一樣的或等價的控制表達式。XOR樹324接收到可編程邏輯設(shè)備配置數(shù)據(jù)104和隨后的期望值102后,就會處理載入的數(shù)據(jù)。XOR樹324的輸出端連接到寄存器326上,寄存器中的數(shù)據(jù)可以在下一個周期中被發(fā)回XOR樹324進行進一步處理。寄存器326可以是鎖存器、觸發(fā)器(比如說,D觸發(fā)器,J-K觸發(fā)器),或是任何由時鐘機制控制的合適的存儲裝置。XOR樹324和寄存器326可以構(gòu)成校驗和計算電路118的一部分。
數(shù)據(jù)可以通過多路復(fù)用器322發(fā)送,并被串行、并行或以兩者相結(jié)合的方式載入XOR樹324。在一個實施例中,每個時鐘周期內(nèi)都會向XOR樹324載入一個數(shù)據(jù)比特并進行處理。在另一個實施例中,每個時鐘周期內(nèi)會向XOR樹324載入多個(比如說,2、8、16)數(shù)據(jù)比特并進行處理。
圖4示出了作為輸入402而被送入XOR樹324的數(shù)據(jù)序列??删幊踢壿嬙O(shè)備配置數(shù)據(jù)104可以被劃分為多個幀(比如說,M幀)406。數(shù)據(jù)104一次被載入一幀(比如說,幀1、幀2、...、幀M)。在各個幀406中,一次被載入多個比特(比如說,N比特)404。數(shù)據(jù)可以從最重要的比特到最次要的比特依次被載入。在每個時鐘周期里,各個比特404通過不同的數(shù)據(jù)通路(比如說,I1、I2、...、IN)402被送入XOR樹324。在數(shù)據(jù)104被載入之后,以相似的方式將期望值載入XOR樹324。如果總比特數(shù)(比如說,配置數(shù)據(jù)104和期望值102的總比特數(shù))不是輸入(N)402的數(shù)量的倍數(shù),那么就要向數(shù)據(jù)序列添加額外的比特(比如說,二進制的“1”或“0”)。這些額外的比特可以被添加到數(shù)據(jù)序列的頭部、數(shù)據(jù)序列的尾部,或是任何合適的位置。
XOR樹324和寄存器326可以用下列矩陣方程實現(xiàn)Q=A*q+B*IN(2)一個矩陣中包含了按一行或多行及一列或多列形式排列的數(shù)據(jù),其表示方法如下XRxC=(1,1)(1,2)...(1,C)(2,1)...............(R,1)..(R,C)---(3)]]>其中R表示行數(shù),C表示列數(shù)。
“A”是一個d×d的矩陣,它代表了寄存器326和控制表達式,其中d是控制表達式最高次單項式的階數(shù)。“q”是一個d×1的矩陣,它代表了當(dāng)前儲存在寄存器326中的來自于前一個時鐘周期的內(nèi)容?!癇”是一個d×1的矩陣,它代表了控制表達式中各個單項式的系數(shù)。“IN”是一個代表輸入比特402的常數(shù)?!癚”是一個d×1的矩陣,它代表XOR樹324在下一個周期中的輸出(比如說,用上一個時鐘周期儲存在寄存器326中的內(nèi)容去處理輸入比特402而得到的結(jié)果)。
根據(jù)矩陣方程(2),每個時鐘周期內(nèi)用于處理N個輸入比特的方程如下
1inputQ1=Aq+BI1(4)2inputsQ2=A2q+ABI1+BI2(5)3inputsQ3=A3q+A2BI1+ABI2+BI3(6)NinputsQN=ANq+AN-1BI1+...+ABIN-1+BIN(7)圖5示出了一個電路500的示例性實施例,該電路包括XOR樹324和寄存器326(比如說,校驗和計算電路118)。電路500每時鐘周期處理一個輸入比特(比如說,I1)。作為示例,控制表達式由下式表示G(X)=X5+X3+1 (8)因為表達式(8)中G(X)的階數(shù)是5,所以有5個寄存器326被用來儲存XOR樹324的輸出。電路500的輸出由方程4表示,該方程中的矩陣如下A=0000110000010000010100010---(9)]]>q=q1q2q3q4q5---(10)]]>B=10010---(11)]]>“A”是一個5×5的矩陣,它的前4列代表寄存器326,最后一列代表控制表達式(8)中單項式的系數(shù)?!皅”是一個5×1的矩陣,它代表了寄存器326中的內(nèi)容(比如說,q1、q2、q3、q4、q5分別代表寄存器510、520、530、540和550的內(nèi)容)?!癇”是一個5×1的矩陣,它代表了控制表達式(8)中單項式的系數(shù)。將表達式(9)、(10)、(11)代入方程(3),產(chǎn)生如下輸出
Q1=q5+I1q1q2q3+q5+I1q4---(12)]]>Q1是一個5×1的矩陣,它代表了寄存器326在下一個周期中的內(nèi)容,即q5+I1,q1,q2,q3+q5+I1和q4。Q1的輸出是二進制的(比如說,“0”或是“1”)并且可以用XOR門實現(xiàn)。
電路500包括XOR門502和504以及寄存器510、520、530、540和550,這些寄存器可以是寄存器326的一部分,它們受同一個時鐘的控制。寄存器510的輸入是XOR門502的輸出,而XOR門502的輸入是I1(來自多路復(fù)用器322的輸出)和寄存器550當(dāng)前的內(nèi)容。在下一個周期中,寄存器510的內(nèi)容是Q1(1,1)=q5+I1。寄存器520的輸入是寄存器510當(dāng)前的內(nèi)容,因此在下一個周期中,寄存器520的內(nèi)容是Q1(2,1)=q1。寄存器530的輸入是寄存器520當(dāng)前的內(nèi)容,因此在下一個周期中,寄存器530的內(nèi)容是Q1(3,1)=q2。寄存器540的輸入是XOR門504的輸出,而XOR門504的輸入則是I1以及寄存器530和550當(dāng)前的內(nèi)容。XOR門504可以用一個3輸入XOR門或是兩個2輸入XOR門來實現(xiàn),其中的兩個輸入通過一個第一XOR門發(fā)送,而第一XOR門的輸出以及第三個輸入通過一個第二XOR門發(fā)送。在下一個周期中,寄存器540的內(nèi)容是Q1(4,1)=q3+q5+I1。寄存器550的輸入是寄存器540的當(dāng)前內(nèi)容,因此在下一個周期中,寄存器550的內(nèi)容是Q1(5,1)=q4。盡管寄存器510、520、530、540和550的內(nèi)容未示出,但它們也被作為輸入發(fā)送給信號特征寄存器328。
圖6示出了電路600的另一個示例性實施例,其中包括XOR樹324和寄存器326。電路600使用相同的控制表達式(8),它在每個周期中處理三個輸入比特(比如說,I1、I2、I3)。將表達式(9)、(10)、(11)代入方程(5)得到下列輸出
Q3=q3+q5+I1+I3q4+I2q5+I1q1+q3+q5+I1+I3q2+q4+I2---(13)]]>電路600包括XOR門602、604、606、608和610,以及寄存器620、630、640、650和660,這些寄存器可以是寄存器326的一部分,受同一個時鐘的控制。寄存器620的輸入是XOR門602的輸出,而XOR門602的輸入是I1和I3(都來自多路復(fù)用器322的輸出)以及寄存器640和660的當(dāng)前內(nèi)容。在下一個周期中,寄存器620的內(nèi)容是Q3(1,1)=q3+q5+I1+I3。寄存器630的輸入是XOR門604的輸出,而XOR門604的輸入是I2(來自多路復(fù)用器322的輸出)以及寄存器650的當(dāng)前內(nèi)容。在下一個周期中,寄存器630的內(nèi)容是Q3(2,1)=q4+I2。寄存器640的輸入是XOR門606的輸出,而XOR門606的輸入是I1以及寄存器660的當(dāng)前內(nèi)容。在下一個周期中,寄存器640的內(nèi)容是Q3(3,1)=q5+I1。寄存器650的輸入是XOR門608的輸出,而XOR門608的輸入是I1、I3以及寄存器620、640和660的當(dāng)前內(nèi)容。在下一個周期中,寄存器650的內(nèi)容是Q3(4,1)=q1+q3+q5+I1+I3。寄存器660的輸入是XOR門610的輸出,而XOR門610的輸入是I2以及寄存器630和650的當(dāng)前內(nèi)容。在下一個周期中,寄存器660的內(nèi)容是Q3(5,1)=q2+q4+I2。XOR門602、608和610可以用任何合適的XOR門或XOR門的組合來實現(xiàn)。盡管寄存器620、630、640、650和660的內(nèi)容未示出,但它們也被作為輸入發(fā)送給信號特征寄存器328。
以上是在根據(jù)控制表達式(8)來實現(xiàn)校驗和計算的情況下對電路500和600進行說明的,這兩個電路在每個時鐘周期分別取入1比特和3比特作為輸入,這里僅僅是為了舉例的目的來說明這兩個電路的。然而,XOR樹324可以用任何合適的控制表達式(比如說,CRC-32 IEEE 802標準)來實現(xiàn),每個時鐘周期也可以有任意合適數(shù)量的輸入比特。
當(dāng)數(shù)據(jù)被作為輸入402送往XOR樹324時,寄存器326的內(nèi)容就被更新。當(dāng)可編程邏輯設(shè)備配置數(shù)據(jù)104和期望值102被處理以后,寄存器326的內(nèi)容就保存了所得到的校驗和。在一個實施例中,如果不存在錯誤,得到的校驗和就是0,如以下證明所示。
令變量G(X)、M(X)、Q(X)、EV以及μ(X)代表下列各式G(X)=CRC-32 IEEE 802標準;M(X)=可編程邏輯設(shè)備配置數(shù)據(jù)104;Q(X)=商=M(X)/G(X);EV=期望值=M(X)(mod)G(X);μV=作為輸入402發(fā)送的數(shù)據(jù)。(14)在對M(X)執(zhí)行校驗和計算以計算期望值的時候,得出下式X32M(X)≡EV(mod)G(X)(15)符號“≡”表示恒等,并且涉及與EV(mod)G(X)等價的一類余項(其中EV是該類中最小的成員)。M(X)如下定義X32M(X)≡Q(X)G(X)+EV(16)XOR樹324的輸入402可以被如下表示μ(X)=X32M(X)+EV (17)M(X)被乘以或是移位一個偏移量X32(也就是控制表達式G(X)的階數(shù)),同時將期望值添加到M(X)中。對方程(17)進行代數(shù)運算,我們得到以下結(jié)論1.兩邊同時乘以X32X32μ(X)=X32[X32M(X)+EV]2.用方程(16)替代X32M(X)X32μ(X)=X32[Q(X)G(X)+EV+EV]3.以恒等形式寫出X32μ(X)≡X32[EV+EV]≡2EV≡0(18)X32Q(X)G(X)項是((mod)G(X))的倍數(shù),因此在恒等式中不存在。取2EV的XOR在二進制中恒等于零(也就是說,2輸入XOR門在兩個輸入為相等值的情況下輸出為零)。
以下是一個簡化的例子,它演示了XOR樹324和寄存器326的一個實施例是如何工作的。假定要寫入可編程邏輯設(shè)備的數(shù)據(jù)中包含數(shù)據(jù)比特序列b110110001,該序列可以被表示為以下的多項式M(X)=X8+X7+X5+X4+1 (19)再假定控制表達式為數(shù)據(jù)比特序列b101001,它代表了控制表達式(8)。在將數(shù)據(jù)M(X)寫入可編程邏輯設(shè)備之前,要計算出期望值。期望值(EV)是用數(shù)據(jù)M(X)除以控制表達式G(X)所得到的余數(shù),計算中使用了與在XOR樹324中計算校驗和所用的相同方法。
EV=X5M(X)(mod)G(X)=X3+X2(20)(也就是,b10111)。因為XOR樹324按控制表達式的階數(shù)對可編程邏輯設(shè)備配置數(shù)據(jù)104進行相乘或移位,并將期望值102附到可編程邏輯配置數(shù)據(jù)104以計算校驗和,因此數(shù)據(jù)M(X)同樣被乘以或移位該階數(shù),以便計算出期望值102。
當(dāng)數(shù)據(jù)被作為可編程邏輯設(shè)備配置數(shù)據(jù)104寫入以后,可以置起一個標志來表示錯誤檢測的開始。以下示出了處理沒被改變過的可編程邏輯設(shè)備配置數(shù)據(jù)104的一個例子(也就是說,沒有錯誤)。
P(X)=M(X) (21)被寫入的該數(shù)據(jù)被送入XOR樹324,在后面將結(jié)合圖7-15對此進行詳細說明。當(dāng)寫入的數(shù)據(jù)被載入XOR樹324以后,期望值也如下被載入XOR樹324X5P(X)+EV=X13+X12+X10+X9+X5+X3+X2=b11011000101100 (22)用表達式(22)除以控制表達式G(X)所得的余數(shù)是0,這正是我們所期望的,因為沒有錯誤發(fā)生。
(X5P(X)+EV)(mod)G(X)=b0(23)如果XOR樹324每時鐘周期接收一個輸入(比如說,I1),那么XOR樹324將被實現(xiàn)為圖5中所示的形式(對于控制表達式(8))。表1示出了在電路500計算校驗和的時候,寄存器510、520、530、540和550的內(nèi)容。
表1電路500的輸出為0。
如果XOR樹324每時鐘周期接收3個輸入(比如說,I1、I2、I3),那么XOR樹324將被實現(xiàn)為圖6中所示的形式(對于控制表達式(8))。因為發(fā)給XOR樹324的總比特數(shù)不是每時鐘周期發(fā)送給XOR樹324的輸入比特數(shù)(比如說,3),所以要在數(shù)據(jù)流的頭部填充額外的比特(比如說,二進制“0”)。表2示出了在電路600計算校驗和的時候,寄存器620、630、640、650和660的內(nèi)容。
表2電路600的輸出為0。
以下是對已經(jīng)被改變過的可編程邏輯設(shè)備配置數(shù)據(jù)104(也就是說,有錯誤的)進行處理的示例。
P(X)=X8+X7+X5+1(24)P(X)中有一個比特被取反了。寫入的數(shù)據(jù)以及期望值都如下被載入XOR樹324中X5P(X)+EV=X13+X12+X10+X5+X3+X2=b11010000101100 (25)用多項式(25)除以控制表達式(8)所得的余數(shù)不是0,表示有錯誤發(fā)生。
(X5P(X)+EV)%G(X)=b11101 (26)表3示出了在電路600計算校驗和的時候,寄存器620、630、640、650和660的內(nèi)容。
表3寄存器620、630、640、650和660的輸出中有一些不為0,表示有錯誤。
參照圖3,在每個時鐘周期后,寄存器326的內(nèi)容被送入信號特征寄存器328。當(dāng)可編程邏輯設(shè)備配置數(shù)據(jù)104以及期望值102在XOR樹324中經(jīng)過處理以后,信號特征寄存器就保存了算得的校驗和。因為信號特征寄存器328的內(nèi)容在每個時鐘周期內(nèi)都會被更新,所以FSM 108會控制更新寄存器330在信號特征寄存器328的內(nèi)容有效的情況下(也就是說,當(dāng)算得的校驗和被儲存到信號特征寄存器328中之后)保存其中的內(nèi)容。
用戶可以查看計算得到的校驗和或是期望值102。通過監(jiān)測計算得到的校驗和,用戶能夠確定任何檢測到的錯誤的特性。舉例來說,用戶可以確定錯誤是否是隨機的(比如說,多次計算產(chǎn)生不同的校驗和)或者相同的錯誤是否會重復(fù)出現(xiàn)(比如說,多次計算產(chǎn)生相同的校驗和)。
用戶可以利用任何合適的方法來查看計算得到的校驗和或是期望值102。在一個實施例中,每個多路復(fù)用器332從更新寄存器330中取一個比特再從期望值102中取一個比特作為輸入。根據(jù)用戶想要查看哪個值,F(xiàn)SM 108能控制多路復(fù)用器332從更新寄存器330或是期望值102中選取數(shù)據(jù)。各個多路復(fù)用器332的輸出被送入移位寄存器334。移位寄存器334可以被可編程邏輯設(shè)備300訪問,而且允許它的內(nèi)容被用戶邏輯讀取。
在從移位寄存器334中讀取數(shù)據(jù)的時候,可能會發(fā)生錯誤而影響算得的校驗和。在一種更為精確的檢測錯誤的方法中,一旦算得的校驗和儲存到了信號特征寄存器328中,就要把信號特征寄存器328中的每個比特發(fā)送到一個OR門336的單獨輸入端。OR門336可能包括一個帶有與信號特征寄存器比特數(shù)相等數(shù)量輸入端的門,或是包括一組級聯(lián)的門,其中每個門帶有較少數(shù)量的輸入端,或是任何其他用于比較信號特征寄存器比特的合適方法。如果所有的信號特征寄存器比特都是二進制“0”,那么OR門336的輸出就是二進制“0”,表示沒有檢測到錯誤。如果一個或多個信號特征寄存器比特是二進制“1”,那么OR門336的輸出就是二進制“1”,表示檢測到了錯誤。OR門336的輸出被發(fā)送到CRC錯誤引腳338,該引腳可以由用戶邏輯進行監(jiān)測。CRC錯誤引腳338能保存一個數(shù)據(jù)比特,該數(shù)據(jù)比特的一個值表示沒有檢測到錯誤,而另一個值則表示檢測到了錯誤。另外,CRC錯誤引腳338也可以是一個指示器,例如,一個發(fā)光二極管(LED),它能在檢測到錯誤的時候發(fā)出信號(比如說,點亮LED)。任何其他合適的方法都可以被用來指示錯誤。
FSM 108發(fā)送信號給CRC模塊320中的各種寄存器,以協(xié)助對信號進行采樣。舉例來說,當(dāng)XOR樹324完成處理并且信號特征寄存器328中保存了校驗和之后,F(xiàn)SM 108向更新寄存器330發(fā)送一個時鐘使能信號。該時鐘使能信號使得更新寄存器330不會在信號特征寄存器328從寄存器326讀取數(shù)據(jù)的同時讀取信號特征寄存器328的內(nèi)容。只有當(dāng)用戶請求查看校驗和或是期望值102的時候,數(shù)據(jù)才會通過多路復(fù)用器332被發(fā)送給移位寄存器334。
圖7示出了符合本發(fā)明的可編程邏輯設(shè)備中的一個存儲器內(nèi)核700。存儲器內(nèi)核700包括一個地址寄存器706、一個控制邏輯712、可編程邏輯設(shè)備配置數(shù)據(jù)714,以及一個數(shù)據(jù)寄存器722。數(shù)據(jù)714可以被放置在一個陣列中,該陣列包括數(shù)據(jù)單元716的行與列,其中每個數(shù)據(jù)單元716中含有一個二進制數(shù)。對于被放置在陣列中的數(shù)據(jù)714來說,一條數(shù)據(jù)線718可以與各行單元716相連,而一條地址線720則可以與各列單元716相連。
可編程邏輯設(shè)備配置數(shù)據(jù)714可以被組織成任意合適的結(jié)構(gòu),而且可以用任何合適的結(jié)構(gòu)將它的數(shù)據(jù)單元716與數(shù)據(jù)線和地址線相連。為了表達的簡單清楚,這里主要把數(shù)據(jù)714描述為數(shù)據(jù)單元716的一個陣列,數(shù)據(jù)線718穿過數(shù)據(jù)單元716的各行,而地址線720穿過數(shù)據(jù)單元716的各列,從而保證了特殊性與明確性。
地址寄存器706可以被用來選取一條地址線720,用于載入相應(yīng)的一列數(shù)據(jù)單元716。每一列單元716可能代表一個幀,并且與地址寄存器706中一個不同的地址比特相關(guān)聯(lián)。地址寄存器706可能含有與幀數(shù)相等數(shù)量的比特,其中地址寄存器706的每個比特對應(yīng)于一條地址線720。
地址寄存器706有兩個輸入信號一個地址寄存器輸入(AINPUT)信號702和一個地址寄存器時鐘(ACLOCK)信號704。輸入信號702可以由地址寄存器時鐘信號704用一個第一脈沖進行聲明(比如說,設(shè)置成二進制“1”),從而使得地址寄存器706中的一個第一比特位置—它對應(yīng)于第一幀—被設(shè)置為二進制“1”。當(dāng)?shù)刂芳拇嫫鲿r鐘信號704的第一個脈沖過去后,輸入信號702可以被取消聲明(比如說,設(shè)置成二進制“0”)。隨著地址寄存器時鐘信號704接下來的各個脈沖,地址寄存器706中的二進制“1”被移位一個比特,以便指向下一個幀。地址寄存器706的輸出通過數(shù)據(jù)通路708被發(fā)送給控制邏輯712??刂七壿?12由一個地址使能(AENABLE)信號710控制,該使能信號允許在適當(dāng)?shù)臅r刻選取一條地址線720。
當(dāng)一個幀被選取后,儲存在被選取的數(shù)據(jù)單元716中的二進制數(shù)被寫到相應(yīng)的數(shù)據(jù)線718上,當(dāng)數(shù)據(jù)寄存器時鐘(DCLOCK)信號724發(fā)出脈沖時,數(shù)據(jù)線上的數(shù)據(jù)就被載入數(shù)據(jù)寄存器722中。數(shù)據(jù)寄存器722可以是一個專用寄存器,僅在載入幀的時候才被用到,或者也可以是一個共享寄存器,在不同時刻用作不同的功能(比如說,數(shù)據(jù)寄存器722可以是在把可編程邏輯設(shè)備配置數(shù)據(jù)714寫入可編程邏輯設(shè)備時所用的同一個寄存器)。數(shù)據(jù)寄存器722中的內(nèi)容相繼通過數(shù)據(jù)通路726被載入錯誤檢測電路。
圖8示出了符合本發(fā)明一個實施例的可編程邏輯設(shè)備中的一個更詳細的存儲器內(nèi)核800。存儲器內(nèi)核800包括一個地址寄存器806,該寄存器帶有下列輸入端地址寄存器輸入(AINPUT)信號802以及地址寄存器時鐘(ACLOCK)信號804。地址寄存器806中的每個比特位沿通路808向一個輸入AND門812發(fā)送它的比特值,輸入AND門812可以是控制邏輯712的一部分。各個AND門812的第二個輸入是地址使能信號810。當(dāng)兩個輸入都是二進制“1”時,輸出就是二進制“1”。各個AND門812的輸出沿一條相應(yīng)的地址線826送出。因為在每個周期里,地址寄存器806中至多只有一個比特值被置為二進制“1”,因此在任何一個時鐘周期中最多只有一條地址線被激活。連接到各條地址線826上的是一幀數(shù)據(jù)單元814,數(shù)據(jù)單元814可以是,例如,配置隨機存取存儲器(CRAM)單元,或是任何其他合適的存儲器單元。連接到各條數(shù)據(jù)線824上的是一行數(shù)據(jù)單元814。
每個CRAM單元814包括,例如,兩個晶體管816和822,以及兩個反向器818和820。晶體管816和822可以是任何合適的晶體管,包括雙極結(jié)型晶體管(BJTs)、場效應(yīng)晶體管(FETS),以及金屬氧化物半導(dǎo)體場效應(yīng)晶體管(MOSFETS)。舉例來說,晶體管816可以是一個MOSFET,它的源極連接到一條相應(yīng)的數(shù)據(jù)線824,門極連接到一條相應(yīng)的地址線826,漏極則連接到反向器818和820。反向器818和820的輸入分別被連接到其他反向器820和818的輸出。舉例來說,晶體管822可以是一個MOSFET,它的源極連接到反向器818和820,門極連接到一個清除(CLR)信號,漏極則連接到一個共用接地點。清除信號可以被用來向單元814寫入數(shù)據(jù)比特,但通常不用來讀取數(shù)據(jù)比特。
各個數(shù)據(jù)單元814中的二進制數(shù)被表示在節(jié)點A上。當(dāng)一條數(shù)據(jù)線824被置為二進制“1”(也就是說,被預(yù)先充電到一個預(yù)定的電壓)并且一條地址線826也被置為二進制“1”時,相應(yīng)的CRAM單元814中的值就被讀取出來。如果節(jié)點A表示一個二進制“1”,那么那條數(shù)據(jù)線824就被放電(也就是說,被改變?yōu)槎M制“0”)。如果節(jié)點A表示一個二進制“0”,那么那條數(shù)據(jù)線824就保持預(yù)充電(也就是說,置為二進制“1”)。當(dāng)數(shù)據(jù)寄存器時鐘(DCLOCK)信號830發(fā)出脈沖時,讀到各條數(shù)據(jù)線824上的值被發(fā)送給數(shù)據(jù)寄存器828。一個反向器可以被連接到各條數(shù)據(jù)線824上,以便在數(shù)據(jù)被送往數(shù)據(jù)寄存器828之前將數(shù)據(jù)的二進制表示反向。可以通過數(shù)據(jù)通路832從數(shù)據(jù)寄存器828中讀取數(shù)據(jù)。數(shù)據(jù)通路832可以是任何用于傳輸數(shù)據(jù)的合適路徑,包括串行總線、并行總線,或是兩者的組合形式。數(shù)據(jù)寄存器828的全部內(nèi)容或是數(shù)據(jù)的一個子集(比如說,1數(shù)據(jù)比特,8數(shù)據(jù)比特,16數(shù)據(jù)比特,32數(shù)據(jù)比特)可以在一個給定的周期中被發(fā)送到通路832。
圖9-15示出了向錯誤檢測電路如CRC模塊320載入數(shù)據(jù)的示例性步驟的流程圖。每個幀可以包含一列數(shù)據(jù)比特、一行數(shù)據(jù)比特、一塊數(shù)據(jù)比特,或是任何其他合適的結(jié)構(gòu)形式的數(shù)據(jù)比特,但是這里為了清楚和特定起見,主要按一列數(shù)據(jù)比特的情況加以說明。地址寄存器中的一個地址比特可以與每個幀相關(guān)聯(lián),使得當(dāng)一個特定的地址比特被置起時(比如說,被置為二進制“1”),相應(yīng)的幀被選取。儲存在存儲器—例如CRAM中的可編程邏輯設(shè)備配置數(shù)據(jù)104可以一次被讀取一幀,并被保存在一個臨時數(shù)據(jù)寄存器中,該臨時寄存器中的數(shù)據(jù)接著會被載入CRC模塊320。
流程900從處于閑置狀態(tài)的步驟910開始。然后,在步驟920處,流程900判定錯誤檢測是否已經(jīng)開始,這可以由一個標志來表示。當(dāng)一個需要訪問CRAM中的數(shù)據(jù)的應(yīng)用程序(比如說,一個錯誤檢測應(yīng)用程序或是任何其他合適的應(yīng)用程序)要運行時,該標志可以被置起??梢栽谙到y(tǒng)處于用戶模式當(dāng)中時,通過將寄存器中的一個專用比特聲明為二進制“1”來表示這種情況。如果該標志沒有被置起,那么流程900仍停留在步驟920。如果該標志被置起了,那么流程900就會前進到步驟1000,在步驟1000中,流程900準備將第一幀載入數(shù)據(jù)寄存器中。
圖10示出了步驟1000的詳細流程圖。在步驟1002中,CRC模塊320被預(yù)先設(shè)置。舉例來說,計數(shù)器被復(fù)位為0,并且寄存器(比如說,寄存器326,信號特征寄存器328,更新寄存器330以及移位寄存器334)被清空。在步驟1002中,一個地址寄存器時鐘被使能(比如說,ACLOCK信號704發(fā)出脈沖),一個地址寄存器輸入被聲明(比如說,AINPUT信號702被置為二進制“1”),并且一個預(yù)充電計數(shù)器被使能(比如說,PCOUNTER被激活)。預(yù)充電計數(shù)器指示了數(shù)據(jù)線718在何時被充分預(yù)充電到了某個預(yù)定的電壓(比如說,一個源電壓)。
接著,在步驟1004中,所有的數(shù)據(jù)線618都被預(yù)充電。同樣在步驟1004,地址寄存器時鐘信號704被禁用,并且地址寄存器輸入信號702被取消聲明。在步驟1006中,流程1000判定預(yù)充電計數(shù)器是否已經(jīng)被置為二進制“1”。當(dāng)數(shù)據(jù)線718已經(jīng)被充分預(yù)充電的時候(比如說,在16個周期之后),預(yù)充電計數(shù)器就被置為二進制“1”。如果預(yù)充電計數(shù)器保持二進制“0”,那么流程1000就返回步驟1004。
如果預(yù)充電計數(shù)器被置為二進制“1”,那么流程1000就前進到步驟1008,在步驟1008中,數(shù)據(jù)線預(yù)充電被關(guān)閉,預(yù)充電計數(shù)器被禁用,并且一個讀取計數(shù)器被使能(比如說,RCOUNTER被激活)。讀取計數(shù)器指示了對應(yīng)于一個被選取地址的數(shù)據(jù)何時被完全讀取到相應(yīng)的數(shù)據(jù)線718上(比如說,在16個周期之后)。
在步驟1010中,對應(yīng)于第一幀(比如說,對應(yīng)于地址線1的第一列數(shù)據(jù)單元716)的地址線被使能(比如說,AENABLE信號710被置為二進制“1”),并且相應(yīng)的單元內(nèi)容被讀取到相應(yīng)的數(shù)據(jù)線718上。在步驟1012中,流程1000判定讀取計數(shù)器是否已經(jīng)被置為二進制“1”。如果讀取計數(shù)器仍然是二進制“0”,那么流程1000就返回步驟1010,在步驟1010中,地址使能信號710保持使能并且數(shù)據(jù)繼續(xù)被讀取到數(shù)據(jù)線718上。舉例來說,對于圖8中所示的CRAM數(shù)據(jù)單元來說,如果一個二進制“0”被表示在一個CRAM數(shù)據(jù)單元814中(比如說,在節(jié)點A上),那么相應(yīng)的數(shù)據(jù)線824就會保持預(yù)充電狀態(tài)。如果一個二進制“1”被表示在一個CRAM數(shù)據(jù)單元814中,那么相應(yīng)的數(shù)據(jù)線824就會被放電。為了確保數(shù)據(jù)線824被充分放電到0伏特,數(shù)據(jù)在多個周期內(nèi)被讀取到數(shù)據(jù)線824上(比如說,在16個周期內(nèi))。如果讀取計數(shù)器被置為二進制“1”,那么流程1000就前進到步驟1014,在步驟1014中,讀取計數(shù)器被禁用,并且數(shù)據(jù)寄存器時鐘被使能(比如說,DCLOCK信號724被激活)。
重新參照圖9,當(dāng)?shù)谝粠呀?jīng)被載入數(shù)據(jù)寄存器722后,流程900前進到步驟1100,在步驟1100中,除了最后一幀以外的所有幀都被載入數(shù)據(jù)寄存器722。
圖11-12是一組流程圖,它們更詳細地示出了在步驟1100中向CRC模塊320載入幀的過程。在步驟1102中,來自第一幀的數(shù)據(jù)當(dāng)前正處在數(shù)據(jù)線718上,它被載入數(shù)據(jù)寄存器722。同樣在步驟1102中,地址使能信號710被禁用,CRC模塊320被使能,并且一個數(shù)據(jù)寄存器計數(shù)器也被使能(比如說,DCOUNTER被激活)。數(shù)據(jù)寄存器計數(shù)器指示了數(shù)據(jù)寄存器722中預(yù)定數(shù)量的數(shù)據(jù)比特何時已經(jīng)被載入CRC模塊320中(比如說,在何時除了剩余比特之外的所有比特,比如說34比特,已經(jīng)都被載入了)。這個預(yù)定的數(shù)量可以是任何合適的數(shù)量,并配合各種被使能和聲明的信號,以便向數(shù)據(jù)寄存器722載入各個幀,隨后再載入CRC模塊320。
在步驟1104中,來自第一幀的數(shù)據(jù)當(dāng)前被儲存在數(shù)據(jù)寄存器722中,它被載入CRC模塊320中(比如說,被發(fā)送到多路復(fù)用器322,接著被送到XOR樹324以開始計算校驗和)。預(yù)定數(shù)量的比特(比如說,8比特,16比特,或是任何其他合適數(shù)量的比特)在每個時鐘周期中被從數(shù)據(jù)寄存器722發(fā)送到CRC模塊320。接著,在步驟1106中,流程1000判定數(shù)據(jù)寄存器計數(shù)器是否被置為二進制“1”。如果數(shù)據(jù)寄存器計數(shù)器為二進制“0”,那么流程1100就返回到步驟1104,在步驟1104中,下一組預(yù)定數(shù)量的比特被載入到CRC模塊320。
如果數(shù)據(jù)寄存器計數(shù)器被置為二進制“1”,那么流程1100就前進到步驟1108,在步驟1108中,數(shù)據(jù)寄存器計數(shù)器被禁用,并且地址寄存器時鐘信號704被使能,預(yù)充電計數(shù)器也被使能(比如說,被復(fù)位到二進制“0”并激活),以準備載入下一個幀。地址寄存器時鐘信號704將指向第一條地址線720的二進制“1”移位,來指向下一條地址線720。同樣在步驟1108中,來自數(shù)據(jù)寄存器722的下一組預(yù)定數(shù)量的比特被載入CRC模塊320。
在步驟1110中,所有的數(shù)據(jù)線718都被預(yù)充電,地址寄存器時鐘信號704被禁用,并且來自數(shù)據(jù)寄存器722的下一組預(yù)定數(shù)量的比特被載入CRC模塊320。在步驟1112中,流程1100判定預(yù)充電計數(shù)器是否被置為二進制“1”。如果預(yù)充電計數(shù)器為二進制“0”,那么流程1100就返回到步驟1110。由于數(shù)據(jù)是在預(yù)定數(shù)量的周期內(nèi)(比如說,16個周期)被載入CRC電路320的,因此這下一組預(yù)定數(shù)量的比特是在預(yù)定數(shù)量的周期范圍內(nèi)的任意一個周期中或是在某個范圍內(nèi)被載入CRC電路320的。這些比特可以在一個周期或是多個周期中被并行讀取,在預(yù)定數(shù)量的周期內(nèi)被串行讀取,或是以串并行相結(jié)合的方式讀取。
如果預(yù)充電計數(shù)器被置為二進制“1”,那么流程1100就前進到步驟1114,在步驟1114中,數(shù)據(jù)線預(yù)充電被關(guān)閉,預(yù)充電計數(shù)器被禁用,并且讀取計數(shù)器被使能(比如說,RCOUNTER被復(fù)位到二進制“0”并激活)。在步驟1116中,對應(yīng)于下一幀的地址線被使能(比如說,AENABLE信號710被置為二進制“1”),并且下一幀中的單元716的內(nèi)容被讀取到相應(yīng)的數(shù)據(jù)線718上。同樣在步驟1116中,來自數(shù)據(jù)寄存器722的下一組預(yù)定數(shù)量的比特被載入CRC模塊320。在步驟1118中,流程1100返回到步驟1116。由于數(shù)據(jù)是在預(yù)定數(shù)量的周期內(nèi)(比如說,16個周期)被讀取到數(shù)據(jù)線618上的,因此這下一組預(yù)定數(shù)量的比特可以在預(yù)定數(shù)量的周期范圍內(nèi)的任意一個周期中或是在某個范圍內(nèi)從數(shù)據(jù)寄存器722中被讀取出來。
如果讀取計數(shù)器被置為二進制“1”,那么流程1100就前進到步驟1120,在步驟1120中,數(shù)據(jù)寄存器722中當(dāng)前幀的下一個到最后一個比特都被載入CRC模塊320,幀計數(shù)器被加1(用N++表示,其中N是載入到數(shù)據(jù)線618上的當(dāng)前幀),并且讀取計數(shù)器被禁用。在步驟1122中,流程1100判定該幀是否為最后一幀。如果該幀不是最后一幀,那么流程1100就前進到步驟1124,在步驟1124中,當(dāng)前處在數(shù)據(jù)寄存器722中的幀(比如說,幀N-1)的最后一個比特被移動到CRC模塊320中,數(shù)據(jù)已經(jīng)處在數(shù)據(jù)線718上的下一幀被載入數(shù)據(jù)寄存器722,地址使能信號710被禁用,并且數(shù)據(jù)寄存器計數(shù)器被使能(比如說,DCOUNTER被復(fù)位到二進制“0”并激活)。然后流程1100返回步驟1104,在步驟1104中,當(dāng)前處在數(shù)據(jù)寄存器722中的幀被載入CRC模塊320,同時下一幀也準備好要被載入數(shù)據(jù)寄存器722。
參照圖9,如果該幀是最后一幀,那么流程900就前進到步驟1300來把最后一幀載入CRC模塊320。圖13-14是一組流程圖,它們更詳細地示出了步驟1300中載入最后一幀的過程。在步驟1302中,當(dāng)前處在數(shù)據(jù)寄存器722中的幀(也就是說,最后一幀的前一幀)的最后1比特被載入CRC電路320。同樣在步驟1302中,來自最后一幀的數(shù)據(jù)從數(shù)據(jù)線718被載入數(shù)據(jù)寄存器722,地址使能信號710被禁用,并且數(shù)據(jù)寄存器計數(shù)器被使能。
流程1300接著前進到步驟1304,在步驟1304中,最后一幀中一組預(yù)定數(shù)量的數(shù)據(jù)比特被載入CRC電路320。在步驟1306中,如果數(shù)據(jù)寄存器計數(shù)器為二進制“0”,那么流程1300就返回步驟1304。如果數(shù)據(jù)寄存器計數(shù)器被置為二進制“1”,那么流程1300就前進到步驟1308,在步驟1308中,數(shù)據(jù)寄存器計數(shù)器被禁用,地址寄存器時鐘信號704被使能,預(yù)充電計數(shù)器被使能,并且最后一幀中一組預(yù)定數(shù)量的數(shù)據(jù)比特被載入CRC電路320。
在步驟1310中,所有的數(shù)據(jù)線718都被預(yù)充電,地址寄存器時鐘信號704被禁用,并且最后一幀的下一個比特被載入CRC電路320。接著,在步驟1312中,流程1300判定預(yù)充電計數(shù)器是否被置為二進制“1”。如果預(yù)充電計數(shù)器保持為二進制“0”,那么流程1300就返回到步驟1310。如果預(yù)充電計數(shù)器被置為二進制“1”,那么流程1300就前進到步驟1314,在步驟1314中,數(shù)據(jù)線預(yù)充電被關(guān)閉,預(yù)充電計數(shù)器被禁用,讀取計數(shù)器被使能,并且最后一幀的下一個比特被載入CRC模塊320。在步驟1316中,最后一幀的下一個比特被載入CRC模塊320。接著,在步驟1318中,流程1300判定讀取計數(shù)器是否被置為二進制“1”。如果讀取計數(shù)器保持二進制“0”,那么流程1300就返回步驟1116。如果讀取計數(shù)器被置為二進制“1”,那么流程1300就前進到步驟1320,在步驟1320中,讀取計數(shù)器被禁用,并且最后一個比特之前的比特被載入CRC模塊320。在步驟1322中,最后一幀的最后一個比特被載入CRC模塊320,并且一個載入CRC信號被聲明。
參照圖9,當(dāng)可編程邏輯設(shè)備配置數(shù)據(jù)104的所有幀都被載入CRC模塊320后,流程900就前進到步驟1500,在步驟1500中,期望值被載入CRC模塊320。
圖15是一張流程圖,它更詳細地示出了將一個32比特期望CRC值102載入CRC模塊320的過程,其中CRC模塊320每時鐘周期接收8個數(shù)據(jù)比特作為輸入。在步驟1502中,期望CRC值102的第一個字節(jié)被載入CRC模塊320。第一個字節(jié)涉及最重要的字節(jié),從最重要的比特到最不重要的比特。多路復(fù)用器322被用來選取要發(fā)送到XOR樹324的期望值102,以便計算校驗和。在步驟1504中,期望CRC值102的下一個字節(jié)被載入,而在步驟1508中,期望CRC值102的第四個字節(jié)被載入。
圖9-15僅僅是為了示例性的目的而說明的,這些說明是針對32比特生成多項式以及每時鐘周期從數(shù)據(jù)寄存器722或是期望值102中的一個接收8個數(shù)據(jù)比特作為輸入的CRC模塊320而展開的。可以理解,任何合適數(shù)量的比特都可以被用來表示生成多項式,并且任何時鐘周期內(nèi)都可以把任意數(shù)量的比特載入CRC模塊320。但是要注意到的是,根據(jù)上述的兩個特點,向數(shù)據(jù)寄存器722載入數(shù)據(jù)以及將數(shù)據(jù)從數(shù)據(jù)寄存器722移動到CRC模塊的時序安排可能會變化。
重新參照圖9,當(dāng)在步驟1500中將期望CRC值102載入CRC模塊320之后,流程900就返回步驟920。
圖16示出了在可編程邏輯設(shè)備上執(zhí)行錯誤檢測所包含的示例性步驟的流程圖。流程1600從步驟1602開始,由一個信號來表示開始對可編程邏輯設(shè)備配置數(shù)據(jù)104進行錯誤檢測。在步驟1604中,可編程邏輯設(shè)備配置數(shù)據(jù)104被載入CRC模塊320,如圖9-15中所示。在步驟1606中,流程1600判定是否所有的配置數(shù)據(jù)104都已經(jīng)被載入CRC電路模塊320。如果并非所有的配置數(shù)據(jù)104都已經(jīng)被載入,那么流程1600就返回步驟1604。流程1600還會前進到步驟1608,在步驟1608中開始對數(shù)據(jù)進行校驗和計算。如果所有的配置數(shù)據(jù)104都已經(jīng)被載入,那么流程1600就前進到步驟1608和1610。在步驟1610中,期望值102被載入CRC模塊320,然后流程1600就前進到步驟1608。在步驟1608中,當(dāng)配置數(shù)據(jù)104的最后部分以及期望值102被載入CRC模塊320的時候,XOR樹324不斷地計算出校驗和。每個時鐘周期都會在步驟1612中將校驗和計算的結(jié)果載入信號特征寄存器328。
當(dāng)在步驟1612中把求得的校驗和載入信號特征寄存器328之后,流程1600接著就前進到步驟1614,在步驟1614中對信號特征寄存器328中的每個比特執(zhí)行邏輯“OR”。在步驟1616中,“OR”操作的結(jié)果被輸出到一個CRC錯誤管腳上。然后流程1600就返回步驟1618。
圖17示出了數(shù)據(jù)處理系統(tǒng)1700中的一個示例性可編程邏輯設(shè)備1702或是多芯片模塊1704,1702或1704中包含了本發(fā)明的實施例。數(shù)據(jù)處理系統(tǒng)1700中可以包括一個或多個下列組件一個處理器1706;一個存儲器1708;I/O電路1710;以及外圍設(shè)備1712。這些組件由一條系統(tǒng)總線或是其他互連線路1720連接在一起,并且被安裝在一塊電路板1730上,該電路板是一個終端用戶系統(tǒng)1740的一部分。
系統(tǒng)1700可以被使用在許多應(yīng)用場合,比如計算機聯(lián)網(wǎng)、數(shù)據(jù)聯(lián)網(wǎng)、測量儀表、視頻處理、數(shù)字信號處理,或是任何其他應(yīng)用,在這些應(yīng)用中需要利用到可編程或是可重復(fù)編程邏輯設(shè)備的優(yōu)點??删幊踢壿嬙O(shè)備或模塊1702/1704可以被用來執(zhí)行各種不同的邏輯功能。舉例來說,可編程邏輯設(shè)備或模塊1702/1704可以被設(shè)置成一個處理器或控制器來與處理器1706協(xié)同工作??删幊踢壿嬙O(shè)備或模塊1702/1704還可以被用作判定器,用來判決對系統(tǒng)1700中共享設(shè)備的訪問。在另一個例子中,可編程邏輯設(shè)備或模塊1702/1704可以被設(shè)置成處理器1706與系統(tǒng)1700中另一個組件之間的接口。應(yīng)該注意的是,系統(tǒng)1700僅僅是示范性的,而本發(fā)明真正的范圍與指導(dǎo)思想應(yīng)該由下面的權(quán)利要求來指出。
多種不同的技術(shù)可以被用來實現(xiàn)具有本發(fā)明特點的可編程邏輯設(shè)備1702或多芯片模塊1704,以及那些設(shè)備的各種組件(比如說,可編程邏輯連接器(“PLCs”)以及控制PLCs的可編程功能控制元件(“FCEs”))。舉例來說,每個PLC可以是一個相對簡單的可編程連接器,比如一個開關(guān)或是多個開關(guān),用來將若干個輸入端中的任意一個連接到一個輸出端。另外,每個PLC也可以是一個稍復(fù)雜的元件,它能夠執(zhí)行邏輯功能(比如說,在邏輯上組合若干個輸入)以及產(chǎn)生連接。在后一種情況下,舉例來說,每個PLC可以是一個乘積項邏輯,它能實現(xiàn)諸如AND、NAND、OR或是NOR這些功能。適合用來實現(xiàn)PLCs的元件例子包括上述任何類型的易失性或非易失性存儲器,比如EPROMs、EEPROMs、傳遞晶體管、傳輸門、反熔斷器、激光熔斷器、金屬可選擇性接線等等,這些存儲器可以被用來儲存可編程邏輯設(shè)備配置數(shù)據(jù)。PLCs以及其他電路元件可以由各種可編程功能控制元件(“FCEs”)進行控制。舉例來說,F(xiàn)CEs可以是上述任何類型的易失性或非易失性存儲器,這些存儲器可以被用來儲存可編程邏輯設(shè)備配置數(shù)據(jù)。FCEs也可以是先入先出(“FIFO”)存儲器,比如EPROMs、EEPROMs、功能控制寄存器、鐵電存儲器、熔斷器、反熔斷器,等等。由上述的各種例子可見,本發(fā)明既可以應(yīng)用在一次性可編程設(shè)備中,也可以應(yīng)用在可重復(fù)編程的設(shè)備中。
至此可見,我們在可編程邏輯設(shè)備上提供了錯誤檢測電路。精通本技術(shù)的人應(yīng)該能夠理解,本發(fā)明可以用上述實施例之外的其他實施例加以實現(xiàn),上述的實施例是為說明性的而不是限制性的目的而提供的,本發(fā)明僅受下列權(quán)利要求的限制。
權(quán)利要求
1.用來檢測儲存在邏輯設(shè)備上的配置數(shù)據(jù)中的錯誤的一種電路,包括一個存儲器,配置數(shù)據(jù)被儲存在其中;以及連接到存儲器上的檢驗電路,它分析儲存在存儲器中的配置數(shù)據(jù)以確定在存儲器的最初設(shè)置之后是否有任何值發(fā)生了變化。
2.根據(jù)權(quán)利要求1所述的邏輯裝置,其中所述的存儲器是隨機存取存儲器。
3.根據(jù)權(quán)利要求1所述的邏輯裝置,其中所述的檢驗電路包括校驗和電路,它根據(jù)配置數(shù)據(jù)計算出一個值;以及連接到校驗和電路上的比較電路,它將算得的值與一個期望值進行比較。
4.根據(jù)權(quán)利要求3所述的邏輯裝置,其中算得的值是用一個基于配置數(shù)據(jù)的一個值除以一個預(yù)定的值所得到的余數(shù)。
5.根據(jù)權(quán)利要求3所述的邏輯裝置,其中所述的期望值是根據(jù)用來設(shè)置邏輯裝置的配置數(shù)據(jù)計算出來的。
6.根據(jù)權(quán)利要求5所述的邏輯裝置,其中所述的期望值是在設(shè)置邏輯裝置之前根據(jù)一個余數(shù)計算出來的,該余數(shù)是在配置數(shù)據(jù)被寫入邏輯裝置之前用基于該配置數(shù)據(jù)的一個值除以一個預(yù)定值而得到的。
7.根據(jù)權(quán)利要求6所述的邏輯裝置,其中所述的預(yù)定值是與校驗和電路所用的相等的值。
8.根據(jù)權(quán)利要求3所述的邏輯裝置,其中所述的期望值是由校驗和計算電路在配置數(shù)據(jù)被寫入邏輯裝置時計算得出的。
9.根據(jù)權(quán)利要求3所述的邏輯裝置,其中所述的比較電路提供一個第一信號,表示沒有檢測到錯誤;以及第二信號,表示檢測到了錯誤。
10.根據(jù)權(quán)利要求1所述的邏輯裝置,其中所述的檢驗電路包括計算電路,它根據(jù)配置數(shù)據(jù)計算一個值;以及連接到計算電路上的邏輯電路,它對算得的值執(zhí)行邏輯操作。
11.根據(jù)權(quán)利要求10所述的邏輯裝置,其中所述的算得的值是用基于配置數(shù)據(jù)和期望值的一個值除以一個預(yù)定的值所得到的余數(shù)。
12.根據(jù)權(quán)利要求11所述的邏輯裝置,其中所述的期望值是根據(jù)用來設(shè)置邏輯裝置的配置數(shù)據(jù)計算出來的。
13.根據(jù)權(quán)利要求12所述的邏輯裝置,其中所述的期望值是在設(shè)置邏輯裝置之前根據(jù)一個余數(shù)計算出來的,該余數(shù)是在配置數(shù)據(jù)被寫入邏輯裝置之前用基于該配置數(shù)據(jù)的一個值除以一個預(yù)定值而得到的。
14.根據(jù)權(quán)利要求11所述的邏輯裝置,其中所述的期望值是由計算電路在配置數(shù)據(jù)被寫入邏輯裝置時計算得出的。
15.根據(jù)權(quán)利要求10所述的邏輯裝置,其中所述的邏輯電路包括能產(chǎn)生下列信號的邏輯第一信號,表示沒有檢測到錯誤;以及第二信號,表示檢測到了錯誤。
16.根據(jù)權(quán)利要求1所述的邏輯裝置,還包括一個連接到所述存儲器上的第二存儲器,其中的第二存儲器儲存配置數(shù)據(jù)的一部分。
17.根據(jù)權(quán)利要求16所述的邏輯裝置,其中所述的檢驗電路被連接到第二存儲器上,并對所述配置數(shù)據(jù)的一部分執(zhí)行部分分析。
18.根據(jù)權(quán)利要求1所述的邏輯裝置,還包括一個第二存儲器,用于儲存被輸入到檢驗電路中的期望值。
19.根據(jù)權(quán)利要求18所述的邏輯裝置,其中所述的期望值是根據(jù)用來設(shè)置邏輯裝置的配置數(shù)據(jù)計算出來的。
20.根據(jù)權(quán)利要求19所述的邏輯裝置,其中所述的期望值是在設(shè)置邏輯裝置之前根據(jù)一個余數(shù)計算出來的,該余數(shù)是在配置數(shù)據(jù)被寫入邏輯裝置之前用基于該配置數(shù)據(jù)的一個值除以一個預(yù)定值而得到的。
21.根據(jù)權(quán)利要求18所述的邏輯裝置,其中所述的期望值是由校驗和計算電路在配置數(shù)據(jù)被寫入邏輯裝置時計算得出的。
22.根據(jù)權(quán)利要求1所述的邏輯裝置,還包括連接到檢驗電路上的輸出電路,用于輸出一個指示了是否檢測到錯誤的信號。
23.一種數(shù)字信號處理系統(tǒng),包括處理電路;連接到所述處理電路上的一個第二存儲器;以及如權(quán)利要求1中所定義的邏輯裝置。
24.一塊印制電路板,權(quán)利要求1中所定義的邏輯裝置被安裝其上。
25.根據(jù)權(quán)利要求24所述的印制電路板,還包括一個第二存儲器,它被安裝在印制電路板上并連接到所述邏輯裝置上。
26.根據(jù)權(quán)利要求25所述的印制電路板,其中所述的第二存儲器包含非易失性存儲器,用于儲存被寫入邏輯裝置的配置數(shù)據(jù)。
27.實現(xiàn)在一個邏輯裝置上的一種錯誤檢測電路,包括一個多路復(fù)用器,它取一個期望值以及儲存在邏輯裝置上的配置數(shù)據(jù)作為輸入;以及連接到多路復(fù)用器的一個輸出端上的檢驗電路,包括一個XOR樹,用于實現(xiàn)多項式校驗和計算,一個連接到XOR樹上的信號特征寄存器,以及一個連接到信號特征寄存器上的邏輯門,其中邏輯門取信號特征寄存器的內(nèi)容作為比特方式的輸入。
28.根據(jù)權(quán)利要求27所述的錯誤檢測電路,還包括一個第一存儲器,配置數(shù)據(jù)被儲存在其中。
29.根據(jù)權(quán)利要求28所述的錯誤檢測電路,還包括一個連接到第一存儲器上的第二存儲器,其中的第二存儲器儲存了要作為輸入被送到多路復(fù)用器的配置數(shù)據(jù)的一部分。
30.根據(jù)權(quán)利要求27所述的錯誤檢測電路,還包括一個用來儲存期望值的存儲器。
31.根據(jù)權(quán)利要求30所述的錯誤檢測電路,其中所述的期望值是根據(jù)用來設(shè)置邏輯裝置的配置數(shù)據(jù)計算出來的。
32.根據(jù)權(quán)利要求31所述的錯誤檢測電路,其中所述的期望值是在設(shè)置邏輯裝置之前根據(jù)一個余數(shù)計算出來的,該余數(shù)是在配置數(shù)據(jù)被寫入邏輯裝置之前用基于該配置數(shù)據(jù)的一個值除以一個預(yù)定值而得到的。
33.根據(jù)權(quán)利要求30所述的錯誤檢測電路,其中所述的期望值是由檢驗電路在配置數(shù)據(jù)被寫入邏輯裝置時計算得出的。
34.根據(jù)權(quán)利要求27所述的錯誤檢測電路,其中所述的多路復(fù)用器首先發(fā)送配置數(shù)據(jù)作為輸出,其次再發(fā)送期望值作為輸出。
35.根據(jù)權(quán)利要求27所述的錯誤檢測電路,其中所述的XOR樹包括寄存器,該寄存器在每個時鐘周期儲存多項式校驗和計算的結(jié)果,并在下一個時鐘周期將結(jié)果發(fā)送給XOR樹作為輸入。
36.根據(jù)權(quán)利要求35所述的錯誤檢測電路,其中所述的儲存在寄存器中的結(jié)果在下一個時鐘周期里被送往并儲存到信號特征寄存器中。
37.根據(jù)權(quán)利要求27所述的錯誤檢測電路,其中所述的XOR樹計算出一個余數(shù),該余數(shù)是用基于配置數(shù)據(jù)和期望值的一個值除以一個預(yù)定值而得到的。
38.根據(jù)權(quán)利要求27所述的錯誤檢測電路,其中所述的邏輯門發(fā)送下列比特中的一種作為輸出第一比特,當(dāng)信號特征寄存器的內(nèi)容是一個預(yù)定值的時候;以及第二比特,當(dāng)信號特征寄存器的內(nèi)容不是某個預(yù)定值的時候。
39.根據(jù)權(quán)利要求27所述的錯誤檢測電路,還包括連接到邏輯門的一個輸出端的輸出管腳,用來輸出一個表示是否檢測到了錯誤的信號。
40.根據(jù)權(quán)利要求39所述的錯誤檢測電路,其中所述的輸出管腳可由用戶邏輯訪問。
41.根據(jù)權(quán)利要求27所述的錯誤檢測電路,其中所述的錯誤檢測電路是在邏輯裝置上的一個硬布線電路。
42.根據(jù)權(quán)利要求27所述的錯誤檢測電路,其中所述的錯誤檢測電路是被編程到邏輯裝置中的。
43.根據(jù)權(quán)利要求27所述的錯誤檢測電路,其中所述的錯誤檢測電路處在邏輯裝置之外,并通過輸入/輸出管腳與邏輯裝置相連。
44.根據(jù)權(quán)利要求27所述的錯誤檢測電路,其中所述的錯誤檢測電路是以軟件來實現(xiàn)的。
45.用來檢測被寫入邏輯裝置的配置數(shù)據(jù)中的錯誤的一種方法,包括根據(jù)被寫入邏輯裝置的配置數(shù)據(jù)計算一個期望值;分析儲存在邏輯裝置上的配置數(shù)據(jù),以確定是否有錯誤發(fā)生。
46.根據(jù)權(quán)利要求45所述的方法,其中所述的計算期望值包括在設(shè)置邏輯裝置之前根據(jù)一個余數(shù)進行計算,該余數(shù)是在配置數(shù)據(jù)被寫入邏輯裝置之前用基于該配置數(shù)據(jù)的一個值除以一個預(yù)定值而得到的。
47.根據(jù)權(quán)利要求45所述的方法,其中所述的計算期望值包括在設(shè)置邏輯裝置的同時根據(jù)一個余數(shù)進行計算,該余數(shù)是在配置數(shù)據(jù)被寫入邏輯裝置的同時用基于該配置數(shù)據(jù)的一個值除以一個預(yù)定值而得到的。
48.根據(jù)權(quán)利要求45所述的方法,其中所述的分析配置數(shù)據(jù)包括根據(jù)配置數(shù)據(jù)計算一個值;以及將算得的值與期望值進行比較。
49.根據(jù)權(quán)利要求45所述的方法,其中所述的分析配置數(shù)據(jù)包括根據(jù)配置數(shù)據(jù)和期望值計算一個值;以及對算得的值執(zhí)行一次邏輯操作。
50.根據(jù)權(quán)利要求45所述的方法,還包括輸出一個分析結(jié)果,該結(jié)果表示是否檢測到了錯誤。
51.根據(jù)權(quán)利要求45所述的方法,其中所述的輸出結(jié)果包括以下之一送出一個第一信號,表示沒有檢測到錯誤;以及送出一個第二信號,表示檢測到了錯誤。
全文摘要
在可編程邏輯設(shè)備上提供錯誤檢測電路??删幊踢壿嬙O(shè)備配置數(shù)據(jù)被載入一個循環(huán)冗余校驗(CRC)模塊,在該模塊中可以進行校驗和計算。在一個實施例中,校驗和可能與一個期望值進行比較,該期望值是在數(shù)據(jù)被寫入可編程邏輯設(shè)備之前或正被寫入可編程邏輯設(shè)備的時候預(yù)先計算出來的校驗和。在另一個實施例中,期望值可以被包括在校驗和計算中??梢愿鶕?jù)校驗和與期望值之間的關(guān)系或是根據(jù)校驗和的值產(chǎn)生一個輸出,該輸出指示是否檢測到了錯誤。該輸出可以被送到一個輸出管腳,該輸出管腳可以由用戶邏輯訪問。
文檔編號G01R31/28GK1529853SQ02803300
公開日2004年9月15日 申請日期2002年10月10日 優(yōu)先權(quán)日2001年10月11日
發(fā)明者尼赫·D.·尼勾, 安迪·L.·李, 凱利·維恩斯特拉, L. 李, 尼赫 D. 尼勾, 維恩斯特拉 申請人:阿爾特拉公司