|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
x
本帖最后由 oscillator_cn1 于 2010-12-15 10:36 编辑
刚开始学systemc,照着《systemc片上系统设计》里面的代码具体操作了一下,有个关于sc_bit的问题要请教大家。
几个模块中都是用sc_in<sc_bit> A,B这样来定义输入输出信号,将各个模块写好之后,需要将这些模块连接起来,然后我就不知道sc_bit的该怎么弄了。恩,说不明白,全部代码如下:
//file driver.h
#ifndef _DRIVER_H
#define _DRIVER_H
#include "systemc.h"
SC_MODULE(Driver){
sc_in_clk clk;
sc_out<sc_bit> d_a,d_b,d_cin;
void prc_driver();
SC_CTOR(Driver){
SC_CTHREAD(prc_driver,clk.pos());
}
};
#endif
//file fulladder.h
#ifndef _FULLADDER_H
#define _FULLADDER_H
#include <systemc.h>
SC_MODULE(FullAdder){
sc_in<sc_bit> A,B,Ci;
sc_out<sc_bit> S,Co;
void do_add(){
S=(A.read())^(B.read())^(Ci.read());
Co=(A.read())&(B.read())|(B.read())&(Ci.read())|(A>read())&(Ci.read());
};
SC_CTOR(FullAdder){
SC_METHOD(do_add);
sensitive<<A<<B<<Ci;
}
};
#endif
//file monitor.h
#ifndef _MONITOR_H
#define _MONITOR_H
#include "systemc.h"
SC_MODULE(Monitor){
sc_in<sc_bit>m_a,m_b,m_cin,m_sum,m_out;
void prc_monitor();
SC_CTOR(Monitor){
SC_THREAD(prc_monitor);
sensitive<<m_a,m_b,m_cin,m_sum,m_out;
}
};
#endif
//file driver.cpp
#include "driver.h"
void Driver::prc_driver(){
sc_uint<3> pattern;
pattern=0;
while(1){
d_a.write((sc_bit)pattern[0]);
d_b.write((sc_bit)pattern[1]);
d_cin.write((sc_bit)pattern[2]);
cout<<"Driver::"<<pattern;
cout<<"a="<<d_a.read()<<",";
cout<<"b="<<d_b.read()<<",";
cout<<"ci="<<d_cin.read()<<endl;
wait();
pattern++;
}
}
//file monitor.cpp
#include "monitor.h"
void Monitor::prc_monitor(){
while(1){
cout<<"At time"<<sc_time_stamp()<<"::";
cout<<"(a,b,carry_in):";
cout<<m_a.read()<<m_b.read()<<m_cin.read()<<",";
cout<<"(sum,carry_out):";
cout<<m_sum.read()<<m_out.read()<<endl;
wait();
}
}
书上就这几个模块,然后我想把这几个连接起来,放到sc_main里面,结果出一堆错,我是这样写的:
//file fulladder.cpp
#include "fulladder.h"
#include "driver.h"
#include "monitor.h"
int sc_main(int,char**){
sc_signal<bool> m_a,m_b,m_ci,m_sum,m_co;
sc_clock clk("Clk",20,SC_NS);
driver dri("Driver");
dri.clk(clk);
dri.d_a(m_a);
dri.d_b(m_b);
dri.d_cin(m_ci);
fulladder add("FullAdder");
add.A.write(m_a);
add.B.write(m_b);
add.Ci.write.(m_ci);
add.S(m_sum);
add.Co(m_co);
monitor mon("Monitor");
mon.m_a.write(m_a);
mon.m_b.write(m_b);
mon.m_cin.write(m_ci);
mon.m_sum.write(m_sum);
mon.m_out.write(m_co);
return 0;
}
有没有人告诉我该怎么写这个sc_mian??help~~~~~~~~ |
|