Forum Discussion

Altera_Forum's avatar
Altera_Forum
Icon for Honored Contributor rankHonored Contributor
18 years ago

How to start a new design - best way (incremental compilation)

Hi all, atm at work I've some time and I would like to plan how to start all our future design.

I would like to use all the "new" features of Quartus II in order to better design our future chips.

I tell you what I would like to insert and the reason why I would like to.

First of our design at the moment employ 3 different people.

The design can be divided in 3 big block:

1- input stage

2- compute stage

3- Nios processor and code

Theese 3 stage are given to 3 different people.

At the moment each one of them do it's part individually with some input fixed and in the end we do a full compilation with all together.

I know that's a bad way and so I wanna improve it.

I would like to use a Top down approach with the Incremental Compilation (partitions).

I've read what quartus handbook tells and so I think that the way to proceed is:

1- define the pinout of the device

2- define how the 3 block interconnect among them and to external pin

3- think about the clocks (which clock each block need, PLL, clock region, etc)

4- allocate the resources to a single design partition with some margin of course

5- compile the project telling that each region is empty and export the constraint for each region

6- give to each one of the 3 people that work to the design their constraints (I've understood that there is a sort of file that will be created that open a new project with all the information they need).

7- each developer open its project (using the file I spoke in point 7), develop its part, and give back a netlist that I've to import in the "master" project.

8- when I've all the 3 netlist I can compile the master project to have the final file.

Have I misunderstood or missed something?

This approach shall be good also because if someone of the 3 developers has to change something, I've the new netlist to import in the master design and Quartus shall take less time to compile the project (atm we're over 1h.. on a EPS2S60 device)

I have also some question about what shall be leaved out of the partitions.

I mean I spoke about clock management, is it good to leave PLL and global clock in the top level of the project?

Keep in mind that it's the first time for me that I work with Incremental Compilation and top down approach.. Until some years ago all the project was in charge to only one people but the CPU was external to FPGA and a lot of feature were not necesary.

Thx in advice for all the help you could give to me.

Edit: Update the situation.

As expected the clk management will return to be the most critical part.

As example in the "flat mode" I've an output of a PLL that is a regional clock, but now after the partition division it tell me that cannot fit that in a regional clock.

It seems strange to me, but maybe is because I've keep the PLL in the "Top".

Moreover I've another problem about that resources: PLL!

I mean in my design I've a clk that generate 2 clk output that go to 2 different partition (one is a clock in the block control and another is the clk for the Nios section).

I cannot use another clock because theese 2 part MUST start always and this clock is the only one that is up when I turn on the board.

I know also that is bad to divide the clk input pin into 2 different PLL (that I can easily set in each partition), so what can I do?

And more in general how do you use your PLL in a partitioned design?

As first I started with a Top Down approach that is simple to do some practice (I know for sure that it work in flat mode and all the problem I'll have will be derived by the partitioning approach).

I hope someone could help, I can't believe that I'm the only one that wanna use this approach.

9 Replies

  • Altera_Forum's avatar
    Altera_Forum
    Icon for Honored Contributor rankHonored Contributor

    Hi Darkwave, just a clue for you, not aiming to answer all your questions unfortunately.

    I never worked with incremental compilation but a few days ago I've been told that it is not possible to work with incremental compilation if you are including IPs in your design (e.g. FFT, FIR filters, etc.).

    I did not check if this is true, so I'm just telling you what could happen if you are using IPs.

    If someone else has some more precise information about this topic, it would be very useful for everybody.
  • Altera_Forum's avatar
    Altera_Forum
    Icon for Honored Contributor rankHonored Contributor

    It's not true, you cannot use Evaluation of the IP, but the full version is ok.

  • Altera_Forum's avatar
    Altera_Forum
    Icon for Honored Contributor rankHonored Contributor

    Hi, we have been using incremental compilation for a while.

    Our problem was that the Signal Tap seems to mess up previously compiled functionality.

    (yeah I know, if it does then your timing stinks)

    We have not digged any deeper in this issue.

    apus
  • Altera_Forum's avatar
    Altera_Forum
    Icon for Honored Contributor rankHonored Contributor

    Another problem i've run into is that it can be difficult to get tristate signals out of a partition. For example, if your NIOS accesses any peripheral (CFI Flash, SRAM, etc) via an avalon tristate bridge, then your SOPC module cannot be a partition because the tristate buffers are inside it.

  • Altera_Forum's avatar
    Altera_Forum
    Icon for Honored Contributor rankHonored Contributor

    Thx for all the answer.

    @agdeput: i can understand and that could be a big problem almost for all, but I hope that with a bit more investigation it's possible to bypass the problem (I'm thinking about strictly post fit or at least post fit netlist should resolve the problem, if the signal tap still fit in the design with that constraint)

    @alias: in my design I'm planning 4 big partition and 1 is all the SOPC modules (nios and peripheral) - the aim is that the 3 people that work at the design can work on their part and then I'll import their netlist in the top.

    Thanks for the feedback it's important to know that.

    What about my approach? Shall be ok?

    At the moment I've done the 4 "macropartition at the top" and generated the TCL in order to create the sub design: today I'll try to generate the netlist, estimate the dimension of the partition (# of logic elements, ram, dsp block, etc..) and then at the end I'll import all in the top (and I'll pray to understand more..)

    I still have some approach problem, I mean in which partition keep the clock management blocks? I mean shall I keep that in the partition of design where they're used more? Keep all the PLL and clk generating block on the top (in no partition)?

    To me seems the better way, but I'm not sure about it: at the moment in my partition division I've keep on the top only the PLL and clk that I wanna be global signal, whereas all the regional ones still be on their partitions.

    Thx a lot for the answers, I'm happy to not be alone in this experimentation.
  • Altera_Forum's avatar
    Altera_Forum
    Icon for Honored Contributor rankHonored Contributor

    Each day it's a new problem :(

    Today I'm starting to compile the subblock and import them as partition into the top design.

    The problem is that the stage input contain the ASI IP (for which I've the licence of course, it's not an evaluation) but when I import the netlist in the top it tells me that:

    Can't generate pof for project because the encrypted source file cannot be located: "asi_files_names". (asj_nco_fxx, mac_i_lpmd.v, etc..)

    I've tried in the top level to add the library of Asi, but I've got the same message..

    What can I do?

    Edit reson: problem resolved, I missed to tell in the top to address the NCO path in library.

    I didn't think that I need to set as library on the top level the path of the IP I use in the sub-design part, because I'm importing a netlist and I thought that it didn't need it.
  • Altera_Forum's avatar
    Altera_Forum
    Icon for Honored Contributor rankHonored Contributor

    New question:

    I forgot to set some assignment on the top regarding fast input register and fast output register..

    This shall be reported also to the sub-design of 2 partition.

    The best way is to set the constraint on the top and then on the 2 partition or to set only to the top, generate the tcl files and then using that .tcl in order to start up the 2 partition design too? (I think it'll be the same, but I'm not sure)