Altera_Forum
Honored Contributor
15 years agoQuartus II and the funny synthesis attributes
Hi everyone,
Last week I noticed some funny results after the implementation of my desing in Quartus II 11.0. Inside it there are two simple register chains, each one made up of three registers of 18 bit width, which I use as two delay chains of three clock cycles. I modelled them in VHDL (as well as the rest of the components of my design) by means of an array of std_logic_vector signals and a basic process. I think the exact code is irrelevant; it works well and Quartus infers properly the delay chain, so I won't include it in this post (it is long enough). The funny thing is that I realized that after the 'fitter' process, Quartus decided to implement the two delay chains by means of one altshift_taps megafunction (that's not a problem) inside one M9k (that is a problem). As you may think, this is a total waste of memory, because only 108 bits of the entire memory block are used. So I surfed over documentation, and finally I found information about the synthesis attributes supported by Quartus II (see Quartus II help page, section "VHDL Synthesis Attributes and Directives"). I have assigned the attribute 'ramstyle' to several language objects and elements (the signal which modelates the delay chain, its type, and even the whole component that instantiates it) setting it to a value "logic", i.e., attribute ramstyle : string; attribute ramstyle of MULTI_NCO : component is "logic"; and despite that, Quartus II keeps on implementing the two delay chains as dedicated memory blocks (M9k). Could anyone suggest any solution or idea to fix this issue? I need to reduce the amount of memory occupied by my design for commercial/contractual reasons, and obviously, this is a good way to do it. I appreciate your time guys, thank you.