欢迎来到得力文库 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
得力文库 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    2022年SystemVerilog语言教程 .pdf

    • 资源ID:35293690       资源大小:213.97KB        全文页数:15页
    • 资源格式: PDF        下载积分:4.3金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要4.3金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    2022年SystemVerilog语言教程 .pdf

    更多免费资料下载请进: http:/中国最大的免费课件资料库SystemVerilog语言简介SystemVerilog是一种硬件描述和验证语言(HDVL),它基于 IEEE 1364-2001 Verilog硬件描述语言(HDL ),并对其进行了扩展,包括扩充了C 语言数据类型、结构、压缩和非压缩数组、接口、断言等等,这些都使得SystemVerilog在一个更高的抽象层次上提高了设计建模的能力。SystemVerilog由 Accellera 开发,它主要定位在芯片的实现和验证流程上,并为系统级的设计流程提供了强大的连接能力。下面我们从几个方面对SystemVerilog所作的增强进行简要的介绍,期望能够通过这个介绍使大家对SystemVerilog有一个概括性的了解。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名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 15 页 - - - - - - - - - 更多免费资料下载请进: http:/中国最大的免费课件资料库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) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 15 页 - - - - - - - - - 更多免费资料下载请进: http:/中国最大的免费课件资料库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 ; timeprecision10ps ; 4. 抽象数据类型Verilog 提供了面向底层硬件的线网、寄存器和变量数据类型。这些类型代表了4 态逻辑值, 通常用来在底层上对硬件进行建模和验证。线网数据类型还具有多个强度级别,并且能够为多驱动源的线网提供解析功能。SystemVerilog包括了 C 语言的 char 和 int 数据类型,它允许在Verilog 模型和验证程序中直接使用C 和 C+代码。Verilog PLI不再需要集成总线功能模型、算法模型和C 函数。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 15 页 - - - - - - - - - 更多免费资料下载请进: http:/中国最大的免费课件资料库SystemVerilog还为 Verilog 加入了几个新的数据类型,以便能够在更抽象的层次上建模硬件。char:一个两态的有符号变量,它与C 语言中的char 数据类型相同,可以是一个 8 位整数( ASCII)或 short int (Unicode );int:一个两态的有符号变量,它与C 语言中的int 数据类型相似,但被精确地定义成 32 位;shortint :一个两态的有符号变量,被精确地定义成16 位;longint :一个两态的有符号变量,它与 C 语言中的long 数据类型相似,但被精确地定义成64 位;byte :一个两态的有符号变量,被精确地定义成8 位;bit:一个两态的可以具有任意向量宽度的无符号数据类型,可以用来替代Verilog 的 reg 数据类型;logic:一个四态的可以具有任意向量宽度的无符号数据类型,可以用来替代Verilog 的线网或 reg 数据类型,但具有某些限制;shortreal :一个两态的单精度浮点变量,与C 语言的 float 类型相同;void:表示没有值,可以定义成一个函数的返回值,与C 语言中的含义相同。SystemVerilog的 bit 和其他数据类型允许用户使用两态逻辑对设计建模,这种方法对仿真性能更有效率。由于Verilog 语言没有两态数据类型,因此许多仿真器都通过将这种功能作为仿真器的一个选项提供。这些选项不能够在所有的仿真器之间移植,而且在需要时用三态或四态逻辑的设计中强制使用两态逻辑还具有副作用。SystemVerilog的 bit 数据类型能够极大改进仿真器的性能,同时在需要的时候仍然可以使用三态或四态逻辑。通过使用具有确定行为的数据类型来代替专有的仿真器选项,两态模型能够在所有的SystemVerilog仿真器间移植。SystemVerilog的 logic 数据类型比Verilog 的线网和寄存器数据类型更加灵活,它使得在任何抽象层次上建模硬件都更加容易。logic 类型能够以下面的任何一种方法赋值:通过任意数目的过程赋值语句赋值,能够替代Verilog 的 reg 类型;通过单一的连续赋值语句赋值,能够有限制地替代Verilog 的 wire 类型;连接到一个单一原语的输出,能够有限制地替代Verilog 的 wire 类型;由于 logic 数据类型能够被用来替代Verilog 的 reg 或 wire(具有限制),这就使得能够在一个更高的抽象层次上建模,并且随着设计的不断深入能够加入一些设计细节而不必改变数据类型的声明。logic 数据类型不会表示信号的强度也不具有线逻辑的解析功能,因此logic数据类型比Verilog 的 wire 类型更能有效地仿真和综合。5. 有符号和无符号限定符名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 15 页 - - - - - - - - - 更多免费资料下载请进: http:/中国最大的免费课件资料库缺省情况下,Verilog net 和 reg 数据类型是无符号类型,integer 类型是一个有符号类型。 Verilog-2001标准允许使用signed 关键字将无符号类型显式地声明成有符号类型。SystemVerilog加入了相似的能力,它可以通过unsigned关键字将有符号数据类型显式地声明成有无符号数据类型。例如:int unsigned j; 值得注意的是unsigned在 Verilog 中是一个保留字,但并没有被Verilog 标准使用。6. 用户定义的类型Verilog 不允许用户定义新的数据类型。SystemVerilog通过使用typedef 提供了一种方法来定义新的数据类型,这一点与C 语言类似。用户定义的类型可以与其它数据类型一样地使用在声明当中。例如:typedef unsigned int uint;uint a, b; 一个用户定义的数据类型可以在它的定义之前使用,只要它首先在空的typedef 中说明,例如:typedef int48; / 空的 typedef ,在其他地方进行完整定义int48 c; 7. 枚举类型在 Verilog语言中不存在枚举类型。标识符必须被显式地声明成一个线网、变量或参数并被赋值。 SystemVerilog允许使用类似于C 的语法产生枚举类型。一个枚举类型具有一组被命名的值。缺省情况下,值从初始值0 开始递增,但是我们可以显式地指定初始值。枚举类型的例子如下:enum red, yellow, green RGB;enum WAIT=2b01, LOAD, DONE states;我们还可以使用typedef 为枚举类型指定一个名字,从而允许这个枚举类型可以在许多地方使用。例如:typedef enum FALSE=1b0, TRUE boolean;boolean ready; boolean test_complete; 8. 结构体和联合体在 Verilog语言中不存在结构体或联合体,而结构体或联合体在将几个声明组合在一起的时候非常有用。SystemVerilog增加了结构体和联合体,它们的声明语法类似于C。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 15 页 - - - - - - - - - 更多免费资料下载请进: http:/中国最大的免费课件资料库struct reg 15:0 opcode; reg 23:0 addr; IR; union int I; shortreal f; N; 结构体或联合体中的域可以通过在变量名和域名字之间插入句点(.)来引用:IR.opcode = 1; / 设置 IR 变量中的opcode 域N.f = 0.0; / 将 N 设置成浮点数的值我们可以使用typedef 为结构体或联合体的定义指定一个名字。typedef struct reg 7:0 opcode; reg 23:0 addr; instruction; / 命名的结构体instruction IR; / 结构体实例一个结构体可以使用值的级联来完整地赋值,例如:instruction = 5, 200; 结构体可以作为一个整体传递到函数或任务,也可以从函数或任务传递过来,也可以作为模块端口进行传递。9. 数组在 Verilog中可以声明一个数组类型,reg 和线网类型还可以具有一个向量宽度。在一个对象名前面声明的尺寸表示向量的宽度,在一个对象名后面声明的尺寸表示数组的深度。例如:reg 7:0 r1 1:256; / 256 个 8 位的变量在 SystemVerilog中我们使用不同的术语表示数组:使用“ 压缩数组( packed array )”这一术语表示在对象名前声明尺寸的数组;使用“ 非压缩数组( unpacked array)” 这一术语表示在对象名后面声明尺寸的数组。压缩数组可以由下面的数据类型组成:bit、logic 、reg 、wire 以及其它的线网类型。无论是压缩数组还是非压缩数组都可以声明成多维的尺寸。bit 7:0 a; / 一个一维的压缩数组名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 15 页 - - - - - - - - - 更多免费资料下载请进: http:/中国最大的免费课件资料库bit b 7:0; /一个一维的非压缩数组bit 0:11 7:0 c; /一个二维的压缩数组bit 3:0 7:0 d 1:10 ; / 一个包含10 个具有 4 个 8 位字节的压缩数组的非压缩数组非压缩尺寸在压缩尺寸之前引用,这就允许将整个压缩数组作为一个单一的元素进行引用。在上面的例子中,d1 引用非压缩数组的一个单一元素,这个元素是一个包含4 个字节的数组。10. 在为命名的块中声明Verilog 允许变量在一个命名的begin-end或 fork-join 语句组中声明。相对于语句组来说,这些变量是本地的,但它们可以被层次化地引用。在SystemVerilog中,既可以在命名的块中也可以在未命名的块中声明。在未命名的块中,不能够使用层次名来访问变量。所有的变量类型,包括用户定义的类型、枚举类型、结构体和联合体都可以在begin-end或fork-join语句组中声明。11. 常量在 Verilog中有三种特性类型的常量:parameter 、specparam和 localparam 。而在SystemVerilog中,允许使用const 关键字声明常量。例如:const char colon = “: ”; 12. 可重定义的数据类型SystemVerilog扩展了 Verilog 的 parameter ,使其可以包含类型。这个强大的功能使得一个模块中的数据类型在模块的每一个实例中重新定义。例如:module foo; # ( parameter type VAR_TYPE = shortint ;) (input logic 7:0 i, output logic 7:0 o); VAR_TYPE j = 0; / 如果不重新定义,j 的数据类型为shortint endmodulemodule bar; logic 3:0 i, o; foo #(.VAR_TYPE(int) u1 (i, o); / 重新将 VAR_TYPE定义成 int 类型endmodule13. 模块端口连接名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 15 页 - - - - - - - - - 更多免费资料下载请进: http:/中国最大的免费课件资料库在 Verilog中,可以连接到模块端口的数据类型被限制为线网类型以及变量类型中的reg 、integer 和 time。而在 SystemVerilog中则去除了这种限制,任何数据类型都可以通过端口传递,包括实数、数组和结构体。14. 字母值在 Verilog中,当指定或赋值字母值的时候存在一些限制。而SystemVerilog则为字母值如何指定作了下面的增强:一个字母值的所有位均可以使用0、1、z 或x 作相同的填充。这就允许填充一个任意宽度的向量,而无需显式地指定向量的宽度,例如:bit 63 :0 data; data = 1; /将 data 的所有位设置成1一个字符串可以赋值成一个字符数组,象 C 语言一样加入一个空结束符。如果尺寸不同,它象C 中一样进行左调整,例如:char foo 0:12 = “hello worldn”; 加入了几个特殊的串字符:v:垂直 TAB f:换页a:响铃x02:用十六进制数来表示一个ASCII 字符数组可以使用类似于C 初始化的语法赋值成字符值,但它还允许复制操作符。括号的嵌套必须精确地匹配数组的维数(这一点与C 不同),例如:int n 1: 2 1:3 = 0, 1, 2, 34; 15. 强制类型转换Verilog 不能将一个值强制转换成不同的数据类型。SystemVerilog通过使用 操作符提供了数据类型的强制转换功能。这种强制转换可以转换成任意类型,包括用户定义的类型。例如:int (2.0 * 3.0) / 将结果转换为int 类型mytype (foo) / 将 foo 转换为 mytype 类型一个值还可以通过在强制转换操作符前指定一个10 进制数来转换成不同的向量宽度,例如:17 (x - 2) / 将结果转换为17 位宽度也可以将结果转换成有符号值,例如:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 15 页 - - - - - - - - - 更多免费资料下载请进: http:/中国最大的免费课件资料库signed (x) / 将 x 转换为有符号值16. 操作符Verilog 没有 C 语言的递增(+)和递减( - )操作符。而SystemVerilog加入了几个新的操作符:+和-:递增和递减操作符;+=、-=、*=、 /=、%=、 &=、 =、|=、 =、= 赋值操作符;17. 唯一性和优先级决定语句在 Verilog中,如果没有遵循严格的编码风格,它的 if-else 和 case 语句会在RTL 仿真和 RTL 综合间具有不一致的结果。如果没有正确使用full_case 和 parallel_case综合指令还会引起一些其它的错误。SystemVerilog能够显式地指明什么时候一条决定语句的分支是唯一的,或者什么时候需要计算优先级。我们可以在if 或 case 关键字之前使用unique 或 requires 关键字。这些关键字可以向仿真器、综合编译器、 以及其它工具指示我们期望的硬件类型。工具使用这些信息来检查if 或 case 语句是否正确建模了期望的逻辑。例如,如果使用unique 限定了一个决定语句,那么在不希望的case 值出现的时候仿真器就能够发布一个警告信息。bit 2:0 a; unique if ( a=0) | (a=1) y = in1;else if ( a=2) y = in2;else if ( a=4) y = in3; / 值 3、5、6、7 会引起一个警告priority if (a2:1=0) y = in1; / a 是 0 或 1else if (a2=0) y = in2; / a 是 2 或 3 else y = in3; / 如果 a 为其他的值unique case (a) 0, 1: y = in1; 2: y = in2; 4: y = in3; endcase / 值 3、 5、6、7 会引起一个警告priority casez (a) 2b00? : y = in1; / a 是 0 或 1 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 15 页 - - - - - - - - - 更多免费资料下载请进: http:/中国最大的免费课件资料库2b0? : y = in2; / a 是 2 或 3 default : y = in3; /如果 a 为其他的值endcase18. 底部检测的循环Verilog 包含 for、while 和 repeat 循环,这几个循环都是在循环的起始处检测循环条件。SystemVerilog加入了一个do-while循环,这种循环在执行语句的结尾处检测循环条件。19. 跳转语句在语句的执行过程中,C 语言提供了几种方式来跳转到新的语句,包括:return 、break 、continue和 goto 。在 Verilog 中除了通过使用disable 语句跳转到语句组的尾部外,没有提供任何其它跳转语句。使用disable 语句执行中止和继续功能要求加入块的名字,并且会产生不直观的代码。SystemVerilog加入了 C 语言的 break 和 continue 关键字,这两个关键字不要求使用块名字。另外,SystemVerilog还加入了一个return 关键字,它可以用来在任何执行点上退出一个任务或函数。break :退出一个循环,与C 语言相同;continue :跳转到一个循环的尾部,与C 语言相同;return表达式:退出一个函数;return :退出一个任务或void 类型的函数。SystemVerilog没有包含C 语言中的goto 语句。20. 块名字和语句标签在 Verilog中,我们可以通过在begin 或 fork 关键字之后指定名字来为begin-end或fork-jion语句指定名字。这个指定的名字代表整个语句块。SystemVerilog还允许在end 或jion 关键字之后指定一个匹配的块名字。这种机制很容易将end 或 jion 与对应的 begin 或 fork联系起来, 尤其是在一个长的块或嵌套的块中。块结尾处的名字是可选的,但如果使用的话,它必须与块起始处的名字相同。例如:begin: foo / 在 begin 之后的块名字fork : bar / 具有名字的嵌套的块jion : bar / 必须具有相同的名字end : foo / 必须具有相同的名字名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 10 页,共 15 页 - - - - - - - - - 更多免费资料下载请进: http:/中国最大的免费课件资料库SystemVerilog还允许像 C 语言一样为单个语句设置标签。语句标签放置在语句的前面,用来标识这条语句。例如:initial begin test1: read_enable = 0; test2: for (i=0; i=255; i+) end 21. 对事件控制的增强Verilog 使用 标记来控制基于特定事件的执行流,SystemVerilog增强了 事件控制。有条件的事件控制标记的一个基本应用就是推断一个具有使能输入的锁存器。下面的例子演示了一个锁存器建模的基本风格。always ( data or en) if (en) y = data;这种编码风格对仿真来说是效率低下的,因为即使在使能输入无效的时候,数据输入的每次改变都会触发事件控制。SystemVerilog在事件控制中加入了一个iff 条件。只有iff 条件为真的条件下,事件控制才会被触发。 通过将使能判断移入到事件控制里面,使得只有在锁存器输出能够改变的时候事件控制才会被触发。例如:always ( a or en iff en=1) y = a;事件控制中的表达式Verilog 允许在 事件控制列表中使用表达式,例如:always (a * b) always (memoryaddress)在第一个例子中, 是当操作数发生改变的时候还是只有当运算结果发生改变的时候才会触发事件控制?在第二个例子中,是当 memory 的地址发生变化的时候还是只有当memory的值发生变化的时候才会触发事件控制?当事件控制中包含表达式的时候,IEEE Verilog标准允许仿真器进行不同的优化。这就可能导致在不同的仿真器间有不同的仿真结果,可能还会导致仿真与综合之间的结果不一致。SystemVerilog加入了一个changed关键字,在事名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 11 页,共 15 页 - - - - - - - - - 更多免费资料下载请进: http:/中国最大的免费课件资料库件控制列表中它被用作一个修饰符。(changed ( 表达式 )能够显式地定义只有当表达式的结果发生改变的时候才会触发事件控制。例如:always (changed (a * b) always (changed memoryaddress)事件控制中的赋值Verilog 不允许在事件控制中使用赋值。SystemVerilog允许在事件控制中使用赋值表达式。事件控制仅仅敏感于赋值表达式右侧的变化。例如:always (y = a * b)22. 新的过程Verilog 使用 always 过程来表示时序逻辑、组合逻辑和锁存逻辑的RTL 模型。综合工具和其它软件工具必须根据过程起始处的事件控制列表以及过程内的语句来推断always 过程的意图。这种推断会导致仿真结果和综合结果之间的不一致。SystemVerilog增加了三个新的过程来显式地指示逻辑的意图。always_ff :表示时序逻辑的过程;always_comb :表示组合逻辑的过程;always_latch :表示锁存逻辑的过程。例如:always_comb (a or b or sel) beginif (sel) y = a; else y = b; end 软件工具能够检查事件控制敏感列表和过程的内容来保证逻辑的功能匹配过程的类型。例如,工具能够检查一个always_comb过程能够敏感过程内读取的所有外部值,对逻辑的每一个分支的相同变量进行赋值,并且检查分支是否覆盖了所有可能的条件。如果任何一个条件没有满足,软件工具均会报告该过程没有正确建模组合逻辑。23. 动态过程Verilog 通过使用fork-jion 提供了一种静态的并发过程。每一个分支都是一个分离的、并行的过程。 fork-jion中任何语句的执行必须在组内的每一个过程完成后才会执行。例如:initial begin fork send_packet_task (1, 255, 0); send_packet_task (7, 128, 5); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 12 页,共 15 页 - - - - - - - - - 更多免费资料下载请进: http:/中国最大的免费课件资料库watch_result_task (1, 255, 0); watch_result_task (7, 128, 5); jion / 所有的任务必须完成后才会到达这里endSystemVerilog通过 process 关键字加入了一个新的、动态的过程。它为一个过程产生分支, 然后继续执行而无需等待其他过程完成。过程不会阻塞过程或任务内的语句执行。这种方式能够建模多线程的过程。例如:initial begin process send_packet_task (1, 255, 0);process send_packet_task (7, 128, 5); process watch_result_task (1, 255, 0); process watch_result_task (7, 128, 5); end / 所有的过程并行运行24. 任务和函数增强SystemVerilog为 Verilog 的任务和函数作了几个增强。静态和自动的存储缺省情况下,在Verilog 任务或函数内的所有存储都是静态的。Verilog-2001允许将任务和函数声明成自动的。在 SystemVerilog中:(1). 在一个静态任务和函数内的特定数据可以显式地声明成自动的。声明成自动的数据在块中具有完整的生命周期,并且在任务和函数调用的入口处初始化;(2). 在一个自动的任务或函数中的特定数据可以显式地声明成静态的。自动的任务或函数中声明成静态的数据在一个块的本地范围内具有静态的生命周期。从任何点返回Verilog 在一个任务或函数中执行到endtask 或 endfunction关键字的时候返回。 函数的返回值是给函数名赋的最后一个值。SystemVerilog加入了一个return 关键字, 使用这个关键字,一个任务或函数可以在任何点上返回。多语句Verilog 要求一个任务或函数只具有一个语句或语句块。多条语句必须组合到一个单一的 begin-end或 fork-jion 块中。 SystemVerilog去除了这种限制。因此,多条语句可以在一个任务或函数中列出而无需使用的begin-end或 fork-jion 。 每有分组的语句就像在begin-end中一样顺序执行。我们还可以产生一个没有语句的任务或函数定义。void 函数Verilog 要求一个函数具有一个返回值,函数的调用接收这个返回值。SystemVerilog加入了一个void 数据类型,这个数据类型可以作为一个函数的返回值类型。void 函数可以名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 13 页,共 15 页 - - - - - - - - - 更多免费资料下载请进: http:/中国最大的免费课件资料库像 Verilog 任务一样进行调用,而无需接收一个返回值。void 函数和任务的差别在于函数存在几个限制,例如没有时间控制等。函数的输入和输出Verilog 标准要求一个函数至少具有一个输入并且函数只能具有输入。SystemVerilog去除了这些限制。函数可以具有任意数目的输入、输出以及输入输出,也可以什么也没有。25. 连续赋值的增强在 Verilog中,连续赋值语句的左侧只能是线网类型,例如wire。连续赋值语句被认为是线网的驱动源,而线网可以拥有任意数据的驱动源。SystemVerilog允许除 reg 类型以外的任何数据类型用于连续赋值语句的左侧。与线网不同, 所有其它数据类型被限制为只能有一个连续赋值语句驱动。为相同的变量混合使用连续赋值语句和过程赋值语句是不被允许的。26. $bit 系统函数在 Verilog中没有类似于C 语言中 sizeof 的函数。 SystemVerilog加入一个新的 $bit 内建函数。 这个函数返回保存一个值所需的硬件位的数目(一个四态值要求一个硬件位),这个函数还可以用来确定一个结构体所代表的硬件位的数目。27. define的增强SystemVerilog增强了 define 编译器指令的能力以便支持将字符串作为宏的参数。宏的文本字符串中可以包含一个隔离的引号,它的前面必须具有一个反勾号( ”),这就允许字符串中包含宏参数。宏文本可以在行的尾部包含一个反斜杠()来表示在下一行继续。如果宏文本字符串中包含反斜杠,则反斜杠应该被放在两个反勾号之间,这样它就不会被认为是 Verilog 转义标识符的开始。宏文本字符串还可以包含双反勾号(),它允许标识符能够从参数中构建。这些增强使得define 指令更加灵活。例如:include 指令后可以紧跟一个宏名字来替代一个字符串。define f1 “./project_top/opcode_defines”include f1 28. 状态机建模SystemVerilog允许在更高的抽象层次上对状态机建模。这些结构包括:枚举类型一个特殊的state 数据类型;一个迁移语句一个迁移操作符名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 14 页,共 15 页 - - - - - - - - - 更多免费资料下载请进: http:/中国最大的免费课件资料库29. 断言SystemVerilog中加入了断言的功能来改善系统的验证过程。30. 结论SystemVerilog为 Verilog-2001标准提供了一系列的扩展。这些扩展使得大型设计的建模和验证更加容易。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 15 页,共 15 页 - - - - - - - - -

    注意事项

    本文(2022年SystemVerilog语言教程 .pdf)为本站会员(Che****ry)主动上传,得力文库 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知得力文库 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于得利文库 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

    © 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

    黑龙江省互联网违法和不良信息举报
    举报电话:0468-3380021 邮箱:hgswwxb@163.com  

    收起
    展开