一种基于面向对象的VHDL语言实现方法:通过这种方法生成的C++代码保留了原VHDL设计的层次结构关系,具有层次清晰、可读性好、高效等特点,由此构造的编译模拟器具有模拟速度高、可扩充性强的优点,为超大规模集成电路的高速模拟提供了有效的技术。
【技术实现步骤摘要】
本专利技术涉及一种基于面向对象的VHDL语言实现方法,是面向对象的VHDL语言(OO-VHDL)及其设计实现方法。
技术介绍
OO-VHDL (Object-Orieted VHDL),即面向对象的VHDL,其主要概念来自美国国防部支持的 RASSP (Rapid Prototyping of Application-Specific Signal Processors,快速专用信号处理器原型)计划。面向对象的方法在处理复杂性和增加软件的可再生性方面的能力已在软件工程界获得广泛承认。而这正是当前IC设计中迫切需要解决的问题。因此,人们希望把面向对象方法应用到VHDL中。RASSP的开发者认为面向对象的要素(如抽象、封装、模块性、层次等)同样适用于对硬件进行抽象,Vista Technologies公司由此出发扩展VHDL语言。扩展后的VHDL语言被称之为00-VHDL语言。主要的扩展是引入了新的语言对象Entity Object,是在Entity基础上增加类的特征得到的;此外,00-VHDL中的Entity和Architecture具备了继承机制,不同的Entity Object之间可以用消息来通信。实际上VHDL本身已具备一定程序的抽象性和模块性。Entity、Procedure和Fuction支持抽象性,Package、Entity和存放在VHDL代码的文件都是可再用的模块。但在抽象性上,VHDL有很大的不足:从Entity的接口中,设计者无法获得元件的功能信息,只能通过精确的设置端口电平来启动所需要的操作,而不能以抽象的方式进行。特别是进行较高层次的仿真时,下一级单元的模型往往还没有建立或者还需要修改。在封装性上,VHDL能力也不够强,比如说Package中的Variable或Signal是不能被封装的。00-VHDL解决这些问题的方法是引入Entity Object作为抽象、封装和模块性的基本单元。在VHDL中,可再用的层次只发生在component—级,设计者要么完全按照元件原有的配置去使用它,要么重新设计新的元件。但是,实际设计时常常是对现有元件作一些修改或增加一些新的功能。如果使用标准VHDL,通常只好手工拷贝并修改原来的代码。00-VHDL的继承机制较好地解决了这一问题。Entity Object中的operation由消息(message)激活,从消息发送者的角度,发送一条消息类似于调用子程序。但从接收者的角度,消息是执行某项操作的请求,并不一定要被立即响应。因此,消息是一种比较抽象的机制,与硬件没有直接的对应关系。而在硬件中,元件之间的通信和数据交换需要特定的协议或同步机制。通过消息,设计者可以抽象地启动某一操作而不必精确地按照协议或同步机制。这样就提高了建模的灵活性;否则。若通信协议或同步机制有所改变,则必须修改整个VHDL模型。目前,Vista Technologies正在开发00-VHDL的支持环境在这个环境中,设计者通过一定的输入工具建立00-VHDL模型,其源代码由预处理器翻译成标准的VHDL代码,这代码可以被一般VHDL仿真和综合工具接受。在仿真时,一个跟踪工具(traceability tool)把VHDL代码中语句映射回初始的00-VHDL代码,这样调试可以在00-VHDL代码中进行。
技术实现思路
基于上述问题,特此专利技术一种基于面向对象的VHDL语言实现方法;借助一个模拟调度核心来完成此工作,模拟调度核心的主要作用是在模拟过程中在适当的时候调整整个设计中的各个由进程转化来的C++类成员函数,以模拟进程的并发执行过程,可以使用事件驱动(event-driven)的模拟算法来实现。其算法如下: while (还有未处理的事件) { while (对于所有信号更新事件) 更新信号; while (对于所有信号更新事件)激活所有等待此信号的进程,并模拟进程;while (对于所有等待条件被满足的进程等待事件)激活进程,并模拟进程; 删除本模拟周期中的所有事件,进入下一个模拟周期; }(I)常量、变量和信号的翻译在表示方法上以C++的类对象对应VHDL中的常量、变量和信号对象。为每一种VHDL中的数据类型定义一个类,在类中定义一个标识符用以区分信号、变量和常量,通过以数据类型定义对象的方式定义数据量,并通过向构造函数传递参数来区分信号、变量和常数。例如,下面的VHDL源描述(左边)402005年第6期可翻译为对应的C++代码(右边):signal a:bit: = ’ O’ ;Wbitdata a( “a”,GVHdLobject::SIGNAL,0’ );Variable b:integer:= 10 ;ffintegerdata b (“b”,GVHdLobjcct: !VARIABLE,...,10);constant c:integer:= 20 ;ffintegerdata c (“c”,GVHdLobject::CoNSTANT,...,20);其中Wbitdata和Wintegerdata分别为VHdL中的bit和integer类型定义的两个类,Constant,variable, signal是定义类GVHdLobject中的3个类静态常量,用以区分常量、变量和信号。·(2)实体、结构体的翻译实体、结构体是VHdL组织整个设计的基本单元。C++结构体类中定义在VHdL结构体中声明的信号等数据,并且由于结构体是实体的功能实现,它拥有实体所有的属性,这与C++中的派生关系相同,因此可使C++中的结构体从实体类中进行派生。每一个实体对应一个实体类,每一个结构体对应一个结构体类。⑶进程翻译进程是模拟器调度的基本单元,进程的翻译对于模拟调度起着关键作用。将结构体中的每一个VHdL进程都翻译为一个C++进程类,这样在VHdL进程中定义的对象等均可以直接定义为C++进程类中的成员变量,而进程中的顺序语句则翻译为进程类的一个成员函数(simulateO函数)。模拟器所调度时以进程类对象为调度对象,当进程被激活需要模拟时,模拟将调用进程类对象的SimulateO函数。本文档来自技高网...
【技术保护点】
一种基于面向对象的VHDL语言实现方法:该方法主要是利用用C++的顺序语句来表征VHDL的并行特性。
【技术特征摘要】
1.一种基于面向对象的VHDL语言实现方法:该方法主要是利用用C++的顺序语句来表征VHDL的并行特性。2.根据权利要求...
【专利技术属性】
技术研发人员:杨际荣,
申请(专利权)人:镇江华扬信息科技有限公司,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。