SC_THREAD 不会被其敏感列表触发

2023-12-04

我正在 SystemC 中开发一个简单的 NAND 模块。根据规范,它应该有 4 ns 的延迟,所以我尝试用带有“wait”语句的过程来描述它,并且SC_THREAD, 如下:

//file: nand.h
#include "systemc.h"

SC_MODULE(nand2){
    sc_in<bool> A, B; 
    sc_out<bool> F; 

    void do_nand2(){
        bool a, b, f;
        a = A.read();
        b = B.read();
        f = !(a && b);
        wait(4, SC_NS);
        F.write(f);
    }

    SC_CTOR(nand2){
        SC_THREAD(do_nand2);
        sensitive << A << B;
    }
};

为了进行模拟,我创建了另一个模块来输出 NAND 的激励,如下所示:

//file: stim.h
#include "systemc.h"

SC_MODULE(stim){
    sc_out<bool> A, B;
    sc_in<bool> Clk;

    void stimGen(){
        wait();
        A.write(false);
        B.write(false);
        wait();
        A.write(false);
        B.write(true);
        wait();
        A.write(true);
        B.write(true);
        wait();
        A.write(true);
        B.write(false);
    }

    SC_CTOR(stim){
        SC_THREAD(stimGen);
        sensitive << Clk.pos();
    }
};

描述了这两个模块后,顶部模块(其中sc_main是)看起来像这样:

//file: top.cpp    
#include "systemc.h"
#include "nand.h"
#include "stim.h"

int sc_main(int argc, char* argv[]){
    sc_signal<bool> ASig, BSig, FSig;
    sc_clock Clk("Clock", 100, SC_NS, 0.5);

    stim Stim("Stimulus");
    Stim.A(ASig); Stim.B(BSig); Stim.Clk(Clk);

    nand2 nand2("nand2");
    nand2.A(ASig); nand2.B(BSig); nand2.F(FSig);

    sc_trace_file *wf = sc_create_vcd_trace_file("sim");
    sc_trace(wf, Stim.Clk, "Clock");
    sc_trace(wf, nand2.A, "A");
    sc_trace(wf, nand2.B, "B");
    sc_trace(wf, nand2.F, "F");

    sc_start(400, SC_NS);

    sc_close_vcd_trace_file(wf);

    return 0;
}

代码的编译和模拟没有错误,但是在可视化时.vcd在 gtkwave 中的文件中,输出 (F) 卡在 1,仅显示模拟开始时的延迟。

为了测试代码中是否有任何错误,我删除了“wait”语句并进行了更改SC_THREAD to SC_METHOD in the nand.h文件并再次模拟,现在得到了正确的结果,但当然没有延迟。

我究竟做错了什么?


最好使用SC_METHOD对于过程do_nand2,它对输入敏感。线程内部通常有一个无限循环,并且它会在整个模拟过程中运行。一个方法在被触发时从头到尾只运行一次。您主要使用线程来刺激或并发进程,并且线程可能对任何事件敏感,也可能不敏感。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SC_THREAD 不会被其敏感列表触发 的相关文章

