Question

After synthesizing a processor code using Synopsis DC tool

Now I want to initialize 2 rams included in 2 components in this design using .mem files

how do I achieve that using the netlist file I have - the output of synthesizing - because I want to test if synthesizing was done right by testing the same code again on processor

It was easier without before synthesizing just by loading .mem files into those rams and then testing it

Any help

Was it helpful?

Solution

Don't bother loading .mem files; just initialise the memories directly in VHDL.

The simplest method - if they are ROMs - is to declare them as constant arrays. If this declaration is in a separate package you can easily script its creation from a hex file created by a compiler or assembler.

Here is an example to get you started

package Memories is

type Address is natural range 0 to 2**8 - 1;
type Byte is std_logic_vector(7 downto 0);

type Memory is array(Address) of Byte;

-- Positional association is convenient if you are filling the whole memory
-- constant ROM1 : Memory := (X"00", X"11", X"22", and so on);
-- I'm not going to type out the lot!

-- Named association is better for a simple test program
constant ROM2 : memory := (
   0     => X"C3",
   1     => X"38",
   2     => X"00",
  16#38# => X"C3",
  16#39# => X"00",
  16#3A# => X"00",
  others => X"FF"
);

end Memories;

If they are RAMs, you can call initialise them from the same constant array.

use Memories.all;
constant ROM : Memory := ROM2;
signal   RAM : Memory := ROM2;

These constructs are correctly handled by even the most primitive synthesis tools I have used in the last five years at least, so I would be very surprised if DC can't do the same.

That initial data must be preserved by the synthesis tool and appear in some form in the netlist. If you can understand that form, you can modify the data if necessary, but it is probably easier to update the source and re-synthesise.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top