一.章节内容
描述如下:
- module、program、interface、checker和primitive(UDP)的用途
- 子例程概述–task和funcion
- package概述
- 配置概述
- 层次化概述
- 汇编和阐述的定义
- 声明名称空间
- 仿真时间、时间单位,时间精度
二.设计元素
设计元素是SystemVerilog 的module、program、interface、checker、package、primitive或配置。这些构造分别由关键字module、program、interface、checker、package、primitive和config引入 。
设计元素是用于建模和构建设计和验证环境的主要构建块。这些构建块是本文档后续条款中讨论的声明和程序代码的容器。
三.Modules
SystemVerilog中的基本构建块是module,包含在关键字module…endmodule之间。module主要用于表示设计块,但也可以用作验证代码的容器以及验证块和设计块之间的互连。module可以包含的一些构造内容如下:
- 端口,带有端口声明
- 数据声明,如net、var、结构体和联合体
- 常量声明
- 自定义类型–typedef
- 类定义–class
- 从包导入声明
- 子例程定义-task function
- 其他模块、程序、接口、checker的实例化和原语
- 类对象的实例化
- 连续赋值
- 程序块–always块
- 生成块–generate
- 指定块–specify
module mux2to1 (input wire a, b, sel,output logic y); //端口和类型声明
always_comb begin //程序块
if (sel) y = a; //程序语句
else y = b;
end
endmodule: mux2to1
#包导入声明
package p;
struct {
int x; } s1;
struct {
int x; } s2;
function void f();
int x;
endfunction
endpackage
module m;
import p::*;
.....
endmodule
#类对象实例化
class C ;
endclass
module M #( type T = C, T p = 4,
type T2, T2 p2 = 4
) () ;
endmodule
四.Programs–程序
programs块包含在关键字program…endprogram。此构造用于对测试台环境进行建模。module结构对于硬件描述很有效。然而,对于测试台而言,重点不是硬件级细节,如导线、结构层次和互连,而是对验证设计的完整环境进行建模。
程序块有以下三个基本用途:
- 它提供了执行测试台的入口点。
- 它创建一个范围来封装程序–广泛的数据、任务和函数。
- 它提供了一个语法上下文,用于指定反应区域中的调度。
program将验证部分与设计部分进行隔离(实现方式就是讲软件验证部分放置program中)。
程序块可以包含数据声明、类定义、子例程定义、类对象实例以及一个或多个initial过程。不能出现always、module,interface,program的例化或其他程序的实例化。
program test (
input clk,
input [16:1] addr,
inout [7:0] data);
initial begin
...
endprogram
五.interfaces
interface,包含在关键字interface…endinterface,封装设计块之间以及设计块和验证块之间的通信
interface是一个声明的net或变量的包。interface在设计中实例化,可以连接到其他实例化的module、interface和program的接口端口。interface可以作为一个单独的项目通过一个端口访问,在需要的地方可以引用net或变量。
interface是功能强大的端口类型,支持多个信号组成一个端口,只需声明1次。interface中可以包括端口、参数、常量、变量、函数和任务。接口中元素的类型可以声明,也可以作为参数传递。成员变量和函数作为实例成员相对于接口的实例名称引用。因此,通过接口连接的模块可以简单地调用该接口的子例程成员来驱动通信。
为了限制模块内的接口访问,在接口内声明了带有方向的modport列表。关键字modport表示方向是在模块内部声明的。实例化接口时,不用例化modport声明的端口。
接口定义和用法的简单示例如下:
interface simple_bus(input logic clk); // 定义interface
logic req, gnt;
logic [7:0] addr, data;
logic [1:0] mode;
logic start, rdy