SystemVerilog 是 Verilog 的超集,就像 C++ 是 C 语言的超集。它完全兼容 Verilog,并且增加了大量面向对象、验证相关的语法,现在是芯片验证的主流语言
- Verilog 对应 C 语言
- SystemVerilog 对应 C++
Verilog 主要用于RTL 硬件设计 ,SystemVerilog 在其基础上扩展了面向对象、随机激励、功能覆盖率等特性,是目前芯片验证的标准语言
关系一模一样:
- 后者完全兼容前者C++ 能跑 C 代码;SystemVerilog 能跑 Verilog 代码
- 后者是前者的超级扩展C++ 扩展了面向对象、模板、STL;SystemVerilog 扩展了验证语法、类、线程、随机化、功能覆盖率
- 用途分层 C 做底层驱动 / 硬件逻辑;Verilog 做芯片设计(RTL) C++ 做大型软件 / 复杂逻辑;SystemVerilog 做芯片验证(UVM)
真正的核心区别
虽然关系像,但芯片行业里用途完全分家,这是和 C/C++ 最大不同:
1. Verilog = 硬件设计语言(写电路)
- 用来做芯片设计(RTL)
- 描述门电路、时序、组合逻辑
- 你应聘的芯片设计工程师,主要用它
2. SystemVerilog = 验证语言(测电路)+ 增强版设计
- 90% 用来芯片功能验证
- 支持:类 (class)、随机化、断言、覆盖率、线程
- 验证工程师必用,设计工程师也会用一部分
systemverilog与verilog的区别
SystemVerilog和Verilog是硬件描述语言(HDL),用于电子设计自动化(EDA)领域,都有描述电路行为和结构的能力
语言特性
- Verilog是过程级语言,侧重于描述电路的行为,提供模块化编程,以及支持结构体、任务(Task)和函数(Function);代码通常以时间驱动的方式执行(根据输入信号的变化来触发代码执行)
- SystemVerilog是功能级语言,继承了Verilog的特性,提供了额外的功能和抽象层次;引入了面向对象编程(OOP)的概念,支持类(Class)、继承和多态等特性;还增强了对验证和测试的支持,引入了约束随机测试(Constraint Random Testing)和可配置性的概念
设计方面
- Verilog主要用于描述数字电路和系统设计;适合低层次的硬件设计,如寄存器传输级(Register Transfer Level,RTL)描述和门级描述;Verilog在时序和组合逻辑方面的建模能力较强,具有高度的灵活性和可定制性
- SystemVerilog扩展了Verilog的设计能力,使其更加适用于复杂系统的设计和验证;引入了事务级建模(Transaction· Level Moding,TLM)的概念,提供了一种高层抽象的方式来描述系统级行为;SystemVerilog还增加了对并发处理的支持,提供了原子操作、锁等同步机制,以及多线程和进程间通信的功能
验证和测试
- Verilog在验证和测试方面的支持较弱,虽然可以通过任务和函数来编写一些测试代码,但其功能有限;Verilog通常要有其他验证工具和测试框架结合使用,以实现更全面的验证流程
- SystemVerilog在验证和测试方面是主流的验证语言;引入了约束随机测试的概念,允许通过约束条件来生成随机测试数据;SystemVerilog还提供了断言(Assertion)和覆盖率(Coverage)等功能,用于检测设备设计中的错误和验证进度
应用领域
- Verilog:数字电路的设计和仿真、门级网表生成以及物理设计等领域;是EDA工具的基础,被用于设计各种类型的硬件,包括处理器、存储器、通信设备等
- SystemVerilog在Verilog的基础上扩展了功能,更广泛应用在验证和测试领域;在系统级设计、集成电路设计(IC)、片上系统(Soc)以及可编程逻辑器件(FPGA)设计和验证中都有重要作用