Sytemc 数据类型的实现
1. 在SystemC中新增数据类型的声明sc_bv<8>
sc_bv的在源码中的原型,其中位宽为W
template <int W>
class sc_bv : public sc_bv_base
{
public:
// constructors
sc_bv():sc_bv_base( W ) {}
}
1.1 template的应用
知道位宽是怎么传递进入的了吧? 这里采用了C++的模板函数。通常所见的template的用法都是传递一个数据类型或者class type。这里传递了一个Int类型的width(W)。在进行数据类型声明的时候 sc_bv<8>就传递到了其基类sc_bv_base中。
在systemC的源代码中,多数地方都采用了template的通常用法。 例子:带template的构造函数,但是类的声明并没有template。
class sc_bv_base
: publicsc_proxy<sc_bv_base>
{
friend class sc_lv_base;
sc_bv_base( constchar* a, int length_ );
template <classX> sc_bv_base( const sc_proxy<X>& a )
: m_len( 0), m_size( 0 ), m_data( 0 )
{ init(a.back_cast().length() ); base_type::assign_( a ); }
2. 变量的赋值
2.1 赋值过程追踪