2013-03-13 4 views
0
내가 시뮬레이션을 할 SystemC를 사용하고

에 sc_trace하는 내가 말하는 오류 메시지를 받았습니다 대한 일치 기능 없음이호출이 SystemC를

그램 ++ -I/옵션/자일링스 - 14.2/Vivado_HLS/2012.2/Linux_x86_64/도구// opt/Xilinx-14.2/Vivado_HLS/2012.2/Linux_x86_64/tools/systemc/lib -lsystemc -lm /opt/Xilinx-14.2/Vivado_HLS/2012.2/Linux_x86_64/ sc_core :: sc_in :: end_of_elaboration() [T = std :: basic_string, std :: allocator>] 함께 : testBench.cc:126 : 도구/시스템/포함/sysc/통신/sc_signal_ports.h : 여기에서 인스턴스화 됨

/opt/Xilinx-14.2/Vivado_HLS /2012.2/Linux_x86_64/tools/systemc/include/sysc/communication/sc_signal_ports.h:285 : 오류 : sc_trace 호출과 일치하는 함수가 없습니다 (sc_core :: sc_trace_file * &, const std :: basic_string, std :: allocator> &). , std :: string &) â € ™

여러분은이 오류의 정의와 수정 방법에 대해 알고 있습니까?

#include "systemc.h" 
#include "multiChipModule.cc" 
#include <vector> 
#include <string> 
#include <iostream> 
int convertTime(std::string input){ 
// then main invocator function 
int timeInt=atoi(input.substr(0,11).c_str()); 
int output =0; 
for(int i=0;timeInt >0;i++){ 
if(timeInt % 10 ==1) { 
    output += static_cast<int> (pow(2,i)); 
    } 
    timeInt /=10; 
} 
    return output; 
} 


// include string 
int sc_main(int argc,char* argv[]){ 
sc_signal<bool> BCOclock; 
sc_signal<bool> MCA; 
sc_signal<bool> MCB; 
sc_signal<bool> enable; 
sc_signal<sc_uint<8> > BCONumber; 
sc_signal<std::string > inputMessage; 
// input message will have 24 bits. The first 11 bits are for time. 
//The next three bits more moduleNo, three bits for chipNo, seven bits for 
//stripNo. So in total it is 24 bits. 


sc_signal<bool> SCLK; 
sc_signal<bool> RCLK; 
sc_signal<bool> outCLK; 


multiChipModule module1("module1"); 
module1.BCOclock(BCOclock); 
module1.MCA(MCA); 
module1.MCB(MCB); 
module1.SCLK(SCLK); 
module1.RCLK(RCLK); 
module1.outCLK(outCLK); 
module1.enable(enable); 
module1.BCONumber(BCONumber); 
module1.inputMessage(inputMessage); 

sc_start(0); 
/* 
sc_trace_file *wf=sc_create_vcd_trace_file("testBench"); 
sc_trace(wf,BCOclock,"BCOclock"); 
sc_trace(wf,MCA,"MCA"); 
sc_trace(wf,MCB,"MCB"); 
sc_trace(wf,enable,"enable"); 
sc_trace(wf,BCONumber,"BCONumber"); 
//sc_trace wf,coreTalking 
sc_trace(wf,SCLK,"SCLK"); 
sc_trace(wf,RCLK,"RCLK"); 
sc_trace(wf,outCLK,"outCLK"); 
*/ 
//initialize all variables 
cout<<"@"<<sc_time_stamp()<<"Asserting Enable\n"<<endl; 
enable=1; 
SCLK=1; 
RCLK=1; 
outCLK=0; 
BCOclock=1; 
MCA=1; 
MCB=0; 
BCONumber=0; 
std::vector<std::string> vec1; 
std::vector<int> vec2; 
std::vector<std::string>::iterator it1; 
std::vector<int>::iterator it2; 
it1=vec1.begin(); 
it2=vec2.begin(); 
std::string input ="000111101000010010000000"; 
int time= convertTime(input); 
it1=vec1.insert(it1,input); 
it2=vec2.insert(it2,time); 
input="010000100110010011111111"; 
time=convertTime(input); 
it1=vec1.insert(it1,input); 
it2=vec2.insert(it2,time); 
//sorting here 
int minimum=vec2[0]; 
int index=0; 
for(int i=0;i<vec2.size();i++){ 
    for (int j=i;j<vec2.size();j++){ 
    if(vec2[j]<minimum){ 
    minimum=vec2[j]; 
    index=j; 
    } 
    } 
    int tempTime =vec2[i]; 
    vec2[i]=vec2[index]; 
    vec2[index]=tempTime; 
    std::string tempString=vec1[i]; 
    vec1[i]=vec1[index]; 
    vec1[index]=tempString; 

    minimum=vec2[i]; 
    index=i; 
} 

int t=0; 
for(int i=0;i<1000;i++){ 
for(int j=0;j<vec2.size();j++){ 
    if(i==vec2[j]) 
    inputMessage=vec1[j]; 
} 
if(i%10==0) 
    MCA=!MCA; 
if((i-5)%10==0) 
    MCB=!MCB; 
if(i%132==0) 
    BCOclock=!BCOclock; 

sc_start(1); 
} 
cout<<"@"<<sc_time_stamp()<<"De-Asserting Enable\n"<<endl; 
enable=0; 

cout<<"@"<<sc_time_stamp()<<"Terminating Simulation\n"<<endl; 
sc_close_vcd_trace_file(wf); 
return 0; 
} 

답변

0

오류는 "sc_signal<std::string > inputMessage;"입니다. 템플리트 클래스/함수의 전체 묶음은 sc_in, sc_trace, vcd_trace를 포함하여 "T = std :: string"에 대해 정의되지 않습니다.

하지만 문제는 더 근본적입니다. 왜 sc_signal에 대한 std :: string입니까? 코드의 주석에서 당신이 같은 바이너리 문자열을 초기화 할 수 있습니다 sc_uintt < 24>를 사용하여 더 나은 "0b1111..11는"

Instead of 
    std::string input ="000111101000010010000000"; 
use 
    sc_uint<24> input = "0b000111101000010010000000"; 
+0

그것은 바로 소리. – user2163225

관련 문제