计算机研究与发展
JOURNAL OF COMPUTER RESEARCH AND DEVELOPMENT
1999　Vol.36　No.7　P.882-887



电路行为仿真编辑器的设计与实现
陈定君　郭晓东　徐征　刘积仁
摘　要：为了给嵌入式软件开发者提供了一个调试与测试嵌入式软件运行情况的软运行环境，我们开发了一种电路行为仿真编辑器.它除了提供电路图设计功能外，还自动寻找并尽可能生成电路最优EHDL语言描述源程序，从而得到较好的仿真电路.文中主要介绍了电路行为仿真编辑器系统设计的基本思想，包括电路高层次仿真模型及仿真算法的基本思想、系统功能模块划分、遗传优化机制等，同时介绍了系统采用的主要实现技术遗传程序搜索的初步实现方案.
关键词：高层次仿真模型, 基于进程的事件表驱动算法, “胚胎”电路, 遗传程序设计
分类号：TP391
THE DESIGN AND IMPLEMENTATION OF A CIRCUITS
BEHAVIOR SIMULATION EDITOR 
CHEN Ding-Jun
(Software Center of Northeastern University, Shenyang 110006)
GUO Xiao-Dong
(Software Center of Northeastern University, Shenyang 110006)
XU Zheng, and LIU Ji-Ren
(Software Center of Northeastern University, Shenyang 110006)
CHEN Ding-Jun
(National Engineering Research Center for Computer Software, Northeastern University, Shenyang 110006)
GUO Xiao-Dong
(National Engineering Research Center for Computer Software, Northeastern University, Shenyang 110006)
XU Zheng, and LIU Ji-Ren
(National Engineering Research Center for Computer Software, Northeastern University, Shenyang 110006)
Abstract：In order to provide a software workbench for software developer to debug embedded software, a circuits behavior simulation editor is developed. It not only offers circuits schematic design workbench, but also can find the best circuits EHDL description program to get the best simulation circuits. This paper mainly discusses the basic idea of the circuits behavior simulation editor system, including circuits high-level simulation model and simulation algorithm，system function module partition, genetic optimization mechanism, etc.. At the same time, it introduces the main implementation technology of the system.
Key words：high-level simulation model, event driven algorithm based on process, embryonic circuit, genetic programming▲
1　引言
　　嵌入式软件的应用与开发是当今计算机软件发展的一个热点，然而嵌入式软件开发周期长是一个令开发者长期头痛的事.其主要原因是嵌入式软件赖以运行的电路环境是不确定的，为调试嵌入式软件而搭建的实验板开销较大.况且在电路规模较大、功能较复杂的情况下，用试验板进行测试已越来越难了，因为开发者总要循环往复地对嵌入式软件和电路实验板进行修改.经过多年的研究，我们开发了嵌入式软件仿真开发集成环境.它主要是为嵌入式软件开发者提供一种仿真开发与调试的软平台.它不但可以缩短嵌入式软件开发周期、降低开发成本，而且还可带来开发者工作方式的变革.嵌入式软件开发人员并不一定必须限制在办公室进行研究与开发，从而提高了嵌入式软件并发开发程度.数字电路行为仿真编辑器是该项研究中的一个非常关键子课题，它主要完成嵌入式软件所需运行电路环境的仿真构造与生成.本文主要介绍电路行为仿真编辑器的设计思想与主要实现技术.
2　设计思想
2.1　电路高层次仿真模型及描述语言
　　高层次仿真模型以行为算法和结构的混合描述为对象，主要着眼于系统功能和内部的运行过程.其基本元素是操作和过程.各操作之间主要考虑其数据传输、时序配合、操作流程和状态转换.高层次仿真的方法一般是对描述的解释执行，或者将硬件描述语言的描述编译成一般软件语言如C/C++语言、汇编语言，然后执行.高层次描述和仿真也可以实现寄存器传输级的描述和仿真［1］.
　　硬件描述语言是高层次仿真的主要描述方法.VHDL是覆盖多个级别的多级混合的硬件描述语言，我们对VHDL进行改进而设计了EHDL(extension hardware description language)语言.构造EHDL语言的设计流程［2］，如图1所示.


