AR# 54162


ncelab: *W,MEMODR (.v): $readmem default memory order incompatible with IEEE1364


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.

  1. Defining the lowest memory address as the left (starting) address of the $readmem command
  2. Specifying both a starting and ending address to the $readmem command where the starting address is lower than the finish address
AR# 54162
Date 02/06/2013
Status Active
Type General Article
People Also Viewed