Overview
Memory array modeling represents main memory using an array data type in a formal model. In the UCLID5 verification study of pipelined Y86-64 microprocessors, main memory could be modeled in either of two ways: as an array data type, or as an uninterpreted memory state with uninterpreted functions for read and write operations. [C1]
Modeling alternatives
The evidence describes two alternatives for main-memory modeling:
- Array data type model — memory is modeled directly using an array data type. [C1]
- Uninterpreted memory model — memory state is treated as an uninterpreted value, while read and write operations are represented by uninterpreted functions. [C1]
The array-based model is the more precise option in this comparison, while the uninterpreted version is more abstract. The source frames abstraction levels as a partial ordering: a model is more abstract when it permits a wider range of behaviors, and uninterpreted data types and uninterpreted functions are more abstract than concrete data types and precise mathematical functions. [C2]
Use in pipelined processor verification
For the pipelined Y86-64 implementations discussed in the source, memory operations are performed in program order. Because of this ordering property, the uninterpreted memory model was sufficient for verification in that setting. [C3]
However, the study also tested the array-based memory model to explore the performance implications of using a more precise memory representation. [C4]
Practical implication
The cited work presents memory array modeling as a precision-versus-abstraction choice. An uninterpreted memory model may be adequate when the processor design performs memory operations in program order, while an array-based memory model can be used when a more precise representation is desired for comparison or performance exploration. [C1][C3][C4]