图1　EHDL语言设计流程图
　　设计EHDL语言主要目的之一是为了最终能够产生C＋＋源代码，以便利用现有AT＆T C＋＋编译器.
2.2　基于进程的事件表驱动算法
　　由编辑器最终生成的电路描述程序实质上是进程的集合.每个进程定义一个完整的独立操作，它是由一组顺序语句组成的过程，相当于一段程序，它有挂起与激活两种状态.信号是协调各进程之间通信机制的数据通路，由信号的值控制各进程的运行，得到各信号的新状态值，即得到新的信号事件.以进程为基础建立，各个进程按语句自然顺序链接在一起的模型称为纯行为的进程模型.
　　进程模型是EHDL描述的基本模型.在纯行为模型中，整个电路的行为用进程的集合来表示.进程之间是并行执行的，对进程模型的仿真算法，用顺序执行各进程来模拟其并行性.保证并行性的方法是采用基于时间顺序的时间映射的以进程为驱动对象的事件表方法. 
　　文中嵌入式软件仿真开发系统运行于一台SUN工作站，为了同步它们的仿真运行，把时间划分为一个个细小时隙Δt，且认为在一个Δt时隙之内发生的事件都是并行事件，Δt一般比较小，这个Δt即为仿真周期，本系统的仿真周期定为1 ns.
　　基于进程的事件表驱动同步仿真算法核心部分描述如下：
While （（仿真时间 < 仿真结束时间）&（非终止条件））
　　　　{For 每一个时隙
　　　　　{　//修改阶段
For在当前时隙内仿真电路的每个元器件
　　　　If（元器件输出值≠相应的前输出值）
　　　　　修改其所有扇出元器件的输入值并设置重新计算标志；
　　　　//调度阶段
　For在当前时隙内仿真电路的每个元器件
　{　If（元器件输出值≠相应的前输出值）
　{　元器件的输出值=当前元器件输出值；
　由已设置的需重新计算元器件的标志，根据其扇出元器件延迟特性，
　重新计算其扇出元器件的输出值，并将其输出值插入将来的时隙中；
　清除当前元器件标志；
　}
　　}
　　递增仿真时间，进入下一个时隙；
　　}
}
　　如果在当前时隙内某一元器件的输入值多次被修改，那么该元器件的第一个输出事件将出现“早熟”现象.上述算法在修改阶段汇聚了所有到达元器件的输入值，在调度阶段再对元器件输出值进行计算，这样就避免了“早熟”现象.
2.3　电路行为编辑器系统的设计流程
　　电路行为编辑器系统设计流程如图2所示：


