第34卷第1期2017年1月
计算机应用与软件
Computer Applications and Software
VoL34 No.1
Jan.2017
Verilog到Java在线翻译器Verilog2Java的设计与实现
刘有耀杨鹏程
(西安邮电大学研究生院陕西西安7io m)
摘要为实现Verilog语言的跨平台操作,完成软硬件之间的协同设计验证,提出了在线翻译器Veril〇g2Java 的设计思路。通过对Verilog和Java语言的比较,首先设计出一组从Verilog到Java的翻译规则,然后采用B/S结构,将已定义的规则加载到配置好的Eclipse工作环境下,再到数据库中执行相应的查询操作,最终生成功能等价 的J a v a目标代码。结果表明:该翻译器经多次实例验证,可完成预期的设计功能。
关键词Verilog J a v a在线翻译器协同设计
中图分类号TP311 文献标识码A D O I:10.3969/j.issn. 1000-386x. 2017. 01.019 DESIGN AND REALIZATION OF VERILOG2JAVA ONLINE TRANSLATOR
THAT TRANSLATES FROM VERILOG TO JAVA
Liu Youyao Yang Pengcheng
{Graduate School of Xi^ an University of Posts and Telecommunications, XV an 710121 ^Shaanxi, China) Abstract A design thinking that translates from Verilog to Java i s proposed to achieve cross-platform operation of Verilog language and complete collaborative design and verification between hardware and software. By comparing the similarities between Verilog and Java language, a set of conversion rules for the translation from Verilog to Java i s designed. Then the B/S structure i s adopted to load the defined rules to configure Eclipse working environment, and then execute the search operation in the database. Finally, a functional equivalent of the Java language i s generated. The results show that the translator i s able to complete the expected design function.
Keywords Verilog Java Online translator Collaborative design
〇引言
Verilog因其具有很强的灵活性,语法简单,容易 理解等优点而成为目前应用最为广泛的硬件描述语言 之一。而Java语言也因其平台无关性和“一次编译,随处运行”的特点逐渐成为一种系统设计和开发的高 级程序设计语言。随着专用集成电路A S I C发展速度 的加快和集成度的不断提高,设计人员急需一种软硬 件协同设计模式来替代其繁琐的跨平台操作。而Ver-i l〇g2Java在线翻译器正好提供了这样的功能。通过在 Eclipse工作平台下的配置和Tomcat服务器上的部署,把硬件语言描述的功能转换为软件实现的方法,再经 过预定义的翻译规则,将软件模块对硬件功能的调用 转化为同种语言之间的相互调用,从而完成软硬件之 间的协同设计[1’2]验证,为Verilog语言的跨平台应用提供了一种全新的实现方法。
1Verilog2Java在线翻译器设计思路本文所采用的B/S体系结构主要是利用W e b技 术与浏览器JavaScript相互结合,再处理浏览器提出的 请求。用户在使用在线翻译器软件的过程中,只需通 过浏览器就可随时随地实现翻译功能。
本文的主要工作是在B/S架构上设计一个由Verilog 向Java 转换的在线翻译器,其设计思路是通过对 两种语言的对比后得出的。从语言的语法特点上来 看,两种语言在许多方面都具有共性,可以将这些共性 提取出来,重新定义为一种新的概念,并对这些新概念 进行数据化的表示,以保证实现二者之间的翻译[3]功 能。这些共性主要在以下几个方面上体现:
(1) Verilog语言中的模块化思想与J a v a中的封
收稿日期:2015-12-10。刘有耀,副教授,主研领域:专用集成电路设计。杨鹏程,硕士生。
第1期刘有耀等:
Verilog到Java在线翻译器Verilog2Java的设计与实现107
装类实现的功能相同。对于Verilog中的模块,可以将 其转换为J a v a中的一个封装类来实现。Verilog有时 在实现某些复杂的功能时,需要使用一个模块去调用 另一个模块的实例元件来实现,转换为Java语言时,就相当于实现一个难度较大的方法需调用已定义的方 法类提供特定的功能来实现。
(2)Verilog中的任务task和函数function语句的 实现在Java语言中可以用外部定义一个特定的方法 类来进行具体的描述和转换。
(3) Verilog中的行为描述语句如if条件语句,while循环语句和f o r•语句以及case生成语句等,在Ja- v a中都有相似的语法来实现它们之间的转换。
根据这些相似性,给出Verilog2Java的总体设计思 路:首先将Verilog源文件经过预处理模块后保存到 Verilog数据表中。然后再利用在线翻译器(需事先将 运行平台和服务器都设置完成)中预先定义好的
翻译 规则,在Verilog数据表和预先定义好的Java数据表中 进行查询,完成两者之间的转换,最后生成J a v a目标 代码。整个Verik)g2java的设计如图1所示。
图1 Verilog2Java总体设计
2 Verilog2Java在线翻译器的翻译规则
在Verilog转换为Java的过程中,需要事先定义 Verilog元素转换为Java语言的翻译规则,下面是一些 主要的翻译规则。
2.1模块的调用与端口的翻译
Verilog设计中的基本功能块就是模块。模块[4]由描述接口和实现逻辑功能两部分组成。模块描述的 接口即是端口,它是模块与外界交互的界面,它代表的 是模块的输入和输出口名,也是与别的模块联系的端 口的标识。基于这些方面,可将其转换为Java语言方 法,因为Java中的方法定义了对象提供的服务,也定 义了对象与使用对象程序之间的接口。这样做的优势 在于可以比较自然地将Verilog定义的端口作为Java 方法中的参数传入,来实现翻译的功能。当一个模块 功能的实现需要调用另一个模块来完成时,只需对该模块的元件实例进行调用即可。这种模块的调用映射 为Java语言时,可以在Java中提前定义好一个类,当需要使用时,另一个方法调用该事先定义好的类即可 实现Verilog所描述的功能。
接下来通过一个具体的实例来说明模块之间的转 换,如表1所示。
表1 Verilog模块及其对应的Java类
Verilog 模块(module )Java 方法(Class )
public class D _ FF ( DataType module T_FF(q, elk, clear);
output q;
input d, elk, reset;
q, DataType elk, DataType
clear)
1
module D _ FF ( q, qbar, d,
elk, clear);
endmodule
public class D _ FF ( DataType
q, DataType qbar, DataType
d, DataType elk, DataType
clear) )|
1
从该实例中可以更加明显看出,Verilog对于模块 的调用对应转换为Java中方法的调用。而Verilog中的端口列表则与Java定义的DataType类中的参数一 ^^对应。
2.2数据类型的翻译
Verilog中最基本的数据类型:reg型、wire型、integer•型和parameter•型。在进行转换时,需要事先使用 Java定义类的方法在Java代码中定义一个新的数据 类型DataType类。该类的主要作用是处理Verilog中所有与数值有关的语句。包括Verilog中各个赋值数 据的当前值CuirentValue和在赋值过程中
所记录的值 HistoryValue,以及判断某个变量是否满足上升沿Ris-ingEdge()或下降沿FallingEdge()条件的方法,这两种 方法均返回boolean类型的结果。当Verilog模块的行 为描述语句需要明确事件是否满足触发条件时,Java 语言可以调用该类对象的成员方法进行相应的翻译去 判断,这样做可以减小翻译出现的错误率,方便之后的 校正。
2.3结构说明语句的翻译
Verilog中主要包括4种结构说明语句:i n i t i a l、always、task和 function。i n i t i a l 和 always语句在程序运 行时就开始执行。每个initial语句代码只运行一次,其表现形式为i n i t i ,将其翻译为Java语句时,只需给变量赋初值即可。而always语句则是只要满足触 发条件就不断地重复进行,直到模块运行结束。其表现形式为always @ (事件表达式)d,将其翻译为Java语言时,需要用到Java语言中的if语句来 判断其触发条件是否成立,若成立,
则继续执行下面的
108计算机应用与软件2017 年
语句。而 n d中的数据在翻译时就需要比较变量的当前值和历史所记录的值。上一次赋值后所保 存的值存放于历史记录值HistoryValue中,而变量当前 的值则存放于CurrentValue中。每当语句执行结束后,需将每个变量的当前值CurrentValue赋给各自的 历史值HistoryValue,此时可以在DataType类中新添加 一个成员类的方法FinalNumber(),该方法返回的是 void类型。其中的事件表达式可以调用数据类型翻译 时定义的DataType类中的上升沿RisingEdge()方法和 下降沿FallingEdge()方法来实现。接下来通过一个 实例来具体地阐述这两种说明语句块的翻译。如表2 所示。
表2 initial语句和always语句对应的翻译方法
Verilog 模块Java方法
int q. CurrentValue = 0;
initial q = 0;if( elk. RisingEdge ( ) 11reset. Fall-always @ ( posedge elk ingEdge〇) |
or negedge reset)q. CurrentValue = data. CurrentVal-begin ue;
q = data;q. FinalNumber();
end data. FinalNumber();
}
task和function语句分别用来对任务和函数进行 定义,当编写一个较大的程序模块代码时,往往需要将 其分解为许多较小的任务和函数来进行编写和调试。在翻译为Java语言时,可以首先定义一个外部的方法 类Method,当Verilog需要某项功能翻译为Java语言 时,可以直接调用Method类中定义的内容来实现我们 所要的功能,这样方便代码的重构。
2.4过程赋值语句的翻译
Verilog包括两种类型的过程赋值语句:非阻塞赋 值和阻塞赋值[5]。
(1)非阻塞赋值语句(如y< = x)
非阻塞的赋值方式在Verilog语句块中使用时,上面语句所赋的变量值不能立即就为下面的语句所 用;块结束后才能完成这次赋值操作,而所赋的变量 值是上一次赋值所得到的。非阻塞赋值的最大特点 在于语句执行的并行性,可以有效地避免竞争现象的发生。针对此特点,在翻译为Java代码时,可以将
等号右边变量的历史记录值HistoryValue赋给左边 变量的当前值CurrentValue,因为历史记录的值中保 存的正是上一个时钟周期该变量的值。具体的实例 如表3所7K。
表3非阻塞赋值语句的翻译
V erilo g模块J a v a方法
always @ (posedge elk)
begin
y < = x;
z < = y;
end
endm odule
if( elk. R isingEdge ( ) ) j
y. CurrentV alue = x. H istoryV alue;
z. CurrentV alue = y. H istoryV alue;
x. F in alN u m b er();
y. F in alN u m b er();
z. F in alN u m b er();
}
从表3中可以看出,对于非阻塞赋值,由于代码的 执行方式是并行的,因此,每次执行完成后,z的值是 上一个时钟周期时y的值。
(2)阻塞赋值语句(如y= x)
对于阻塞赋值语句,在该语句执行结束时,y的值 就会立刻变为x所表示的值。当翻译为Java语言时,只需将等号右边变量的当前值赋给等号左边的变量,然后再调用FinalNumbeK)方法将各个变量的当前值 保存起来即可。具体的转换如表4所示。
表4阻塞赋值语句的转换实例
Verilog 模块Java方法
always @ ( posedge if( elk. RisingEdge ( ) ) j
elk)y. CurrentValue = x. CurrentValue;begin z. CurrentValue = y. CurrentValue;y = x;x. FinalNumber();
z = y;y. FinalNumber();
end z. FinalNumber();
}
从表4中可以看出,这种赋值方式是立即执行的,也就是说在执行下一条语句时,y的值已和X的值保 持一致,即在同一个时钟周期内,两个变量的值可能是 相同的。
2.5行为描述语句的翻译
行为描述语句中的条件语句用于根据某个条件来 确定是否执行其后的语句,关键字if和else用于表示 条件语句。执行过程为:首先判断其条件表达式是否 成立,再根据成立与否判断执行哪一条语句。在
翻译 为Java语言时,比较简单,只需在判断条件处做一些 微小的改动即可。Verilog的循环语句while和f o i•语句的执行过程和Java语言执行此功能的代码相同,翻 译时可直接翻译。而对于case生成语句,它的执行过 程为:首先计算条件表达式的值,然后按照顺序将它和 各个候选项进行比较:若等于第一个候选项,则执行其 对应的语句,若和全部候选项都不相等,则执行default 语句。而将其翻译为Java语句时,需要用到switch(表 达式)丨case子句丨,switch语句计算初始表达式的值,并将其值和每个case子句中表达式的值进行匹配。
第1期刘有耀等:
Verilog到Java在线翻译器Verilog2Java的设计与实现109
程序将执行匹配的case子句中的语句块。如果没有 匹配的case子句,程序将执行可选的default(默认)子 句。表5展示了行为描述语句的具体翻译过程。
表5行为描述语句的翻译
Verilog 模块Java方法
case ( alu_control)switch ( alu_control) ,|//alu_control 已2,d0 : Q = x + y;定义在DataType类中
2,d l:case 0 :
begin Q. CurrentValue = x. CurrentValue +
if (elk)y. Current V alue ;
Q = 〇;break ;
else case 1:
Q = x-y;if( elk. CurrentValue = = 1 ) Q. Curend rentValue =0;
2,d2 : Q = x * y;else
default :display Q. CurrentValue = x. CurrentValue-y. (“ Invalid sig-CurrentValue ;
nal!,’);break ;
endcase case 2 :
Q. CurrentValue = x. CurrentValue * y.
conversion翻译方法的定义CurrentValue ;
break ;
default : System, out. println( u Invalid sig
nal V7);
Q. FinalNumber();
x. FinalNumber();
y. FinalNumber();
1
3开发平台及具体实现
本文米用Edipse与Dreamweaver8的相互作用进行 页面的设计开发。Web服务器的操作系统为Windows Server2〇03、用Tomcat6.0作为Java的运行环境和对外 提供Web服务,用SQL Server2005作为数据库[6]服务。
在线翻译页面的设计中有两个文本域TextArea,上
面的文本域用于输入待翻译的句子,输入内容的格式为 Verilog文件形式。下面的文本域用于显示服务器的翻
译结果,当点击在线翻译按钮时,去数据库中查询相关 的信息,进行翻译。然后将翻译之后的结果显示出来。
数据库S Q L Server中有两个数据表,&个是存储 Verilog数据表,由于Verilog语言具有自己的语法特 点[7],不可能把Verilog的所有模块以及语法格式都翻 译成Java。所以首先在Verilog的预处理模块中,对 Verilog某些不可翻译的语法成分做|些细微的改变,进而对翻译器的实现进行了简化。然后将改动后的部 分添加到Verilog数据表中对于\^]^1(^中的|些专用元素,Java中没有元素能够与其相对应,必须设计另 一个预先设计好的Java数据表。
下面来详细的分析其执行过程[8]:
用户登录到Verilog2Java在线翻译器的页面中,按 照Verilog的语法规则输人要翻译的内容,然后点击翻 译按钮将请求发送到Tomcat服务器端,服务器根据资 源的配置文件web.x m l对接受到的请求进行深入的分 析,再根据配置文件中的信息:
< welcome - file - list >
< welcome - file > index, html < /welcome - file >
< welcome - file > about, html < /welcome - file >
< welcome - file > login, jsp < /welcome - file >
< /welcome - file - list >
可知提交的请求是将Verilog转换为Java语言,然 后调用服务层 servlet 中的 com.ypc.servlet.Translator 执行该请求。在 Translator 中的口1!]31丨(3¥〇丨(1(1〇?〇81:(111:-tpServletRequest request,HttpServletResponse response) throws ServletException,IOExceptionf | 方法中获得页 面中输入的全部信息;然后创建实现翻译的会话层接 口TranslatorDao与数据库进行连接,之后调用public void search(String id,String name)方法执行查询操作;最终经过两个数据表的比较之后,对数据库进行更新操 作,调用数据库实现层com.ypc.dao.implement的public i n t update(String sqls)方法来实现,之后调用 Translator 类中的方法将更新之后的数据显示在页面上9
4设计实例
一个在Verilog2Java在线翻译器平台上运行的四 位脉动进位计数器的Verilog源代码描述以及翻译之 后的Java目标代码的显示实例,如图2所示#
S Veritog2Java翻译器
V2J Translato r lo g o1
原文
原代,Java目标代码^丽[m^\
译文
p u b l i c c l a s s c o u n t e r(D a t s T y p e D a t a T y p e c l o c k, D a t a T y p e
c l e a r) {
i f(c l e a r.R i s i n g E d g e()I I c l o c f c■
F a l l i n g E d g e⑴{
丨買制结果丨
关于\^^31肝3翻译器-2015年制作制作人:杨鹏程指导教师:刘有罐老师
图2设计实例展示
(下转第203页
)
第1期周叶江等:
GPU在活塞销尺寸快速检测中的应用研究203
管的缺陷检测上。
参考文献
[1 ]杨文飞,杨文雄.一种活塞销管:中国,CN203009815 U
[P].2013.
[2 ]苏俊宏,刘胜利.圆柱型高精密零件表面缺陷检测及形貌
分析[J].激光与光电子学进展,2014,51 (4) :150 - 154.
[3 ]周森,郭永彩,高潮,等.基于三维激光扫描的移动大尺寸
圆柱体工件长度快速检测系统[J].光学精密工程,2014,
22(6) :1524-1530,
[4 ]唐湘娜,王耀南.铁轨表面缺陷的视觉检测与识别算法
[J].计算机工程,2013,39(3) :25 -30.
[5 ]周煜坤,陈清华,余潇.基于CUDA的大规模流体实时模
拟[J].计算机应用与软件,2015,32(1) :143 -147,170.
[6 ]张向阳,冯超敏,赵书贵,等.一种基于GPU的逆时偏移
并行算法[J].计算机应用与软件,2013,30 ( 10): 304
- 307.
[7 ]夏斌.基于CPU + GPU的外辐射源雷达自适应滤波算法
实现技术[D].西安:西安电子科技大学,2013.
[8 ] Gonzalez C I,Melin P, Castro J R,et al. An improved sobel
edge detection method based on generalized type-2 fuzzy log-
ic[ J]. Soft Computing,2014 : 1 ~ 12.
[9] Brown L M,Feris R,Pankanti S. Temporal Non - maximum
Suppression for Pedestrian Detection Using Self-Calibration
[C]//Pattern Recognition (ICPR) ,2014 22nd International
Conference on. IEEE ,2014 :2239 _ 2244.
[10] Huang L,Fang Y,Zuo X,et al. Automatic Change Detection
Method of Multitemporal Remote Sensing Images Based on
2D-0tsu Algorithm Improved by Firefly Algorithm[ J ]. Jour
nal of Sensors,2015 ,2015 :327123.
[11] Lee J P, Wu Q Q, Park M H, et al. A Study on Modified
Hough Algorithm for Image Processing in Weld Seam Track
ing System [ J ]. Advanced Materials Research,2015,1088 :
824-828.
[12]侯怡停.基于CUDA的Hough变换并行实现[D].大连:
大连理工大学,2013.
[13]刘进锋.几种CUDA加速高斯滤波算法的比较[J].计算
机工程与应用,2013,49(23) :14-18,30.
[14]王媛媛.基于CUDA平台的区域分割并行算法设计与实
现[D].大连:大连理工大学,2014.
[15]徐洋,张清蓉.基于图像处理的汽车指针仪表检测研究
[J].计算机应用与软件,2014,31(8) :219-221,252. [16] Rahman M N A, Nasir A F A, Mat N, et al. Image Segmenta
tion Using OpenMP and Its Application in Plant Species
Classification[ J]. International Journal of Software Engineer
ing and Its Applications,2015 ,9(5) :135 ~ 144.
[17] Yadav V K,Batham S,Acharya A K,et al. Approach to accu
rate circle detection:Circular Hough Transform and Local
Maxima concept [ C ] //Electronics and Communication Sys
tems (ICECS) , 2014 International Conference on. IEEE,
2014:1 -5.
(上接第109页)
经过V erilog2Java翻译器部署在Tomcat 6. 0服务 器上的验证,可以看出基本符合文中所定义的翻译规 则,从而验证了 V erilog2Java在线翻译器的可实现性和 正确性。
5结语
本文介绍了以J a v a为目标语言的V erilog2Java的在线翻译器,通过比较V erilo g和Ja v a语法的差别和共 同点,有针对性地设计翻译模式。在转换的过程中,充 分利用J a v a对象来封装V erilo g程序中的一些信息。Verilog:2Ja v a翻译器米用B/S结构、Java E E架构和 S Q L数据存储技术,在E c lip se配置的环境下结合Tomcat 服务器完成了 一个基础的功 能模块 ,经过 多次测 试,运行基本正常,运行结果也基本符合所定义的规 律。接下来的工作是,实现V erilo g和J a v a之间的相互 翻译,并且充分利用Java语言的特点,使得Verilog2Java 在线翻译器性能更加稳定。
参考文献
[1 ]周海芳,陈虎,杨学军.嵌入式系统软硬件联合设计方
法研究[J].计算机工程与科学,2001,23(6) :98 -101.
[2 ] Ohana E,Luca C. RTL modeling and simulation using JA
VA [ C ] //2012 13th International Conference on Optimiza
tion of Electrical and Electronic Equipment, 2012 :1253
-1258.
[3]张红艳,李茵茵,蔡洁云.KRL到Java翻译器KtoJ的设
计与实现[J].计算机应用与软件,2011,28(8):184
- 186.
[4 ]安健,吴悦,杨洪斌,等.Venlog到VHDL翻译器的设计
与实现[J].计算机工程与设计,2005, 26( 10): 2695
-
2697.
[5 ]董鑫,宋国新.Venlog到Java翻译器VtoJ的设计与实现
[J].计算机与数字工程,2005, 33(7) : 100-103. [6]考持坤.基于J2E E的W eb数据库应用技术[D].南京:
南京理工大学,2004.
[7 ]胡燕翔.Venlog语义的ASM表示方法研究[J].计算机
工程,2006, 32(21) :1 -2,21.
[8 ]扎西.汉藏在线翻译多媒体电子词典设计研究与实
现[D].拉萨:西藏大学,2008.
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论