news 2026/4/14 17:38:07

systemverilog中的virtual function

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
systemverilog中的virtual function

virtual类型的函数在extern声明了之后,展开声明时还需要写virtual吗?

这是一个非常经典且容易产生困惑的 SystemVerilog 语法问题。

核心结论

在类体外(extern)展开声明时,不需要(也不建议)再写virtual关键字。

一旦你在类内部声明该函数为virtual,这个属性就自动伴随该函数,无论是在类外定义还是在子类中重写,它永远都是虚函数。

1. 代码对比

正确写法:
class my_driver extends uvm_driver; // 1. 类内声明:必须写 virtual extern virtual function void build_phase(uvm_phase phase); endclass // 2. 类外展开:不要写 virtual function void my_driver::build_phase(uvm_phase phase); super.build_phase(phase); // ... 逻辑内容 endfunction
错误(或冗余)写法:

如果在类外写成virtual function void my_driver::build_phase...,编译器通常会报错,或者至少会给出一个警告。因为virtual是成员的属性修饰符,而类外定义只是内容的填充


2. 为什么会有这种规定?

这主要源于底层语言的设计逻辑(类似于 C++):

  • 属性在“户口本”上:类内部的声明(Declaration)就像是函数的“户口本”,它定义了函数的名称、参数、返回值以及属性(是否为 virtual、是否为 local 等)。

  • 类外只是“施工现场”:类外的定义(Implementation)只是告诉编译器函数具体怎么执行。此时编译器已经通过类内的声明知道了它是virtual,因此不需要重复。

3. 相关规则扩展

关键字类内声明 (Inside)类外展开 (Outside)说明
virtual必须写不能写虚函数属性在声明时确定。
static必须写不能写静态成员函数的定义不带 static。
local / protected必须写不能写访问权限仅由类内声明决定。
default 参数写在声明处不能写参数默认值(如int a=5)只能出现在类内。

4. 总结

你只需要记住:关键字(virtual, static, local)只在“类体内部”这个地盘生效,一旦出了类的大门(extern 展开),这些修饰符统统脱掉。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/13 9:24:47

基于SpringBoot的校园综合服务系统的设计与实现(程序+文档+讲解)

课题介绍在高校服务场景多元化、管理精细化需求升级的背景下,传统校园服务存在 “流程分散、响应滞后、数据不通” 的痛点,基于 SpringBoot 构建的校园综合服务系统,适配学生、教职工、后勤人员、学校管理部门等角色,实现教务服务…

作者头像 李华
网站建设 2026/4/14 12:32:15

DroneKit-Python无人机控制开发:从入门到实战的5大关键要点

DroneKit-Python无人机控制开发:从入门到实战的5大关键要点 【免费下载链接】dronekit-python DroneKit-Python library for communicating with Drones via MAVLink. 项目地址: https://gitcode.com/gh_mirrors/dr/dronekit-python 想要用Python轻松控制无人…

作者头像 李华
网站建设 2026/4/14 6:29:57

PyLTSpice自动化仿真:让电路设计效率提升300%的终极解决方案

PyLTSpice自动化仿真:让电路设计效率提升300%的终极解决方案 【免费下载链接】PyLTSpice Set of tools to interact with LTSpice. See README file for more information. 项目地址: https://gitcode.com/gh_mirrors/py/PyLTSpice PyLTSpice自动化仿真工具链…

作者头像 李华
网站建设 2026/4/13 22:32:41

Vulkan图形编程实战指南:掌握现代高性能渲染技术

Vulkan图形编程实战指南:掌握现代高性能渲染技术 【免费下载链接】VulkanTutorialCN Vulkan中文教程 项目地址: https://gitcode.com/gh_mirrors/vu/VulkanTutorialCN 想要在图形编程领域实现质的飞跃吗?Vulkan作为新一代高性能图形API&#xff0…

作者头像 李华
网站建设 2026/4/11 15:04:01

QCMA:跨平台PS Vita内容管理的完整解决方案

QCMA:跨平台PS Vita内容管理的完整解决方案 【免费下载链接】qcma Cross-platform content manager assistant for the PS Vita (No longer maintained) 项目地址: https://gitcode.com/gh_mirrors/qc/qcma QCMA是一款功能强大的跨平台PS Vita内容管理助手&a…

作者头像 李华
网站建设 2026/4/13 9:42:54

Lua-HTTP终极指南:5个高效实战场景深度解析

在当今互联网应用开发中,HTTP通信已成为不可或缺的核心技术。然而,传统的HTTP库往往存在性能瓶颈和异步处理难题。Lua-HTTP作为一款专为Lua生态系统设计的高性能HTTP和WebSocket库,彻底改变了这一现状。本文将带您深入探索如何在实际项目中充…

作者头像 李华