在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 22815|回复: 45

VerilogHDL VHDL SystemC SystemVerilog这些东西的具体区别在何处

[复制链接]
发表于 2004-12-24 15:22:58 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
VerilogHDL  VHDL  SystemC  SystemVerilog这些东西的具体区别在何处,不明白应该如何选择侧重!请高手指点!我知道好设计关键在于对数字逻辑理论的理解,但是选择一钟合适的语言也是很关键的呀!
发表于 2006-7-25 20:23:27 | 显示全部楼层
1. 接口(Interface) Verilog模块之间的连接是通过模块端口进行的。为了给组成设计的各个模块定义端口,我们必须对期望的硬件设计有一个详细的认识。不幸的是,在设计的早期,我们很难把握设计的细节。而且,一旦模块的端口定义完成后,我们也很难改变端口的配置。另外,一个设计中的许多模块往往具有相同的端口定义,在Verilog中,我们必须在每个模块中进行相同的定义,这为我们增加了无谓的工作量。 SystemVerilog提供了一个新的、高层抽象的模块连接,这个连接被称为接口(Interface)。接口在关键字interface和endinterface之间定义,它独立于模块。接口在模块中就像一个单一的端口一样使用。在最简单的形式下,一个接口可以认为是一组线网。例如,可以将PCI总线的所有信号绑定在一起组成一个接口。通过使用接口,我们在进行一个设计的时候可以不需要首先建立各个模块间的互连。随着设计的深入,各个设计细节也会变得越来越清晰,而接口内的信号也会很容易地表示出来。当接口发生变化时,这些变化也会在使用该接口的所有模块中反映出来,而无需更改每一个模块。下面是一个接口的使用实例: interface chip_bus; // 定义接口 wire read_request, read_grant; wire [7:0] address, data; endinterface: chip_bus module RAM (chip_bus io, // 使用接口 input clk); // 可以使用io.read_request引用接口中的一个信号 endmodule module CPU(chip_bus io, input clk); ... endmodule module top; reg clk = 0; chip_bus a; // 实例接口 // 将接口连接到模块实例 RAM mem(a, clk); CPU cpu(a, clk); endmodule 实际上,SystemVerilog的接口不仅仅可以表示信号的绑定和互连。由于SystemVerilog的接口中可以包含参数、常量、变量、结构、函数、任务、initial块、always块以及连续赋值语句,所以SystemVerilog的接口还可以包含内建的协议检查以及被使用该接口的模块所共用的功能。 2. 全局声明和语句 在Verilog中,除了一个模块可以作为模块实例引用其他模块外,并不存在一个全局空间。另外,Verilog允许任意数目的顶层模块,因此会产生毫无关联的层次树。 SystemVeriog增加了一个被称为$root的隐含的顶级层次。任何在模块边界之外的声明和语句都存在于$root空间中。所有的模块,无论它处于哪一个设计层次,都可以引用$root中声明的名字。这样,如果某些变量、函数或其它信息被设计中的所有模块共享,那么我们就可以将它们作为全局声明和语句。全局声明和语句的一个使用实例如下: reg error _flag; // 全局变量 function compare (...); // 全局函数 always @(error_flag) // 全局语句 ... module test; chip1 u1 (...) endmodule module chip1 (...); FSM u2 (...); always @(data) error_flag = compare(data, expected); endmodule module FSM (...); ... always @(state) error_flag = compare(state, expected); endmodule 3. 时间单位和精度 在Verilog中,表示时间的值使用一个数来表示,而不带有任何时间单位。例如: forever #5 clock = ~clock; 从这一句中我们无法判断5代表的是5ns? 5ps? 还是其他。Verilog的时间单位和精度是作为每一个模块的属性,并使用编译器指令`timescale来设置。使用这种方法具有固有的缺陷,因为编译器指令的执行依赖于源代码的编译顺序,编译器总是将它遇到的最后一个`timescale设置的时间单位和精度作为之后的标准。那么,假如有些模块之前没有使用`timescale设置时间单位和精度,这就有可能出现同一个源代码的不同仿真会出现不同结果的情况。 SystemVerilog为了控制时间单位加入了两个重要的增强。首先,时间值可以显式地指定一个单位。时间单位可以是s、ms、ns、ps或fs。时间单位作为时间值的后缀出现。例如: forever #5ns clock = ~clock; 其次,SystemVerilog允许使用新的关键字(timeunits和timeprecision)来指定时间单位和精度。这些声明可以在任何模块中指定,同时也可以在$root空间中全局指定。时间单位和精度必须是10的幂,范围可以从s到fs。例如: timeunits 1ns; timeprecision 10ps; 4. 抽象数据类型 Verilog提供了面向底层硬件的线网、寄存器和变量数据类型。这些类型代表了4态逻辑值,通常用来在底层上对硬件进行建模和验证。线网数据类型还具有多个强度级别,并且能够为多驱动源的线网提供解析功能。 SystemVerilog包括了C语言的char和int数据类型,它允许在Verilog模型和验证程序中直接使用C和C++代码。Verilog PLI不再需要集成总线功能模型、算法模型和C函数。SystemVerilog还为Verilog加入了几个新的数据类型,以便能够在更抽象的层次上建模硬件。 l       char:一个两态的有符号变量,它与C语言中的char数据类型相同,可以是一个8位整数(ASCII)或short int(Unicode); l       int:一个两态的有符号变量,它与C语言中的int数据类型相似,但被精确地定义成32位; l       shortint:一个两态的有符号变量,被精确地定义成16位; l       longint:一个两态的有符号变量,它与C语言中的long数据类型相似,但被精确地定义成64位; l       byte:一个两态的有符号变量,被精确地定义成8位; l       bit:一个两态的可以具有任意向量宽度的无符号数据类型,可以用来替代Verilog的reg数据类型; l       logic:一个四态的可以具有任意向量宽度的无符号数据类型,可以用来替代Verilog的线网或reg数据类型,但具有某些限制; l       shortreal:一个两态的单精度浮点变量,与C语言的float类型相同; l       void:表示没有值,可以定义成一个函数的返回值,与C语言中的含义相同。 SystemVerilog的bit和其他数据类型允许用户使用两态逻辑对设计建模,这种方法对仿真性能更有效率。由于Verilog语言没有两态数据类型,因此许多仿真器都通过将这种功能作为仿真器的一个选项提供。这些选项不能够在所有的仿真器之间移植,而且在需要时用三态或四态逻辑的设计中强制使用两态逻辑还具有副作用。SystemVerilog的bit数据类型能够极大改进仿真器的性能,同时在需要的时候仍然可以使用三态或四态逻辑。通过使用具有确定行为的数据类型来代替专有的仿真器选项,两态模型能够在所有的SystemVerilog仿真器间移植。 SystemVerilog的logic数据类型比Verilog的线网和寄存器数据类型更加灵活,它使得在任何抽象层次上建模硬件都更加容易。logic类型能够以下面的任何一种方法赋值: l       通过任意数目的过程赋值语句赋值,能够替代Verilog的reg类型; l       通过单一的连续赋值语句赋值,能够有限制地替代Verilog的wire类型; l       连接到一个单一原语的输出,能够有限制地替代Verilog的wire类型; 由于logic数据类型能够被用来替代Verilog的reg或wire(具有限制),这就使得能够在一个更高的抽象层次上建模,并且随着设计的不断深入能够加入一些设计细节而不必改变数据类型的声明。logic数据类型不会表示信号的强度也不具有线逻辑的解析功能,因此logic数据类型比Verilog的wire类型更能有效地仿真和综合。 5. 有符号和无符号限定符 缺省情况下,Verilog net和reg数据类型是无符号类型,integer类型是一个有符号类型。Verilog-2001标准允许使用signed关键字将无符号类型显式地声明成有符号类型。SystemVerilog加入了相似的能力,它可以通过unsigned关键字将有符号数据类型显式地声明成有无符号数据类型。例如: int unsigned j; 值得注意的是unsigned在Verilog中是一个保留字,但并没有被Verilog标准使用。
发表于 2006-9-12 15:39:35 | 显示全部楼层
晕s 其实verilog 主要在于门级 而vhdl 强于system级别的设计 systemverilog 吸收了c语言的优点 提升了verilog的抽象能力 systemc属于算法级的抽象 个人决得应该是最抽象的
发表于 2006-9-20 15:28:11 | 显示全部楼层
谁有这些资料?
发表于 2006-10-3 20:10:51 | 显示全部楼层
shi ya
发表于 2006-10-4 11:57:49 | 显示全部楼层
Verilog的硬件设计比较直观,可以说基本上跟硬件最终的实现结果一致,所以只有对硬件逻辑结构很清楚的才可以使用verilog。
VHDL来源于类PASCAL,它更适合于抽象和算法级的描述,当然也可以实现逻辑级,但其架构略显烦琐。
SystemC来自于软硬件协同设计验证的要求,思路是好的,前途如何还有待于看其发展。
Systemverilog同样源于对软硬件协同设计验证的强烈要求,同时兼顾决大多数人对verilog的熟悉,思路也是明确的,关键看EDA工具的发展和业界标准的指定。
发表于 2006-10-5 00:02:46 | 显示全部楼层
从行业角度来看:
Verilog,北美地区事实上的IC设计行业标准,有众多厂商支持
VHDL,在欧洲和党国的工业/学术界中使用较普遍,当然也包括老美的军工企业——当初就是从军口来的嘛
SystemC和SystemVerilog,强化验证能力的增强型语言版本,例如SystemVerilog中90%的内容只能用于验证(无法用于RTL设计),目前看来天平正在倾向SystemVerilog这边
发表于 2006-10-8 20:27:11 | 显示全部楼层
我觉得systemverilog在RTL的编码效率上也做了不少工作。
发表于 2006-10-9 08:57:35 | 显示全部楼层
我也用verilog
发表于 2006-10-9 10:34:25 | 显示全部楼层
个人比较喜欢verilog简洁的风格
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /1 下一条

X

小黑屋| 手机版| 关于我们| 联系我们| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2025-6-28 05:18 , Processed in 0.024164 second(s), 11 queries , Gzip On, MemCached On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表