Data Types in SystemC Part of HW/SW Codesign of Embedded Systems Course (CE 40-226) Winter-Spring 2001 Codesign of Embedded Systems 1 Today programme SystemC Data Types User-Defined Data Types Winter-Spring 2001 Codesign of Embedded Systems 2 Data Types in SystemC Data Types Winter-Spring 2001 Codesign of Embedded Systems 3 Data Types Single-bit Types Integer Types sc_int, sc_uint, sc_bigint, sc_biguint Bit-Vector Types sc_bit, sc_logic sc_bv, sc_lv Fixed-Point Types sc_fixed, sc_ufixed, sc_fix, sc_ufix Winter-Spring 2001 Codesign of Embedded Systems 4 Single-bit Types sc_bit Two-valued logic: ‘0’ , ‘1’ (character literal) Defined operators Bitwise: &(and) |(or) Assignment: = &= Equality: == != Winter-Spring 2001 ^(xor) ~(not) |= ^= Codesign of Embedded Systems 5 Single-bit Types (cont’d) sc_logic Four-valued logic: ‘0’, ‘1’,‘X’,‘x’,‘Z’,‘z’ (char. literal) ‘x’ means unknown or indeterminate value ‘z’ means high impedance or floating value Defined operators Bitwise: &(and) |(or) Assignment: = &= Equality: == != Winter-Spring 2001 ^(xor) ~(not) |= ^= Codesign of Embedded Systems 6 Single-bit Types (cont’d) Any mixture of sc_bit, sc_logic, and bool types in comparison and assignments is possible, except: sc_logic l; sc_bit b; l = ‘z’; b = l; Winter-Spring 2001 // // // // or bool b or l = ‘x’ Result is undefined. Run-time warning is issued Codesign of Embedded Systems 7 Integer Types: Fixed Precision Fixed Precision Unsigned and Signed Integers Integer variables with fixed width (number of bits) sc_int<n>, sc_uint<n> Signed representation uses 2’s complement SystemC provides 1-64 bit integer types Underlying implementation: 64 bit integer -D_32BIT_ compiler directive Can freely be mixed with C++ integers (int, short, long) Winter-Spring 2001 Codesign of Embedded Systems 8 Fixed Precision Integers (cont’d) Defined operators Bitwise ~ Arithemtic Assignment Equality Relational Auto-inc/dec Bit Select Part Select Concatenation Winter-Spring 2001 & | + += -= &= |= == != < <= ++ -[] .range(,) (,) ^ * *= ^= >> / /= = > >= Codesign of Embedded Systems << % %= 9 Fixed Precision Integers (cont’d) sc_logic mybit; sc_uint<8> myuint; mybit = myuint[7]; sc_uint<4> myrange; myrange = myuint.range(5,2); sc_uint<12> my12int; my12int = (myuint, myrange); Winter-Spring 2001 Codesign of Embedded Systems 10 Fixed Precision Integers (cont’d) sc_uint<8> u1, u2; sc_int<16> i1, i2; u1 = i1; // convert int to uint i2 = u2; // convert uint to int // BUG! in SystemC 1.1 User’s Guide Winter-Spring 2001 Codesign of Embedded Systems 11 Integer Types: Arbitrary Precision Integers Integers with (virtually) no width limit MAX_NBITS defined in sc_constants.h sc_bigint<n>, sc_biguint<n> Signed representation uses 2’s complement Operators are the same as sc_int, sc_uint Can be intermixed with sc_int, sc_uint, C++ integer types Winter-Spring 2001 Codesign of Embedded Systems 12 Bit-Vector Types: Arbitrary Length Bit Vector Arbitrary Length Bit Vector Vector of 2-valued bits No arithmetic operation Assignment: String of ‘0’ and ‘1’ chars Reduction operations and_reduce(), nand, or, nor, xor, xnor sc_bv<6> databus; databus = “100100”; sc_logic result; result =databus.or_reduce(); Winter-Spring 2001 Codesign of Embedded Systems 13 Arbitrary Length Bit Vector (cont’d) Defined operators Bitwise ~ Assignment Equality Bit Select Part Select Concatenation Reduction Winter-Spring 2001 & | = &= == != [] .range(,) (,) and_reduce() xor_reduce() ^ |= >> ^= << or_reduce() Codesign of Embedded Systems 14 Bit-Vector Types: Arbitrary Length Logic Vector Arbitrary Length Logic Vector Vector of 4-valued bits No arithmetic operation Any ‘x’ or ‘z’ in rhs: runtime warning + undefined result Assignment: String of ‘0’, ‘1’, ‘x’, ‘z’ chars Operators are the same as sc_bv Winter-Spring 2001 Codesign of Embedded Systems 15 Arbitrary Length Logic Vector (cont’d) sc_lv<8> bus1; if(enable) bus1 = “01xz10xx”; else bus1 = “zzzzzzzz”; cout<< “bus = “<<bus1.to_string(); Winter-Spring 2001 Codesign of Embedded Systems 16 Fixed-Point Types Usage HW implementation of Floating-point arithmetic Floating point representation S Mantissa Exponent Fixed point representation (2’s complement) binary value Winter-Spring 2001 Codesign of Embedded Systems 17 Fixed-Point Types (cont’d) Advantages Disadvantages Narrower representable range of numbers Uniform resolution over entire range Problems to be addressed Less area More speed Overflow Quantization To Be Discussed in Next Session Winter-Spring 2001 Codesign of Embedded Systems 18 Data Types in SystemC Complementary Issues Winter-Spring 2001 Codesign of Embedded Systems 19 Complementary Issues Simulation Speed Issues User Defined Type Issues Equality-check Operator Tracing a User-Defined Type Winter-Spring 2001 Codesign of Embedded Systems 20 Speed Issues: Integer Types sc_bigint sc_biguint with MAX_NBITS not defined sc_int sc_uint sc_int sc_uint with -D_32BIT_ C++ Types with MAX_NBITS defined Winter-Spring 2001 Codesign of Embedded Systems 21 Speed Issues: Bit and Logic Types sc_logic sc_bit sc_lv sc_bv Winter-Spring 2001 Codesign of Embedded Systems 22 User-Defined Type Issues write() new_val==old_val Equality-Check Operator Required for every type used as sc_signal inline bool operator == (const packet_type& rhs) const { return (rhs.info == info && rhs.seq == seq && rhs.retry == retry); } Winter-Spring 2001 Codesign of Embedded Systems 23 Tracing a User-Defined Type Need to define a special trace function void sc_trace(sc_trace_file *tf, const packet_type& v, const sc_string& NAME) { sc_trace(tf,v.info, NAME + ".info"); sc_trace(tf,v.seq, NAME + ".seq"); sc_trace(tf,v.retry, NAME + ".retry"); } Winter-Spring 2001 Codesign of Embedded Systems 24 What we learned today SystemC-provided Data Types User-Defined Data Types Required operator Tracing Issues Winter-Spring 2001 Codesign of Embedded Systems 25