Memory arrays can be constructed using the IP catalog, parameterizable macros (XPM), RTL language templates, inference, or by direct instantiation of memory primitives. The direct instantiation approach is not recommended as it is the least flexible of the methods.