蘇 琳,郎 猛
(中國電子科技集團公司第四十七研究所,沈陽 110000)
隨著消費類電子產(chǎn)品和工業(yè)控制產(chǎn)品的應(yīng)用越來越廣,實時時鐘的需求也在不斷增加。在當前國際形勢下,研發(fā)一種能適應(yīng)嚴苛環(huán)境的高精度、高集成度時鐘模塊的需求日漸迫切[1]。在芯片設(shè)計過程中,邏輯功能驗證是其中一個重要環(huán)節(jié),作為芯片封裝后的一種檢驗手段,結(jié)合設(shè)計初期的邏輯仿真及后期的參數(shù)指標測試,可最大限度發(fā)現(xiàn)芯片邏輯上、工藝上的錯誤與缺陷,對減少流片次數(shù)、降低研制成本具有現(xiàn)實的經(jīng)濟意義。本研究中選用的時鐘模塊的計時范圍為100年,由于此功能的特殊性,在實際應(yīng)用中要完整驗證是不可能的,因此需要探尋一種適當可行的驗證方法,以提供一種合理、快速的驗證過程,為產(chǎn)品研發(fā)和生產(chǎn)提供測試手段[2]。
研究中使用的時鐘模塊為筆者單位自行研制,具有高精度、斷電工作等特點,兼?zhèn)銻TC、日歷、鬧鐘報警、閏年補償、時間12/24小時格式切換、四個中斷輸出及可選擇頻率方波輸出等功能。為其設(shè)置114字節(jié)的靜態(tài)RAM存儲空間,并內(nèi)置鋰電池與頻率為32.768 kHz的柱形無源晶振,當電源掉電,電路將檢測到主電源故障,可自動切換到內(nèi)置備用電池供電。該模塊也支持Intel和Motorola兩鐘總線訪問模式,具有較高的集成度和環(huán)境適應(yīng)性[3]。
模塊包含四個控制寄存器,依次編號為A、B、C、D??刂萍拇嫫鰽設(shè)置時間更新、振蕩器使能和方波/周期性頻率輸出速率;控制寄存器B為使能寄存器,主要包括周期性中斷使能、鬧鐘中斷使能、更新結(jié)束中斷使能、方波使能、夏令時使能;控制寄存器C為中斷標志寄存器,主要包括中斷請求標志、周期性中斷標志、鬧鐘中斷標志、更新結(jié)束中斷標志;控制寄存器D主要檢測電池電量情況,用以判斷RTC和RAM內(nèi)的數(shù)據(jù)是否可靠。
寄存器A的位定義如表1所示。其中DV2、DV1、DV0是振蕩器控制位,“010”是唯一開啟振蕩器并使能計時鏈的組合形式,寫入后500 ms開始數(shù)據(jù)更新。11x組合將打開振蕩器,并使計時鏈保持在復(fù)位狀態(tài),其他組合態(tài)將關(guān)閉振蕩器[4]。
表1 控制寄存器A
初次使用RTC涉及到振蕩器的打開操作,即設(shè)置DV2=0,DV1=1,DV0=0,其它流程默認振蕩器已開啟。
周期性方波功能相當一種可選擇的頻率發(fā)生器。寄存器A的RS3、RS2、RS1、RS0稱為速率選擇器,對應(yīng)15種輸入,可選擇13種獨立輸出;選擇器為“0”時為禁止輸出。設(shè)置選擇器(RS3、RS2、RS1、RS0)為n,則分頻數(shù)F(n)在不同取值下的形式如下:
當n=0, F(n)=None;
當1≤n≤2, F(n)=2(9-n);
當3≤n≤15,F(xiàn)(n)=2(16-n)。
因為RTC模塊內(nèi)置晶振頻率為32.768 kHz,所以對RTC提供32768個脈沖即可模擬1 s周期的狀態(tài)。為了能精確驗證計數(shù)鏈,在設(shè)計驗證板卡時預(yù)留了程序脈沖接入端。
使用周期性中斷會使驗證過程更高效便捷。如表2所示為寄存器B中的周期性中斷使能(PIE);如表3所示為寄存器C中的周期性中斷標志(PF)。兩者共同決定中斷是否發(fā)生。
表2 控制寄存器B
PF以寄存器A中RS3~RS0位指定的速率產(chǎn)生周期性置位。當PIE置1,將允許中斷;清0時,阻止中斷,PF=PIE=1,使得中斷請求標志IRQF置1,同時拉低IRQ并觸發(fā)中斷。PF位不可寫,可通過讀寄存器C或由RESET清除。
開啟周期性中斷,記錄1 s期間(以32768個脈沖模擬)的中斷次數(shù),其數(shù)值應(yīng)與設(shè)定的分頻數(shù)一致,即選擇器(RS3、RS2、RS1、RS0)設(shè)定為n,分段函數(shù)F(n)的值等于中斷發(fā)生的次數(shù),15組均符合則視為驗證通過。
各個部分可能涉及不同的控制寄存器,以及其它存儲單元,作為兼容設(shè)計,在具體場合下還需參考相應(yīng)部分的描述,流程內(nèi)則以標號形式引入,不做過多文字表述,有些只陳述方法。
實時時鐘的驗證須結(jié)合更新結(jié)束中斷才更方便,因此,要用到寄存器B及寄存器C。
寄存器B中的更新使能位(SET)面向用戶層,便于讀寫操作。清0時,更新傳輸功能保持正常;置1時,禁止任何更新傳輸。用戶程序可以對時鐘和日歷字節(jié)進行讀寫操作,而不會出現(xiàn)因時鐘跳變及進位引起的讀寫錯誤。更新結(jié)束中斷使能(UIE)為1,則允許對應(yīng)的更新結(jié)束中斷標志(UF)驅(qū)動產(chǎn)生IRQ信號,SET變高,將屏蔽UIE位。數(shù)據(jù)模式(DM)位表示時鐘和日歷信息格式,DM=1為二進制格式,為0則為BCD格式。24/12位決定小時字節(jié)的格式,1代表24小時制,0代表12小時制。夏令時設(shè)置位(DSE)置1時有效[5]。中斷請求標志(IRQF)位在PF=PIE=1、AF=AIE=1、UF=UIE=1任一條件成立情況下,則IRQF=1;全部條件均不成立,則IRQF=0。更新結(jié)束中斷標志(UF)為UF=UIE=1,使得IRQ信號變低并使IRQF置1,該位不可寫,可通過讀寄存器C或RESET變低清除。
對RTC時鐘管腳每發(fā)32768個脈沖,應(yīng)產(chǎn)生一次秒計數(shù),并產(chǎn)生更新結(jié)束中斷,來檢查秒計數(shù)邏輯的正確性,從而在中斷處理程序中完成數(shù)據(jù)格式、范圍和計數(shù)功能驗證。分鐘驗證則“跳過”秒級計數(shù),即每次預(yù)置seconds=59;小時驗證則跳過秒和分計數(shù),即每次預(yù)置seconds=59,minutes=59。使得分鐘和小時的每次計數(shù)時間等于秒周期,并且每一時段都能遍歷到,既驗證了各段計數(shù)鏈,也驗證了中斷鏈。通過這種方式,將顯著提高驗證效率,且不損失邏輯的完備性。如圖1所示為完整的驗證流程圖。
圖1 時鐘和中斷鏈驗證流程圖
閏年定義為普通年份數(shù)字可被4整除且不被100整除的、世紀年份數(shù)字可被400整除的。此處驗證閏年2月份是否為29天,即驗證從28天跳到29天的過程和29天跳到3月第1天的過程,亦即時間設(shè)置為閏年28日23:59:59跳一秒后驗證其是否為29日00:00:00,再設(shè)置為29日23:59:59跳一秒后驗證其是否為3月1日00:00:00。
12小時制PM/AM轉(zhuǎn)換時刻為12:59:59到1:00:00,驗證方法同樣是檢驗該跳點變化時刻的時間和狀態(tài)指示變化是否符合規(guī)則[6]。
寄存器的第0位是夏令時使能(DSE),可讀寫位,置1時產(chǎn)生兩次夏令時調(diào)整,即4月的第一個星期日,時間向前跳1小時,從1:59:59 AM變?yōu)?:00:00 AM。10月的最后一個星期日,時間向后退1小時,從1:59:59 AM變?yōu)?:00:00 AM。DSE清0,則表明為非夏令時狀態(tài)。時間可通過設(shè)置自動判斷4月的第一個星期日和10月最后一個星期日。
日期驗證:以隨機數(shù)方式選取年份(00~99),時間預(yù)置到每天的最后一秒。1月份按31天進行遍歷,驗證日期計數(shù)器是否正常;2月至12月份只驗證月末日期自動調(diào)整功能是否正常。
星期驗證:只要遍歷連續(xù)7天的結(jié)果,符合星期數(shù)從1到7的循環(huán)遞增規(guī)律即可。
月份驗證:從1遍歷到12,月份驗證將時間預(yù)置到每個月的最后一秒時刻,年份按隨機數(shù)方式選取或取21。
年份驗證:從0遍歷到99,年份驗證則將時間預(yù)置到每年的最后一秒時刻。
預(yù)置1能跳過前端計數(shù),減少無端耗時;預(yù)置2能快速抵達跳點位置,以檢驗變化過程是否符合計數(shù)規(guī)則。二者皆為加速試驗進程。
RTC中鬧鐘具有中斷功能,驗證過程既需針對邏輯關(guān)系,也涉及到中斷鏈路。如圖2所示為鬧鐘驗證流程。
圖2 鬧鐘驗證流程圖
鬧鐘中斷使能(AIE)和鬧鐘中斷標志(AF)共同決定中斷的發(fā)生。AF=AIE=1成立是中斷的條件,此刻IRQF置1,IRQ信號變低。
鬧鐘具有兩種形式[7]:一種是按設(shè)定時間發(fā)生的鬧鐘方式,每天發(fā)生一次,驗證方法是采用隨機數(shù)來設(shè)置實時時鐘。鬧鐘單元則設(shè)成實時時鐘的下一秒,以期最短時間內(nèi)發(fā)生并記錄鬧鐘中斷,此過程重復(fù)若干次,可在一定程度上印證鬧鐘功能的有效性,極限做法是驗證24小時任一秒時刻。
另一種則是設(shè)置隨意碼發(fā)生的鬧鐘方式。以設(shè)定的結(jié)果整點(或整分或整秒)發(fā)生。
為描述方便,設(shè)SEC、MIN、HOU為秒、分和時的鬧鐘單元。
整點方式:HOU=11xxxxxxB;
整分方式:HOU=MIN=11xxxxxxB;
整秒方式:HOU=MIN=SEC=11xxxxxxB。
以此類推,此處只給出隨意碼整秒方式流程。
針對初樣樣品,以80C51單片機為基礎(chǔ)設(shè)計一套驗證板并通過上述驗證方法基于C語言編寫驗證流程,實現(xiàn)樣品的自動檢測、自動判斷,為后續(xù)生產(chǎn)中的批量測試提供參考依據(jù)。所設(shè)計驗證板的電路原理如圖3所示。
圖3 驗證板電路圖
以上述驗證手段與流程為參照,編寫Verilog代碼,通過SPICE仿真軟件對芯片功能進行后仿真,分別對小時、分鐘、天、周、月、年、閏年、24/12小時制、夏令時、鬧鐘、中斷等功能進行驗證。此處選取計時和夏令時仿真為例。
計時仿真:控制寄存器A中bit1位為24/12控制位,置1代表24小時模式,0代表12小時模式;bit2位為BCD和二進制切換位,置1為二進制格式,置2為BCD格式。在此采用24小時BCD格式的計時方式。為了得到更加全面的驗證,設(shè)置仿真開始時間為2021年12月31日,仿真結(jié)束時間為2022年1月1日。計時仿真結(jié)果如圖4、圖5所示。
圖4 仿真開始時間
圖5 仿真結(jié)束時間
夏令時仿真:控制寄存器B的最低位DSE位可讀/寫位,置1時產(chǎn)生兩次夏令時調(diào)整。4月的第一個星期天,時間從1:59:59 AM調(diào)整到3:00:00 AM。10月的最后一個星期天,時間從1:59:59 AM變?yōu)?:00:00 AM。此處以4月份的夏令時為例,使能DSE,內(nèi)部邏輯會在午夜時判斷第一個星期天的條件,做出時間調(diào)整。夏令時仿真結(jié)果如圖6、圖7所示。
圖6 夏令時調(diào)整前時間
圖7 夏令時調(diào)整后時間
本驗證方法適用于多種同類型的時鐘模塊或芯片。隨著研究的深入,通過對相關(guān)兼容產(chǎn)品實驗,邏輯關(guān)聯(lián)及中斷應(yīng)答機制的確認都得到了實現(xiàn),同時也基本實現(xiàn)了時鐘模塊或芯片的全功能測試,為產(chǎn)品研制提供了有效的驗證手段。然而由于驗證項較多且具有時間接續(xù)性,會出現(xiàn)單片測試時間較長的情況,在大批量生產(chǎn)中建議抽取主要功能進行測試。