有没有办法在 System C 模块中创建 sc_out 信号的数组或向量?

问题描述

我想在 sc_module 中创建一个 sc_out 和 sc_in 数组。我查看了 sc_vector 的文档,但我无法让它工作。我喜欢能够读写单独的 sc_out 端口。

https://eda-playground.readthedocs.io/en/latest/_static/systemc-2.3.1/sysc/a00227.html#ae389bb4e3709ee6385b80cb87ffb64f8

我看了System C的源码,好像是用的std::vector。所以我认为应该有一种简单的方法(可能是一行代码)来创建这个 sc_out 向量并使用它。

https://forums.accellera.org/topic/1849-array-of-sc_vector-binding-and-assembling-help/

也有人在用sc_assemble_vector,有没有文档说明的例子?

提前致谢。

我创建了以下示例代码来展示我正在尝试做的事情。我正在尝试在那里创建一个大小为 4 的向量。 sc_vector 是一个 C++ 类,所以我在 your_module 构造函数中构造了它并将其指针保存在 array_of_outputs 中。

#include <systemc.h>

class your_module : sc_module 
{
private:

public:
    sc_in_clk           clk;
    sc_vector < sc_out< unsigned > >* array_of_outputs; // <-------------------here is declaration
    //Constructor
    SC_CTOR(your_module) {
        SC_CTHREAD(entry,clk.pos());
        sc_vector<sc_out< unsigned >> array_outputs("vector_name",4); // <-- size 4 array
        array_of_outputs= &array_outputs; // <---------------------------save pointer
    }

    // Process functionality in member function below
    void entry() {
        while(true){
            wait();
            (*array_of_outputs)[0].write(2);
            (*array_of_outputs)[1].write(4);
            (*array_of_outputs)[2].write(8);
            (*array_of_outputs)[3].write(10);
        }
    
    }
};

int sc_main(int,char* []) {
    sc_clock clk("Clock",1,SC_NS,0.5,0.0,SC_NS); // 1ns period,0.5 duty cycle,start at 0ns

    sc_vector<sc_signal<unsigned>> new_vector_wire("the_vector");
    your_module YM("your_module");
    (*YM.array_of_outputs)(new_vector_wire);
    NCTRL.clk(clk);

    sc_start(10000);  // run forever

    return 0;
}


解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)