标签: systemc

硬件建模的正确语言

我们一直在用C开发"硬件模型".

我们目前的工作流程:

  1. "硬件模型"中的数据结构是"比特准确的",然后进行测试.
  2. "Bit Accurate Hardware model"用于设计LSI,
  3. 设计完成后,再次使用"硬件模型"来验证LSI,

使用C语言的问题

虽然C很适合多功能编码,但它缺乏硬件设计中的" 并发 "方面.因此,无法弄清楚可能在硬件设计中支撑的" 赛车条件 ".

因此,我们正在研究可用于设计" 硬件模型 "的工具,这些工具可以更好地模仿硬件.

目前我们(仅)正在研究 - 系统C(类似C ......)

我很乐意看到其他人使用的工具.

感谢您阅读这篇相当长的帖子......

c hardware verilog system-verilog systemc

5
推荐指数
1
解决办法
1213
查看次数

SystemC中的OpenCV

我一直在使用OpenCV和SystemC来满足几个应用程序.

现在,我有这个应用程序,我需要在SystemC模拟环境中使用OpenCV显示图像.但是出于某种原因,两个软件包似乎在"运行时"不兼容:

  • 在调用之前cvNamedWindow或cvShowImage在调用SystemC类之前没有问题sc_start().
  • 但是,当a cvNamedWindow或cvShowImage在a中调用时sc_thread,程序的执行将中止:

    线程1:EXC_BAD_ACCESS(代码= 2,地址= 0x7c91ad70).

查询frames(cvQueryFrame)没有问题,只有与窗口相关的函数似乎会导致问题.如果有人知道可能导致此问题的原因,并且如果有解决方案或解决此问题的方法,那就太棒了.

PS我正在使用Xcode,但我认为问题与编码环境无关.

c opencv systemc

5
推荐指数
0
解决办法
500
查看次数

运行Boost单元测试不同的进程

我想在SystemC程序中进行单元测试.我们的想法是在每个套件中安装多个测试套件并进行多次测试.每个测试都需要重置SystemC框架(例如,通过调用sc_simcontext::reset()),但实际上这是不可能的,因为某些错误显然不会很快修复.因此,我决定提出一个解决方法.

我发现如果我在不同的进程上运行每个测试,一切正常.以下代码段概述了我用于使其工作的方案:

void test1() {
  // ...
  sc_start();
}

void test2() {
  // ...
  sc_start();
}

typedef std::function<void()> TestFunction;

void run_test(TestFunction test_function) {
  pid_t pid = fork();
  switch (pid) {
  case -1:
    throw std::runtime_error("Error forking process");
  case 0:
    test_function();
    exit(0);
  default:
    waitpid(pid, nullptr, 0);
    break;
  }
}

int main() {
  run_test(test1);
  run_test(test2);
}
Run Code Online (Sandbox Code Playgroud)

现在我想用Boost单元测试来实现这样的测试方案.

我一直在研究Boost单元测试库的内部结构,我发现这unit_test_main似乎是触发所有测试执行的函数.但我无法设计一种非侵入性的方式与Boost单元测试进行交互,以便在不同的进程上运行每个测试.

有谁知道在不同的进程上运行每个测试的简单解决方案?

c++ boost unit-testing systemc boost-test

5
推荐指数
1
解决办法
624
查看次数

系统错误与库错误

我使用本教程安装了SystemC库2.3.1 .

我写了这个hello world例子:

//hello.cpp
#include <systemc.h>

SC_MODULE (hello_world) {
  SC_CTOR (hello_world) {
  }

  void say_hello() {
    cout << ”Hello World systemc-2.3.0.\n”;
  }
};

int sc_main(int argc, char* argv[]) {
  hello_world hello(“HELLO”);
  hello.say_hello();
  return(0);
}
Run Code Online (Sandbox Code Playgroud)

并使用此命令编译:

export SYSTEMC_HOME=/usr/local/systemc230/
g++ -I. -I$SYSTEMC_HOME/include -L. -L$SYSTEMC_HOME/lib-linux -Wl,-rpath=$SYSTEMC_HOME/lib-linux -o hello hello.cpp -lsystemc -lm
Run Code Online (Sandbox Code Playgroud)

当我编译代码时,我得到了一个库错误:

In file included from hello.cpp:1:0:
/usr/local/systemc230/include/systemc.h:118:16: error: ‘std::gets’ has not been declared
     using std::gets;
                ^~~~
Run Code Online (Sandbox Code Playgroud)

我怎么解决这个问题?

c++ hardware fpga systemc asic

5
推荐指数
1
解决办法
3508
查看次数

安装SystemC for VS2013

我正在使用Windows 10 64位计算机与Visual Studio Professional 2013,我想安装SystemC.我下载了SystemC 2.3.1并尝试按照提供的"安装说明"进行操作,但它们稍微过时了.

首先,它说"对于VS 2005及更高版本的Windows 7机器",但我使用的是Windows 10,但我仍然试图遵循它.其次,由于此方法在VS2013中已更改,因此无法按照此处所述的方式包含src和lib文件.似乎没有全局设置通过Tools->Options->Projects->VCC++路线选项卡.

现在,我能够成功地购买SystemC.sln解决方案.但是,当我尝试构建一个示例项目时,我收到以下错误:

链接:致命错误LNK1104:无法打开文件'C:\ Users\Andrew\Downloads\systemc-2.3.1a\systemc-2.3.1a\msvc80\SystemC\Debug.obj'

即使我认为我已经正确指定了项目属性中的src和lib目录.

谁能解释如何在Windows 10 x64上使用VS2013构建SystemC?

systemc visual-studio-2013

4
推荐指数
1
解决办法
2683
查看次数

