System Verilog 从基础到高级验证实战指南
System Verilog 是用于系统级验证、芯片设计与 FPGA 实现的强大硬件描述语言。它在 Verilog 基础上扩展了高级语言结构,如类、接口、任务和函数,显著优化了验证流程。本文将深入讲解其基础概念、结构化编程元素、并发与同步机制,以及现代验证方法学的应用。
1. System Verilog 概述及应用领域
1.1 起源与发展
System Verilog 由 Verilog 发展而来,旨在满足现代电子设计自动化(EDA)的需求。它继承了 Verilog 的语法,同时引入了面向对象的概念和更强大的验证功能,如断言、随机化和覆盖分析,成为复杂集成电路验证不可或缺的工具。
1.1.1 Verilog 与 VHDL 的区别
虽然两者都是硬件描述语言(HDL),但 Verilog 更接近 C 语言,语法简洁,在业界应用广泛,尤其在美亚地区。VHDL 则更接近 Pascal 或 Ada,类型检查严格。Verilog 因其易学易用,常作为首选。
1.1.2 创新特点
System Verilog 引入了新的数据类型、OOP 特性及改进的验证方法。这些创新让设计验证更高效规范,帮助工程师减少错误,缩短上市时间。
2. 基础数据类型和结构
2.1 数据类型
System Verilog 提供了丰富灵活的数据类型,表达能力远超传统 HDL。
2.1.1 基本数据类型
- 逻辑类型 (logic):替代传统的 wire 和 reg,适用于组合逻辑和时序逻辑。
- 整数类型:包括 int、shortint、longint,支持有符号和无符号。
- 实数类型:real 和 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];
struct {
logic [3:0] red;
logic [3:0] green;
logic [3:0] blue;
} pixel;
2.2 数据结构
数据结构用于有效组织和访问数据。
2.2.1 数组和队列
- 数组:固定大小,适合已知规模的数据。
- 队列 (queue):动态大小,支持增删元素。
int my_array[15]; // 固定大小
bit[7:0] my_queue[$]; // 动态队列
2.2.2 结构体和联合体
- 结构体:逻辑分组不同数据项。
- 联合体 (union):共享存储空间,节省内存。
struct {
logic [7:0] address;
logic [31:0] data;
bit we;
} busTransaction;
union {
logic [31:0] data_word;
logic [7:0] data_bytes[4];
} data_storage;

