All these elements may be implemented suitably in hardware, firmware or software at the discretion of a design engineer, for example, for efficiency or cost purposes, or over time, for example, as memory costs decrease, processing speeds increase and other factors change.