收藏 分享(赏)

支持并行模拟的verilog编译技术研究与实现.doc

上传人:cjc2202537 文档编号:220249 上传时间:2018-03-24 格式:DOC 页数:14 大小:107KB
下载 相关 举报
支持并行模拟的verilog编译技术研究与实现.doc_第1页
第1页 / 共14页
支持并行模拟的verilog编译技术研究与实现.doc_第2页
第2页 / 共14页
支持并行模拟的verilog编译技术研究与实现.doc_第3页
第3页 / 共14页
支持并行模拟的verilog编译技术研究与实现.doc_第4页
第4页 / 共14页
支持并行模拟的verilog编译技术研究与实现.doc_第5页
第5页 / 共14页
点击查看更多>>
资源描述

1、支持并行模拟的 Verilog 编译技术研究与实现业业业盛业?会议论文精选? 睾奉奉芥奉带举支持并行模拟的 Verilog 编译技术研究与实现李暾李思昆郭阳刘功杰(国防科学技术大学计算机学院,长沙 410073)Email:摘要并行 HDL 模拟是加速大型复杂的 VISI 系统模拟验证的有效方法 ,支持并行模拟的 HDI 编译技术是其中的关键技术文章提出了一种支持并行模拟的 Verilog 编译技术,编译器将 Verilog 描述转换成 C+代码,最后与并行模拟核心库编译链接生成可执行并行程序.文章将主要介绍编译器构成,代码生成方法和并行模拟核心库,该技术已经在并行Verilog 模拟器 Pa

2、raVer 上实现关键词 Verilog 并行模拟模拟核心库 Verilog 编译文章编号 l0o2833l 一(2002)l60l8404 文献标识码 A 中图分类号 TP391.7VerilogCompileTechniquesinSupportofParallelSimulationLiTunLiSikunGuoYangLiuGongjie(NationalUniversityofDefenceTechnology,Changsha410073)Abstract:ParallelHDLsimulationisanefficientmethodtoacceleratetheverifica

3、tionprocessoflargecomplexVISIs.vstemdesignHDLcompilationtechniquethatsupportsparallelsimulationisthekeytechniqueThispaperpresentsanewVenlogcompilationtechniquewhichhasbeenimplementedinparallelVerilogsimulatorParaVer.ThecompilertranslatesVerilogdescriptionintoC+code.andgeneratesexecutableparallelprog

