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

[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 用于定义仿真的行为。

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

相关文章:

  • mysql使用 过程函数 for in函数批量修改数据
  • 罗德里格斯公式动图演示
  • DeepSeek 赋能低空经济:无人机智能调度的破局之道
  • 如何在 Odoo 18 中创建 PDF 报告
  • react库:class-variance-authority
  • 气象大模型如何影响端午节旅行?精准预报助力安全出行
  • Spring boot集成milvus(spring ai)
  • spark在执行中如何选择shuffle策略
  • 安卓学习笔记-数据存储
  • 为 Ubuntu 安装的软件创建桌面图标
  • 电路图识图基础知识-电路接线图(八)
  • Linux程序管理练习题
  • Python完整项目结构的示例及其说明
  • How to Initiate Back-to-Back Write Transactions from Master
  • RockyLinux9安装Docker
  • AI绘画提示词:从零开始掌握Prompt Engineering的艺术
  • 【电路笔记 TMS320F28335DSP】McBSP 从源时钟得到 生成时钟 CLKG 帧同步信号 FSG
  • 设计模式-工厂方法模式
  • Git的三种合并方式
  • LeetCode 395.至少有K个重复字符的最长子串
  • 深圳外贸网站建设/设计一个简单的网页
  • 网站做百度权重排名论坛/磁力搜索器在线
  • 视频网站seo实战/北京百度网站排名优化
  • 濮阳团购网站建设/关键词排名关键词快速排名
  • 与建设通相关的网站/软文兼职
  • 商丘做网站的费用/百度收录量