最新整理Systemverilog语言简介.doc

上传人:scccc 文档编号:12244562 上传时间:2021-12-02 格式:DOC 页数:3 大小:27.50KB
返回 下载 相关 举报
最新整理Systemverilog语言简介.doc_第1页
第1页 / 共3页
最新整理Systemverilog语言简介.doc_第2页
第2页 / 共3页
最新整理Systemverilog语言简介.doc_第3页
第3页 / 共3页
亲,该文档总共3页,全部预览完了,如果喜欢就下载吧!
资源描述

《最新整理Systemverilog语言简介.doc》由会员分享,可在线阅读,更多相关《最新整理Systemverilog语言简介.doc(3页珍藏版)》请在三一文库上搜索。

1、SystemVerilog语言简介SystemVerilog 是一种硬件描述和验证语言(HDVL,它基于IEEE 1364-20 xx Verilog硬件描述语言(HDL ,并对其进行了扩展,包括扩充了C语言数据类型、结构、压缩和非压缩数组、接口、断言等等,这些都使得 SystemVerilog在一个更高的抽象层次上提高了设计建模的能力。SystemVerilog由Accellera开发,它主要定位在芯片的实现和验证流程上,并为系统级的设计流程提供了 强大的连接能力。下面我们从几个方面对SystemVerilog所作的增强进行简要的 介绍,期望能够通过这个介绍使大家对SystemVerilog

2、有一个概括性的了解。1. 接口( In terface )Verilog模块之间的连接是通过模块端口进行的。为了给组成设计的各个模块定义端口,我们必须对期望的硬件设计有一个详细的认识。不幸的是,在设计的早期,我们很难把握设计的细节。而且,一旦模块的端口定义完成后,我们也 很难改变端口的配置。另外,一个设计中的许多模块往往具有相同的端口定义, 在Verilog中,我们必须在每个模块中进行相同的定义,这为我们增加了无谓的 工作量。SystemVerilog提供了一个新的、高层抽象的模块连接,这个连接被称为接 口( In terface )。接口在关键字in terface和endin terfac

3、e 之间定义,它独立于模块。接口在模块中就像一个单一的端口一样使用。在最简单的形式下,一个接口可以认为是一组线网。例如,可以将PCI总线的所有信号绑定在一起组成一 个接口。通过使用接口,我们在进行一个设计的时候可以不需要首先建立各个模 块间的互连。随着设计的深入,各个设计细节也会变得越来越清晰,而接口内的信号也会很容易地表示出来。当接口发生变化时,这些变化也会在使用该接口的 所有模块中反映出来,而无需更改每一个模块。下面是一个接口的使用实例: in terface chip_bus; /定义接口wire read_request, read_gra nt;wire 7:0 address, d

4、ata;endin terface: chip_busmodule RAM (chip_bus io, /使用接口in put clk);/ 可以使用io.read_request 引用接口中的一个信号 en dmodule module CPU(chip_bus io, in put clk);en dmodule module top;reg clk = 0;chip_bus a; / 实例接口/将接口连接到模块实例RAM mem(a, clk);CPU cpu(a, clk);en dmodule实际上,SystemVerilog的接口不仅仅可以表示信号的绑定和互连。由于SystemVe

5、rilog的接口中可以包含参数、常量、变量、结构、函数、任务、in itial块、always块以及连续赋值语句,所以 SystemVerilog的接口还可以包含内 建的协议检查以及被使用该接口的模块所共用的功能。2. 全局声明和语句在Verilog中,除了一个模块可以作为模块实例引用其他模块外,并不存在 一个全局空间。另外,Verilog允许任意数目的顶层模块,因此会产生毫无关联 的层次树。SystemVeriog增加了一个被称为$root的隐含的顶级层次。任何在模块边界 之外的声明和语句都存在于$root空间中。所有的模块,无论它处于哪一个设计 层次,都可以引用$root中声明的名字。这样

6、,如果某些变量、函数或其它信息 被设计中的所有模块共享,那么我们就可以将它们作为全局声明和语句。全局声 明和语句的一个使用实例如下:reg error _flag; /全局变量fun cti on pare (.); /全局函数always (error_flag) /全局语句module test;chip1 u1 (.) en dmodule module chip1 (.);FSM u2 (.);always (data) error_flag = pare(data, expected); en dmodule module FSM (.);always (state)error_fl

7、ag = pare(state, expected);en dmodule3. 时间单位和精度在Verilog中,表示时间的值使用一个数来表示,而不带有任何时间单位。 例如:forever #5 clock = clock;从这一句中我们无法判断5代表的是5ns? 5ps?还是其他。Verilog的时间 单位和精度是作为每一个模块的属性,并使用编译器指令'timescale 来设置。使用这种方法具有固有的缺陷,因为编译器指令的执行依赖于源代码的编译顺 序,编译器总是将它遇到的最后一个'timescale设置的时间单位和精度作为之后的标准。那么,假如有些模块之前没有使用'

8、timescale设置时间单位和精度, 这就有可能出现同一个源代码的不同仿真会出现不同结果的情况。SystemVerilog为了控制时间单位加入了两个重要的增强。首先,时间值可 以显式地指定一个单位。时间单位可以是s、ms ns、ps或fs。时间单位作为时间值的后缀出现。例如:forever #5ns clock = clock;其次,SystemVerilog 允许使用新的关键字(timeunits 和 timeprecision ) 来指定时间单位和精度。这些声明可以在任何模块中指定,同时也可以在$root空间中全局指定。时间单位和精度必须是10的幕,范围可以从s到fs。例如:time u

9、n its 1ns;timeprecisi on 10ps;4. 抽象数据类型Verilog提供了面向底层硬件的线网、寄存器和变量数据类型。这些类型代 表了4态逻辑值,通常用来在底层上对硬件进行建模和验证。线网数据类型还具 有多个强度级别,并且能够为多驱动源的线网提供解析功能。SystemVerilog 包括了 C语言的char和int数据类型,它允许在 Verilog 模型和验证程序中直接使用 C和C+弋码。Verilog PLI不再需要集成总线功能 模型、算法模型和C函数。SystemVerilog还为Verilog加入了几个新的数据类 型,以便能够在更抽象的层次上建模硬件。char :一个两态的有符号变量,它与C语言中的char数据类型相同,可以是一个8位整数(ASCII)或short int(Uni code);int :个两态的有符号变量,它与 C语言中的int数据类型相似,但被精确地定义成 32位;shortint: 一个两态的有符号变量,被精确地定义成16位;longint :个两态的有符号变量,它与 C语言中的l

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1