全部教程

SystemVerilog 基础

数据类型、过程块、接口与断言等 SystemVerilog 核心语法。

  1. 01为什么是 SystemVerilog:从 Verilog 到验证语言理解硬件描述与软件执行的本质区别、Verilog 在验证场景下的局限、SystemVerilog 新增了什么,以及贯穿本系列始终的核心心智模型:设计代码与验证代码。
  2. 02基础语法:模块、字面量与打印输出学会读懂并写出模块的声明与例化、SystemVerilog 的数字字面量格式、$display/$sformatf 与消息严重程度、parameter/localparam 参数化,以及三目(条件)运算符——这些是后面每一章示例代码都会默认你已经认识的“连接组织”。
  3. 03跑通你的第一个仿真:EDA Playground、波形与 $finish真正跑起来一个 SystemVerilog testbench:搭建 EDA Playground、理解 `timescale 及其更现代的替代写法 timeunit/timeprecision、弄清楚为什么仿真不加 $finish 就停不下来、用 $dumpfile/$dumpvars 打印并查看波形,并拿到一份完整、可以直接复制运行的例子。
  4. 04数据类型:logic、reg、wire 的区别理解 SystemVerilog 中 logic 类型如何统一并简化 Verilog 的 reg/wire 划分,覆盖组合逻辑与时序逻辑两种场景,以及三种类型各自的适用边界。
  5. 05更多数据类型:2 态与 4 态、枚举、结构体与 typedef理解 2 态与 4 态数据类型的区别与取舍,用 enum 给状态命名,用 struct 打包相关字段,用 typedef 让类型名字有意义。
  6. 06数组:packed/unpacked、动态数组、关联数组与队列认识 SystemVerilog 里的数组家族:packed 与 unpacked 数组的区别、运行时才能确定大小的动态数组、按任意 key 索引的关联数组,以及可动态增删的队列,并知道什么场景该选哪一种。
  7. 07运算符与过程语句快速过一遍 SystemVerilog 里和你已经熟悉的 if/case/循环相同的部分,重点讲清楚几个 SV 特有的新东西:repeat/forever 循环、unique/priority case、按位与逻辑运算符、4 态全等比较 ===/!==、自增自减运算符,以及流操作符。
  8. 08过程块:initial、always_comb、always_ff、always_latch系统梳理 initial、传统 always、always_comb、always_ff、always_latch 这几种过程块各自的用途,并兑现前面章节的承诺——彻底讲清楚阻塞赋值 = 与非阻塞赋值 <= 的区别。
  9. 09任务与函数:SystemVerilog 中的可复用行为厘清 function 与 task 的本质区别、参数的传值与传引用(ref)、默认参数值、void 函数,以及一个非常容易踩的坑:automatic 与 static 生命周期。
  10. 10面向对象入门:SystemVerilog 中的类与对象把你已经熟悉的类和对象概念对应到 SystemVerilog 的语法上,重点弄清楚一个和 struct 完全不同的关键点:对象是句柄(引用),不是值;再学会写 copy() 方法、用 local/protected 限制访问范围、用 static 成员跨对象共享数据,以及用 #(type T) 参数化类。
  11. 11面向对象进阶:继承、多态与虚方法用 extends 建立继承关系,理解为什么不加 virtual 时多态并不会像你以为的那样生效,学会用 $cast 安全地把父类句柄转回子类句柄,以及这一切如何为下一个系列 UVM 的 factory 机制做铺垫。
  12. 12随机化与约束:rand、randc 与 constraint 块学会用 rand/randc 声明可随机化的属性,用 constraint 块描述规则,调用 randomize() 并检查结果,用 $urandom/$urandom_range 和 std::randomize() 在类之外做随机化,并用 rand_mode 与 constraint_mode 在运行时控制随机化范围——这是验证代码生成激励的核心手段。
  13. 13接口与 Modport:信号的打包与组织理解为什么需要 interface 来连接 DUT 和 testbench,用 modport 限制不同视角下信号的读写方向让工具在编译期就能发现连接错误,以及 clocking block 如何给时序 DUT 的信号一套精确、不产生竞争的时序约定。
  14. 14进程与进程间通信:fork-join、事件、信号量与邮箱用 fork-join 的三种变体显式启动并发进程,用 disable fork/wait fork 收尾后台进程,再用 event、semaphore、mailbox 三种机制让并发进程互相同步、限制资源访问、传递数据——这是搭建真实 testbench 的并发基础。
  15. 15断言:即时断言与并发断言(SVA 基础)用 assert 语句声明式地检查条件,而不是手写 if/$error;再学会用 property 和 sequence 描述跨越多个时钟周期的时序关系——这是 SystemVerilog 断言(SVA)的基础,不涉及完整的形式化验证。
  16. 16包与作用域:动手搭建一个小型 Testbench学会用 package 跨文件组织代码、避免命名冲突;然后把前面十五章的积木——接口、类、随机化、mailbox、task、fork-join、断言——拼装成一个真正跑起来的小型 testbench,看看手写这一切在规模变大后会遇到什么麻烦。