Jinja2 ASCII 转字符串

我的 Jinja2 模板中有这一行:

{% for type in types %}
    top -> {{(loop.index0 + 'a')|string}}(var{{loop.index0}});
{% endfor %}
Run Code Online (Sandbox Code Playgroud)

其中 types 是模板中其他地方使用的 C++ 中各种类型的列表,输出是用于初始化模块信号的 SystemC 程序的一部分。目标是获得这样的输出,其中字符以小写 a 开头:

top -> a(var0);
top -> b(var1);
Run Code Online (Sandbox Code Playgroud)

然而,它给出了这个错误:“+不支持的操作数类型:'int'和'str'”所以我尝试将模板更改为:

{% for type in types %}
    top -> {{(loop.index0 + 'a'|int)|string}}(var{{loop.index0}});
{% endfor %}
Run Code Online (Sandbox Code Playgroud)

但随后的输出是这样的

top -> 0(var0);
top -> 1(var1);
Run Code Online (Sandbox Code Playgroud)

问题似乎在于 Jinja2 模板中无法将整数转换为相应的 ASCII 字符。我尝试了“chr()”,但这是一个 Python 函数,而不是 Jinja2 函数,并且不起作用。我想知道是否有人有这方面的经验并且可以帮助我?

c++ python jinja2 systemc

3
推荐指数
1
解决办法
3211
查看次数

如何初始化一个数组的 systemc 端口名称?

我想初始化一个端口名称。端口是一个数组,我的代码不起作用。

SC_MODULE(example) {
  sc_clock clk;
  sc_signal<bool> mysignals[2];

 public: 

 SC_CTOR(example)
   :clk("clk"),
    mysignals[0]("mysignals[0]"), // won't work
    mysignals[1]("mysignals[1]") // won't work
      {}

  ~example() {
  }
};
Run Code Online (Sandbox Code Playgroud)

下面的代码可以通过clk命名“clk”来工作。但是clk端口不是数组:

SC_MODULE(example) {
  sc_clock clk;

 public: 

 SC_CTOR(example)
   :clk("clk")
      {}

  ~example() {
  }
};
Run Code Online (Sandbox Code Playgroud)

如何命名端口数组?

更新:

尝试了建议的评论。还是不行:

#include "systemc.h"

SC_MODULE(example) {
  sc_clock clk;
  sc_signal<bool> mysignals[2];

 public: 

  SC_CTOR(example)
    :clk("clk"),
    mysignals{"mysig1", "mysig2"}
  {}

  ~example() {
  }
};

int sc_main(int argc, char* argv[]) {
  example hello("HELLO");

  return(0);
}
Run Code Online (Sandbox Code Playgroud)

编译:

g++ -I. -I<SYSTEMC LIB>/include -L. -L<SYSTEMC LIB>/lib-linux64 -o …
Run Code Online (Sandbox Code Playgroud)

c++ systemc

3
推荐指数
1
解决办法
5536
查看次数

如何从另一个 SystemC 类派生 SystemC 类?

是否可以将一个 SC 类定义为另一个 SC 类的派生类?

例如,一个简单的d触发器(锁存器)实现将具有d与clk输入和一个q输出。我想在该类的顶部定义一个 Enabled-Latch,添加en输入并相应地更改采样方法。这可能吗?

oop inheritance derived-class systemc

3
推荐指数
1
解决办法
908
查看次数

如何通过systemC tlm_fifo&lt;float&gt;连接两个模块?

我还是写systemC-TLM的新手。现在,我想通过 tlm_fifoFF 连接两个模块。我在网上搜索了很长时间的例子。但是没有用。请帮助提供一些想法或示例如何实现这一点。

这是我的架构:

在此处输入图片说明

而且,这是我的错误信息:

在此处输入图片说明


这是“main.cpp”

#include <systemc.h>
#include <iostream>
#include <stdio.h>
#include <stdlib.h> 
#include "merlin2.h"

#include "tlm.h"
#include <tlm_utils/simple_target_socket.h>
#include <tlm_utils/simple_initiator_socket.h>
#include <tlm_utils/multi_passthrough_initiator_socket.h>
#include <tlm_utils/multi_passthrough_target_socket.h>
#include <tlm_core/tlm_1/tlm_req_rsp/tlm_channels/tlm_fifo/tlm_fifo.h>
#include <tlm_core/tlm_1/tlm_req_rsp/tlm_1_interfaces/tlm_fifo_ifs.h>
using namespace sc_core;
using namespace tlm;
using namespace tlm_utils;
using namespace std;

int sc_main(int argc, char** argv){

    Merlin2 merlin_test("merlin2_JW");

    sc_start();
    cout << "end" << endl;
    return 0;
} 
Run Code Online (Sandbox Code Playgroud)

这是“merlin2.cpp”

#include "merlin2.h"
Merlin2::Merlin2(const sc_module_name& name)
{
    ProcessEngine PE_TEST("test_PE");
    test_PE TP("PE_test");
    tlm::tlm_fifo <float> FF ("fifo");

    TP.out(FF);
    PE_TEST.in(FF);
}
Run Code Online (Sandbox Code Playgroud)

这是“merlin2.h”

#ifndef __MERLIN2_H__
#define …
Run Code Online (Sandbox Code Playgroud)

c++ systemc

3
推荐指数
1
解决办法
717
查看次数

sc_port 和 sc_export 之间的区别

sc_port有人能清楚直观地解释SystemC中的an和an有什么区别吗sc_export?什么时候使用端口,什么时候导出?

我已经阅读了手册的部分内容,但我仍然无法掌握两者之间的主要概念差异。

systemc

3
推荐指数
1
解决办法
2066
查看次数