[SystemC]SystemC Hierarchical Channels

您所在的位置:网站首页 sc_fifo [SystemC]SystemC Hierarchical Channels

[SystemC]SystemC Hierarchical Channels

2024-07-06 16:34| 来源: 网络整理| 查看: 265

SystemC Hierarchical Channels

       摘要:分层通道构成了 SystemC 系统级建模能力的基础。它们基于通道可能包含相当复杂的行为的想法——例如,它可能是一个完整的片上总线。

       另一方面,原始通道不能包含内部结构,因此通常更简单(例如,您可以认为 sc_signal 的行为有点像一根电线)。

       为了构建复杂的系统级模型,SystemC 使用将通道定义为实现接口的事物的想法。接口是访问给定通道的可用方法的声明。例如,在 sc_signal 的情况下,接口由两个类 sc_signal_in_if 和 sc_signal_out_if 声明,它们声明访问方法(例如 read() 和 write())。

通过将接口的声明与其方法的实现区分开来,SystemC 促进了一种将通信与行为分离的编码风格,这是促进从一个抽象级别到另一个抽象级别的改进的关键特征。

       SystemC 的一项附加功能是,如果您希望模块通过通道进行通信,则必须使用模块上的端口来访问这些通道。端口充当代理,代表调用模块将方法调用转发到通道。

       分层通道在 SystemC 中作为模块实现,实际上它们是从 sc_module 派生的。原始通道有自己的基类 sc_prim_channel。总结一下:

将沟通与行为分开,便于细化接口声明了一组访问通道的方法分层通道是实现接口方法的模块端口允许模块调用接口中声明的方法

       编写分层通道是一个很大的话题,所以本章将只展示一个基本示例,一个堆栈模型。

一、定义接口

       堆栈将提供一个读取方法和一个写入方法。 这些方法是非阻塞的(它们会立即返回而无需等待)。 为了使它可用,每个方法都返回一个布尔值,说明它是否成功。 例如,如果读取时堆栈为空,则 nb_read()(读取方法)返回 false。

       这些方法在两个单独的接口中声明,一个写接口 stack_write_if 和一个读接口 stack_read_if。 这是包含声明的文件 stack_if.h。

       代码到这里但不起作用?

       这些接口派生自所有接口的基类 sc_interface。 它们应该使用关键字 virtual 派生,如上所示。

       方法 nb_write、nb_read 和 reset 被声明为纯虚拟 - 这意味着它们必须在任何派生类中实现。

二、Stack Channel

       栈通道覆盖栈接口中声明的纯虚方法。 这是代码:

#include "systemc.h" #include "stack_if.h" // this class implements the virtual functions // in the interfaces class stack : public sc_module, public stack_write_if, public stack_read_if { private: char data[20]; int top; // pointer to top of stack public: // constructor stack(sc_module_name nm) : sc_module(nm), top(0) { } bool stack::nb_write(char c) { if (top < 20) { data[top++] = c; return true; } return false; } void stack::reset() { top = 0; } bool stack::nb_read(char& c) { if (top > 0) { c = data[--top]; return true; } return false; } void stack::register_port(sc_port_base& port_, const char* if_typename_) { cout


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3