搜档网
当前位置:搜档网 › Verilog到VHDL翻译器的设计与实现

Verilog到VHDL翻译器的设计与实现

Verilog到VHDL翻译器的设计与实现
Verilog到VHDL翻译器的设计与实现

-2695-

1引言

Verilog 和VHDL 是当今两种工业标准的硬件描述语言,VHDL 具有极强的高层次抽象描述能力,而Verilog 在电路级、开关级和寄存器级具有精确的描述能力。随着ASIC 的复杂性不断提高,设计者可能需要同时使用Verilog 和VHDL 进行设计。为了提高生产率,降低软件开发费用,同时为了充分利用这两种语言的优势,必须进行V erilog 和VHDL 之间的相互转换。

2设计思想

Verilog 和VHDL 是在很多方面都不相同。Verilog 是基于

C 的语言,它定义了nand 、nor 等逻辑门作为语言的的基本元素;Verilog 的并行语句通过事件来驱动,事件既可以是线变量值的变化,也可以是寄存器变量值的变化;Verilog 最基本的通信机制是线网,它映射一个物理连接。而VHDL 是基于ADA 的语言,它通过让用户定义自己的结构来描述逻辑门;VHDL 模型的最基本的表示方法是并行执行的进程的网络;进程之间通过信号来进行通信。

因此,要将Verilog 转换为VHDL ,必须设计一种抽象的中

间结构,它不仅能够表示Verilog 语言中的各种语法元素,而且能够将Verilog 所描述的设计完整地保存。然后再根据预先定义好的映射规则,按照某种顺序,将中间结构中的设计转换为VHDL 设计。另外,对于Verilog 中的一些元素,VHDL 中没有元素能够和它直接对应,还必须设计一个VHDL 库。整个Veri-log2VHDL 的设计如图1所示。

3翻译规则

在Verilog 翻译为VHDL 的过程中,需要定义Verilog 各种

收稿日期:2004-08-10。

基金项目:上海应用材料研究发展基金项目(0215)。

作者简介:安健(1980-),男,山西晋城人,硕士生,研究方向为数字系统的并行逻辑模拟;吴悦(1960-),女,副教授,研究方向为计算机辅助设计和EDA 技术方面的科研与教学;杨洪斌(1962-),男,副教授,研究方向为计算机系统结构方面的科研与教学;李俊红(1971-),女,硕士生,研究方向为数字系统的并行逻辑模拟。

V erilog 到VHDL 翻译器的设计与实现

健1,吴

悦1,杨洪斌1,李俊红1,2

(1.上海大学计算机工程与科学学院,上海200072;2.河北师范大学数学与信息学院,

河北石家庄050016)

要:描述了一个V erilog 到VHDL 翻译器V erilog2VHDL 的设计与实现。首先将Verilog 模块转换为中间格式,然后按照预定义的翻译规则,生成功能等价的VHDL 设计实体。该翻译器目前只支持V erilog 的一个子集。通过V erilog2VHDL ,使得在V erilog-VHDL 混合设计环境中重用V erilog 设计成为可能。关键词:Verilog;VHDL;翻译器中图法分类号:TP302.1文献标识码:A

文章编号:1000-7024(2005)10-2695-03

Design and implementation of translator of verilog to VHDL

AN Jian 1,

WU Yue 1,

YANG Hong-bin 1,

LI Jun-hong 1,2

