基于82C52功能仿真验证的研究
扫描二维码
随时随地手机看文章
摘 要:首先介绍了利用仿真工具进行电路功能仿真验证的过程与方法,以及仿真方案的确定,并以82C52为例详细阐述了仿真验证中激励文件的编写和对82C52进行功能验证的具体步骤。最后简单介绍了82C52的功能及其中各种寄存器的作用以及对寄存器的编程。
1 引 言
功能仿真主要验证被验证电路功能的正确性,主要分RTL级仿真与netliST的仿真。Netlist又分为DC输出和As 输出。由于neflist的仿真带sdf文件(延时信息),所以要比RTL的仿真准确,而且越到流程的后端,仿真的延时信息越真实,仿真结果越接近实际。
2 验证方案的确定
本次设计的验证方案是根据单片机对外部串口电路的控制来实现的,验证方案的基本框图如图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,同时还要进行代码覆盖率的分析。由于在最开始的时候写的testbench覆盖率一定不全,所以需要后来的不断完善来提高代码覆盖率以达到设计要求。用VCS做代码覆盖率分析的主要命令是:在编译时加入可选项一cmline+tsl+FSM+eond,这是四种覆盖率,可以根据需要只选其中的一个或几个;VCS—cm—PP gui察看覆盖率的结果。
4 testbench的编写
把82C52与8032以及一些外围接口电路连接在一起组成一个简单的系统,通过汇编程序来控制82C52以达到仿真的目的。所以testbeneh的编写也主要是完成这个简单系统的搭建,读取事先编好的单片机汇编指令就可以了。
5 82C52功能描述
(1)复位
上电后,复位输人为高,82C52在两个Ix时钟周期内进行初始化并进入空闲模式直到程序写人。
复位输人为高电平时,复位内部波特率发生电路的时钟计数器和位计数器。BRSR不受影响(第7位除外);清零USR(TC和TBRE除外);清零MCR;全部的离散信号、内存单元和各种逻辑寄存器位都被清零和关闭。接着清除复位状态(RST=0),82C52仍然保持空闲模式直到程序写人。
仿真时,首先验证Reset的正确性:
Hardware Reset:上电后,82C52的Reset输人端必须保证至少两个时钟周期的高电平来初始化82C52使它进人空闲模式。复位引起的操作有:
①复位内部波特率发生器的时钟计数和位计数,将Band Rate Select Register(BRSR)的第七位复位为0。@USR中除了TC和TBRE两位被置位其余位被清零,MCR被清零,其它相关的存储器、寄存器等也都被清零或设为无效,但要注意复位不影响UCR。复位后空闲模式会一直保持直到对82C52编程改变它的这种模式。此种复位不影响BRSR、UCR。
Software Reset:首先读出USR、RBR中的数据来清除残余的数据和状态,以免造成并发或重复控制,然后通过设置UCR、BRSR、MCR三个寄存器的值,使82C52恢复到空闲状态。
(2)编程
编程前需要设置的寄存器有BRSR、MCR和UCR来初始化82C52,但要注意MCR要最后设置。
UCR:设置帧格式,DO位设置停止位的位数,当DO=0时,停止位是1位,当DO=1时,如果数据是8位的,停止位是1.5位,数据位是5位,停止位是1位,数据位是6、7位,停止位是2位。D3、D2、D1位设置奇偶校验位。D5、D4为设置数据位数,00=5bits,01=6bits,10:7bits,11=8bits。最高两位为保留位设置为0。
BRSR:设置波特率,D1、Do两位控制第一次分频,00=/1,01=/3,10=/4,11=/5,D6到D2位控制第二次分频有18种,所以一共有72种分频方法,经两次分频后的频率为82C52最后用的频率的16倍。
MCR:可以选择82C52的工作模式、中断控制、接收发送申请等命令。DO为请求发送控制位,低有效。Dl为终端准备好控制位低有效。D2为允许中断控制位,l为允许中断。D5为允许接收控制位,1为允许接收,software Reset时此位设无效(0)。D6为允许终端中断控制位,1允许中断。D7必须设置为0保证82C52被正常设置。D3、D2为模式选择控制位,00=Normal,01=Transmit Break,10=Echo mode。
到这里,82C52编程前的设置工作就完成了,并且这些设置都是通过汇编指令完成的。与接收和发送有关的寄存器有RBR和TBR,它们从DO 位到D7位依次为bitO到bit7,数据位数少于8时,RBR中有效数据外的其它高位被置成0,TBR中则被忽略。
SDI的数据串行进入接收寄存器然后并行进入接收缓冲寄存器,然后DR输出端和USR中的标志位DR都被置位。TRB的状态由TBRE输出端和USR中的flag TBRE标志,TRB和TC都是空时由USR中的TC flag标志。
USR:UART状态寄存器,这个寄存器中的数据可以通过CPU读取来清空并保持直到状态再次发生改变。
MSR:终端状态寄存器。
编程结束,82C52将准备执行通信功能。
控制寄存器可以被写进任何命令。MCR最后被写入,因为它控制中断使能,远程设备控制输出和接收使能位。一旦82C52编程且工作时,这些寄存器立即发送或接收数据。表1示意了82C52内部寄存器的控制信号。
表1 82C52内部寄存器的控制信号
82C52中断结构:
82C52有一个中断输出引脚,在MCR中有两个控制位:MIEN和INTEN。如果这两个标志位设为无效,将不会引起中断,如果MIEN无效,INTEN有效,则引起中断的信号有RBRK、TC、OE、FE、PE(此时检查上升沿),如果两个都设为有效,则引起中断的信号除了上面的还有DSR\和CTS\(上升沿和下降沿都有效)。
82C52可能发生中断的条件有:
(1)SDI引脚接收到数据(RBRK??)。
(2)发送数据完成(TC)。
(3)接收数据时发生错误,有错误信息产生(OE、FE、PE)。
(4)终端控制信号发生变化(DSR\、CTS\)。
以上各个部分功能可以通过对8032的编程逐个验证,验证时准备把输出的数据保存与输入的数据进行比较,正确就可以pass,不正确也可以定位是那一个寄存器或数据出错。
6 结束语
一般的简单接口电路,本人认为都可以通过类似单片机的控制器来做验证。这样激励就可以通过控制器给出,可以不必考虑给出激励的时序关系是否正确,即简单又方便。