Intel® Quartus® Prime Software
Intel® Quartus® Prime Design Software, Design Entry, Synthesis, Simulation, Verification, Timing Analysis, System Design (Platform Designer, formerly Qsys)
16597 Discussions

Can I update memory content by changing .mif files without compiling whole project

Altera_Forum
Honored Contributor II
3,269 Views

I am working on a project which uses arria V version and I want to update RAM memory content just by replacing .mif files. I have a demo which contains .qip and .v files generated by MegaWizard Plug-In Manager[/B][/B]. If I keep the name of .mif file same with changed the content and compile the program, I am able to load new data in memory.  

I just want to keep changing data in the memory. Is there any way that I can compile only .qip file and .v file? After-all I have changed only these files. 

 

When I try to use In-system Memory content editor, it says 'no instance found'. Can I create instance bsed on the information in .qip and .v files? 

Or if there is any command so that I can compile only needed portion. I am a beginner, so I would appreciate if you could elaborate steps. 

 

Thanks a lot!
0 Kudos
7 Replies
Altera_Forum
Honored Contributor II
1,626 Views

In theory if you only change the contents of the mif file, you should only have to run the assembler to get an updated fpga image and shouldn't need to run a full compilation. In practise, from the tests I made a few years ago, sometimes it works, sometimes it doesn't (the FPGA image is regenerated with the old data). 

 

If you enable smart compilation, the compilation should be a lot faster if you only change the .mif file, as Quartus should detect that it doesn't need to recompile the rest. 

 

To use the memory content editor, you need to enable its support explicitly in the Megawizard, and it will only work with single port memories (the memory editor feature uses the second port). But please note that contrary to modifying the mif file, any editing through the memory content editor is temporary. It only modifies the memory contents in the FPGA. As soon as you reconfigure the FPGA through JTAG or cycle the power, your modifications will be lost.
0 Kudos
Altera_Forum
Honored Contributor II
1,626 Views

Interesting thread, 

 

 

--- Quote Start ---  

you should only have to run the assembler to get an updated fpga image and shouldn't need to run a full compilation. In practise, from the tests I made a few years ago, sometimes it works, sometimes it doesn't (the FPGA image is regenerated with the old data).  

If you enable smart compilation, the compilation should be a lot faster if you only change the .mif file, as Quartus should detect that it doesn't need to recompile the rest. 

--- Quote End ---  

 

For "In system memory content editor" lpm_const component, how do you write the .mif file so as to point to that component ? 

 

I have for example a "In system memory content editor" lpm_const called const_l2

After "debugging", I found that 0x20 is the best value. 

I would like to regenerate the .POF and .SOF file with this good value. 

 

You say that you only just run the assembler and not the whole compilation. 

