0 引言
VHDL(VSHIC Hardware Description Language的缩写),即超高速集成电路硬件描述语言,在国外已被广大设计者所接受,据称美国已有80%的设计者使用或即将使用VHDL来设计专用集成电路(ASIC)。
在国内,VHDL设计环境的研究开发还在起步阶段,是急待开发的高科技领域之一。由于我国集成电路设计业起步较晚,设计方法仍处在较低层次,因此对VHDL的应用需求较少。
用VHDL语言进行电子设计的主要优势在于它支持自顶而下的设计方法,设计人员可以在设计的每个层次(行为级、RTL级、门级)上进行仿真和综合,这样就避免了在设计后期才发现原来设计中的逻辑性错误,从而减小了设计性风险,也缩短了设计周期,这对一个大型设计来说尤为重要。另外VHDL设计中不包含与工艺有关的信息,使得VHDL与最终的工艺实现无关,可以等到设计通过门级仿真后,再用相应的工具将其映射到不同的工艺如:MOS、CMOS、FPGA或PLD等,这样在工艺更新时就无须修改原设计,只要改变其映射工具就行了。
高层次设计方法—HLD(High Level Design)是进入20世纪90年代以来设计ASIC最新、最先进的设计方法,它为用户设计更大规模、更高水平、性能优良的ASIC产品提供了可靠的保证。高层次设计技术是面向系统的设计技术,设计者不再用逻辑图的形式来设计系统,而是采用VHDL对系统进行语言级描述,其关键技术在于系统的仿真、综合、测试。在使用VHDL对系统进行描述时,就必须考虑到对系统的功能仿真。功能仿真的目的是对所描述的电路功能正确与否的验证,经过功能仿真找出设计的错误并进行修正,因此系统的功能仿真在整个ASIC设计过程中具有重要的作用。本文将研究如何对一个ASIC系统(以8051微控制器为例)应用VHDL进行功能仿真的方法。
1 仿真方法
本文采用下一时间仿真方法,在下一事件仿真中,假定所有的未来事件是在同一时刻发生的,这就意味着元件的延迟时间均等于0,该假定只对同步线路成立,对异步线路则不允许。由于各元件的延迟时间可能不同,所以它们的动作时间也不一样。为了考虑元件的延迟时间,关键在于能分辨出未来事件发生的先后顺序。
在下一事件仿真中,仿真时间的间隔实际上是节拍时间。在每一节拍的仿真过程中,所发生的事件和仿真时钟似乎并无联系。但如果把发生的事件和仿真时钟相互对应起来,就可以分辨出事件发生的先后顺序。在事件映射方式中,为了反映出元件的延迟时间和方便起见,把仿真时间量化为常数Δt的时间间隔,未来发生动作的时间为一离散的时间序列:
t1 , t2 , … , ti , ti+1 , … , tn
其中:
ti+1=ti+Δt
如前所述,Δt可取作各元件延迟时间的最大公约数;ti为信号传播时间。于是便可将不同时间发生的事件与不同时刻的仿真时钟相对应,仿真则按时间序列一个时刻一个时刻地进行,而不是以一个节拍时间为时间间隔,并且也只选择那些状态值可能发生变化的元件,边计算边确定未来事件,但未来事件发生的时间是根据元件各自的延迟时间来排定的。在时刻ti,元件X某输入发生变化,则其输出应在时刻
t=ti+Δt
才可能动作,其中Δt是元件X的延迟时间,它应当是Δt的整数倍。如果也用后进先出栈来表示未来动作,将时间t动作的元件X放在栈St中。显然,一个动作的元件其终点集合可能放在不同栈中,一个未来动作栈已远远不能满足需要。为了节省存储单元,不是在每个仿真时刻都设立一个动作栈,而是把动作栈循环使用。如果线路中元件的最大延迟为Δmax个Δt,则需要的后进先出栈的数目为:
n=Δmax+1
设想各先进后出栈分布在一个圆周上,并以指针p指向现在动作栈Sti上,指针P顺次指向S1,S2,…,Si,Si+1,…,Sn,t1,t2,…。从新的动作栈Si+1中取出每个元件,并计算它们的终点元件,分别送到适当的未来动作栈中。从现在动作栈取完后,指针将指向下一栈,这样便完成了时间映射方式的仿真:以Δt为时间间隔,按上述所选取的仿真时间序列,从外部新输入信号开始进行追踪,边计算边确定各个时刻状态发生变化的动作元件(事件),直到规定时刻或动作栈全空为止,从而也就知道网络中各信号在每个时刻的状态值。
2 8051微控制器系统的功能仿真
MCS-51是Inter公司的新一代8位单片机系列,由于它具有很强的位寻址和运算功能,特别适合于控制应用的场合,因此又称为微控制器。使用MCS-51构成的各种控制系统,可大大简化硬件结构,降低成本,它已广泛应用于钢铁、采矿、石油、化工、电力、机械制造等工业的控制之中。8051是MCS-51单片机系列的典型产品,故本文以它为模型研究了应用VHDL对ASIC系统进行功能仿真。作者在AC-TIVE-VHDL软件环境下应用VHDL编制了8051微控制器的功能仿真程序,该程序包含11个程序完成其功能仿真。限于篇幅,不能对11个程序的功能一一介绍,这里主要介绍其中几个重要的程序:
system.vhd:这是此次设计的顶级程序,即相当于主程序,实体名为system,为顶级实体,结构体为struct,它调用了4个下一级的程序:mc8051,、nvsram、373latches和时钟程序。它的端口包括了:p0:数据输入输出端口;p1:低位地址字节命令;p2:高位地址字节命令;p3下面各位的特殊功能为:port3.0,串行输入口;port3.1,串行输出口;port3.2,外部中断0;port3.3,外部中断1;port3.4,定时器0的外部输入;port3.5,定时器1的外部输入;port3.6,外部数据存储器写选通;port3.7,外部数据存储器读选通;rst:复位输入端;xtal1:时钟输入频率1.2到12MHz;xtal2:外接晶体振荡器的输出端;ale:提供地址锁存,禁止输出;psen-n:外部程序存储器的选通信号;ea-n:低电平时只访问外部程序存储器。
其函数中定义了一个clockgen进程,这个进程为整个设计中的clock时钟设计了其工作周期:低电平62ns,接着高电平63ns,如此循环。
xs40.vhd:本程序主要用于仿真之实现,实体名为xs40tb,结构体名为a1,它主要完成的功能是为各个程序中端口输入模拟的信号量进行计算机仿真。mc8051.vhd:本程序用于描述8051微控制器模型,并且需要提供uart实体(完成扩展功能)。实体名为mc8051,结构体名为behav。本程序是此次设计的重点和难点,8051微控制器的主要功能都是在本程序中得到描述的。
tb.vhd:本程序是对8051芯片进行测试的测试平台,其中的一部分输入模拟量是从程序pwm.vhd得到的输出量。本文用测试平台tb.vhd做了一个简单的测试,完成一个目标选择器,其功能是:决定是加载输入信号还是F到输出端Y;决定是否加载输入信号F(0)到输出端RAM0;决定是否加载输入信号F(1)到输出端RAM3;决定是否加载输入信号Q(3)到输出端Q3;决定是否加载输入信号Q(1)到输出端Q0。I(7 down to 0)和Oebar为控制信号。A和F为输入信号,Y、Q、RAM3、RAM0为输出信号。对信号赋值后,运行得到图1、图2两张波形图。
由图1、图2可以看出,在控制信号的作用下,由输入信号波形可以得到输出信号波形,从而可以证明程序运行正确。
3结束语
本文采用下一时间仿真方法,应用VHDL对一个ASIC系统(以8051微控制器为例)进行了功能仿真的研究,编制了功能仿真程序。在控制信号的作用下,由输入信号波形可以得到输出信号波形,从而可以证明程序运行正确。本文的工作在ASIC的高层次设计上迈出了重要的一步,在工程实践中具有广泛的应用价值。