The macro generates code for two functions: EnumToString() and StringToEnum().
Notes:
1. this macro creates a scoped enumeration (enum class) which favors code
readability;
2. this implementation does not support assignment of values to enumerators
and also does not support multiple enumerators with the same value. The first
enumerator value is 0, the next is 1, and so on. Nevertheless, it is still
useful for many cases;
3. if an invalid string is passed to StringToEnum() the program will be
aborted and an error message describing the error will be displayed in the
standard output.
Major change to simulation logic in dramSys: Commands in a transaction are now scheduled one at a time, instead of
scheduling a whole transaction at once. Since single commands (e.g. Pre or Act) are not that long, refreshes are allowed to be delayed
to allow a command to finsh. Consequently, the whole loop in the ControllerCore about trying to scheduleding a transaction and aborting it when
it collides with a refresh could be ommitted. Lastly, Fifo_Strict has been added, which is a Fifo Scheduler that forces the read and write transactions, even
between different banks to be executed in order. Fifo and FR_FCFS have been modified to fit into the new scheduling logic.