news 2026/6/9 20:52:11

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/6/6 17:31:51

3小时搞定企业级后台:MajesticAdmin Bootstrap模板零基础部署实战

还在为搭建专业管理后台而熬夜加班?作为经历过无数次项目交付的资深开发者,我发现90%的中小团队都在重复造轮子。今天分享的MajesticAdmin模板,正是解决这一痛点的利器——它让后台开发从"技术挑战"变成"配置游戏"。 【免…

作者头像 李华
网站建设 2026/6/6 16:45:35

ESP32智能手表终极指南:从零开始打造你的开源穿戴设备

ESP32智能手表终极指南:从零开始打造你的开源穿戴设备 【免费下载链接】ESP32-Smart-Watch 项目地址: https://gitcode.com/gh_mirrors/es/ESP32-Smart-Watch ESP32智能手表是一个完全开源的智能穿戴项目,基于强大的ESP32微控制器,让…

作者头像 李华
网站建设 2026/6/6 22:23:53

资源受限系统中nanopb的精简集成方案

在8KB RAM的MCU上跑Protobuf?nanopb实战精简集成指南你有没有遇到过这样的场景:一个基于STM32L0的LoRa温感节点,Flash只有64KB,RAM仅剩8KB可用,却要对接云平台要求的结构化数据协议。用JSON吧,拼字符串动不…

作者头像 李华
网站建设 2026/6/9 18:41:39

WebToEpub完整教程:从网页小说到精美EPUB电子书

WebToEpub完整教程:从网页小说到精美EPUB电子书 【免费下载链接】WebToEpub A simple Chrome (and Firefox) Extension that converts Web Novels (and other web pages) into an EPUB. 项目地址: https://gitcode.com/gh_mirrors/we/WebToEpub WebToEpub是一…

作者头像 李华
网站建设 2026/6/9 19:43:53

基于微信小程序的地方美食分享设计与实现文献综述

本科毕业论文(设计)文献综述题 目 基于微信小程序的 地方美食众享设计与实现 姓 名 学 号 202100181122 院(系部) 数学与信息技术学院 专 业 21网络工程本1班 …

作者头像 李华