4、ramaftercompilingandlinkingtheC+(:odeandparallelsimulationkeme1.Thispaperintroducesthecompositionofthecompiler.codegenerationmethodandVenlogparallelsimulation.kerne1.Keywords:ParallelVerilogsimulation,Simulationkernel,Verilogcompilel 引言为 r 加快设计进度,最大限度地保证设计正确性,需要对设计进行详尽的验证和测试.现代数字设计规模越来越大,需要更多的模拟矢量和模

5、拟时问进行验证.形式化验证方法还不能很好地用于大型设计,并行模拟是一种较好的解决方法.HDL 并行模拟器一般将 HDL 描述转换为一种中间格式,如 C+,再将中间格式与底层的并行算法库编译链接成 lJ 执行程序,即可进行并行模拟.目前主要的并行 HDL 模拟器是支持VHDL 的,如文献61 实现了支持并行 VHDL 模拟的 C+库.目前还没有支持 Verilog 并行模拟的编译技术的研究.笔者实现的并行模拟器是针对 Verilog 描述的.虽然 C 和 C+与 Verilog有很多相似的地方,但是 Verilog 有很多 C+所没有的特性,如Verilog 有四种赋值操作,Verilog 的并

6、发性等等.为了正确地进行 HDL 到 C 或 C+的转换,需要研究 Verilog 的等价语义,以生成对应于 Verilog 描述的 C+代码.目前,对 Verilog 的语义研究主要是 Verilog 语义的形式化描述 I,以消除语义的模糊性:Verilog 到其他语言的转换研究有 Verilog 到 VHDL 的语义互换研究,Verilog 到 C 语言的编译器51,但是这些研究都是针对串行模拟,而且只支持 Verilog 的可综合子集.该文主要研究实现了支持并行 Verilog 模拟的编译技术,首先介绍 Verilog 语义的一种形式化描述,编译器的组成部分及其功能,然后将介绍 C+中问

7、库和代码成方法.2 并行 Verilog 模拟系统ParaVer 是笔者设计实现的并行 Verilog 模拟器.它是采用优化的异步并行模拟算法,基于通用 MPI 并行程序设计库的结构并行模拟系统.系统具有良好的可移植性,其体系结构如图 1 所示.基金项目:国家自然科学基金重点项目(合同号:69933030); 部委试验基金项目资助作者简介:李暾,男,1974 生,博士研究生,主要研究方向是并行模拟 ,微处理器设计验证技术,电子 CAD 技术等.李思昆,男,1941 年,教授,博上生导师,主要研究方向是电子 CAD,VLSI 设计方法学,虚拟现实技术等.郭阳,男,1971 年生,博士,主要研究方

8、向是微处理器设计验证技术,电子 CAD 技术等.刘功杰,男,1977 年生,硕士研究生,主要研究方向是电子CAD.1842002.16 计算机工程与应用(1)前端编洋器:负责对输入的 Verilog 文件进行预处理,完成文什合并和宏替换,进行语法分析和编译,对 Verilog 设计的各种几素进行迕接.(2)代码生成和划分:从前端编译器生成的 TempFORM 获得没计的备模块连接信息和模块信息,并以 ParaMid 库为模板,成 C+代码.笔者提;并采用 r 以 Verilog 中的 Module为划分几进 f 划分.并在代码生成时建立各模块间的连接机制.用于电路估号的传播.(3)并行模拟支持

9、库:包括 ParaMid 和 WARPEI)库.WARPED库是基于 MPI 的优化的异步并行模拟库,实现 rTimeWarp 算法,ParaMid 足一个 Verilog 模拟核心库,为 Verilog 设计的模拟提供了必要的运行时支持.模拟时,输入的 Verilog 描述经过前端编洋器和代码牛成,产生出功能卜完牟=对应的 C+代码,乍成的 C+代码编译后,与 ParaMid 和 WARPED 库链接生成可执行程序,就可以在各种分 i 并行环境下进千于并千于模拟了.3Verilog 语义模型3.1Verilog 模拟语义Verilog 模拟方法是一种离散事件模拟方法,每个模拟周期根据当前时刎

10、的事件进行相的操作.Verilog 模拟模型由结构模型和行为模型构成,结构模型由设计中的信号互联和器什模型构成,行为模型是 initial 或 always 等并发语句中的顺序语,口 J 的执行.事件类型分为更新事件和计算事件 ,更新事件引起一个值的更新,计算事件导致一个器件的计算.更新事件还将引起并发语句中敏感信号的改变,从而将处于停止状态的并发请句改为可执行状念,执行并发语句.凶此需要为每一个并发语句保存一个“程序指针 “,指明并发语句开始执行的地方 .Verilog 模拟时的事件队列足分层的,按照执行顺序分为活跃事件,非活跃事件,非阻塞赋值事件和监测事件 I.后面给的 Verilog 四

11、种赋值和并发语句的形式化描述足基于 ASM 的.其中的符号定义如下 :driver(P,S):信号 S 在并发语句 P 中驱动源;active(d):表明驱动 d 是否活跃 ;Wavefom:被调度信号的一个(值,时问) 对;dlt:l该函数将暂停驱动源 d,d 包含一个 transactions,其时间小于 t;:连接符;:空列表;value(E):表达式 E 的值;first(L),last(L):列表 L 的第一 /最后一个元素;suspended(P):进程 P 是否暂停;Tc:当前模拟时钟;Reject:实现惯性延迟的函数 ;timeout(P):进程 P 将冉次执行的预期时刻;wa

12、iting(S):一组对信号 S 敏感的进程;waitcond(P):进程 P 当前等待的条件.3-2 赋值语句语义模型Verilog 有四种赋值语句,即阻塞赋值,非阻塞赋值,连续畈值和过程连续赋值.四种赋值的语义模型的描述如图 2 所不3-3 进程语义模型Verilog 中进程主要是南 initial 和 always 语句引发的,initia1 只执行一次,而 always 将会一直持续执行下去,等价于“intialwhile(1)“,只是当碰到时间控制语句时会引起进程的暂停执行,当满足时间要求或等待的事件发生时,进程才蕈新从暂停处开始执行.此进程的语义由时间控制语句的语义实现,图 3 是

