C++怎么与systemverilog相连

通常,DPI只能连接到静态C例程,而不是C ++代码中的动态对象。所以你需要创建调用它的C包装器例程
C ++方法。
如果拥有多个对象实例,则需要从中传递指向该对象的指针SystemVerilog到C封装中。指针可以保存在SystemVerilog中的“chandle”变量中。
实例如下:

class Counter {
public:
  void counter_signal(unsigned char *o, unsigned char i, char reset);
};

void Counter::counter_signal(unsigned char *o, unsigned char i,char reset) {
  io_printf("C: count=%d, reset=%d\n", count, reset);
}
// DPI需要一个静态例程来与之通信,这个构造计数器对象并返回一个句柄
#ifdef __cplusplus
extern "C" void* counter_new()
#else
void* counter_new()
#endif
{
  return new Counter;
}

//调用Counter实例,传递信号值
#ifdef __cplusplus
extern "C" void counter8(void* inst, unsigned char *o, unsigned char i, char reset)
#else
void counter(void* inst, unsigned char *o, unsigned char i, char reset)
#endif
{
  Counter *c_inst = (Counter *) inst;
  c_inst->counter_signal(o, i, reset);
}

在sv端,实例化counter_new,然后将指针传入counter中,伪代码如下:

initial begin
      // Instantiate the counter in C++
      inst = counter_new();
      forever @(posedge ifc.clk) begin
	      // Call the C++ reference model
	      counter(inst, o, ifc.i, ifc.reset);
      end
   end
  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值