当前位置:文档之家› 从Verilog到VHDL(上)基本语法

从Verilog到VHDL(上)基本语法

从Verilog 到VHDL(上)基本语法
16 六
从学校里开始,我所接触的就一直是VerilogHDL 而非更老牌的VHDL, 而且后续接触的项目中也多半是Verilog 的用户,坦白的讲,Verilog 的活力也确实更足一些,从
IEEE1800-2005 开始的SystemVerilog 的标准化,将
Verification 和Design 的一体化的尝试,我个人认为,是走在正确的道路上。

所以,我确实想不到,我竟然也要回头学起VHDL 来了,毕竟一些老牌公司,特别是欧洲的公司,往往因为历史原因,仍然在使用VHDL ,看来终究是绕不过去的了正如一个Design Verification 工程师在目前想完全的不和SpecmanE 打交道是很难的一样。

面记载的是两种语言学习过程中的一些体会,而且更多的是从语法角度出发,算是梳理一下思路吧,而且,以前从来
没有接触过VHDL ,当然会存在很多非常初级的东西。

而在本文之后,打算再写一篇简单阐述下结合Cadence 的IUS 工具,使用SystemVerilog 对VHDL 进行验证的基本方
法。

起手式从Verilog 撞进VHDL 的世界,有些东西要先搞清
楚,否则会一头雾水:
1. 大小写敏感:Verilog 是大小写敏感的,VHDL 则非;
2.注释:Verilog 的行注释为// ,块注释为/**/;VHDL 只
支持
行注释–;[1. 这个算是不方便的一个地方了,不过不
基本结构
论是在Vim 还是Emacs 当中,批量做行注释也很容易实现;] VHDL 被认为是要求更严格,更多讲究的语言,相比和 C 类
似的Verilog ,架构上更严谨一些:
1.基本结构:从上往下为
USE 定义区(调用库和包);Package 定义区(自定义程序包);Entity定义区(定义电路实体外观,I/O接口的规
格);
[2. Entity 感觉像是 C 的头文件定义之类的东西,而在Verilog
当中,这些其实都是被整合在Module 里头一起完成
了。

]Architecture 定义区(描述内部功能);[3. 同
上,相当于Verilog 的Module 内部实现。

]Configuration 定义区(决定那个Architecture 被使用)[4. 这也许就是
之所以要分开
Arch 和Entity 的原因,类似的效果在Verilog 里实现,则
要使用那个configuration blocks/library map files这需
些在
要使用那个 configuration blocks/library map files 这些在 Verilog 2001 当中增加的 features ,不过这些部分在 Verilog
当中属于 Beyond language ,更多的是位于语言之上的
2. 并行与串行: 在这一点上, VHDL 和 Verilog 有些类似,书写在 Architecture
内的语句,直接被认为是并行执行,无论书写顺序的(就如 中的并列的 Always 语句块);而顺序执行的串
行 语句必须放置在进程语句 (process )当
中,正如 Verilog 的
begin…end 。

3. process :
和 Verilog 不同的是这里的 Process 是要求有敏感变量列表 逻辑时类似。

所以当写这样的语句,不妨多回想 Verilog 中 对于敏感变量列表的要求。

4. 例化: 在 VHDL 当中尝试例化一个 entity ,比起 Verilog 要麻烦不少。

首先,必须在 Architecture 当中用 Component 语法来声明 这个实体的 Port 和 Generic (参数);然后才可在后续内容 当中例化实体, 并且用 generic map 和 port map 来进行参数
scope 中了。


同 Verilog 作为输入的, 正如试图在 Verilog 中用 Always 语句实现组合
赋值和port 连接。

5.库,包和配置:
VHDL 这方面的组织比起Verilog 显然要严密多了,使用
configuration ,用简单的语句,就可以把不同的architecture
实现和entity 实现绑定,而此时我们就能看出VHDL 之所以要分开所谓entity 和architecture 的目的所在了。

CONFIGURATION 配置名OF 实体名IS
FOR 为实体选配的构造体名
END FOR ;
END 配置名;而事实上,configuration还可以直接指定某个Hierachy的某
个实体究竟适用那种entity 来例化,语法如下(参见VHDL Configuration ):
configuration TopMixed of Top is —TopMixed 是配置名,Top 是实体名
for Structure
是结构体名,是和实体Top 相对应的结构体
—B1 和B2Structure
for B1: Blk
是结构体structure 中的元件例化语句的标
use entity Work.Blk(RTL); —此

句说明,在元件例化的时候,利用用户自定义
的实体blk 来例化,其结构体是RTL
end for;
for B2: Blk
use entity Work.GateLevelBlk(Synth) —

语句说明,元件例化B2 时,利用实体
GateLevelBLK 对应的Synth 构造体来例化
port map (IP => To_Vector(A),
To_Int8(OP) => F);
end for;
end for;
end TopMixed;
只不过这似乎太麻烦了一点。

而Library 和Package 更好理
解一些。

用户可以将一些公共的定义统一靠Package 和Package Body 的关键字来定义到一个包里面去,而这些包又可以被编译在Library 当中。

不过Library 的建立似乎只
依赖于工具的解决,例如在编译的时候选择将包内容编译到某
个库之中,然后再使用。

使用的过程,则是利用Library ,Use 等关键字来import 这些内容。

而要提醒的是,当前编译代码都是被认为是缺省的编入到了work 库当中,所以如果需要引用代码中定义的某个包内容,应该用work.
(packet_name).all 之类的path 来声明。

操作
1. 强类型语言:
VHDL 是强类型语言,对类型要求非常严,一个对象只能有
种数据类型,而且不同类型数据间赋值是严格禁止的,这点Verilog 用户应当注意。

2. Procedure 和Function :
很好理解,直接对应Verilog 的Task 和Function ,需要注意
的就是在VHDL 中还可以对Function 进行重载,这个,也许有用吧。

3.属性:
VHDL 针对不同的对象,都具有不同的属性,这些属性不妨理解成Verilog 当中的Predefined tasks or methods ,但是似乎更加的丰富和多样,相信能够有效的减少代码量。

小结
本文目的不在于语法的教程或者指导(本来我也刚看VHDL 不过一个下午而已…… ),更希望能够迅速、扼
要的抽出VHDL 和Verilog 的一些区别和共性,加速学习的过程。

不过,我相信,一个熟悉Verilog 的工程师,在吃透了上面这些不同点后,至少可以跌跌撞撞的开始写VHDL 代码了,更多的东西,自然需要在实践中去体会和学习。

接下来,我的计划是结合Cadence 的IUS 工具,写一写最
基本的SystemVerilog 对于VHDL 的验证的QuickStart 了。

[5. 从目前了解的来看,VHDL 对于验证方面的支持还真是有限,比起Verilog 都有所不及,在最基本的打印,仿真控制上都要麻烦一些,所以,这种情况下,干脆一律交给
SystemVerilog/Vera/E/ 去做,可能还更直接一些]。

相关主题