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
© Copyright 2025 Paperzz