问题描述
我想在 sc_module 中创建一个 sc_out 和 sc_in 数组。我查看了 sc_vector 的文档,但我无法让它工作。我喜欢能够读写单独的 sc_out 端口。
我看了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 (将#修改为@)