三模冗余技術在ASIC設計中的應用及實現(xiàn)
0 引言
航天器在空間中飛行時,一直處在帶電粒子構(gòu)成的輻射環(huán)境中。在這種輻射環(huán)境中微處理器可能會因為單粒子擾動而中斷正常功能從而導致災難性事故。這主要涉及到2方面的問題,輻射總劑量效應和單粒子效應的問題,單粒子效應又分為單粒子翻轉(zhuǎn)(SEU)和單粒子閉鎖(SEL)2個方面。單粒子翻轉(zhuǎn)效應能夠?qū)е聰?shù)字電路的存儲單元中的某一位因受到干擾而發(fā)生翻轉(zhuǎn),從而引起存儲內(nèi)容的變化,還可在組合邏輯電路的輸出上引入一個短暫的脈沖,單粒子翻轉(zhuǎn)效應是目前導致處理器運行失效的主要原因。星載計算機系統(tǒng)中處理器性能的穩(wěn)定與可靠在整個系統(tǒng)的穩(wěn)定與可靠性中占有重要地位,因此必須對電路進行加固,三模冗余技術是一種對單粒子翻轉(zhuǎn)有效的容錯技術,能夠極大地提高電路的可靠性。
1 三模冗余介紹
三模冗余(TMR)技術是一種時序電路加固技術,其基本思想是對于待加固模塊生成2個相同的模塊,再通過多數(shù)表決輸出,這樣即使有一個模塊發(fā)生故障電路依然可以正常工作。三模冗余在結(jié)構(gòu)上又有空間冗余和時間冗余之分,時間冗余就是3路時鐘信號之間存在一定延遲,延遲值應大于SEU翻轉(zhuǎn)的最大脈寬。時間冗余的作用是對于時序電路的輸入毛刺,最多只有一路時鐘會采樣到錯誤值,因此可以有效地防止組合邏輯毛刺所帶來的錯誤。圖1是采用普通時空三模冗余加固的觸發(fā)器的電路圖(以后簡稱TMR觸發(fā)器),其中VOTER為多數(shù)表決器的組合電路。
雖然三模冗余技術可以極大地提高系統(tǒng)的可靠性,但是代價也是巨大的。由TMR的基本結(jié)構(gòu)不難看出采用TMR技術的2個缺點:首先由于進行了硬件冗余導致芯片面積增大到原來的3倍多;其次由于三路時鐘信號之間的延遲和在輸出端加入了表決電路,在關鍵路徑上引入了額外的延時,導致電路的運行速度下降。
如果設計中2個觸發(fā)器之間的關鍵路徑延遲太短(比如移位寄存器),圖1的三模冗余電路結(jié)構(gòu)在運行中可能會出現(xiàn)電路輸出不定態(tài)和電路狀態(tài)錯誤的問題,圖2是一個采用三模冗余加固的4位移位寄存器的電路圖,圖中的TMR_DFF模塊的電路如圖2所示。
圖3為三模冗余加固后的寄存器的頂層模塊的仿真波形圖,圖中標線處電路的狀態(tài)出現(xiàn)了錯誤(由輸入d可以看出正確的狀態(tài)應該是在第3個時鐘上升沿后輸出才變?yōu)?),其原因是由于TMR_DFF是組合邏輯輸出,在第1個上升沿的時候,reg0的輸入D經(jīng)clk,clk_skew[1]采樣后,out[0]變?yōu)?,reg1的輸入out[0]經(jīng)clk_skew[0]采樣后,其q2(圖1電路中的信號)變?yōu)?,電路狀態(tài)仍為1,在第二個上升沿來的時候,由于reg1的q2已經(jīng)為1,所以reg2的輸入out1經(jīng)clk采樣后,其q0變?yōu)?,多數(shù)表決后out1變?yōu)?,電路狀態(tài)為3,reg2的輸入out1經(jīng)clk_skew[1],clk_skew[0]采樣后,其q1,q2變高,輸出out2變高,電路狀態(tài)變?yōu)?,就出現(xiàn)了狀態(tài)出錯的狀況。
如果減小時鐘間的延遲,電路可能會出現(xiàn)不定態(tài),原因也是由于組合邏輯的提前輸出,這里就不再討論了。
2 三模冗余的實現(xiàn)
2.1 修改網(wǎng)表二次綜合
DC綜合的功能是讀取設計的RTL代碼并且根據(jù)時序約束,綜合RTL代碼到結(jié)構(gòu)級,從而產(chǎn)生一個映射后的門級網(wǎng)表,其中一個重要的步驟是指定綜合所使用的綜合庫,綜合庫一般由流片廠商提供,庫中包含了引腳到引腳的時序,面積,引腳類型和功耗等信息,綜合后的門級網(wǎng)表中的單元也就是庫中所定義的單元。
三模冗余的加固過程實際上就是為設計中的每個觸發(fā)器生成2個冗余觸發(fā)器并加上表決邏輯,而RTL代碼中無法反應出這點,因此可以對原設計綜合后的門級網(wǎng)表進行修改,把觸發(fā)器改為三模冗余觸發(fā)器,用門級描述編寫三模冗余觸發(fā)器模塊,然后和修改的網(wǎng)表一起再次綜合就可得到三模冗余加固后的網(wǎng)表文件。值得說明的是DC綜合庫里面有多種類型的觸發(fā)器,比如SDFF,EDFF,SEDFF,JK,DFF,即使在綜合腳本中限定只用DFF觸發(fā)器,也會有好幾種,所以對于不同的單元要編寫相應的三模冗余觸發(fā)器模塊(其結(jié)構(gòu)如圖1所示)。此外由于有3路時鐘信號,所以要編寫時鐘生成模塊,其功能是由clk產(chǎn)生互有延遲的2路時鐘信號。
首先在Synopsys的綜合工具DsignCompiler下對原設計的RTL代碼進行綜合,得到電路的門級網(wǎng)表。門級網(wǎng)表中的電路實際上就是通過例化綜合庫的單元來描述電路的結(jié)構(gòu),可以使用形式驗證工具Formality來驗證RTL代碼和綜合后的門級網(wǎng)表在功能上是否一致。
然后修改門級網(wǎng)表,在網(wǎng)表中增加線網(wǎng)類型ck[2:0],并且實例化clkgen模塊,再把網(wǎng)表里面的觸發(fā)器改為三模冗余觸發(fā)器,并修改其時鐘端口為{clk,ck[1:0]},由于綜合庫中不含有這兩個模塊,這時網(wǎng)表中就出現(xiàn)了兩個綜合工具沒有處理的模塊,時鐘生成模塊和三模冗余觸發(fā)器模塊,修改后的網(wǎng)表就不是完全映射后的門級網(wǎng)表。
最后對修改后的網(wǎng)表,時鐘生成模塊及三模冗余觸發(fā)器模塊進行再次綜合,這次綜合實際上就是對時鐘生成模塊和三模冗余觸發(fā)器的綜合,把它們映射為綜合庫中的單元,得到的門級網(wǎng)表即是三模冗余加固后設計的門級網(wǎng)表。
2.2 建立三模冗余觸發(fā)器的庫單元
由于三模冗余觸發(fā)器單元的時鐘端口有3位,即使在庫中加入三模冗余觸發(fā)器的單元,綜合器也無法把設計直接映射成該單元,因此可以把時鐘生成模塊放到TMR_DFF內(nèi)部,這樣三模冗余觸發(fā)器時鐘端口就只有1位,在庫文件中把觸發(fā)器單元用對應的三模冗余觸發(fā)器單元替換掉,DC就可以把電路中的觸發(fā)器直接映射成TMR_DFF,一次綜合就可以完成設計了,但是這樣一來整個芯片的面積又會增大很多(時鐘生成模塊不在共用),除此之外也可以借助上面的方法在原設計綜合后修改網(wǎng)表。前面已經(jīng)提到庫文件里面有很多種類型的觸發(fā)器,所以應對不同的DFF觸發(fā)器建立相應的庫單元,下面是一種建立庫單元的方法,主要分為2步:版圖設計和仿真特性提取。
單元庫的建立首先要完成單元的版圖設計,在確定單元庫所包含的單元種類和單元電路后,根據(jù)加工廠家的工藝參數(shù),設計規(guī)則等完成單元的版圖設計,并導出電路網(wǎng)表,此時網(wǎng)表中不僅有電路結(jié)構(gòu),還有電阻,電容參數(shù)。然后就可以進行單元的參數(shù)提取工作。
參數(shù)提取需要選擇一種用于參數(shù)提取的工具,這里選擇siliconsmart,其次要確定模擬仿真工具,如HSpice。主要步驟包括創(chuàng)建工作目錄配置仿真環(huán)境,引入?yún)⒖紟?,產(chǎn)生仿真文件,運行仿真特性提取,生成庫文件。
創(chuàng)建工作目錄是指創(chuàng)建一個用于siliconsmart運行的目錄,此時會自動生成一個名為config.tcl的腳本文件,需要手動對其進行一些關鍵配置,主要包括模擬工具的選擇(這里選擇HSpice),模擬模型的指定,環(huán)境溫度等變量的設置等。引入?yún)⒖紟焓菫楣ぞ咧付ㄒ粋€參考的庫單元,工具將參考單元的信息摘取出來,并為該單元生成一個控制文件,該文件詳細描述了需要提取的單元的信息。包括單元網(wǎng)表文件,管腳信息,邏輯功能,輸入信號的上升/下降時間,輸出管腳負載情況等。如果沒有參考的庫文件,則需要手動編寫該文件。產(chǎn)生仿真文件是告訴工具對單元的哪些方面進行特性提取,比如時序,功耗,CCS模型等。運行仿真提取是對單元進行模擬仿真特性提取工作。生成庫文件會產(chǎn)生2個庫單元,其中.v是仿真工具用的仿真庫,.lib是可讀的綜合庫,可以在DC中用read_lib *.lib命令讀入.lib文件,然后用write_ lib* *.db命令可以生成.db綜合庫(*代表庫單元的名字)。
對于抗輻射加固來說,除了用電路加固外可能還需要選擇更加可靠的工藝,SOI工藝就具有很好的抗輻射性能,它消除了閂鎖效應,有效地降低了單粒子效應,而此時就需要建立自己的單元庫了,庫中的觸發(fā)器單元就可以直接建成三模冗余觸發(fā)器的庫單元。
3 結(jié)語
航天系統(tǒng)中芯片的抗輻射能力是一個重要的指標,對于抗輻射的處理器和存儲器來說,輻照實驗是測試中的一個重要環(huán)節(jié)。三模冗余加固技術只是眾多抗輻照加固技術的一種,比較常用的還有檢錯糾錯碼EDAC,SOI工藝加固,其中采用SOI工藝流片的費用比普通工藝更為昂貴。標準單元庫的建立對ASIC設計來說是一項基礎性的工作,建立符合設計需要的標準單元庫對芯片設計來說是很重要的,對此文章提供了一種一般性的方法。
評論