System Verilog 全面教程
System Verilog 是用于系统级验证、芯片设计与 FPGA 实现的强大硬件描述语言。它在 Verilog 的基础上扩展了高级语言结构,如类、接口、任务和函数,极大地优化了验证流程。本教程将带你深入掌握 System Verilog 的语法与特性,涵盖基础概念、结构化编程、并发机制以及现代验证方法学,助你编写高效且可维护的验证代码。
1. System Verilog 概述及应用领域
1.1 起源与发展
System Verilog 源于 Verilog,随着集成电路复杂度的提升,原有的 HDL 已难以满足现代电子设计自动化的需求。它继承了 Verilog 的语法习惯,同时引入了面向对象的概念和更强大的验证功能,成为高端 IC 验证不可或缺的工具。
1.1.1 Verilog 与 VHDL 的区别
Verilog 和 VHDL 都是主流硬件描述语言,但风格迥异。Verilog 语法更接近 C 语言,上手门槛低,在欧美及亚洲地区应用广泛;VHDL 则更像 Pascal 或 Ada,类型严格。对于大多数工程师而言,Verilog 及其演进版 System Verilog 更为直观。
1.1.2 创新特点
System Verilog 引入了断言、随机化、覆盖率和序列化等高级验证特性。这些创新让设计验证过程更加规范高效,帮助团队减少设计错误,缩短产品上市周期。
2. 基础数据类型和结构
2.1 数据类型
System Verilog 提供了比传统 Verilog 更丰富的数据类型,增强了表达能力。
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;
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 结构体和联合体
结构体用于逻辑分组,联合体则允许不同成员共享存储空间,常用于节省内存。
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;
2.2.3 类和对象
类是面向对象的核心,通过封装数据和行为,实现模块化和重用。

