generate statement inside a process (conditional variable declaration)

Discussion in 'VHDL' started by Nicolas Matringe, Apr 18, 2007.

  1. Hello
    I think it is not possible to use a generate inside the declarative
    part of a process.
    I would need it just now so it seems a good idea, but maybe it is not.
    Any argument ?

    Nicolas
     
    Nicolas Matringe, Apr 18, 2007
    #1
    1. Advertising

  2. On 18 Apr 2007 01:02:35 -0700, Nicolas Matringe <>
    wrote:

    >Hello
    >I think it is not possible to use a generate inside the declarative
    >part of a process.
    >I would need it just now so it seems a good idea, but maybe it is not.
    >Any argument ?


    Nicolas,

    I don't really see the problem. All variables are initialised
    anyhow - to the 'LEFT value of their subtype - so surely it is
    OK simply to create a generic that defaults to this value,
    and use that generic as the initialiser?

    entity Foo is
    generic (initval: SOME_TYPE := SOME_TYPE'left);
    port ....
    end;
    architecture A of Foo is
    begin
    process
    variable V: SOME_TYPE := initval;
    begin
    end process;
    end;

    Now, if I leave the generic "initval" at its default
    value, the process behaves exactly as though V had
    no explicit initialisation.

    Have I missed the point of your problem?

    regards
    --
    Jonathan Bromley, Consultant

    DOULOS - Developing Design Know-how
    VHDL * Verilog * SystemC * e * Perl * Tcl/Tk * Project Services

    Doulos Ltd., 22 Market Place, Ringwood, BH24 1AW, UK

    http://www.MYCOMPANY.com

    The contents of this message may contain personal views which
    are not the views of Doulos Ltd., unless specifically stated.
     
    Jonathan Bromley, Apr 18, 2007
    #2
    1. Advertising

  3. Nicolas Matringe

    Ben Jones Guest

    "Jonathan Bromley" <> wrote in message
    news:...
    > On 18 Apr 2007 01:02:35 -0700, Nicolas Matringe <>
    > wrote:
    >>I think it is not possible to use a generate inside the declarative
    >>part of a process.
    >>I would need it just now so it seems a good idea, but maybe it is not.
    >>Any argument ?


    > I don't really see the problem. All variables are initialised
    > anyhow - to the 'LEFT value of their subtype - so surely it is
    > OK simply to create a generic that defaults to this value,
    > and use that generic as the initialiser?
    >
    > Have I missed the point of your problem?


    I'm not sure what Nicolas's problem actually was, but I assumed that he
    wanted to surround some declaration at the start of a process - for example
    the declaration of some unwieldy variable - with an IF... GENERATE block so
    that it's only created under certain conditions. I can see how that might
    make certain code more efficient.

    However, I can't think of anything that you actually *cannot* do unless you
    have that feature.

    It's entirely possible that I've missed the point as well. Probably in the
    opposite direction. So on average, the problem is solved :)

    -Ben-
     
    Ben Jones, Apr 18, 2007
    #3
  4. Nicolas Matringe

    Andy Guest

    On Apr 18, 7:11 am, "Ben Jones" <> wrote:
    > "Jonathan Bromley" <> wrote in message
    >
    > news:...
    >
    > > On 18 Apr 2007 01:02:35 -0700, Nicolas Matringe <>
    > > wrote:
    > >>I think it is not possible to use a generate inside the declarative
    > >>part of a process.
    > >>I would need it just now so it seems a good idea, but maybe it is not.
    > >>Any argument ?

    > > I don't really see the problem. All variables are initialised
    > > anyhow - to the 'LEFT value of their subtype - so surely it is
    > > OK simply to create a generic that defaults to this value,
    > > and use that generic as the initialiser?

    >
    > > Have I missed the point of your problem?

    >
    > I'm not sure what Nicolas's problem actually was, but I assumed that he
    > wanted to surround some declaration at the start of a process - for example
    > the declaration of some unwieldy variable - with an IF... GENERATE block so
    > that it's only created under certain conditions. I can see how that might
    > make certain code more efficient.
    >
    > However, I can't think of anything that you actually *cannot* do unless you
    > have that feature.
    >
    > It's entirely possible that I've missed the point as well. Probably in the
    > opposite direction. So on average, the problem is solved :)
    >
    > -Ben-


    If there was a generate around the variable declaration, there would
    also have to be one around the subsequent code that called it. Since
    generate statements have their own declarative region, it would be
    better to put the generate in the statement region, rather than one in
    the declarative region and one in the statement region. Note that
    generate statements are not currently allowed in ANY declarative
    region either.

    In sequential code there is very little need of a generate capability
    that cannot be met with static conditions on if/case/loop statements,
    that a decent optimizing compiler would not handle well anyway.

    On the other hand, if a variable or constant had a complex, time-
    consuming initialization (via a function call), compilers may not be
    able to take that out just because it never gets used (due to static
    conditions). In such a case, I'd be inclined to create separate
    versions of the same process, each wrapped in a generate statement.
    Perhaps through the use of common procedures and/or functions, the
    amount of duplicate code in these process versions could be minimized.

    Andy
     
    Andy, Apr 18, 2007
    #4
  5. Nicolas Matringe wrote:

    > I think it is not possible to use a generate inside the declarative
    > part of a process.
    > I would need it just now so it seems a good idea, but maybe it is not.
    > Any argument ?


    If I have alternate or optional blocks of code,
    I declare procedures in process scope.
    These can be conditionally called after the BEGIN.

    Sometimes I even preserve unused code this
    way in case I change my mind. Unlike a commented
    block of code, an uncalled procedure gets
    analyzed at each compile.

    -- Mike Treseler
     
    Mike Treseler, Apr 18, 2007
    #5
  6. On 18 avr, 13:51, Jonathan Bromley <>
    wrote:
    > On 18 Apr 2007 01:02:35 -0700, Nicolas Matringe <>
    > wrote:
    >
    > >Hello
    > >I think it is not possible to use a generate inside the declarative
    > >part of a process.
    > >I would need it just now so it seems a good idea, but maybe it is not.
    > >Any argument ?

    >
    > Nicolas,
    >
    > I don't really see the problem. All variables are initialised
    > anyhow - to the 'LEFT value of their subtype - so surely it is
    > OK simply to create a generic that defaults to this value,
    > and use that generic as the initialiser?

    [...]
    > Now, if I leave the generic "initval" at its default
    > value, the process behaves exactly as though V had
    > no explicit initialisation.
    >
    > Have I missed the point of your problem?


    Well yes :eek:)

    My problem was quite simple. I have an interrupt controller that must
    handle interrupt priority (nothing fancy)
    Now I am not sure what this priority must be because the documents I
    have are not clear on this point. An easy way I have come up with was
    to declare an std_logic_vector variable with ascending or descending
    range, depending on the priority order (my priority decoder is hard-
    coded because synthesis tool did not give me a fast enough result, it
    is not possible to use a for ... loop)

    Anyway I know I can use a for ... loop to revert my vector and make
    this dependant on a generic but I also wanted to check if my idea was
    good, bad, or utterly stupid.

    Thank you all for your answers
    Nicolas
     
    Nicolas Matringe, Apr 19, 2007
    #6
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Erica
    Replies:
    3
    Views:
    1,344
    The Dead Bishop
    Jul 18, 2004
  2. Alec S.
    Replies:
    10
    Views:
    10,225
    Alec S.
    Apr 16, 2005
  3. ArAgost
    Replies:
    0
    Views:
    1,701
    ArAgost
    Jun 21, 2006
  4. Srinu
    Replies:
    10
    Views:
    957
    David Thompson
    Nov 4, 2007
  5. Mehmet Yavuz S. Soyturk

    variable declaration inside eval inside with

    Mehmet Yavuz S. Soyturk, Apr 11, 2007, in forum: Javascript
    Replies:
    3
    Views:
    130
    Mehmet Yavuz S. Soyturk
    Apr 12, 2007
Loading...

Share This Page