gpt4 book ai didi

systemc - 如何在 SystemC 中使用 next_trigger() 模拟输出延迟?

转载 作者:行者123 更新时间:2023-12-04 11:39:22 27 4
gpt4 key购买 nike

我一直在阅读 Stack Overflow 上的这个赞成答案:https://stackoverflow.com/a/26129960/12311164
它说更换 wait(delay, units);在 SC_THREAD 到 next_trigger(delay, units)在 SC_METHOD 工作。
但是当我尝试时,它不起作用。我正在尝试构建具有 2 ns 输出延迟的加法器模块。加法器输出不是 2 ns 的输出延迟,而是每 2 ns 更新一次。
设计:

#include "systemc.h"

#define WIDTH 4

SC_MODULE(adder) {
sc_in<sc_uint<WIDTH> > A, B;
sc_out<sc_uint<WIDTH> > OUT;

void add(){
sc_time t1 = sc_time_stamp();
int current_time = t1.value();
int intermediate = A.read() + B.read();
next_trigger(2, SC_NS);
OUT.write(intermediate);
cout << " SC_METHOD add triggered at "<<sc_time_stamp() <<endl;
}


SC_CTOR(adder){
SC_METHOD(add);
sensitive << A << B;
}
};
我知道如何使用 2 种技术模拟延迟: sc_eventSC_METHODwait声明于 SC_THREAD ,但我想使用 next_trigger() 模拟延迟。我已经阅读了语言引用手册,但不知道如何去做。
在 EDA Playground 上模拟: https://edaplayground.com/x/dFzc
我想我需要在输入改变后触发 2 NS,怎么做?

最佳答案

您必须手动跟踪状态:

sc_uint<WIDTH> intermediate;

void add(){
if (A->event() || B->event() || sc_delta_count() == 0) {
intermediate = A.read() + B.read();
next_trigger(2, SC_NS);
} else {
OUT->write(intermediate);
}
}
问题是使用 next_trigger不会神奇地改变您的 SC_METHOD进入 SC_THREAD .一般来说,我发现 next_trigger 的任何用法不方便,有更好的方法可以使用 sc_event .

关于systemc - 如何在 SystemC 中使用 next_trigger() 模拟输出延迟?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68098155/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com