标签: systemc

将位/逻辑向量的SystemC结构安全地转换/转换为单个位/逻辑向量

我正在从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)

verilog system-verilog systemc

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

而(A == B); vs while(a == b){;}

以下代码之间是否有区别:

  1. while (a==b);
  2. 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.想知道这是否会以某种方式影响性能?

c c++ systemc

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

错误:(E112)获取接口失败:端口未绑定-SystemC

我的目标是创建一个使用桶式移位器进行加减的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)

c++ systemc

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

如何在SystemC中声明析构函数?

我正在SystemC中编写一个模块,其中在构造函数中有一个变量初始化为new:

SC_CTOR(MY_MODULE)
{
    ...
    ...
    my_matrix = new unsigned char [a*b];
    ...
    ...
}
Run Code Online (Sandbox Code Playgroud)

模拟结束时如何声明析构函数以释放内存?

c++ destructor systemc

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

使用CMake设置SystemC项目:未定义引用`sc_core

我正在尝试使用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 _> …

cmake systemc

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

加载共享库时出错:libsystemc-2.3.0.so

我是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专家,请以详尽的方式(逐步)解释您的建议。

谢谢。

c++ eclipse systemc

2
推荐指数
1
解决办法
8037
查看次数

SystemC中的增量周期和增量通知是什么?

在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周期的评估阶段运行.

那么,什么是所谓的"三角周期"?它的定义是时钟周期还是某段时间?

systemc

2
推荐指数
1
解决办法
3123
查看次数

VHDL中简单IF语句中的数据类型问题

我有一个非常奇怪的问题,我不是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不喜欢这种结构,如果有解决方法呢?

谢谢,吉姆

vhdl systemc

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

如何删除SystemC启动文本

我希望在任何systemc模拟的启动时删除以下消息:“ SystemC 2.3.0-ASI --- Jun 18 2013 16:21:08版权所有(c)1996-2012,所有贡献者,保留所有权利”

您知道这是在哪里做的,以便我对其发表评论吗?

text message startup systemc

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

错误的模板参数数量

我对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)

c++ systemc

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

标签 统计

systemc ×10

c++ ×5

c ×1

cmake ×1

destructor ×1

eclipse ×1

message ×1

startup ×1

system-verilog ×1

text ×1

verilog ×1

vhdl ×1