蘇 琳,郎 猛
(中國電子科技集團公司第四十七研究所,沈陽 110000)
隨著消費類電子產品和工業控制產品的應用越來越廣,實時時鐘的需求也在不斷增加。在當前國際形勢下,研發一種能適應嚴苛環境的高精度、高集成度時鐘模塊的需求日漸迫切[1]。在芯片設計過程中,邏輯功能驗證是其中一個重要環節,作為芯片封裝后的一種檢驗手段,結合設計初期的邏輯仿真及后期的參數指標測試,可最大限度發現芯片邏輯上、工藝上的錯誤與缺陷,對減少流片次數、降低研制成本具有現實的經濟意義。本研究中選用的時鐘模塊的計時范圍為100年,由于此功能的特殊性,在實際應用中要完整驗證是不可能的,因此需要探尋一種適當可行的驗證方法,以提供一種合理、快速的驗證過程,為產品研發和生產提供測試手段[2]。
研究中使用的時鐘模塊為筆者單位自行研制,具有高精度、斷電工作等特點,兼備RTC、日歷、鬧鐘報警、閏年補償、時間12/24小時格式切換、四個中斷輸出及可選擇頻率方波輸出等功能。為其設置114字節的靜態RAM存儲空間,并內置鋰電池與頻率為32.768 kHz的柱形無源晶振,當電源掉電,電路將檢測到主電源故障,可自動切換到內置備用電池供電。該模塊也支持Intel和Motorola兩鐘總線訪問模式,具有較高的集成度和環境適應性[3]。
模塊包含四個控制寄存器,依次編號為A、B、C、D??刂萍拇嫫鰽設置時間更新、振蕩器使能和方波/周期性頻率輸出速率;控制寄存器B為使能寄存器,主要包括周期性中斷使能、鬧鐘中斷使能、更新結束中斷使能、方波使能、夏令時使能;控制寄存器C為中斷標志寄存器,主要包括中斷請求標志、周期性中斷標志、鬧鐘中斷標志、更新結束中斷標志;控制寄存器D主要檢測電池電量情況,用以判斷RTC和RAM內的數據是否可靠。
寄存器A的位定義如表1所示。其中DV2、DV1、DV0是振蕩器控制位,“010”是唯一開啟振蕩器并使能計時鏈的組合形式,寫入后500 ms開始數據更新。11x組合將打開振蕩器,并使計時鏈保持在復位狀態,其他組合態將關閉振蕩器[4]。

表1 控制寄存器A
初次使用RTC涉及到振蕩器的打開操作,即設置DV2=0,DV1=1,DV0=0,其它流程默認振蕩器已開啟。
周期性方波功能相當一種可選擇的頻率發生器。寄存器A的RS3、RS2、RS1、RS0稱為速率選擇器,對應15種輸入,可選擇13種獨立輸出;選擇器為“0”時為禁止輸出。設置選擇器(RS3、RS2、RS1、RS0)為n,則分頻數F(n)在不同取值下的形式如下:
當n=0, F(n)=None;
當1≤n≤2, F(n)=2(9-n);
當3≤n≤15,F(n)=2(16-n)。
因為RTC模塊內置晶振頻率為32.768 kHz,所以對RTC提供32768個脈沖即可模擬1 s周期的狀態。為了能精確驗證計數鏈,在設計驗證板卡時預留了程序脈沖接入端。
使用周期性中斷會使驗證過程更高效便捷。如表2所示為寄存器B中的周期性中斷使能(PIE);如表3所示為寄存器C中的周期性中斷標志(PF)。兩者共同決定中斷是否發生。

表2 控制寄存器B
PF以寄存器A中RS3~RS0位指定的速率產生周期性置位。當PIE置1,將允許中斷;清0時,阻止中斷,PF=PIE=1,使得中斷請求標志IRQF置1,同時拉低IRQ并觸發中斷。PF位不可寫,可通過讀寄存器C或由RESET清除。
開啟周期性中斷,記錄1 s期間(以32768個脈沖模擬)的中斷次數,其數值應與設定的分頻數一致,即選擇器(RS3、RS2、RS1、RS0)設定為n,分段函數F(n)的值等于中斷發生的次數,15組均符合則視為驗證通過。
各個部分可能涉及不同的控制寄存器,以及其它存儲單元,作為兼容設計,在具體場合下還需參考相應部分的描述,流程內則以標號形式引入,不做過多文字表述,有些只陳述方法。
實時時鐘的驗證須結合更新結束中斷才更方便,因此,要用到寄存器B及寄存器C。
寄存器B中的更新使能位(SET)面向用戶層,便于讀寫操作。清0時,更新傳輸功能保持正常;置1時,禁止任何更新傳輸。用戶程序可以對時鐘和日歷字節進行讀寫操作,而不會出現因時鐘跳變及進位引起的讀寫錯誤。更新結束中斷使能(UIE)為1,則允許對應的更新結束中斷標志(UF)驅動產生IRQ信號,SET變高,將屏蔽UIE位。數據模式(DM)位表示時鐘和日歷信息格式,DM=1為二進制格式,為0則為BCD格式。24/12位決定小時字節的格式,1代表24小時制,0代表12小時制。夏令時設置位(DSE)置1時有效[5]。中斷請求標志(IRQF)位在PF=PIE=1、AF=AIE=1、UF=UIE=1任一條件成立情況下,則IRQF=1;全部條件均不成立,則IRQF=0。更新結束中斷標志(UF)為UF=UIE=1,使得IRQ信號變低并使IRQF置1,該位不可寫,可通過讀寄存器C或RESET變低清除。
對RTC時鐘管腳每發32768個脈沖,應產生一次秒計數,并產生更新結束中斷,來檢查秒計數邏輯的正確性,從而在中斷處理程序中完成數據格式、范圍和計數功能驗證。分鐘驗證則“跳過”秒級計數,即每次預置seconds=59;小時驗證則跳過秒和分計數,即每次預置seconds=59,minutes=59。使得分鐘和小時的每次計數時間等于秒周期,并且每一時段都能遍歷到,既驗證了各段計數鏈,也驗證了中斷鏈。通過這種方式,將顯著提高驗證效率,且不損失邏輯的完備性。如圖1所示為完整的驗證流程圖。

