我们一直在用C开发"硬件模型".
我们目前的工作流程:
使用C语言的问题
虽然C很适合多功能编码,但它缺乏硬件设计中的" 并发 "方面.因此,无法弄清楚可能在硬件设计中支撑的" 赛车条件 ".
因此,我们正在研究可用于设计" 硬件模型 "的工具,这些工具可以更好地模仿硬件.
目前我们(仅)正在研究 - 系统C(类似C ......)
我很乐意看到其他人使用的工具.
感谢您阅读这篇相当长的帖子......
我一直在使用OpenCV和SystemC来满足几个应用程序.
现在,我有这个应用程序,我需要在SystemC模拟环境中使用OpenCV显示图像.但是出于某种原因,两个软件包似乎在"运行时"不兼容:
cvNamedWindow或cvShowImage在调用SystemC类之前没有问题sc_start().cvNamedWindow或cvShowImage在a中调用时sc_thread,程序的执行将中止:
线程1:EXC_BAD_ACCESS(代码= 2,地址= 0x7c91ad70).
查询frames(cvQueryFrame)没有问题,只有与窗口相关的函数似乎会导致问题.如果有人知道可能导致此问题的原因,并且如果有解决方案或解决此问题的方法,那就太棒了.
PS我正在使用Xcode,但我认为问题与编码环境无关.
我想在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单元测试进行交互,以便在不同的进程上运行每个测试.
有谁知道在不同的进程上运行每个测试的简单解决方案?
我使用本教程安装了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)
我怎么解决这个问题?
我正在使用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?
我的 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 函数,并且不起作用。我想知道是否有人有这方面的经验并且可以帮助我?
我想初始化一个端口名称。端口是一个数组,我的代码不起作用。
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) 是否可以将一个 SC 类定义为另一个 SC 类的派生类?
例如,一个简单的d触发器(锁存器)实现将具有d与clk输入和一个q输出。我想在该类的顶部定义一个 Enabled-Latch,添加en输入并相应地更改采样方法。这可能吗?
我还是写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) sc_port有人能清楚直观地解释SystemC中的an和an有什么区别吗sc_export?什么时候使用端口,什么时候导出?
我已经阅读了手册的部分内容,但我仍然无法掌握两者之间的主要概念差异。
systemc ×10
c++ ×5
c ×2
hardware ×2
asic ×1
boost ×1
boost-test ×1
fpga ×1
inheritance ×1
jinja2 ×1
oop ×1
opencv ×1
python ×1
unit-testing ×1
verilog ×1