During simulation RAM initialization using "$readmemh (INIT_FILE, tmp_mem);", the following error is received:
ncelab: *W,MEMODR (<filename>.v): $readmem default memory order incompatible with IEEE1364
What does this warning mean and how do I avoid it?
IEEE1364 Describes the standard for the Verilog HDL Language. In this standard, the default order for reading memory addresses using the $reamem commands are defined.
In ncelab, the memory order is different than defined in the IEEE standard. To obtain help on this error, enter the following command in the Cadence tools:
nchelp ncelab MEMODR
The $readmem commands are defined as follows:
$readmemb ( " file_name " , memory_name [ , start_addr [ , finish_addr ] ] ) ;
$readmemh ( " file_name " , memory_name [ , start_addr [ , finish_addr ] ] ) ;
These commands allow the optional specification of a starting memory address and an ending address. The IEEE standard allows the $readmem commands to specify a starting address that is higher that the ending address. However, the Cadence tools always read the file data from the lowest address first, no matter how the $readmem command address values are specified. This can result in the situation where the Cadence tools are not behaving identically to the IEEE standard specification.
The warning can be ignored when the starting address is the lowest address of the memory range, however, the warning is valid when the starting address is the highest address of the memory range.