System Verilog 是用于系统级验证、芯片设计与 FPGA 实现的强大硬件描述语言。它在 Verilog 的基础上扩展了高级语言结构,如类、接口、任务和函数,显著优化了验证流程。本教程将涵盖 System Verilog 的基础概念、结构化编程元素、并发与同步机制,旨在帮助工程师掌握高效、可维护的验证代码。
1. System Verilog 概述及应用领域
1.1 System Verilog 的起源与发展
System Verilog 作为硬件设计和验证领域的核心语言,由 Verilog 发展而来,旨在满足现代电子设计自动化(EDA)的需求。其发展始于 20 世纪 90 年代,目的是在原有 Verilog HDL 基础上提供更为强大的设计验证功能。
1.1.1 Verilog 与 VHDL 的区别
虽然 Verilog 和 VHDL 都是硬件描述语言(HDL),但语法和使用习惯差异明显。Verilog 更接近 C 语言,易于上手;VHDL 则类似 Pascal 或 Ada。凭借易学易用的特性,Verilog 在美国和亚洲地区被广泛采用。
1.1.2 System Verilog 的创新特点
System Verilog 继承了 Verilog 的语法,并引入了面向对象的概念。它包括新的数据类型、OOP 特性以及改进的验证方法,如断言、随机化、覆盖等。这些创新为工程师提供了更大的灵活性,帮助减少设计错误,缩短产品上市时间。
随着集成电路复杂度的增加,System Verilog 已成为验证高端芯片不可或缺的工具。
2. System Verilog 基础数据类型和结构
2.1 System Verilog 的数据类型
System Verilog 提供了丰富且灵活的数据类型,表达能力远超传统 HDL。
2.1.1 基本数据类型
- 逻辑类型 (logic):替代传统的 wire 和 reg,适用于组合逻辑和时序逻辑。
- 整数类型:包括 int、shortint、longint 等,支持有符号和无符号。
- 实数类型:使用 real 和 realtime 表示浮点数。
- 时间类型:time 和 realtime 用于记录时间跨度,适合时序控制。
- 字符串类型:string 用于文本处理。
logic [7:0] byte_data;
int number;
real time_period;
time simulation_time;
string message;
逻辑类型可表示 0、1、'z(高阻)和'x(未知)。整数类型使用二进制补码。实数遵循 IEEE 754 标准。
2.1.2 复杂数据类型
- 枚举类型 (enum):定义命名常量,提升可读性。
- 数组:支持一维或多维,方便操作数据集合。
- 结构体 (struct):组合不同类型数据形成复合类型。
enum {RED, GREEN, BLUE} led_color;
byte[7:0] ram[0:255]; // 256x8-bit RAM
struct {
logic [3:0] red;
logic [3:0] green;
logic [3:0] blue;
} pixel;
2.2 System Verilog 的数据结构
数据结构用于有效组织和访问数据。
2.2.1 数组和队列
- 数组 (array):固定大小的同类型变量集合。
- 队列 (queue):动态数组,支持改变大小。
int my_array[15]; // 固定大小
bit[7:0] my_queue[$]; // 动态大小

