system - verilog教程
更新时间:2023-09-24 04:40:02 阅读量: IT计算机 文档下载
- system推荐度:
- 相关推荐
基于断言的验证技术 SystemVerilog Tutorials
下面的手册会帮助你了解一些SystemVerilog中最重要的新特点。手册还提供了一些代码样本和例子使你可以对语言有更好\感觉\。这些辅导假设你们已经了解了一些Verilog语言。如果没有,你可以先去看看Verilog设计者指南(Verilog Designer’s Guide)。 * Data types * RTL design * Interfaces * Clocking
* Assertion-based verification * Classes
* Testbench automation and constraints * The Direct Programming Interface (DPI) SystemVerilog 的数据类型
这个手册将描述Systemverilog新引进的数据类型。他们大多数都是可以综合的,并且可以使RTL级描述更易于理解和书写。 整型和实型
SystemVerilog引进了几种新的数据类型。C语言程序员会熟悉其中的大多数。引进新的数据类型构思是这样的,如果C语言和SystemVerilog有相同的数据类型可以使C语言算法模型更容易的转化为SystemVerilog模型。
Verilog的变量类型有四态:既是0,1,X,Z。SystemVerilog引进了新的两态数据类型,每一位只可以是0或是1。当你不需要使用的X和Z值时,譬如在写Testbench和做为for语句的循环变量。使用两态变量的RTL级模型,可以使模拟器更有效率。并且使用得当的话将不会对综合结果产生影响。 二态整型 类型描述例子
Bit user-defined size bit [3:0] a_nibble; Byte 8 bits, unsigned byte a, b; Shortint 16 bits, signed shortint c, d; Int 32 bits, signed int i,j;
Longint 64 bits, signed longint lword;
注意到和C语言不一样,SystemVerilog指定了一些固定宽度的类型。
四态整型 类型 描述 例子 Reg user-defined size reg [7:0] a_byte; Logic identical to reg in every way logic [7:0] a_byte; Integer 32 bits, signed integer i, j, k;
logic是一种比reg型更好的类型,他更加的完善。我们将会看到你可以在过去verilog hdl中用reg型或是wire型的地方用logic型来代替。 非整数类型 类型 描述 例子
Time Shortreal Real Realtime 64-bit unsigned like float in C like double in C identical to real time now; shortreal f; double g; realtime now;
数组
在Verilog-1995中,你可以定义标量或是矢量类型的网线和变量。你也可以定义一维数组变量类型的存储器数组。在Verilog-2001中允许多维的网线和变量数组存在,并且取消了一些存储器数组用法的限制。
在SystemVerilog中数组有了新的发展,并对数组重新进行了重新定义,从而允许对数组进行更多的操作。
在SystemVerilog,中,数组可以具有压缩数组或是非压缩数组的属性,也可以同时具有两种属性。考虑下面的例子:
reg [3:0][7:0] register [0:9];
压缩数组是[3:0]和[7:0],非压缩数组是[0:9] 。(只要你喜欢可以有同样多的压缩数组和非压缩数组) 压缩数组
* 保证将在存储器中产生持续的数据 * 可以复制到任何其他的压缩对象中 * 可切片(\部分选取\
* 仅限于\类型(bit, logic, int等),其中有些(如int)有固定的尺寸 相比之下,非压缩数组可以放在模拟器选择的任何地方,可以可靠地复制到另一个相同数据类型的数组中。对于不同数据类型的数组,你必须使用映射(有几个非压缩数组映射到压缩数组的规则)。非压缩数组可以是任何的类型,如实数数组。
SystemVerilog允许对完整的非压缩数组和部分选取的非压缩数组进行一些操作。对与此,部分选取的数组必须是相同的数据类型和大小。如非压缩数组必须要有相同的位数和长度。而压缩数组不一样,只要选取的部分有相同数量的位数。 允许的操作有
* 读和写整个数组
* 读和写部分选取的数组 * 读和写数组中的位
* 在数组,部分选取的数组和数组的位有同样的优先级
SystemVerilog也支持动态数组(在仿真中数组长度可以改变)和关联数组(数组中的数据非连续排列)。
为了支持这些数组类型,SystemVerilog中提供了一些数组查找的函数和方法。如你可以使用$dimensions函数查询一个数组变量的的维数。 Typedef
SystemVerilog的数据类型系统允许定义复杂的数据类型。为了使代码看起来清晰,引进了别名的方法。别名的方法允许使用者在他们的代码中用自己的名字来定义经常使用的数据类型,当构造复杂的数组时用别名的方法是很方便的。 typedef reg [7:0] octet; octet b;
和reg [7:0] b;的效果是一致的 typedef octet [3:0] ; quadOctet;
quadOctet qBytes [1:10];
和reg [3:0][7:0] qBytes [1:10];的效果是一致的 Enum
SystemVerilog也引进了枚举类型,例如 enum { circle, ellipse, freeform } c;
枚举允许您用于声明一组命名的常数。这样的数据类型是适用表示状态值、操作码和其它的非数字或象征性的数据。
Typedef和枚举经常一起使用, 象这样:
typedef enum { circle, ellipse, freeform } ClosedCurve; ClosedCurve c;
枚举类型命名值的作用类似于常数。它的默认类型是int。您能复制他们到/从枚举类型的变量, 互相比较他们等等。枚举类型的强制类型。您无法复制一个数值到枚举类型变量, 除非您使用定义影射。
c = 2; // ERROR c = ClosedCurve'(2); // Casting – okay
然而,当你在一个表达式中使用了枚举类型,你所使用的值等效于分开写的整数; 所以例子中的这是一个比较好的枚举变量与整数的比较;而且它也可以在整数表示式中使用枚举值。 结构体和共同体
同样, SystemVerilog 也引进了结构体和共同体, s类似于 C. struct { int x, y; } p;
结构体成员选择使用 .名字的语法。 p.x = 1;
结构体的表达可以使用括号。 p = {1,2};
结构体在使用typedef声明新的结构类型和使用新的类型声明变量时是非常有用的。注意结构体也是可以被封装的。 typedef struct packed { int x, y; } Point; Point p;
共同体在用相同的硬件资源 (如寄存器)储存不同类型的值(如整数、浮点)时候是非常有用的。 SystemVerilog RTL Tutorial
这个手册将介绍systemverilog的一些新特点,这样使RTL级设计更加方便,更有效率。 新的操作符
SystemVerilog 增加了一些新的操作符,其中的大部分是从C语言中引进来的。新增加的操作符包括自增(++),自减(--)和指派运算符 (+=, -=)。全等运算符(===和 !==)作用类似于casex声明,值X和值Z都被认为是无关位。 新的循环声明
也是从C语言中引进来的,包括do-while循环,break 和 continue。新的foreach操作符用在数组变量中。而且增强了for循环的功能,下面的做法是正确的, for (int i = 15, logic j = 0 ; i > 0 ; i--, j = ~j) 标签
在Verilog中, 你可以这样标识begin 和 fork语句: begin : a_label
在SystemVerilog语句标签可以在end处重复一遍: end : a_label
这对管理代码是非常有用的。在end处的标签必须和在开始处的标签相一致。Modules, tasks 和and functions也可以在在代码的末尾处重复标签名。 module MyModule ... ...
endmodule : MyModule
在SystemVerilog中允许在任何过程声明中添加标签: loop : for (int i=\
这对for循环特别有用,因为这样的话for循环可以被终止。尽管通过这种方式增强了块的命名, 但是至少有一个这样的理由取消他们的使用,那就是在SystemVerilog 变量也可以在未命名的块中被使用!! Relaxed Assignment Rules
对verilog的初学者来说这也许是最难的(甚至老练的Verilog 用户也时常被难住由它时常绊倒) 是线网和变量之间的不同点。SystemVerilog 包含了太多的混乱史: 变量可以通过过程赋值语句, 连续赋值语句和通过module例化连接到输出端来赋值。但不幸的是 , 仍不能连接variable到inout端口, 虽然你可以通过使用ref端口来实现。
那意味这在SystemVerilog中,你可以在大部分时间里使用 logic 数据类型, 而在verilog中你有时得用reg而有时却得使用wire。实际上 reg和logic几乎是相互等同的, 但logic是一个更合适的名字。
这里还有些限制,不允许使用多于一次的持续赋值语句和输出端口连接的给同一变量赋值。这是因为没有类似于线网的多重驱动变量的定论。因此,假如你通过这些方式给一个变量赋过值,你将不能再用过程赋值语句给变量赋值。 Port Connection Shorthand
如果你使用Verilog-2001,编写测试环境的模块有如下声明: module Design (input Clock, Reset, input [7:0] Data, output [7:0] Q); 在测试环境中,你可以这样声明regs 和 wires: reg Clock, Reset; reg [7:0] Data; wire [7:0] Q;
你可以这样例化模块:
Design DUT ( Clock, Reset, Data, Q ); 更好的可以这样声明
Design DUT ( .Clock(Clock), .Reset(Reset), .Data(Data), .Q(Q) );
但这样有点过于重复。Systemverilog允许你使用如下的速记符号: Design DUT ( .Clock, .Reset, .Data, .Q );
如果先前适当的声明了线网和变量,也可以这样: logic Clock, Reset; logic [7:0] Data; logic [7:0] Q;
如果还嫌太罗嗦,你也可以这样写: Design DUT ( .* );
意思是\连接所有端口到和端口相同名字变量或网线\。你无须这样连接所有的端口。例如: Design DUT ( .Clock(SysClock), .* );
意思是”连接Clock 端口到 SysClock,然后别的端口变量连接到到和端口相同名字变量或网线”。 综合用语
Verilog 非常广泛的应用在RTL 综合, 即使它本身不是作为综合语言设计的。可以非常容易的写出仿真正确的Verilog 代码, 但设计却是不正确的, 例如,它总是有意无意地容易推断透明琐存器。SystemVerilog 解决一种方式是引进了新的always关键字: always_comb 、always_latch 和always_ff 。
always_comb 被用于描述组合逻辑。它通过读取进程中的变量和线网自动地产生一张完全敏感列表, 象总@ * 在Verilog-2001中一样: always_comb if (sel) f = x; else f = y;
此外,为了自动的产生一个完整的敏感列表,它递归的查看功能单元然后把别的必要的信号插入到敏感列表中。它被定义为在组合逻辑中执行一些规则,它可以作为一个暗示(特别是对综合工具)采用更为严谨的综合风格而且添加了新的语义checks.finally、always_comb:它暗示了敏感列表截至进程的结束, 以便它在时间为零时评估一次并因此所有它的输出有占去适当的值在仿真时间开始处理进步之前。这是一次公正评价时间为零,因此所有产出值负起适当时间开始前模拟进度.
always_latch 和 always_ff 分别被用来暗示产生琐存器和触发器。下面是 always_ff的例子: always_ff @(posedge clock iff reset == 0 or posedge reset) if (reset) q <= 0;
else if (enable) q++;
使用这些新的always的优点是综合工具可以检查出作者的设计意图。 Unique and Priority
其它在RTL Verilog中常见错误是parallel_case 和full_case pragmas 的误用。问题出现的原因是仿真器忽略了这些注释, 而这些注释可以用于指导综合。SystemVerilog引进了二个新的主题词: priority 和 unique。
不同于pragmas, 这些主题词适用于if声明和case声明语句。每个强加欣然被映射对被综合的硬件独特强制执行完整性和独特有条件的具体模仿行为; 换句话说, 一个分支有条件应该确切地被采取在执行时间。如果附属在执行时间的具体条件不会允许超过一个分支有条件, 或分支根本, 被采取, 有一个运行错误。例如, 它是可接受为选择器在条件语句重叠, 但如果那个交叠情况被查出在运行时间然后这是错误。它同样是好有一个独特的条件语句没有缺省分支, 或如果声明没有分支, 但在运行时间模拟器检查某一分支的确被采取。综合工具可能使用这信息, 如同他们可能full_case 方针, 宁可推断, 门闩不应该被创造。 优先权强制执行有些较不严谨套检查, 检查只至少一个分支有条件被采取。它允许因此可能性, 超过一个分支有条件能被采取在执行时间。它准许综合创造更加侈奢的优先权逻辑在这样情况。
SystemVerilog Interfaces Tutorial






正在阅读:
system - verilog教程09-24
第11章 轮系习题答案09-29
相声:疑心病02-15
2021年度销售工作计划参考06-01
2022强国复兴有我知识竞赛答案04-02
福建省电梯安全知识竞赛题目&答案10-25
环保有关节日04-21
《21世纪课堂评价》化学模块4作业05-15
凌云工程2011年云计算解决方案征集方案07-09
- 1symantec backup exec system 2010备份教程 - 图文
- 2unity对话插件教程 VISUAL NOVEL,RPG CONVERSATION SYSTEM
- 3Verilog HDL数字设计教程(贺敬凯)第7章
- 4FPGA开发语言 - verilog语言详细教程:1-5 - 图文
- 5verilog HDL
- 6GraspReport System 帮助
- 7西安电子科技大学verilog教程(3-7)
- 8verilog数字系统设计教程 夏宇闻编著 课后习题答案 考试重点
- 9GraspReport System 帮助
- 10Exercises for British Education System
- 供应商绩效评价考核程序
- 美国加州水资源开发管理历史与现状的启示
- 供应商主数据最终用户培训教材
- 交通安全科普体验教室施工方案
- 井架安装顺序
- 会员积分制度
- 互联网对美容连锁企业的推动作用
- 互联网发展先驱聚首香港
- 公司文档管理规则
- 机电一体化系统设计基础作业、、、参考答案
- 如何选择BI可视化工具
- 互联网产品经理必备文档技巧
- 居家装修风水的布置_家庭风水布局详解
- 全省基础教育信息化应用与发展情况调查问卷
- 中国石油--计算机网络应用基础第三阶段在线作业
- 【知识管理专题系列之五十八】知识管理中如何实现“场景化协同”
- 网络推广方案
- 中国石油--计算机网络应用基础第二阶段在线作业
- 汽车检测与维修技术专业人才培养方案
- 详解胎儿颈透明层
- verilog
- 教程
- system