13、各种时间和事件拄制语,口 J 的形式化语义描述 .图 23,(E)ifProcedoefEthenw 口“codrPYOce.=Ep.511.5pdcdrP0c:tru0s,COndlgnat5IE7)w 口 rang(却-_airingIs)UPrOCe55iq,ege,ifProc 如dgthenwaftcod(PYOc-1E$11Spded0cJ=tTilescondafgnai3(Expr)thenwnl“ngI 秘 waltlng(s)UfP7 川 5swhereExpr=pofv?一dgexprrj,(negedgeE)ifProcdoDdgPthenw 口 fcodrPYOc=E

14、xprded(Pr0caa)=tTilescondzigna15IE 叶thenwairingI 却 airingIs)uProc0.55iwhereSxprgatlvedga 一.6,Wnit(Expr)ifProcdo口 iprthenifkalepr=faIsethenwn1tcodtProce5 曲=Expruded(Proc)=tTilescondtgna15IE 冲叶thenatttngI 却 altfngIs)UfProc11.55图 34ParaMid 库的支持笔者设计实现的并行 Verilog 模拟器的前端编译器主要由预处理,语法分析器,建立(Elabration), 电路划

15、分和代码生成等处理过程组成.日前编译器和代码生成支持大部分的 Verilog语言集合.预处理主要处理 Verilog 描述中的“,include“ 和“,define“编译指导,进行包含文件读入和宏替换操作,最后形成一个一的 Verilog 描述文件.语法分析器分析一个单一的 Verilog 描述文件,生成一种中间格式 TempForm,是没计中的全部模块的一个集合,此时只是标识并形成了所有模块,还不能确定最顶层模块,也没有进行命名冲突检测.建立阶段对设计进行平坦化,对设计层次进行解析和扩展,最后形成设计的网表格式.该阶段分为两部分:范围和参数建立,结构和行为建立.前者在TempForm 中杏

16、找范围和参数,为各种实体建立范围层次树 ,并搜索 defparam 赋值,处理 defparam 对参数的覆盖.后者在建立好范围树后,再次搜索 TempForm,生成结构和行为网表 .电路划分主要解决的问题是并行模拟中的负载平衡和最小化通讯量,此处以 Module 为单位,采用贪心算法尽量将通讯革大的模计算机工程与应用 2002.16185一m:一一块划分到间一 LP 上.代码生成阶段以 ParaMid 库为模板 ,q 成设计等价的 C+代码.前端编译器的代码生成以 ParaMid 库为模板,ParaMid 库是一个 C+类库,它为 Verilog 的各种实体如数据类型,内建的门类型等建 r

17、对应的 C+类,并为支持 Verilog 模拟语义建立了各种支持机制,如支持 Nonblocking 赋值,Verilog 的多线程模拟和 Verilog 模拟时的“程序指针“机制等.同时该库又封装了底层的并行模拟算法库,为并行模拟提供支持.此在没计实现该阵时,既要考虑 Verilog 的模拟语义,又耍考虑底层并行算法库的因素,对 Verilog 语义进行等价变换.4.1 并行模拟模型底层的并行算法库采用的是支持优化的异步并行模拟算法的 WARPED 库,WARPED 库的主要两个类是 TimeWarp 和State,前告是并行模拟实体的类,包含要征模拟期间执行的动作以及事件队列,后者用于保存

18、模拟实体的状态信息,以便在回退时恢复以前的状态,重新执行.ParaMid 库对并行算法库的封装提供了保 module 信号信息和进程语句体的类 VerilogKemel,通过对各种类型的事件的转化,类巾只用一个事件队列实现了 Verilog 模拟语义中的分层事件队列,该事件队列同时保存 r 米 Fj 于其他模拟实体的事件和本模拟实体的事件.运行时先执行所有的更新信号的事件,冉激活所有可执行的并发语句执行.4.2 数据类型Verilog 巾的主要的数据类型是 wire 和 reg,wire 和 reg 又分为标量类型和向量类型,向量类型包括 wire 或 reg 类型的一维数组,和 reg 类型