图2　编辑器系统设计流程
　　首先，用EHDL语言对每一个器件(诸如TTL库中74LS138）进行描述，并用器件编辑器对分立的数字器件或具有某一功能的功能块元件进行编辑，并支持器件的图形描述转化为用EHDL语言的形式化描述.构造较为完备的元器件库或功能块元件库，是该系统功能能否实现的前提，这将直接影响遗传优化机制的运行.然后，用构造元器件库来搭建所要仿真的“胚胎”电路，并支持电路的图形描述转化为用EHDL语言的形式化描述.再通过遗传优化机制寻找最优仿真电路描述程序，最后将EHDL语言程序翻译成功能相同的C++程序及可执行代码.
2.4　电路行为编辑器的功能级模块模型
　　电路行为编辑器的功能级模块模型如图3所示.


图3　电路行为仿真编辑器系统功能级模块模型
　　初始化模块负责完成Display，Screen，Colormap，Font等的初始化工作.GUI模块主要用于实现Openwin界面操作.字体操作模块用于完成编辑器中元器件文本标注操作，因为这些标注需根据电路图中适当的或者可用的位置，字体作左转、右转、垂直向下、垂直向上等转换操作，以利于更好地标明.元器件库操作模块完成对元器件的搜索、读取等操作.编辑器的基本目的之一就是构造“胚胎”电路图，这部分工作由绘图操作模块来完成.对“胚胎”电路的进化操作由遗传优化模块和电路仿真运行模块来完成，电路仿真运行模块反馈每一“代”生成的电路EHDL描述程序仿真运行时间，以用于评估电路好坏程度.需要指出的是，电路仿真运行模块调用的均是相同的短小的嵌入式软件.事件处理模块完成Xview 事件与GUI的连接.
2.5　电路描述程序生成的优化机制
　　Holland（1975）提出的遗传算法已成功应用于解决电路综合领域的某些问题［3，4］，Koza（1992）对遗传算法进行了延伸，将遗传算法与程序设计自动化有机结合，提出了一种自动编程技术――遗传程序设计GP（genetic programming）［5］.
　　对于许多问题来说，作为解的最自然的表示是计算机程序，即软件是问题求解的一种较好表述形式.求解问题的过程等价于在可能的计算机程序空间中进行搜索，以找到适应性最好的计算机程序.在遗传程序设计中，计算机程序的群体为了解决问题不断进行遗传繁衍，由遗传程序设计产生的解就是作为它们进行自然选择和遗传杂交的一个结果.这个过程由一个适应值来推动，适应值度量把问题的性质传递到计算机和它的学习模式中.
　　嵌入式软件运行于用硬件描述语言描述的仿真电路，仿真电路自身运行快慢将会严重影响系统的运行速度，而在程序设计空间搜索最优的仿真电路描述程序是个NP完全问题.为此将遗传程序设计应用于硬件描述语言描述的仿真电路源程序生成系统中，力求寻找最优或近优的仿真电路描述源程序.
3　系统实现概述
　　数字电路行为仿真编辑器系统的功能级模块的实现均采用了面向对象技术，在SUN SPARCE10, SUN OS 4.1.4, 64M内存平台上采用AT&T C++、X-Window和XView完成的.
　　整个系统定义两大基类：BaseClass 和BaseObject.BaseClass主要用于描述编辑器系统操作类，它的派生类包含了FrameClass，CommandClass，CanvasClass，ListClass，FileOperatorClass，AddStringClass 等.BaseObject 用于描述元器件外部属性操作类，它的派生类包含了JoinObject，AreaObject，RootObject，PinObject，InterfaceObject，NetObject，ButtonObject，ChoiceObject等.限于篇幅，图4仅给出了基于BaseObject的类层次图.


图4　元器件外部属性描述类层次图
　　电路行为仿真编辑器系统是基于X-Windows的.X-Windows是一个操作系统独立及网络透明的系统，可将窗口管理程序及窗口服务器分开.从微机Window 95访问SUN工作站运行系统，工作主窗口如图5所示.

图5　电路行为仿真编辑器系统工作窗口
4　遗传优化的主要实现机制
4.1　构造电路程序树
　　电路程序可以看作是一棵有根的、结点带标记的且具有有序分支的树，遗传程序设计应用于电路领域前提是需实现构造电路程序树与电路图之间的映射.整个程序设计起点是一个非常简单的我们称之为“胚胎”电路程序树.“胚胎”的电路程序树是“胚胎”电路图的中部表示式.“胚胎”电路包含适合于问题的某些固定部分和某些后来可以修改的连线.通过应用电路程序树中某些函数来修改器件连线和后继电路中元器件或功能块元件，从而完成电路的设计，最终生成电路的描述程序.
　　在构造电路程序树中，函数可以划分为四大类：
　　（1） 修改电路拓扑结构的连接修改函数；
　　（2） 在电路中插入器件的器件创建函数；
　　（3） 算法执行子树函数；
　　（4） 使某种子结构（子树）能被重用的自动定义子树函数.
　　在群体中，每个构造电路程序树包含器件创建函数和连接修改函数.每个连接修改函数修改当前加亮突出的器件并修改当前电路拓扑结构.器件创建函数插入器件到当前的电路拓扑中，并将器件参数值赋于器件.每个器件创建函数有一个指向当前电路加亮突出的器件，并能按指定方式修改该加亮器件的指针.
4.2　应用GP前的预备步骤
　　将遗传程序设计应用于电路综合前，需做以下准备工作：
　　（1） 确定适于特定问题的“胚胎”电路；
　　（2） 确定构造电路程序树的体系结构；
　　（3） 确定特定问题的端点集；
　　（4） 确定蕴藏于特定问题中的基本函数集；
　　（5） 建立适应值度量方法；
　　（6） 选择用户控制参数（如群体规模N、最大运行“代”数MaxGen等等）；
　　（7） 确定停止准则.
　　在应用遗传程序设计时，必须提供适合于特定问题的端点集和基本函数集，端点集和函数集的选择应该使其满足闭包性和充分性，以保证它们的某个组合可以表示问题的一个解.
4.3　遗传程序适应值及选择概率
　　适应值用来衡量程序设计空间群体中个体的相对优势，是选择的基本依据.没有选择，进化便不会产生.但是适应值的计算依赖具体的任务，它因程序空间的不同而不同.基于适应值越大越好的原则，我们定义了一个较为通用的适应值表达方法.
　　每个电路程序树的适应值函数表示如下：

其中

N为群体规模，T（k）i表示第k“代”中第i个电路程序树对应的仿真电路描述程序的运行时间开销，max｛T（k）i｝和min｛T（k）i｝分别表示第k“代”中电路程序树群体对应的仿真电路描述程序的运行时间开销的最大值和最小值.γ表示适应值函数的选择度，它是用来平衡程序设计空间遗传程序多样性与遗传程序设计算法收敛性，其合理取值范围1≤γ≤5.
选择概率定义为：

很显然：

　　在每一“代”中，电路程序树对应的仿真电路描述程序的运行时间开销越小，其适应值就会越大，因此被选中的机会也就越多.
5　结束语
　　电路行为仿真编辑器系统已基本上完成 ，我们目前在对该系统元器件库和功能块元件库完备性，以及遗传优化机制进行进一步完善.该系统为嵌入式软件开发者提供了较为便利的“软”电路编辑与生成环境，对嵌入式软件开发将会起到巨大的推动作用，同时它也蕴藏了较为广阔的应用前景.■
基金项目：本课题得到国家“八六三”计划基金项目资助(项目编号863-306-01-05).
作者简介：陈定君，男，1969年生，博士研究生，主要研究方向为嵌入式软件仿真开发、分布　　　　　　式计算、遗传程序设计.
　　　　　郭晓东，男，1968年生，博士研究生，主要研究方向为分布式多媒体、遗传程序设　　　　　　计.
　　　　　徐征，男，1973年生，硕士研究生，主要研究方向为进化计算、软件工程.
　　　　　刘积仁，男，1955年生，教授，博士生导师，主要研究方向为分布式多媒体、　　　　　　CSCW、协议工程.
作者单位：陈定君（东北大学软件中心　沈阳　110006）
　　　　　郭晓东（东北大学软件中心　沈阳　110006）
　　　　　徐征（东北大学软件中心　沈阳　110006）
　　　　　刘积仁（东北大学软件中心　沈阳　110006）
　　　　　陈定君(东北大学计算机软件国家工程研究中心　沈阳　110006)
　　　　　郭晓东(东北大学计算机软件国家工程研究中心　沈阳　110006)
　　　　　徐征(东北大学计算机软件国家工程研究中心　沈阳　110006)
　　　　　刘积仁(东北大学计算机软件国家工程研究中心　沈阳　110006)
参考文献：
［1］薛宏熙，边计年，苏明等.数字系统设计自动化.北京：清华大学出版社,1996
　　　(Xue Hongxi, Bian Jinian, Su Ming et al. The Automatic Design for Digital System(in Chinese). Beijing: Tsinghua University Press, 1996)
［2］陈定君, 郭晓东, 刘积仁等.嵌入式软件前端开发工具的设计与实现.东北大学学报(自然科学)，1998，19(4)： 346～348
　　　(Chen Dingjun, Guo Xiaodong, Liu Jiren et al. Design and implemention of front end development tool in embedded system. Journal of Northeastern University (Natural Science), 1998, 19(4): 346～348)
［3］Koza J R, Andre, David, Bennett III et al. Automated WYWIWYG design of both the topology and component values of analog electrical circuits using genetic programming. In: Koza J R, Goldberg David E, fogel David B et al eds. Genetic Programming 1996: Proceedings of the First Annual Conference, Stanford University. Cambridge, MA: The MIT Press, 1996
［4］Koza, J R, Bennett III, Forrest H et al. Automated design of circuits using genetic programming. In: Gero, John S, Sudweeks, Fay eds. Artificial Intelligence in Design '96. Dordrecht: Kluwer. 1996, 151～170
［5］刘勇.非数值并行算法――遗传算法.北京：科学出版社，1995
　　　(Liu Yong. Non-Numerical Parallel Algorithm (in Chinese). Beijing: Science Press, 1995)
收稿日期：1998-09-14
修稿日期：1999-03-15
