当前位置: 首页 > web >正文

[SC]SystemC语法小结(一)

SystemC语法小结(一)

       摘要:在 SystemC 中,可以在类的内部声明函数,然后在类的外部实现这些函数。具体来说可以这样做:

  1. 在类内部声明函数(只提供函数签名)。
  2. 在类外部实现这些函数的逻辑。
  3. 使用 public, protected, 和 private 访问修饰符来控制函数和成员变量的访问权限。

以下是具体说明和完整代码示例:


一、访问修饰符的规则

  • public
    • 类外部可以直接访问。
    • 通常用于接口函数(如 read()write())。
  • protected
    • 类外部无法直接访问。
    • 仅供类本身及其派生类访问。
    • 一般用于需要子类重写或共享的函数。
  • private
    • 类外部和派生类均无法访问。
    • 通常用于类内部的辅助函数或数据。

代码示例

以下是一个在类内部声明函数,并在类外部实现函数的完整示例:

#include <systemc.h>// 声明一个简单的类 MyModule
class MyModule : public sc_module {
public:// 构造函数SC_HAS_PROCESS(MyModule);MyModule(sc_module_name name);// 公有函数声明void public_function();protected:// 受保护函数声明void protected_function();private:// 私有函数声明void private_function();int data; // 私有变量
};// 在类外部实现构造函数
MyModule::MyModule(sc_module_name name) : sc_module(name), data(0) {// 注册 SC_THREAD 进程SC_THREAD(main_process);
}// 在类外部实现公有函数
void MyModule::public_function() {std::cout << sc_time_stamp() << ": Public function called." << std::endl;protected_function(); // 调用受保护函数
}// 在类外部实现受保护函数
void MyModule::protected_function() {std::cout << sc_time_stamp() << ": Protected function called." << std::endl;private_function(); // 调用私有函数
}// 在类外部实现私有函数
void MyModule::private_function() {std::cout << sc_time_stamp() << ": Private function called. Data = " << data << std::endl;
}// SC_THREAD 进程的实现
void MyModule::main_process() {wait(10, SC_NS); // 等待 10 nspublic_function(); // 调用公有函数
}// 主函数
int sc_main(int argc, char* argv[]) {// 实例化 MyModuleMyModule my_module("MyModule");// 启动仿真sc_start(20, SC_NS);return 0;
}

代码解析

  1. 类内部声明函数:
    public:void public_function();protected:void protected_function();private:void private_function();
    
    • 在类中声明函数签名,但不实现具体逻辑。
    • 根据函数的访问权限划分为 public, protected, 或 private
  2. 类外部实现函数:
    • 在类外部使用 ClassName::FunctionName 的形式实现函数。
    • 例如:
      void MyModule::public_function() {std::cout << sc_time_stamp() << ": Public function called." << std::endl;
      }
      
  3. 访问修饰符的作用:
    • public_function(): 可以在类外部直接调用。
    • protected_function(): 只能在类内部或派生类中调用。
    • private_function(): 只能在类内部调用。
  4. SystemC 进程注册:
    • 在构造函数中注册一个 SC_THREAD 进程,用于调用 public_function()
SC_THREAD(main_process);
     5. 仿真输出:
  • 在仿真中,main_process 调用了 public_function(),依次触发了 protected_function()private_function()

仿真输出示例

运行上述代码后,输出如下:

10 ns: Public function called.
10 ns: Protected function called.
10 ns: Private function called. Data = 0

注意事项

  1. 访问控制:
    • 选择合适的访问修饰符(public, protected, private)以保护类的封装性。
    • 一般来说,接口函数(供外部调用)设置为 public,类内部使用的辅助函数设置为 protectedprivate
  2. 类外实现:
    • 函数实现必须写在类定义文件之外。
    • 使用 ClassName::FunctionName 的形式标记函数归属。
  3. SystemC 特性:
    • 在 SystemC 模块中,构造函数需要使用 SC_HAS_PROCESS 宏注册进程。
    • SC_THREADSC_METHOD 用于定义仿真的行为。

       通过这种方式,你可以在保持类定义简洁的同时,将函数实现与类分离,便于代码的可读性和维护性。

http://www.xdnf.cn/news/9956.html

相关文章:

  • Linux部署python项目为服务,开启自启动
  • 上传图片转成3D VR效果 / 用photo-sphere-viewer实现图片VR效果 / VR效果在项目中落地实践
  • WebBuilder赋能中山欣锠鞋业数字化转型实践
  • Web 系统验证码与登录安全防护全攻略(附实现方案)
  • The CTeX fontset “fandol“ is unavailable in the current mode.
  • 复合机器人:纠偏算法如何重塑工业精度与效率?
  • AET3156AP电源方案 禾纳代理商
  • 1.什么是node.js、npm、vue
  • vue3 各种数据处理
  • Spring 核心知识点补充
  • 文档处理的相关工具
  • MMR搜索和LangChain整合Milvus实战
  • 小白的进阶之路系列之七----人工智能从初步到精通pytorch自动微分优化以及载入和保存模型
  • 高精度、高效率:正面吊箱号识别系统如何实现精准识别
  • 多模态大模型:开启智能决策的新时代
  • TimeoutException问题排查
  • 必会利器:scp 命令
  • Linux程序管理练习题
  • Python中的enumerate函数:优雅地遍历序列索引与元素
  • 一个开源脚本,可自动安装在 AMD Radeon 7900XTX 上运行选定 AI 接口所需的所有内容
  • 【Java Web】速通CSS
  • DeepSeek与AI提示语设计的全面指南
  • 使用大模型预测结节性甲状腺肿的全流程系统技术方案
  • 花哨桌面 V 3.0.0 (火影忍者版)
  • 模型评估指标详解:准确率、召回率、AUC 是什么?
  • WebVm:无需安装,一款可以在浏览器运行的 Linux 来了
  • 使用有名管道(FIFO)实现循环通信的客户端-服务端
  • 深入了解linux系统—— 库的链接和加载
  • 最大流-Ford-Fulkerson增广路径算法py/cpp/Java三语言实现
  • 春秋云镜 Brute4Road Writeup