systemC初学问题
时间:10-02
整理:3721RD
点击:
要求用两个full adder做一个2位adder
full adder 代码如下
//-------------------------------
#include "systemc.h"
SC_MODULE (full_adder){
sc_in<bool> a,b,carry_in;
sc_out<bool> sum,carry;
void prc_full_adder()
{sum= a^b^carry;
carry= ((a & b)|(a & carry_in)|(b & carry_in));
}
SC_CTOR(full_adder)
{
SC_METHOD (prc_full_adder);
sensitive<<a<<b<<carry_in;
}
};
//-------------------------------------------
two_bit_adder 的代码模板如下
//------------------------------------------
#include "systemc.h"
#include "full_adder.cpp"
SC_MODULE(two_bit_adder){
sc_in < sc_bit>carry_in0;
sc_in < sc_bv<2> > num1 , num2;
sc_out < sc_bit > carry_in2;
sc_out < sc_bv<2> > sum2;
full_adder *f1, *f2;
void prc_2_bit_adder()
{
}
SC_CTOR(two_bit_adder)
{
SC_METHOD(prc_2_bit_adder);
sensitive<<carry_in0<<num1<<num2;
f1= new full_adder ("f1");
f2= new full_adder ("f2");
f1->a();
f1->b();
f1->carry_in ();
f1->sum ( );
f1->carry ( );
f2->a( );
f2->b( );
f2->carry_in( );
f2->sum( );
f2->carry ( );
}
~ two_bit_adder()
{ delete f1;
delete f2;
}
};
//-----------------------
现在的问题是红色部分,如何链接。因为systemC只能用sc_signal链接,但full adder 的所有接口是一位的,但是2 bit adder的sum num1, num2是两位的sc_uint, 而sc_signal与 IO Port都不可以位选择,只能通过variable.
现在的问题是转换的代码写在哪里?无论写在prc_2_bit_adder()里或是
SC_CTOR里都报错或是结果不对。应该如何做呢?
full adder 代码如下
//-------------------------------
#include "systemc.h"
SC_MODULE (full_adder){
sc_in<bool> a,b,carry_in;
sc_out<bool> sum,carry;
void prc_full_adder()
{sum= a^b^carry;
carry= ((a & b)|(a & carry_in)|(b & carry_in));
}
SC_CTOR(full_adder)
{
SC_METHOD (prc_full_adder);
sensitive<<a<<b<<carry_in;
}
};
//-------------------------------------------
two_bit_adder 的代码模板如下
//------------------------------------------
#include "systemc.h"
#include "full_adder.cpp"
SC_MODULE(two_bit_adder){
sc_in < sc_bit>carry_in0;
sc_in < sc_bv<2> > num1 , num2;
sc_out < sc_bit > carry_in2;
sc_out < sc_bv<2> > sum2;
full_adder *f1, *f2;
void prc_2_bit_adder()
{
}
SC_CTOR(two_bit_adder)
{
SC_METHOD(prc_2_bit_adder);
sensitive<<carry_in0<<num1<<num2;
f1= new full_adder ("f1");
f2= new full_adder ("f2");
f1->a();
f1->b();
f1->carry_in ();
f1->sum ( );
f1->carry ( );
f2->a( );
f2->b( );
f2->carry_in( );
f2->sum( );
f2->carry ( );
}
~ two_bit_adder()
{ delete f1;
delete f2;
}
};
//-----------------------
现在的问题是红色部分,如何链接。因为systemC只能用sc_signal链接,但full adder 的所有接口是一位的,但是2 bit adder的sum num1, num2是两位的sc_uint, 而sc_signal与 IO Port都不可以位选择,只能通过variable.
现在的问题是转换的代码写在哪里?无论写在prc_2_bit_adder()里或是
SC_CTOR里都报错或是结果不对。应该如何做呢?
端口上就把num2等拆分成2个1位信号。内部使用时再合到一个2位的变量里。
这我也知道,但如何分解,缺是问题,sc_signal ,与port 不能位分 。只能通过sc_uint分,但分解代码写在那里?