19、的多维数组 ,即 memory.在 Verilog 语义中wire 代表设计中的连接线或连接点,而 reg 并不代表具体的寄存器,也町能是一个连接点,因此,建立的设计网表是山连接点和器件组成的.ParaMid 库为连接点建立 connect 类,示例如图4.该类封装了连接点的扇入和扇出,以及当连接点有多个扇入时的驱动解析函数,如线或,线与等.对一维 reg 数组的处理是在代码牛成时为数组中每一位生成一个 connect 对象.为memory 专门建立了 Memory 类,该类内建了一个 C+多维数纰,用于存储数据,并提供了对 Memory 中某个字进行读写的方法图 44.3 内建器件Veril

20、og 的内建器件又称为参数化模块(LibraryofParameterizedModules,LPM),如与门,与非门,D 触发器,加法器等.LPM 器件的使用町以通过逻辑建模时通过实例化进行引用,也有些是由于 Verilog 的行为描述最终会生成某种器件而需要生成器件.LPM 器件的输入数目 ,输入数据宽度等都可以通过实例化时设置参数值重新设定.ParaMid 库提供了对所有 LPM1862002.16 计算机工程与应用器件的支持,为每种类型的器件提供对应的 C+类,类中定义了对应于器件的输入输出端的数据成员,和对应于器件功能的方法.山于 LPM 的参数化特性 ,ParaMid 巾对应类的输

21、入输出端口个数和数据宽度都采用动态数据结构,在,卜成对象时动念分配端口和数据宽度.4-4 同步信号ParaMid 岸中用同步信号 Syne 类来支持 Verilog 巾进程语,口 J 的敏感列表,时钟上升沿和下降沿,事件语,口 J 和 wait 语句.这些语句的共同特点是都会使进程以某个条件被暂停执行,只有等到条件满足时,/j会继续执行.Sync 类包含一个 Thread 类的链表,wait 和 wakeup 方法.链表用于保存所有等待在该信号或事件上的进程,wait 方法以 Thread 对象为参数,将该进程加入到等待链表卜.wakeup 方法用于住信号值改变或事件产,时,从等待链表上依次激

22、活暂停的进程.4.5 电路模型ParaMid 库的设计实现足于 Verilog 的模拟语义的,电路的结构模型山 connect 对象和各种器件瓦联成,行为模是各进程的执行模型.模型如图 5 所示,住每个模拟周期,根据事件类型更新信号值,将引起与信号相连的 connect 对象驱动值的改变.当 connect 对象的驱动值改变立即调用解析函数求得该连接点的值,并调用所有接收该连接点的器件和信号的更新函数将新值传播下去,器件和信号一接收到新值就用其功能函数求解输出值,将输出传递到下一个连接点,如此往复,到没有新值要传播.同步信写还将唤醒等待进程,生一个事件调度等待进程在本模拟周期运行.在模拟周期的

23、最后按任意顺序执行所有当前活跃的进程,运行进程中的顺序语句,生成新的事件.信号或事件:卜一ll 连接点图 54.6 并发进程ParaMid 库中为 initial 和 always 进程语句提供 r 对应的Thread 类,Thread 类包含一个 step“程序指针“ 数据成员 ,同步信号列表,和 threadsuspend 方法.step 实际上足一个函数指针,指向一个个进程执行片断.这些片断是在代码生成时分割if-else,case,while,for 等语句生成的 .同步信号列表用于保存该进程所等待的敏感列表和事件,当敏感列表信号值更新或事件产生时,可以通过这个列表唤醒等待进程.pos

24、edge,negedge和进程语句的敏感列表都属于同步信号.threadsuspend 方法用来标识进程将要被挂起,挂起的原因可能是碰到了延迟语句或等待某个事件的发生.threadsuspend 将会保存下一次要执行的 step,并产生一个事件,将进程的执行调度到某个时刻 .4.7 赋值语句为 r 使用一个事件队列支持 Verilog 的赋值语句,在ParaMid 库中只会对非阻寒赋值生成事件.ParaMid 对赋值的支持都集中在 connect 类中.对阻塞赋值,ParaMid 在 connect 类中提供了 reg_assign 方法.在 if 算出表达式的值后,马上将值赋给左边的信号 .对持续赋值语,口 J,由于其语义表示的足一种绀合电路 ,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 教育学

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报