Question

Sorry if the question is too newbie. I have been looking for information on readmemh and I haven't been able to find a suitable solution to my problem.

I have a large hex file with the contents of a memory to read from it. But since the file is just too large I want to be able to bring to my program just a smaller memory block every time. For example, if my memory has addresses 32 bits long, being able to load only chunks of 2048 addresses and storing in a variable the upper part to know if I'm in the right chunk or not.

Or more or less, if my hex file is as follows:

@00000000 1212
@00000001 3434
@00000002 5656
...
@ffffffff 9a9a

I want to be able to save it in a structure with the following fields:

logic [15:0] chunck [11:0]; // Keeps 2048 entries
logic [20:0] address_top;   // Keeps the top part of the address

Looking at the documentation, I see that readmemh allows me to indicate a start and an end address, but what I am seeing is that it refers to the position in the destination array, not from the source.

How can I do it? Thanks in advance!

Was it helpful?

Solution

If you are using SystemVerilog, then you can use an associative array to model your memory, and let it take care a allocating and mapping the physical memory as needed, instead of doing it yourself.

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