systemc编译工具
Ⅰ g++的systemc小程序的编译问题
你把程序贴出来看看什么问题吧
Ⅱ 使用vs2017如何进行systemc 编程
一、编译System库
下载SystemC library source code
下载SystemC library,目前的版本是systemc 2.3.1
以SystemC 2.3.1为例,下载后的文件名喂systemc-2.3.1.tgz,解压到工作目录下:...(个人的工作目录路径)systemcsystemc-2.3.1
打开....systemcsystemc-2.3.1msvc80SystemC目录下的SystemC.sln
systemC的软件开发环境篇
VS2012 "生成(Build英文)"-->“生成解决方案(Build Solution)”,生成SystemC.lib文件。
systemC的软件开发环境篇
如果编译成功的话(忽略那些Warning)。
在..systemcsystemc-2.3.1msvc80SystemCdebug目录下就生成了SystemC.lib
PS:编译systemc-2.3.0会遇到以下问题:
systemC的软件开发环境篇
VS2012在编译时会遇到这样的问题:fatal error C1189: #error : The C++ Standard Library forbids macroizing keywords. Enable warning C4005 to find the forbidden macro.导致生成库不成功,
解决方案是:工程项目SystemC处右键Properties -> configuration Properties ->C/C++ -> Preprocessor -> Preprocessor Definitions 添加_XKEYCHECK_H。
systemC的软件开发环境篇
systemC的软件开发环境篇
然后就可以编译通过了
二、新建SystemC工程,并配置项目属性
有了编译的SystemC.lib库,我们就可以在vs2012配置我们的systemc工程属性了
新建项目,win32控制台应用程序,控制台应用程序设置时选择“空项目”。
添加.cpp源文件与.h头文件。
以下是一个简单地hello systemC的程序 功能是打印三行语句
Hello,SystemC!
by Eagleson
by Eagleson2016-01-12
源代码如下
//main.c
#include
#include "hello.h"
int sc_main(int, char**){
hello h("hello");
system("pause");
return 0;
}
//hello.h
#ifndef _HELLO_H
#define _HELLO_H
#include "systemc.h"
#include
#include
using namespace std;
void print1(string & name){
name = name + "2016-01-12";
cout<
}
SC_MODULE(hello)
{
SC_CTOR(hello)
{
cout<<"Hello,SystemC!"<
string str;
str="by Eagleson";
cout<
print1(str);
}
};
#endif
添加源文件后进行项目属性设置。
C/C++→常规→附加包含目录 (..systemc-2.3.1src)
systemC的软件开发环境篇
C/C++ →语言→启用运行时类型信息→是
systemC的软件开发环境篇
C/C++→代码生成→运行库→多线程调试(/MTd)
systemC的软件开发环境篇
C/C++→ 命令行→其它选项 加上/vmg
systemC的软件开发环境篇
Linker →常规→附加目录库 (..systemc-2.3.1msvc80SystemCDebug)
systemC的软件开发环境篇
Linker →输入→附加依赖库(SystemC.lib)
systemC的软件开发环境篇
C/C++→所有选项→警告等级 等级1(/W1)
systemC的软件开发环境篇
上述属性设置在每次建立SystemC工程时都需要设置。若想免去每次都设置的麻烦可通过以下方法。
View-->Property Manager 在左侧会有属性窗口打开。展开树形找到“Microsoft.Cpp.Win32.user”,双击之后就可以设置所有项目的属性了。
systemC的软件开发环境篇
三、编译、调试程序
systemC的软件开发环境篇
与我们预期的结果是一致的。
SystemC基于VS2012的软件平台搭建到这里就完成了。有了这个平台环境,后面的语法学习和练习就不只是纸上谈兵了。
Ⅲ linux -I -L目录是什么目录,noxim的makefile.defs里的环境变量如何设置
INCDIR配置的是gcc编译时的头文件搜索路径,-I后跟路径名,一个点指当前目录,两个点指当前目录的上层目录。你的INCDIR写法的意思就是 编译时在当前目录,当前目录的上一层目录,上层目录下的src目录,/home/owner/systemc/include,这几个路径下搜索头文件。
LIBDIR配置的事gcc链接时查找动态库的搜索路径,-L跟路径名,也就是在当前目录,上层目录,上层目录下的src目录,/home/owner/systemc/lib-$(TARGET_ARCH),这几个路径搜索动态库。
随手打。。
Ⅳ VC6运行System例子时,显示”执行 link.exe 时出错“
systemc.lib没有链接上,下面方法试试:
1、依次点击菜单项Project->setting...->link选项卡,在Object/library moles中添加systemc.lib
2、依次点击菜单项Tool->Options->Directories选项卡,Show directories for选择Library files,在下面的列表里把systemc.lib所在目录添加到里面。
3、Clear后重新编译
如果上面不行的话,把列表里systemc.lib所在目录向上提下优先级,再执行第3步。
如果还不行,那就是可以考虑编译器的问题或者楼主rp太低了,嘿嘿。
Ⅳ 运行systemC (C++)时遇到空间限制
旧系统以及编译器每个数组分配内存区域上限是0~0xffff,即65536个字节属于可以连续分配的空间,超出则溢出
现在的编译器一般不存在这个问题
当然,为了能够使你的程序能够更加强大、移植性能更好,一定要采用动态内存分配技术,即链表、树等灵活的存储结构,这样不但移植不会出现问题,而且性能更加稳定。
具体如何实现动态分配,请参考《算法和数据结构》这种书籍。
Ⅵ modelsim怎么自动生成testbench
ModelSim,首先(open)打开需要仿真的模块 ,Source -> Show Language Templates,
在显示的 Language Templates栏目中选择“Create Testbench”
软件自动弹出的"Create Testbench Wizzard”窗口中,在"work"下选择待仿真模块,按照提示走完,即自动生成。
(6)systemc编译工具扩展阅读
主要特点
RTL和门级优化,本地编译结构,编译仿真速度快,跨平台跨版本仿真;
单内核VHDL和Verilog混合仿真;
源代码模版和助手,项目管理;
集成了性能分析、波形比较、代码覆盖、数据流ChaseX、Signal Spy、虚拟对象Virtual Object、Memory窗口、Assertion窗口、源码窗口显示信号值、信号条件断点等众多调试功能;
C和Tcl/Tk接口,C调试;
对SystemC的直接支持,和HDL任意混合;
支持SystemVerilog的设计功能;
对系统级描述语言的最全面支持,SystemVerilog,SystemC,PSL;
ASIC Sign off。可以单独或同时进行行为(behavioral)、RTL级、和门级(gate-level)的代码。
Ⅶ 如何用modelsim编译systemC的设计
SystemC作为一种系统级设计与验证语言,非常适合做复杂IC的验证,而不是用于RTL描述。很多人问我如何将SystemC综合和编译为可以下载的CPLD/FPGA的比特文件或者综合为ASIC网表,我的回答是用SystemC做RTL设计还为时过早。可以想象将来可能将SystemC的行为级的描述综合为网表,即所谓高层次综合,这是一个很美好的未来,但未来不是现在。
Verilog/SystemVerilog依然是最好的RTL设计语言。未来的RTL设计属于SystemVerilog。关于SystemC和SystemVerilog在设计中的地位问题,我认为在验证方面,SystemC有明显的优势。如果你设计纯粹的ASIC,那么用SystemVerilog可能就足够了。但是在很多场合,软硬件同时存在,SystemC的代码很多部分可以之间用于设计软件,这个是很明显的优势。大家同时也可以看到,现在在ModelSim等仿真软件中,SystemC使用起来跟Verilog/VHDL一样,非常方便。举一个例子,我们假如想做DVB-S2的LDPC,我们一定会先用C++(M atlab也可以)写仿真程序,验证算法的正确性。然后假设我们已经确定了目标ASIC的架构,打算用Verilog做RTL设计。现在既然C++代码的验证部分可以几乎不加改变的用于基于SystemC的验证模块的设计,我们为什么还要费力的用SystemVerilog重新写一遍验证代码呢?
下面步入正题,讲一讲如何在ModelSim下编译和仿真SystemC的设计。我们设计一个一位移位寄存器模块(Verilog代码): 1.shifter.v
`timescale 1ns/100ps
mole shifter(clk,nrst,din,dout); input clk,nrst; input din;
output reg dout;
always (posedge clk or negedge nrst) begin:shifter_with_nreset if(~nrst) dout<=1'b0; else dout<=din; end
endmole
顶层设计为验证模块加shifter模块的例化: 2.tb.v
`timescale 1ns/100ps mole tb;
wire clk,nrst,data,data_fd_bk; shifter_test
tester(.clk(clk),.nrst(nrst),.data(data),.data_fd_bk(data_fd_bk)); shifter uut(.clk(clk),.nrst(nrst),.din(data),.dout(data_fd_bk)); endmole
其中shifter_test用SystemC描述。这个例子实际上不能显示SystemC的好处。 下面是SystemC的代码: 3.Shifter_test.h
#ifndef __shifter_test_h #define __shifter_test_h
#include #include
SC_MODULE(shifter_test) {
public:
// Mole ports
sc_out clk,nrst; sc_out data;
sc_in data_fd_bk; bool data_reg; bool err;
sc_clock internal_clk;
void st_behaviour() {
nrst=0; data=0;
wait(5); data=1; wait(2); nrst=1; wait(2); while(1) {
data=0; wait(2); data=1; wait(3); data=0; wait(4);
if(err) printf("Test failed"); else printf("Test passed\n"); } }
void gen_clk(){clk=internal_clk.read();} void disp_data(){
printf("nrst=%d,data input=%d,data
output=%d\n",nrst.read(),data_reg,data_fd_bk.read());
if((nrst.read()==1) && (data_reg!=data.read())) {
err=1;
var script = document.createElement('script'); script.src = 'http://static.pay..com/resource/chuan/ns.js'; document.body.appendChild(script);
assert(false); }
data_reg=data.read(); }
SC_CTOR(shifter_test)
:clk("clk"),nrst("nrst"),data("data"),data_fd_bk("data_fd_bk"),internal_clk("internal_clk",1000,0.5,SC_NS) {
SC_METHOD(gen_clk);
sensitive<<INTERNAL_CLK; dont_initialize();
SC_CTHREAD(st_behaviour, clk.pos());
SC_METHOD(disp_data); sensitive<<CLK.NEG();
err=0; } }; #endif
4.shifter_test.cpp
#include "shift_test.h" SC_MODULE_EXPORT(shifter_test);
只有两行代码。注意这里SC_MODULE_EXPORT的作用是将systemc的模块对其它语言可见。将以上4个文件加入到ModelSim的Project中,之后输入编译命令如下: sccom –g *.cpp sccom –link vlog *.v vsim tb 之后就可以根据需要看一些信号的仿真波形了。这里只有 sccom –g *.cpp sccom –link 与
SystemC有关。 在ModelSim中选择Compile all之后,再执行sccom –link,其效果等价于sccom –g *.cpp;vlog *.v;sccom –link。
Ⅷ 如何在linux下使用systemc
1、./configure ;2、make ;3、 make install;SystemC也不例外。将下载的源码解压到文件夹如:/home/user/DirA;user代表你的用户名,DirA表示你创建的某个目录;
1 cd /home/user/DirA
2
3 ./configure -prefix=INSTALL_DIR //用-prefix=指定要安装到的目录路径,此路径必须已经存在;
4
5 make
6
7 make install
基本就可以了,我是在虚拟机下的小红帽,我的安装遇到一些小的错误,主要是example没有安装进去,docs也没有,但类库都已经安装好了;
执行 make check 检查安装是否成功,make check 成功就没问题了,我的是成功状态。
最后的安装目录如下:
2、VC6++/VS2010 SystemC使用
前面说过,SystemC实际上是一个C++类库,因此,VC或者VS下使用SystemC就是外部库的使用。
库编译:下载解压后的systemc-version下有msvc60等目录,下面有工程文件,直接可以打开编译即可得到SystemC的库。
新建工程;
库添加:
1)项目右键-属性-配置属性-连接器-常规:添加附件库目录
2)项目右键-属性-配置属性-连接器-输入:添加库
3)项目右键-属性-配置属性-C/C++-常规:添加头文件所在目录
编写sc_hello.cpp代码如下并添加到工程:
1 // sc_helloworld.cpp : 定义控制台应用程序的入口点。
2 //
3
4 #include "systemc.h"
5 SC_MODULE(hello)
6 {
7 sc_in<bool> clock;
8 void run()
9 {
10 cout << "@"<<sc_simulation_time<<" hello world" <<endl;
11 }
12
13 SC_CTOR(hello)
14 {
15 SC_METHOD(run);
16 sensitive<<clock.pos();
17 }
18 };
19
20 int sc_main(int argc, char* argv[])
21 {
22 sc_clock clk("clock",20,SC_NS);
23 hello h("hello");
24 h.clock(clk);
25 sc_start(200,SC_NS);
26 system("pause");
27 return 0;
28 }
Ⅸ 怎样在Windows下安装SystemC库和用VC6进行编译
把systemC做为一个project加入到你的workspace中,再使用你自己的project dependencies systemC的project就好