(1.School of Computer Engineering and Science,Shanghai University,Shanghai 200072,China;2.School of Mathematical

and Information,Hebei Teacher's University,Shijiazhuang 050016,China )

Abstract :The design and implementation of a translator from Verilog to VHDL were described.First,verilog modules to intermediate format,then according to the translating rules,equivalent VHDL entities in function were built.At present,this translator only support a subsets of verilog.

Key words :verilog;VHDL;translator

2005年10月计算机工程与设计

Oct.2005

第26卷第10期Vol.26

No.10

Computer Engineering and Design

图1Verilog2VHDL 的总体设计

预定义的

VHDL 库

语法元素转换为VHDL表示的翻译规则,下面是主要的翻译规则。

3.1模块的翻译

在翻译过程中,对于每个Verilog模块(module)都有一个VHDL实体(entity)和一个结构体(architecture)与之对应。具体转换如下:

Verilog VHDL

module name_of_module entity ent_name is

(list_of_ports);

//input declaration--in port declaration

//output declaration--out port declaration

//inout declaration--inout port declaration

end entity;

architecture arch_name of ent_

name is

//net declaration--signal declaration

//register declaration--signal declaration

begin

//always statement--process statement

endmodule end arch_name

3.2参数声明的翻译

在Verilog中,通过参数声明来声明一个常量。在VHDL 中对应的元素有实体中的generic语句,或者是结构体中声明的一个常量,在这里,Verilog2VHDL将参数声明翻译为generic 语句。

3.3模块例示的翻译

Verilog和VHDL都是层次化的语言,2种语言中实例化的方法很相似。Verilog中的模块例示可以很方便转换为VHDL 中组件的实例化。

3.4always和initial语句块的翻译

一般情况下,always语句块翻译为VHDL中的进程,al-ways语句块的事件控制表达式可以翻译成进程的敏感表。但是对于边缘敏感的always语句块,因为VHDL中没有定义上升沿和下降沿,所以将其翻译为VHDL中的一个保护块。转换如下:

Verilog VHDL

Always@(posedge CLK)block(CLK'event and CLK=1) //do something begin

process begin

if GUARD then

--do something

end if;

wait on guard;

end process;

end block;

initial语句和always语句相似,只不过在整个模拟过程中它只执行一次。它在功能上等价于VHDL中一个没有信号敏感表的进程。其中,initial语句块中寄存器的初始化是一个特例。如果寄存器初始化语句之前没有任何事件控制语句,那么将它翻译为VHDL中的一个信号赋值语句。3.5赋值语句的翻译

Verilog中有两种类型的赋值,即连续赋值和过程赋值。连续赋值只有在表达式右端的值发生变化时才进行赋值。这正好等价于VHDL中的并行信号赋值。过程性赋值是在initial 语句或always语句内的赋值,它只能对寄存器数据类型的变量赋值。过程性赋值分为阻塞过程赋值和非阻塞过程赋值,它有延迟、事件和repeat3种语句内部时延表示形式,它们都被翻译为功能上等价的VHDL顺序信号赋值语句。

3.6任务和函数的翻译

在Verilog中,既有用户定义的任务和函数,也有内置的系统任务和函数。对于用户定义的任务和函数,可以直接将它们翻译为VHDL中的任务和函数。而对于Verilog中的系统任务和函数,由于VHDL中没有直接的功能等价的语言元素,因此在预定义的VHDL库中定义了与它们功能等价的函数或过程。这样,在翻译过程中,对于Verilog中的系统任务和函数,只需将这些预定义的函数或过程输出到VHDL文件中。

3.7门例示的翻译

Verilog是在底层建模方面拥有强大的功能。它拥有内建的门类型。相反,VHDL更适合高层次的建模。虽然可以将Verilog的门例示映射为VHDL中的组件,但是在这里Veri-log2VHDL将门例示翻译为VHDL中等价的并行信号赋值语句。

3.8IF_THEN_ELSE语句的翻译

两种语言都支持条件IF语句,大部分情况下,可以直接转换。但是在Verilog中,IF语句的值可以是(0,1,X,Z)4种值,而VHDL中IF语句的值只有true和false两种,所以此时Verilog 中IF表达式不能直接映射到VHDL。因此,为了保持翻译中的逻辑等价,对于Verilog中非布尔类型的IF表达式,通过调用预定义的VHDL库中的函数to_boolean()将它转换为布尔类型的IF表达式。

3.9CASE语句的翻译

CASE语句作为一种多分支语句,两种语言都提供支持,可以直接翻译。但是在VHDL中有一些限制,VHDL中没有和CASEX和CASEZ相对应的元素,因此在翻译中将CASEX 和CASEZ语句翻译为等价的IF语句。

3.10其它

除了以上列举的规则外,还需要解决数据类型和对象、操作符、MOS开关、线网以及其他问题。

4具体实现

4.1编译模块的设计

编译模块主要分为预处理、词法分析、语法和语义分析3部分。预处理器是一个独立的模块,主要完成文件的合并和宏替换。词法分析、语法和语义分析部分分别采用词法分析自动生成工具LEX和语法分析自动生成工具YACC完成。给出源语言的词法和语法规则,就可以通过LEX和YACC得到词法和语法分析程序。

4.2中间结构的设计

中间结构被设计为一个C++类库,其中一些类是工具类,

-2696-

主要用来帮助实现其它类的底层数据结构,如链表等;另外一些类则是Verilog实体类,它们用来描述Verilog中的各种实体。所有的Verilog实体类有一个总根类CVerilog,它是一个抽象类,拥有一个纯虚函数toVhdl(ofstream&),所有其它的实体类都重载了此函数,用来描述本类对象转换为VHDL的过程。CVerilog有两个子类,CModuleItem类和CModule类。CModu-leItem用来描述模块中的各种元素。而CModule类则用来描述Verilog中的模块,它有一个CModule对象链表和一个CModuleItem对象链表。因此,经过编译模块分析后,整个设计都可以保存在顶层CModule对象中。

4.3代码生成

代码生成阶段主要考虑代码如何安排,以满足VHDL的语义。从顶层模块开始,首先将CModule链表中的模块翻译为VHDL设计实体,然后按照上面所定义的翻译规则,将CModuleItem链表中的元素翻译为VHDL中对应的元素。这样通过递归调用,将所有模块翻译为VHDL设计实体。最后生成VHDL测试实体,以方便验证翻译结果的正确性。

5设计举例

一个4位加法器的模块翻译前和翻译后的描述如下:

(1)翻译前的verilog描述

module adder4(in1,in2,sum,zero);always@(in1or in2) nput[3:0]in1;begin

input[3:0]in2;sum=in1+in2;

output[4:0]sum;if(sum==4'b0) output zero;zero=4'b1;

reg[4:0]sum;else

initial begin zero=4'b0;

sum=4'b0;end

zero=4'b1;endmodule

end

(2)翻译后的VHDL描述

entity adder4is

port(in1:in bit_vector(3downto0);block(in1'event or

in2'event) in2:in bit_vector(3downto0);begin

sum:out bit_vector(4downto0);process begin

zero:out bit);if GUARD then end adder4;sum<=in1+in2;

arhitecture VL2VHDL of adder4is if(sum=B"0000")then

signal sum:Bit_vector(4downto0);zero<=B"0001";

begin else

process begin zero<=B“0000”;

sum<=B"0000";end if;

zero<=B"0001";end if;

end process;wait on GUARD;

end process;

end block;

end VL2VHDL;

经过Active-HDL模拟,证明结果正确。

6结论

本文描述了Verilog2VHDL翻译器已经实现了一个原型,其运行效果良好,但是只支持Verilog的一个子集,目前仍在继续完善中。

参考文献:

[1]蒋敬旗,刁岚松,刘明业.从Verilog到VHDL的翻译器VtoV的

设计与实现[J].北京理工大学学报,2001,21,(1):40-43.

[2]刘明业,蒋敬旗,刁岚松,等.硬件描述语言Verilog[M].第4版.

北京:清华大学出版社,2001.

[3]李宗伯,王蓉晖.VHDL设计表示和综合[M].北京:机械工业出

版社,2002.

[4]Smith Douglas J.VHDL and verilog compared and contrasted-

plus modeled example written in VHDL,Verilog and C[C].New York:ACM Press,1996.771-776.

参考文献:

[1]Chang Chip-Hong,Ye Zhi,Zhang Mingyan.Fuzzy-ART based

digital watermarking scheme[C].2002Asia-Pacific Conference on Circuits and Systems(APCCAS'02),2002.423-426.

[2]Bender W,Gruhl D,Morlmoto N,et al.Techniques for data hi-

ding[J].IBM System Journal,1996,35:313-336.

[3]黄达人,刘九芬,黄继武.小波变换域图像水印嵌入对策和算法

[J].软件学报,2002,13(7):1291-1297.[4]Wang Yu-Pin,Chen Mei-Juan,Chen Po-Yuen.Robust image

watermark with wavelet transform and spread spectrum techni-ques[R].Conference Record of the thirty-forth asilomar confe-rence on Signals,Systems and Computers,2000.1846-1850. [5]丛爽.面向MATLAB工具箱的神经网络理论与应用[M].合肥:

中国科技大学出版,1998.

[6]Barni M,Bartolini F,Piva A.Improved wavelet-based watermar-

king through pixel-wise masking[J].IEEE Transactions on Image Processing,2001,10(5):783-791.

(上接第2659页)

-2697-

相关主题