在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 2221|回复: 0

[求助] 菜鸟来问:systemc的sc_bit相关问题

[复制链接]
发表于 2010-12-15 10:29:52 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

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~~~~~~~~
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条


小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-12-19 01:51 , Processed in 0.013362 second(s), 6 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表