Register Data Types
Formal Definition
Registers provide means for modeling data storage elements.
Simplified Syntax:
reg range list_of_identifiers;
integer list_of_identifiers;
real list_of_identifiers;
time list_of_identifiers;
realtime list_of_identifiers;
Description
Registers are data types that store assigned values until a new
assignment occurs. A new value can be assigned to registers only by
using procedural assignments.
The reg register is a 1-bit
wide data type. If more than one bit is required then range
declaration should be used (see Vectors for more explanations).
Negative values assigned to reg data type variables are treated as
unsigned values (see Arithmetic expressions with integers and
registers for more explanations). Reg data type variables can be
declared as memory.
The integer register is a
32-bit wide data type. Integer declarations cannot contain range
specification. Integer variables can be declared as memory. Integers
store signed values.
The time register is a
64-bit wide data type that is used to store simulation time and to
check timing dependence. Time type registers store values as unsigned
numbers. Time declaration cannot contain range specification. Time
data type variables can be declared as memories.
The real register is a
64-bit wide data type that stores floating-point values. Real
registers cannot be used with event control, concatenations ({}),
modulus operator (%), case equality (===, !==), bit-wise operators
(~, &, |, ^, ^~, ~^), reduction operators (^, ~^, ^~, &,
&~, |, |~) and shift operators (<<, >>). Bit-selects
and part-selects on real type variables are not allowed.
The realtime registers are
treated in the same way as real registers.
Examples
reg scal;
reg [7:0] vect;
reg [7:0] mem [31:0];
integer i;
integer i_mem [7:0];
time t;
time t_mem [3:0];
real r;
realtime rt1, rt2;
'scal' is a 1-bit wide reg
type register.
'vect' is an 8-bit wide reg
type register.
'mem' is a reg type memory
of 32 8-bit words.
'i' is an integer type register.
'i_mem' is an integer type memory.
't' is a time type register.
't_mem' is a time type memory.
'r' is a real type register.
'rt1' and 'rt2' are realtime
type registers.
Important Notes
-
New values can be assigned to registers only by using procedural statements.
-
Some operators, bit-selects, part-selects, range and memory
declaration arecannot be used with real
and realtime type registers.
-
Range can be specified only for reg
data type registers.
-
Real and realtime
registers are initialized to zero value. Reg,
integer and time
registers are initialized to unknown value (x).
|