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