圖1 時鐘和中斷鏈驗證流程圖
閏年定義為普通年份數字可被4整除且不被100整除的、世紀年份數字可被400整除的。此處驗證閏年2月份是否為29天,即驗證從28天跳到29天的過程和29天跳到3月第1天的過程,亦即時間設置為閏年28日23:59:59跳一秒后驗證其是否為29日00:00:00,再設置為29日23:59:59跳一秒后驗證其是否為3月1日00:00:00。
12小時制PM/AM轉換時刻為12:59:59到1:00:00,驗證方法同樣是檢驗該跳點變化時刻的時間和狀態指示變化是否符合規則[6]。
寄存器的第0位是夏令時使能(DSE),可讀寫位,置1時產生兩次夏令時調整,即4月的第一個星期日,時間向前跳1小時,從1:59:59 AM變為3:00:00 AM。10月的最后一個星期日,時間向后退1小時,從1:59:59 AM變為1:00:00 AM。DSE清0,則表明為非夏令時狀態。時間可通過設置自動判斷4月的第一個星期日和10月最后一個星期日。
日期驗證:以隨機數方式選取年份(00~99),時間預置到每天的最后一秒。1月份按31天進行遍歷,驗證日期計數器是否正常;2月至12月份只驗證月末日期自動調整功能是否正常。
星期驗證:只要遍歷連續7天的結果,符合星期數從1到7的循環遞增規律即可。
月份驗證:從1遍歷到12,月份驗證將時間預置到每個月的最后一秒時刻,年份按隨機數方式選取或取21。
年份驗證:從0遍歷到99,年份驗證則將時間預置到每年的最后一秒時刻。
預置1能跳過前端計數,減少無端耗時;預置2能快速抵達跳點位置,以檢驗變化過程是否符合計數規則。二者皆為加速試驗進程。
RTC中鬧鐘具有中斷功能,驗證過程既需針對邏輯關系,也涉及到中斷鏈路。如圖2所示為鬧鐘驗證流程。

圖2 鬧鐘驗證流程圖
鬧鐘中斷使能(AIE)和鬧鐘中斷標志(AF)共同決定中斷的發生。AF=AIE=1成立是中斷的條件,此刻IRQF置1,IRQ信號變低。
鬧鐘具有兩種形式[7]:一種是按設定時間發生的鬧鐘方式,每天發生一次,驗證方法是采用隨機數來設置實時時鐘。鬧鐘單元則設成實時時鐘的下一秒,以期最短時間內發生并記錄鬧鐘中斷,此過程重復若干次,可在一定程度上印證鬧鐘功能的有效性,極限做法是驗證24小時任一秒時刻。
另一種則是設置隨意碼發生的鬧鐘方式。以設定的結果整點(或整分或整秒)發生。
為描述方便,設SEC、MIN、HOU為秒、分和時的鬧鐘單元。
整點方式:HOU=11xxxxxxB;
整分方式:HOU=MIN=11xxxxxxB;
整秒方式:HOU=MIN=SEC=11xxxxxxB。
以此類推,此處只給出隨意碼整秒方式流程。
針對初樣樣品,以80C51單片機為基礎設計一套驗證板并通過上述驗證方法基于C語言編寫驗證流程,實現樣品的自動檢測、自動判斷,為后續生產中的批量測試提供參考依據。所設計驗證板的電路原理如圖3所示。

圖3 驗證板電路圖
以上述驗證手段與流程為參照,編寫Verilog代碼,通過SPICE仿真軟件對芯片功能進行后仿真,分別對小時、分鐘、天、周、月、年、閏年、24/12小時制、夏令時、鬧鐘、中斷等功能進行驗證。此處選取計時和夏令時仿真為例。
計時仿真:控制寄存器A中bit1位為24/12控制位,置1代表24小時模式,0代表12小時模式;bit2位為BCD和二進制切換位,置1為二進制格式,置2為BCD格式。在此采用24小時BCD格式的計時方式。為了得到更加全面的驗證,設置仿真開始時間為2021年12月31日,仿真結束時間為2022年1月1日。計時仿真結果如圖4、圖5所示。

圖4 仿真開始時間

圖5 仿真結束時間
夏令時仿真:控制寄存器B的最低位DSE位可讀/寫位,置1時產生兩次夏令時調整。4月的第一個星期天,時間從1:59:59 AM調整到3:00:00 AM。10月的最后一個星期天,時間從1:59:59 AM變為1:00:00 AM。此處以4月份的夏令時為例,使能DSE,內部邏輯會在午夜時判斷第一個星期天的條件,做出時間調整。夏令時仿真結果如圖6、圖7所示。

圖6 夏令時調整前時間

圖7 夏令時調整后時間
本驗證方法適用于多種同類型的時鐘模塊或芯片。隨著研究的深入,通過對相關兼容產品實驗,邏輯關聯及中斷應答機制的確認都得到了實現,同時也基本實現了時鐘模塊或芯片的全功能測試,為產品研制提供了有效的驗證手段。然而由于驗證項較多且具有時間接續性,會出現單片測試時間較長的情況,在大批量生產中建議抽取主要功能進行測試。