我正在从SystemVerilog的代码移植到SystemC.SV很容易将位/逻辑的打包结构解释为单个位/逻辑向量.例如:
typedef struct logic {
logic [31:0] blk1; //63:32
logic [4:0] blk2; //31:27
logic [2:0] blk3; //26:24
logic [4:0] blk4; //23:19
logic [2:0] blk5; //18:16
logic [7:0] blk6; //15:8
logic [7:0] blk7; //7:0
} typ_block;
...
typ_block blockA;
logic[63:0] blockB;
blockB = blockA; // no problem here
Run Code Online (Sandbox Code Playgroud)
但是使用SystemC并使用sc_lv <>模板,由于类型不匹配,这会产生编译器错误.
struct typ_block {
sc_lv<32> blk1; //63:32
sc_lv<5> blk2; //31:27
sc_lv<3> blk3; //26:24
sc_lv<5> blk4; //23:19
sc_lv<3> blk5; //18:16
sc_lv<8> blk6; //15:8
sc_lv<8> blk7; //7:0
};
...
typ_block blockA;
sc_lv<64> blockB;
blockB …Run Code Online (Sandbox Code Playgroud) 以下代码之间是否有区别:
while (a==b);while (a==b) {;}它会对编译器或执行时间产生影响吗?
这个问题的背景:目前FW使用代码1,其中a或b实际上是一个全局变量,FW在特定核心中挂起/等待,直到另一个核心使条件成立为止.我们想在SystemC中模拟这个代码,这个"无限"while循环不在SystemC上下文中,因此SystemC调度程序不会知道这个线程正在等待另一个,导致死锁.
因此,我们希望用以下代码替换代码: while (a==b) {CONTEXT_SWITCH(1);}
我们在哪里进行目标构建:
#define CONTEXT_SWITCH(x)
Run Code Online (Sandbox Code Playgroud)
对于systemC构建,我们有:
#define CONTEXT_SWITCH(x) wait(x) //where wait is a systemC wait
Run Code Online (Sandbox Code Playgroud)
在目标构建的情况下,此代码变为代码2.想知道这是否会以某种方式影响性能?
我的目标是创建一个使用桶式移位器进行加减的ALU
铝
#include "systemc.h"
SC_MODULE(alu){
sc_in<bool> op;
sc_in<sc_int<8> > a;
sc_inout<sc_int<8> > b;
sc_out<sc_int<8> > output;
void alu_method();
SC_CTOR(alu) {
SC_METHOD(alu_method);
dont_initialize();
sensitive << a,b,op;
}
};
Run Code Online (Sandbox Code Playgroud)
alu.cpp
#include "alu.h"
void ALU::alu_method(){
if (op.read() == 0){
//substract
out.write(in.read() - in_bs.read());
}
else{
//add
out.write(in.read() + in_bs.read());
}
}
Run Code Online (Sandbox Code Playgroud)
桶移位
#include <systemc.h>
void make_barrel();
SC_MODULE(barrel_shift) {
sc_in<bool> clk;
sc_in<bool> enable;
sc_in<bool> left_right;
sc_in<sc_uint<3> > shift_amt;
sc_in<sc_int<8> > din;
sc_inout<sc_int<8> > dout;
void barrel_method();
SC_CTOR(barrel_shift) {
SC_METHOD(barrel_method);
dont_initialize();
sensitive << clk.pos(); //edge …Run Code Online (Sandbox Code Playgroud) 我正在SystemC中编写一个模块,其中在构造函数中有一个变量初始化为new:
SC_CTOR(MY_MODULE)
{
...
...
my_matrix = new unsigned char [a*b];
...
...
}
Run Code Online (Sandbox Code Playgroud)
模拟结束时如何声明析构函数以释放内存?
我正在尝试使用CMake在SystemC中构建一个简单的hello世界.
这是SystemC文件main.cpp:
#include <systemc.h>
using namespace std;
SC_MODULE (hello_world) {
SC_CTOR (hello_world) {
}
void say_hello() {
cout << "Hello World SystemC" << endl;
}
};
int sc_main(int argc, char* argv[]) {
hello_world hello("HELLO");
hello.say_hello();
return(0);
}
Run Code Online (Sandbox Code Playgroud)
这是CMakeLists.txt:
cmake_minimum_required(VERSION 3.1)
project(SystemCExample)
set (CMAKE_PREFIX_PATH /usr/local/systemc-2.3.2)
include_directories(${CMAKE_PREFIX_PATH}/include)
find_library(systemc systemc ${CMAKE_PREFIX_PATH}/lib-linux64)
link_directories(${CMAKE_PREFIX_PATH}/lib-linux64)
set(CMAKE_CXX_STANDARD 11) # C++11...
set(CMAKE_CXX_STANDARD_REQUIRED ON) #...is required...
set(CMAKE_CXX_EXTENSIONS OFF) #...without compiler extensions like gnu++11
aux_source_directory(. SRC_LIST)
add_executable(${PROJECT_NAME} ${SRC_LIST})
target_link_libraries(SystemCExample systemc)
Run Code Online (Sandbox Code Playgroud)
我一直收到错误:
/usr/local/systemc-2.3.2/include/sysc/kernel/sc_ver.h:179:错误:未定义引用`sc_core :: sc_api_version_2_3_2_cxx201103L <&sc_core :: SC_DISABLE_VIRTUAL_BIND_UNDEFINED _> …
我是Linux的新用户,我正在尝试systemc-2.3.0在计算机上安装库(Fedora 16)。我已经非常仔细地遵循了库的INSTALL文件中提到的所有说明,但是当我尝试使用ECLIPSE运行简单程序时遇到错误。我已经正确链接了ECLIPSE中的所有库,但是仍然出现错误。
该程序如下:
#include <systemc.h>
using namespace std;
int sc_main(int argc, char * argv[])
{
cout << "hello world" << endl;
for(int i=0; i<argc; i++)
cout << argv[i] << " ";
cout << endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
错误输出为:
/ home / vivek / workspace / TestSystemC / Debug / TestSystemC:加载共享库时出错:libsystemc-2.3.0.so:无法打开共享库文件:没有此类文件或目录
任何帮助将不胜感激。由于我不是Linux专家,请以详尽的方式(逐步)解释您的建议。
谢谢。
在SystemC中,有一种称为增量通知的通知,可以通过以下两种方法调用.
event.notify(SC_ZERO_TIME);
Run Code Online (Sandbox Code Playgroud)
要么
event.notify(0, SC_NS);
Run Code Online (Sandbox Code Playgroud)
它定义了在delta通知调用中,对事件敏感的进程将在下一个delta周期的评估阶段运行.
那么,什么是所谓的"三角周期"?它的定义是时钟周期还是某段时间?
我有一个非常奇怪的问题,我不是100%为什么编译器抱怨.代码如下:
variable a : std_logic_vector(2 downto 0);
variable b : std_logic;
....
if (a = "100") AND (b) then
-- do something
elsif (a = "011") OR (b) then
-- do something else
Run Code Online (Sandbox Code Playgroud)
然后我收到错误消息:
"AND can not have such operands in this context",
"OR can not have such operands in this context", respectively for the second IF
Run Code Online (Sandbox Code Playgroud)
声明.
任何人都知道为什么VHDL不喜欢这种结构,如果有解决方法呢?
谢谢,吉姆
我希望在任何systemc模拟的启动时删除以下消息:“ SystemC 2.3.0-ASI --- Jun 18 2013 16:21:08版权所有(c)1996-2012,所有贡献者,保留所有权利”
您知道这是在哪里做的,以便我对其发表评论吗?
我对cpp没有多少经验,更不用说systemc了.
为什么要做这项工作?
sc_in<sc_uint<8>> a,b;
Run Code Online (Sandbox Code Playgroud)
adder.cpp:5:错误:'a'未在此范围内声明
adder.cpp:5:错误:'b'未在此范围内声明
adder.cpp:5:错误:模板参数数量错误(2,应该是1)
这确实有效:
sc_in<int> a,b;
Run Code Online (Sandbox Code Playgroud)