system verilog学习---第3章 设计和验证构建块

本文深入介绍了SystemVerilog的关键概念,包括module、program、interface、checker和primitive的用途,以及子例程、package、配置、层次化、编译过程和时间单位的细节。SystemVerilog设计元素如modules、programs和interfaces用于构建硬件和验证环境,而checkers则用于创建验证库单元。此外,还探讨了时间单位和精度的指定,强调了`timescale编译器指令和timeunit/timeprecision关键字的作用及优先级。
摘要由CSDN通过智能技术生成

一.章节内容

描述如下:

  • module、program、interface、checker和primitive(UDP)的用途
  • 子例程概述–task和funcion
  • package概述
  • 配置概述
  • 层次化概述
  • 汇编和阐述的定义
  • 声明名称空间
  • 仿真时间、时间单位,时间精度

二.设计元素

设计元素是SystemVerilog 的module、program、interface、checker、package、primitive或配置。这些构造分别由关键字module、program、interface、checker、package、primitiveconfig引入 。
设计元素是用于建模和构建设计和验证环境的主要构建块。这些构建块是本文档后续条款中讨论的声明和程序代码的容器。

三.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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值