Oddities of the fourteennm_simple_iopll model
I'm trying to sort through the various atom and megafunction library representations that seem to exist for the Stratix 10 IOPLL, and encountering a variety of oddities. Please help shed some light on the following:
It appears that the primary WYSIWYG model of the physical primitive is module fourteennm_iopll found in the fourteennm atom library. That's consistent with Altera's general library organization. So far so good.
Now, the fourteennm_iopll module conditionally makes reference to a sub-module called fourteennm_simple_iopll, which appears to be a simplified and less feature rich subset of fourteennm_iopll. Ok, nice to have a simplified model that can be used where it suffices.
But the relationship of references between fourteennm_iopll and fourteennm_simple_iopll appears to be backwards. This is where the oddities begin.
Firstly, just the fact that the full featured model acts as a wrapper for the simplified model (or at least conditionally), and not the reverse.
Secondly, the fourteennm_simple_iopll module is defined in the altera_lnsim.sv library, not the fourteennm atom library. This creates a library dependency that is in the opposite direction of the norm. It makes the fourteennm atom library dependent on altera_lnsim, whereas normally the reverse is true, altera_lnsim is dependent on the various atom libraries for device-specific primitives (twentynm, etc.).
Thirdly, the fourteennm_simple_iopll module is present in altera_lnsim.sv, and can therefore be instantiated directly in a design, and does simulate properly. But in synthesis, instantiating it in a design causes Quartus to error out, complaining that design library altera_lnsim (or altera_lnsim_ver, either one) does not contain primary unit fourteennm_simple_iopll. In other words, the fourteennm_simple_iopll module exists in the altera_lnsim library provided in the Quartus install, but Quartus appears to be unaware of it.
So...
What is fourteennm_simple_iopll all about? For what purpose does it exist, and how is it meant to be used?
Is it or is it not supported for direct instantiation in a design? And if so, how, as the standard method of referring to altera_lnsim library components doesn't appear to work?
And why does it reside in the altera_lnsim library of all places? A 14nm only component residing in a pan-family library, where it logically doesn't belong, and where it creates abnormal dependencies between the libraries?
Please shed some light.
Thanks,
-Roee