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

NIOS memory usage

Altera_Forum
Honored Contributor II
2,214 Views

Hello, 

I have been analysing the memory usage of my project and would like to override some of the memory block types used by the NIOS because they are inefficient in terms of use. (I'm fairly tight on memory). More specifically, there are a few blocks which are using M9Ks which I would like to convert to MLAB. The memory types specified by the code are set to "Auto" as reported in the fitter RAM summary report. 

 

I have tried to do this by making a parameter assignment in the assignment editor but it appears to be ignored. I haven't seen a message in the compilation report to the effect that the assignment I have made is being ignored, but it does not have an effect i.e. the memory block is still assigned to an M9K. 

 

For example, this is one of the memory blocks in question: 

 

ChannelApp:NIOS|sgdma_to_lan:the_sgdma_to_lan|sgdma_to_lan_status_token_fifo:the_sgdma_to_lan_status_token_fifo|scfifo:sgdma_to_lan_status_token_fifo_status_token_fifo|scfifo_ic31:auto_generated|a_dpfifo_li31:dpfifo|altsyncram_lqd1:FIFOram|ALTSYNCRAM 

 

AUTO Simple Dual Port Dual Clocks 2 24 2 24 yes no yes yes 48 2 24 2 24 48 1 0 0 None M9K_X60_Y1_N0 

 

I basically copied the full path and name of the altsyncram as displayed, copied it into the assignment editor and assigned a parameter "RAM_BLOCK_TYPE" and assigned the value "MLAB" (without the quotes). 

 

I have used this very same technique on some of my own memory blocks in my logic and it appears to work fine. 

 

So, why does it appear to be ignored? Is it because the fitter is using some form of pre-compiled logic for the NIOS core or something like that?
0 Kudos
4 Replies
Altera_Forum
Honored Contributor II
946 Views

I have a problem very similar to the one below, in a Stratix 3 I have some 3rd party code which Quartus reports is of memory type AUTO. My own code is using most of the M9K blocks, but Quartus is determined to also put the 3rd party AUTO blocks as M9Ks. How do I force it to use MLABs? I have tried all the compiler options below but it still sets these AUTO blocks to M9K even though this now exceeds the number available in the chip (>639). 

Auto RAM to MLAB conversion -ON 

Equivalent RAM and MLAB paused read capabilities -Don't Care 

Equivalent RAM and MLAB power up -Don't Care 

 

Cheers Tom
0 Kudos
Altera_Forum
Honored Contributor II
946 Views

It may be that MLABs don't provide the facilities required by the instantiation of the memory. In my case, the NIOS was using certain modes of some memory blocks which would only work with M9K or M144K. I was able to attempt to override by using a parameter assignment but in the cases where this wouldn't have worked the build failed.

0 Kudos
Altera_Forum
Honored Contributor II
946 Views

I guess that must be the case then. As there are a few different instances of AUTO memory I thought I would be able to make one of them change to MLAB. But unfortunately not! Thanks Tom.

0 Kudos
Altera_Forum
Honored Contributor II
946 Views

Just for your information this is the kind of assignment I have used in the assignment editor. Obviously you have to find the full path name of the ram block from your compilation output (Compilation report->Fitter->Resource Section->RAM Summary) - may be different if you are using a different version of Quartus - I'm still on 8.1 at the moment. 

 

dsp:dsp0|dsp_processing:dsp_processing_a|buss_mixer:main_group_afl_mix|buss_mix:buss_mix_0|coeff_memory_Xn:coeff_memory_mix_coeffs|coeff_memory_with_byteen:coeff_memory_with_byteen_a|altsyncram:altsyncram_component RAM_BLOCK_TYPE M144K Yes
0 Kudos
Reply