Architectural States
Defining inputs/states
There are three major types supported in ILAng:
Boolean -- flags or one-bit signals in the design
Bit-vector -- multi-bit registers (or sometimes one-bit signals)
Memory (array) -- buffers, memory system, etc.
Input signals
To define an Boolean (one-bit) input signal of the ILA model:
auto cmd = m.NewBoolInput("Cmd");
To define a bit-vector (multi-bits) type input signal:
auto in_addr = m.NewBvInput("InAddr", 32);
auto in_data = m.NewBvInput("InData", 8);
Note that, currently, ILAng does not support memory/array typed input signals.
State variables
In ILAng, architectural state variables are those that can be updated by the instruction commands. It can be one of the output signals or some intermediate signal/register. To define a Boolean (one-bit) state variable:
auto check_pass = m.NewBoolState("CheckPass");
To define a bit-vector (multi-bits) state variable, you need to provide the bit-width:
auto acc_status = m.NewBvState("AccStatus", 3);
You can also define memory/array typed state variables by specifying the bit-width of the address and the data (key and element).
auto buffer = m.NewMemState("Buffer", 32, 8);
Accessing inputs/states
The architectural state variables can be accessed by their name.
auto in_addr = m.input("InAddr");
auto buffer = m.state("Buffer");
It can also be enumerated.
for (auto i = 0; i < m.input_num(); i++) {
auto ith_input = m.input(i);
}
for (auto j = 0; j < m.state_num(); j++) {
auto jth_state = m.state(j);
}
Last updated
Was this helpful?