How do you write the .mif file (http://quartushelp.altera.com/13.0/master.htm#mergedprojects/reference/glossary/def_mif.htm?gsa_pos=1&wt.oss_r=1&wt.oss=memory%20initialization%20file%20in%20system%20memory%20content%20editor) : how do you know at which address correspond to my "const_l2" ? 

I found in "compilation report > analysis and synthesis > Debug settings summary > in system memory content editor settings summary" the "instance index of my "const_L2".  

Do I Have to calculate the address by adding width*depth of precedent instances ?
0 Kudos
Altera_Forum
Honored Contributor II
1,626 Views

 

--- Quote Start ---  

In theory if you only change the contents of the mif file, you should only have to run the assembler to get an updated fpga image and shouldn't need to run a full compilation. In practise, from the tests I made a few years ago, sometimes it works, sometimes it doesn't (the FPGA image is regenerated with the old data). 

 

If you enable smart compilation, the compilation should be a lot faster if you only change the .mif file, as Quartus should detect that it doesn't need to recompile the rest. 

 

To use the memory content editor, you need to enable its support explicitly in the Megawizard, and it will only work with single port memories (the memory editor feature uses the second port). But please note that contrary to modifying the mif file, any editing through the memory content editor is temporary. It only modifies the memory contents in the FPGA. As soon as you reconfigure the FPGA through JTAG or cycle the power, your modifications will be lost. 

--- Quote End ---  

 

 

Thanks for showing various options. I am just wondering, can't we make some.tcl file which will compile only these two files. I would prefer if I could control the timing of this partial compilation with MATLAB when I can put these command in a loop. did you ever tried anything like it? 

 

Thanks
0 Kudos
Altera_Forum
Honored Contributor II
1,626 Views

 

--- Quote Start ---  

How do you write the .mif file (http://quartushelp.altera.com/13.0/master.htm#mergedprojects/reference/glossary/def_mif.htm?gsa_pos=1&wt.oss_r=1&wt.oss=memory%20initialization%20file%20in%20system%20memory%20content%20editor) : how do you know at which address correspond to my "const_l2" ? 

I found in "compilation report > analysis and synthesis > Debug settings summary > in system memory content editor settings summary" the "instance index of my "const_L2".  

Do I Have to calculate the address by adding width*depth of precedent instances ? 

--- Quote End ---  

 

I'm not sure I understand your question. Each .mif file with the edit option set will create a separate instance for the memory content editor. So when you change a value in the content editor, you can change the same value at the same place in the .mif file. No need to take into account the sizes of the other instances. 

 

 

--- Quote Start ---  

Thanks for showing various options. I am just wondering, can't we make some.tcl file which will compile only these two files. I would prefer if I could control the timing of this partial compilation with MATLAB when I can put these command in a loop. did you ever tried anything like it? 

 

Thanks 

--- Quote End ---  

I've never tried something like that. In fact I don't trust Quartus' smart compilation feature and always do a full recompile, even for a minor change. I've had too many bugs with partial recompilations, so I'm not the right person to ask ;) 

I just know from personal experience on the projects I worked on that if you use the "Update Memory Initialization File" option in Quartus and run the assembler, sometimes it works and sometimes (or most often) it doesn't. I don't really know the reason why.
0 Kudos
Altera_Forum
Honored Contributor II
1,626 Views

 

--- Quote Start ---  

Interesting thread, 

 

 

For "In system memory content editor" lpm_const component, how do you write the .mif file so as to point to that component ? 

 

I have for example a "In system memory content editor" lpm_const called const_l2

After "debugging", I found that 0x20 is the best value. 

I would like to regenerate the .POF and .SOF file with this good value. 

 

You say that you only just run the assembler and not the whole compilation. 

How do you write the .mif file (http://quartushelp.altera.com/13.0/master.htm#mergedprojects/reference/glossary/def_mif.htm?gsa_pos=1&wt.oss_r=1&wt.oss=memory%20initialization%20file%20in%20system%20memory%20content%20editor) : how do you know at which address correspond to my "const_l2" ? 

I found in "compilation report > analysis and synthesis > Debug settings summary > in system memory content editor settings summary" the "instance index of my "const_L2".  

Do I Have to calculate the address by adding width*depth of precedent instances ? 

--- Quote End ---  

 

 

Hi 

I am looking for another options, not megafunction wizard.  

 

Suggested options like 'Smart compilation' and using only assembler is not working for me.  

I do not understand why update memory initialization and running assembler is not working for me. Daixiwen also seem to notice that sometimes it works and sometimes not. Their is no post which discusses how to make this work for what are the conditions. 

I have opened new threads with these specific questions to get attention of experienced users. I have to know, is there something i am doing wrong? Because if I am not doing anything wrong, then previous posts are somehow misleading (may be they work for older versions, not anymore). Users like me will use them without any result. 

 

 

Smart compilation option is mentioned in many threads. Mine is disabled for some reasons. As a Quartus user, I am just interested in knowing why?
0 Kudos
Altera_Forum
Honored Contributor II
1,626 Views

in the past i've used Processing > Update Memory Initialization File to update .mif and .hex in the .sof. i can't recall if it automatically runs the Assembler or if you have to do it, but it should be easy to figure out

0 Kudos
Altera_Forum
Honored Contributor II
1,626 Views

 

--- Quote Start ---  

in the past i've used Processing > Update Memory Initialization File to update .mif and .hex in the .sof. i can't recall if it automatically runs the Assembler or if you have to do it, but it should be easy to figure out 

--- Quote End ---  

 

It is working now. after updating memory initialization files, I run assembler and then run programmer with new .sof file. I do not know why it was not working before!!
0 Kudos
Reply