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

Q about Incremental Compilation + Global Routing Resources

Altera_Forum
Honored Contributor II
958 Views

Hello all, 

 

Due to an unexpected speed increase caused by LogicLock division in a design, I'd like to use incremental compilation to see firsthand the pros and cons of a bottom-up, hierarchical procedure in comparison to a completely flat fitting flow. In particular, I'd like to use the procedure described in the Quartus II handbook, "Designing in a Team-Based Environment" (2-38). Using Post-Fit Netlists may save me overall compilation time, but due to my inexperience I am unsure of how to handle global routing resources.  

 

Provided I turn the fitter setting auto global clock to "Off" when building the lower level blocks, I am able to do something like this: Implementing a top level design that instantiates empty modules that are connected together, I am able to fully compile the design in Quartus. These empty modules are assigned fixed+locked LogicLock regions and are also design partitions (with Netlist Type "Empty"). After a successful compilation in Quartus, I generated scripts for lower level modules by selecting Project -> Generate Design Partition Scripts. After that, I can select Tools -> Tcl scripts... to load the tcl script for one of these blocks. After compiling for the block, I select Project -> Export Design Partition in order to get the qxp file. After doing this for each block, I import the partitions at the top level, changing the netlist type from "Empty" to "Post-fit".  

 

Here's where it gets a bit hazy for me. If I wanted these lower level partitions to use global clock resources, I don't know how to do this manually or automatically. If I don't turn auto global clock to "Off" when fitting the blocks, It'll fail when using the Post-Fit netlists due to the subblocks trying to use the same CLKCTRL blocks ("Could not place global clock driver", "Could not merge with previously placed clock drivers at location CLKCTRL_G0", etc.). This was expected. The question is, how do I preemptively pass down the information to the individual blocks that a signal should be a global clock during the initial top-level compilation with empty partitions (and what specific resources that it should use)? The Quartus II Handbook mentions to set global signal allocation constraints, but I'm not sure what that means. I tried using the assignment editor to set the input clocks to the global signal/global clock options, but I get warnings that the global signal option is ignored because the 'source does not feed directly to destination'. 

 

Thanks.
0 Kudos
1 Reply
Altera_Forum
Honored Contributor II
266 Views

After thinking about this for a bit, the pseudo-bottom up approach described here is one way that I could proceed to make sure that different submodules aren't fighting over the same resources: forum/showthread.php?t=814&highlight=optimize+specific+paths 

 

Though I am also alternatively interested in manual assignment via altera_attribute assignments directly in the HDL. Page 16-69 in the QII handbook shows Example 16–117, showing how to change a Quartus Setting (?) in Verilog HDL. I'd like to do this with different Quartus Setting, but I'm having trouble doing this. Before trying to use this procedure to promote clock lines to specific resources, I wanted to use this procedure to assign a module to a specific Logic Lock region like so: 

 

(* altera_attribute = {"-name LL_ENABLED ON;-name LL_ORIGIN LAB_X50_Y34_N0;-name LL_WIDTH 19;-name LL_HEIGHT 9" }*) module foo( ....... 

 

Looking at Chip Planner after fitting, Quartus actually places the module somewhere else, though. Am I using this procedure incorrectly? 

 

Thanks.
0 Kudos
Reply