摘 要:首先介紹了利用仿真工具進行電路功能仿真驗證的過程與方法,以及仿真方案的確定,并以82C52為例詳細闡述了仿真驗證中激勵文件的編寫和對82C52進行功能驗證的具體步驟。最后簡單介紹了82C52的功能及其中各種寄存器的作用以及對寄存器的編程。
1 引 言
功能仿真主要驗證被驗證電路功能的正確性,主要分RTL級仿真與netliST的仿真。Netlist又分為DC輸出和As 輸出。由于neflist的仿真帶sdf文件(延時信息),所以要比RTL的仿真準確,而且越到流程的后端,仿真的延時信息越真實,仿真結(jié)果越接近實際。
2 驗證方案的確定
本次設計的驗證方案是根據(jù)單片機對外部串口電路的控制來實現(xiàn)的,驗證方案的基本框圖如圖1所示。
圖1 82C52測試平臺
3 仿真所要準備的文件
RTL(Pre sire):testbench(仿真激勵),Design(被仿真的設計)DC_ netlist:testbench(仿真激勵),Design(被仿真的設計),saf(延時信息,由DC寫出),SimulatiONlibrary
Astro_ netlist(post sim):testbench(仿真激勵),Design(被仿真的設計),Sdf(延時信息,由 寫出),Simulation library
仿真的主要工具是VCS,主要命令是:>VC$testbeneh.v design.v—RI—M,同時還要進行代碼覆蓋率的分析。由于在最開始的時候?qū)懙膖estbench覆蓋率一定不全,所以需要后來的不斷完善來提高代碼覆蓋率以達到設計要求。用VCS做代碼覆蓋率分析的主要命令是:在編譯時加入可選項一cmline+tsl+FSM+eond,這是四種覆蓋率,可以根據(jù)需要只選其中的一個或幾個;VCS—cm—PP gui察看覆蓋率的結(jié)果。
4 testbench的編寫
把82C52與8032以及一些外圍接口電路連接在一起組成一個簡單的系統(tǒng),通過匯編程序來控制82C52以達到仿真的目的。所以testbeneh的編寫也主要是完成這個簡單系統(tǒng)的搭建,讀取事先編好的單片機匯編指令就可以了。
5 82C52功能描述
(1)復位
上電后,復位輸人為高,82C52在兩個Ix時鐘周期內(nèi)進行初始化并進入空閑模式直到程序?qū)懭恕?/p>
復位輸人為高電平時,復位內(nèi)部波特率發(fā)生電路的時鐘計數(shù)器和位計數(shù)器。BRSR不受影響(第7位除外);清零USR(TC和TBRE除外);清零MCR;全部的離散信號、內(nèi)存單元和各種邏輯寄存器位都被清零和關閉。接著清除復位狀態(tài)(RST=0),82C52仍然保持空閑模式直到程序?qū)懭恕?/p>
仿真時,首先驗證Reset的正確性:
Hardware Reset:上電后,82C52的Reset輸人端必須保證至少兩個時鐘周期的高電平來初始化82C52使它進人空閑模式。復位引起的操作有:
?、購臀粌?nèi)部波特率發(fā)生器的時鐘計數(shù)和位計數(shù),將Band Rate Select Register(BRSR)的第七位復位為0。@USR中除了TC和TBRE兩位被置位其余位被清零,MCR被清零,其它相關的存儲器、寄存器等也都被清零或設為無效,但要注意復位不影響UCR。復位后空閑模式會一直保持直到對82C52編程改變它的這種模式。此種復位不影響B(tài)RSR、UCR。
Software Reset:首先讀出USR、RBR中的數(shù)據(jù)來清除殘余的數(shù)據(jù)和狀態(tài),以免造成并發(fā)或重復控制,然后通過設置UCR、BRSR、MCR三個寄存器的值,使82C52恢復到空閑狀態(tài)。
(2)編程
編程前需要設置的寄存器有BRSR、MCR和UCR來初始化82C52,但要注意MCR要最后設置。
UCR:設置幀格式,DO位設置停止位的位數(shù),當DO=0時,停止位是1位,當DO=1時,如果數(shù)據(jù)是8位的,停止位是1.5位,數(shù)據(jù)位是5位,停止位是1位,數(shù)據(jù)位是6、7位,停止位是2位。D3、D2、D1位設置奇偶校驗位。D5、D4為設置數(shù)據(jù)位數(shù),00=5bits,01=6bits,10:7bits,11=8bits。最高兩位為保留位設置為0。
BRSR:設置波特率,D1、Do兩位控制第一次分頻,00=/1,01=/3,10=/4,11=/5,D6到D2位控制第二次分頻有18種,所以一共有72種分頻方法,經(jīng)兩次分頻后的頻率為82C52最后用的頻率的16倍。
MCR:可以選擇82C52的工作模式、中斷控制、接收發(fā)送申請等命令。DO為請求發(fā)送控制位,低有效。Dl為終端準備好控制位低有效。D2為允許中斷控制位,l為允許中斷。D5為允許接收控制位,1為允許接收,software Reset時此位設無效(0)。D6為允許終端中斷控制位,1允許中斷。D7必須設置為0保證82C52被正常設置。D3、D2為模式選擇控制位,00=Normal,01=Transmit Break,10=Echo mode。
到這里,82C52編程前的設置工作就完成了,并且這些設置都是通過匯編指令完成的。與接收和發(fā)送有關的寄存器有RBR和TBR,它們從DO 位到D7位依次為bitO到bit7,數(shù)據(jù)位數(shù)少于8時,RBR中有效數(shù)據(jù)外的其它高位被置成0,TBR中則被忽略。
SDI的數(shù)據(jù)串行進入接收寄存器然后并行進入接收緩沖寄存器,然后DR輸出端和USR中的標志位DR都被置位。TRB的狀態(tài)由TBRE輸出端和USR中的flag TBRE標志,TRB和TC都是空時由USR中的TC flag標志。
USR:UART狀態(tài)寄存器,這個寄存器中的數(shù)據(jù)可以通過CPU讀取來清空并保持直到狀態(tài)再次發(fā)生改變。
MSR:終端狀態(tài)寄存器。
編程結(jié)束,82C52將準備執(zhí)行通信功能。
控制寄存器可以被寫進任何命令。MCR最后被寫入,因為它控制中斷使能,遠程設備控制輸出和接收使能位。一旦82C52編程且工作時,這些寄存器立即發(fā)送或接收數(shù)據(jù)。表1示意了82C52內(nèi)部寄存器的控制信號。
表1 82C52內(nèi)部寄存器的控制信號
82C52中斷結(jié)構(gòu):
82C52有一個中斷輸出引腳,在MCR中有兩個控制位:MIEN和INTEN。如果這兩個標志位設為無效,將不會引起中斷,如果MIEN無效,INTEN有效,則引起中斷的信號有RBRK、TC、OE、FE、PE(此時檢查上升沿),如果兩個都設為有效,則引起中斷的信號除了上面的還有DSR\和CTS\(上升沿和下降沿都有效)。
82C52可能發(fā)生中斷的條件有:
(1)SDI引腳接收到數(shù)據(jù)(RBRK??)。
(2)發(fā)送數(shù)據(jù)完成(TC)。
(3)接收數(shù)據(jù)時發(fā)生錯誤,有錯誤信息產(chǎn)生(OE、FE、PE)。
(4)終端控制信號發(fā)生變化(DSR\、CTS\)。
以上各個部分功能可以通過對8032的編程逐個驗證,驗證時準備把輸出的數(shù)據(jù)保存與輸入的數(shù)據(jù)進行比較,正確就可以pass,不正確也可以定位是那一個寄存器或數(shù)據(jù)出錯。
6 結(jié)束語
一般的簡單接口電路,本人認為都可以通過類似單片機的控制器來做驗證。這樣激勵就可以通過控制器給出,可以不必考慮給出激勵的時序關系是否正確,即簡單又方便。