随机推荐

  • 如何将 char 变量设置为 Input.GetKey 的 KeyCode?

    我正在尝试制作一个作弊代码系统 我有一个字符数组 我想将玩家输入的任何输入分配给该字符 然后将索引更改为下一个字符并重复该操作 最后 我想将所有字符组合成一个字符串 看看这是否是作弊代码 如果是的话 那么玩家将获得加电或其他什么 我基本上希
  • Python,检查是否按下箭头键

    如何在Python中检查用户是否按下箭头键 我想要这样的东西 if right key pressed do some shit elif left key pressed do other stuff 在终端 或 anacoonda 提示
  • 锚点和成员具有并集的递归查询

    我正在尝试执行递归查询 但锚点和成员 cte 都有一个并集 这可能吗 我得到的错误是 Recursive member of a common table expression mainMenu has multiple recursive
  • 我可以在客户端使用Fetch调用Twitter API吗?

    我试图在 React 应用程序中调用 Twitter API 并收到以下错误 获取 API 无法加载https api twitter com 1 1 account verify credentials json 回复 预检请求未通过访问
  • 可可:场景与视图

    菜鸟问题在这里 我想我已经掌握了三个基本模型 视图 控制器元素的基础知识 有点 但什么是场景呢 我知道 iPad 每个屏幕可以有多个场景 而 iPhone iPod 只能有一个 但是场景与视图有何关系呢 如果我的理解有严重错误 请多多指教
  • 在 VBA 中创建和转置数组

    我希望将一定范围内的值加载到数组中并将该数组转置到另一个位置 不同的工作簿 我正在使用下面的论坛帖子来了解如何做到这一点 http www mrexcel com forum excel questions 629320 applicati
  • 将两个表达式组合成管道

    假设我有以下两个表达式 Expression
  • 如何在单独的线程中打开一个窗口?

    我想做 Window newWindow new Window newWindow Show while true Console Write spin 也就是说 我正在主窗口中进行密集计算 但是这个新窗口 我试图在其中用动画显示繁忙指示器
  • Fortran 派生类型:重载赋值运算符不适用于“PARAMETER”属性

    我正在使用派生类型 双复数 和赋值运算符 的重载 以便可以分配real 8 to bicomplex bicplx 模块的 MWE 如下 MODULE bicplx type bicomplex COMPLEX 16 a COMPLEX 1
  • iOS 范围内的随机数

    我知道我可以使用以下命令获得一个随机数 例如从 0 到 700 arc4random 362 但是我怎样才能得到一个介于 200 到 300 之间的随机数呢 arc4random 100 200
  • 数据表服务器端处理不显示页面上的输出,并且条件不起作用[关闭]

    Closed 这个问题需要调试细节 目前不接受答案 我正在使用 ajax 进行数据表服务器端处理 这是我引用的链接https datatables net examples data sources server side html 我遇到
  • YesodAuthEmail 无法推断出 m ~ HandlerFor site0 [重复]

    这个问题在这里已经有答案了 我正在尝试添加 instance YesodAuthEmail App to the Yesod Postgres脚手架 yesod 版本 1 6 并陷入编译错误 相关代码是 instance YesodAuth
  • R-在循环中引用不同的数据帧

    我是 R 的新手 所以如果我的想法完全错误 请随时告诉我 我有一系列关于发电厂的导入数据框 每年一个 Plant1987 Plant1988 等 我试图将它们最终组合成一个数据框 在此之前 我想向每个数据帧添加一个 年份 变量 我可以对每个
  • PowerBuilder Classic 12/12.5 指南/教程 [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 我是 PowerBuilder Classic 12 的新手 我很难找到任何可以帮助我入门的好的指南 教程 现在我已经阅读了以下教程http inf
  • ASP 经典 VBscript 参数化 SQL 查询?

    第一篇文章 但感谢您迄今为止从该网站获得的所有帮助 我正在尝试参数化 SQL 查询 query url Request QueryString ID Set rs Server CreateObject ADODB Recordset Se
  • 解组嵌套 JSON 对象

    有a few 问题 on the topic但它们似乎都不涵盖我的情况 因此我正在创建一个新的情况 我有如下 JSON foo bar 1 baz 2 more text 有没有办法解组嵌套的 bar 属性并将其直接分配给结构属性而不创建嵌
  • 读取包含“[”的文件时出现 CONSTRAINT_ERROR

    我正在阅读一个简单的文本文件 一切都按其应有的方式工作 除非遇到开括号 字符 然后我得到一个 CONSTRAINT ERROR 我的职能是 GET FILE CONTENTS function Get File Contents File
  • onShouldStartLoadWithRequest 在 WebView 中加载任何 url 时自动调用 iOS React Native,如何控制它?

    我正在为我的应用程序实施应用程序WebView 我必须打开一些信息页面 并且必须根据网络视图中任何特定位置 包含不同类型的数据 的点击来获取一些数据 但在 iOS 中 加载任何 URL 时onShouldStartLoadWithReque
  • 如何在 DOCPLEX (Python) 上使用连续变量进行 IF-THEN 约束?

    我使用 DOCPLEX 构建混合整数线性规划 MILP 问题 然后通过 Python 上的 CPLEX 解决该问题 但是 在尝试使用 IF THEN 约束解决 MILP 问题时 我收到以下错误 DOcplexException Model
  • SC_THREAD 不会被其敏感列表触发

    我正在 SystemC 中开发一个简单的 NAND 模块 根据规范 它应该有 4 ns 的延迟 所以我尝试用带有 wait 语句的过程来描述它 并且SC THREAD 如下 file nand h include systemc h SC