Re: [sv-bc] configurations and parameters

From: Adam Krolnik <adam.krolnik_at_.....>
Date: Fri Sep 14 2007 - 07:59:45 PDT
Hello all;

Don't forget that  one can mimic parameter overrides/definitions by 
using include files with
preprocessor directives to set 1 or more sets of parameters or other 
preprocessor defines.

It would seem this would allow you to do today what you envision doing 
with configurations tomorrow.

Alsop, Thomas R wrote:
>
> Hi Don,
>
>  
>
> Actually, I have recently had conversations with some of our senior 
> RTL designers and one of them stated a very serious concern about 
> parameterization.  When you move into a more SoC ENV, you have many 
> configurations as components are added, multiply instantiated, and 
> chopped.  We are no longer in the mode of one size fits all, but in a 
> space of serving multiple platforms. The concern stated by this senior 
> designer was that we typically have many parameters across many blocks 
> which change as a whole to create multiple platforms of products.  He 
> stated that it's a very tedious and manual process get all the 
> parameters correctly put together on the compiler command line.  And 
> certainly this is easily lost unless he saves that command line. 
>  Better to have configuration files to formalize and revision this 
> process.
>
>  
>
> So now it seems like we need to iron out the proposal on this WRT to 
> how config's take precedence over internal parameters, etc..
>
>  
>
> Is there a mantis on this or a proposal?
>
>  
>
> Thanks, -Tom
>
>  
>
> ------------------------------------------------------------------------
>
> *From:* Don Mills [mailto:mills@lcdm-eng.com]
> *Sent:* Thursday, September 13, 2007 4:07 PM
> *To:* Alsop, Thomas R
> *Cc:* sv-bc@server.eda.org
> *Subject:* Re: [sv-bc] configurations and parameters
>
>  
>
> Thomas,
>
> In addition to the number of replies you got on your questions below, 
> I would like to follow up with a significant usage example of setting 
> parameters withing a configurations.  The products for the company I 
> am working for are processors and micro-controllers.  These are highly 
> configurable parts for the end users and therefore require a large 
> number of test configurations to ensure complete testing.  Our desire 
> is to have one copy of our design (DUT) and one copy of our test for 
> test environment.  We then want to use a Verilog configurations to set 
> parameters to set up a specific DUT configuration to be tested.  Each 
> of these Verilog configurations set up a test environment for our DUT 
> and will be added to CVS
>
> Without the availability of setting parameters inside of a 
> configuration, we have two other approaches:
> 1.  We can make multiple copies of out TEST code, each with unique 
> parameters set to represent each of the DUT configurations available.  
> This is a file management nightmare.  We only need one copy of the 
> test and then just need to modify the parameters to the DUT unique. 
>
> 2.  We can use command line parameter overrides to set the DUT 
> configuration.  This is our current usage model.  This approach does 
> not easily allow revision control.
>
> Alsop, Thomas R wrote:
>
> Thanks Saikat, this is a good example.  And I most definitely appreciate
> a designer's need to do architectural exploration.  This is one place
> that config's can be used and I see some need for parameter overrides in
> this work model so I won't argue it any further.  
>  
> My initial thoughts had been to use this for implementation convergence.
> And in those cases I saw it as rare from a design standpoint to use
> parameters overrides in configs to override the parameter override in
> the RTL.  Wow, did anyone understand that last sentence:)  However, I
> can see some cases where this would be used.  
>  
> And after more thought on the exploration work model, I would lean
> strongly towards agreeing with Shalom.  I also think of configs as a
> method to override what is in the RTL on the build command line. The
> issues I see with this are validation and implementation convergence.
> If for some reason the configs were now associated with released RTL
> models, it's going to be more difficult to debug where the parameter
> values came from. 
>  
> In the exploration world, this is not an issue because this will tend to
> be a designer working in his local area, making these changes (i.e.
> config parameter overrides), finding the optimal solution, ultimately
> changing the RTL parameter overrides, and committing the changes to a
> RTL model.   
>  
> Going back to the debug issue, I could only suggest that design teams
> make a very careful methodology decision to either train their team
> about configs (so they know where to look if a parameter value doesn't
> seem right) or banning configs in the model, but allowing them to use it
> for exploration.
>  
> So my next question would be about how we resolve the literal values
> used in the parameter overrides.  Designers are going to want something
> like this as Gordon suggests
>  
>   
>>>    module top ();
>>>      parameter WIDTH = 16;
>>>      adder a1 (...);
>>>    endmodule
>>>  
>>>    config cfgl;
>>>      design rtlLib.top;
>>>      instance top.a1 #(.size(WIDTH));
>>>    endconfig
>>>       
>  
> I am not the tool expert, but wouldn't this be a simple string
> replacement operation like we do with macro's.  Instead of replacing the
> literal value we just replace the string value of "WIDTH" and let the
> compiler do its job when it evaluates what "WIDTH" is within the RTL
> code.  My point is that we don't have to know what the value of WIDTH is
> at the time we see the config.  
>  
> Finally, I am not sure if this would conflict with having localparams
> and params within configs?  If the parameter is already defined within
> the RTL, I am going to want to just use that RTL parameter value.  But
> if I create another params or localparams in the config, we open up a
> big can of worms. The config must take precedence clearly with the
> parameters seen in the config, but what if the params is already defined
> in the RTL and we are overidding that value.  Do we only override it
> within the config or does it override all the parameter values in the
> RTL model? 
>  
> Anyway, just more food for thought.  Hope I am not dragging this issue
> down. Thanks,
> -Tom
>  
> -----Original Message-----
> From: Saikat Bandyopadhyay [mailto:saikat@cal.interrasystems.com] 
> Sent: Sunday, August 12, 2007 9:54 PM
> To: Alsop, Thomas R; 'Gordon Vreugdenhil'; 'Mark Hartoog'
> Cc: mills@lcdm-eng.com <mailto:mills@lcdm-eng.com>; sv-bc@eda.org <mailto:sv-bc@eda.org>
> Subject: RE: [sv-bc] configurations and parameters
>  
> Hello Tom,
> The need for parameter override from configuration should better be
> answered by designer(which I am not). However I can speculate the
> following scenario:
> - A parameterizable multiplier's size and architecture depends on
> parameters. parameters can be
>         + size of inputs
>         + signed/unsigned
>         + partial product generation architecture (booth/non-booth)
>         + reduction architecture (Wallace tree/regular array)
>         + final adder architecture(ripple/cla/csa etc)
>  
> A designer might want to do an architecture exploration, without
> modifying the RTL(i.e default parameter values or parameter override
> at instance of multipler).
>  
> Configuration with parameter override support can provide him this
> mechanism.
>  
> Without this support for architecture exploration
>    - multipler for all possible architecture
> combinations(booth/Wallace/ripple, booth/regular/cla etc) have to be
> created. In configuration you can bind to appropriate master.
>    - or RTL will need change.
> Either of these is not elegant.
>  
> So parameter override from configuration seems pretty useful.
>  
> Thanks,
> Saikat
>  
> -----Original Message-----
> From: owner-sv-bc@eda.org <mailto:owner-sv-bc@eda.org> [mailto:owner-sv-bc@eda.org] On Behalf Of
> Alsop,
> Thomas R
> Sent: Saturday, August 11, 2007 3:30 AM
> To: Gordon Vreugdenhil; Mark Hartoog
> Cc: mills@lcdm-eng.com <mailto:mills@lcdm-eng.com>; sv-bc@eda.org <mailto:sv-bc@eda.org>
> Subject: RE: [sv-bc] configurations and parameters
>  
> Hi Don, I'd like some clarification on what we are proposing. First,
> since I am new to configs, I'd like to explain my understanding of what
> they are doing.  A config is used to override the default binding of the
> instantiated "design element" (i.e. modules, primitives, interface, etc)
> thereby allowing a designer to place another version of the underlying
> code in a different library and rebind to that library via a config
> "instance" line. 
>  
> If I understand things correctly, I am not sure I see the need to
> override parameters within a config.  If you are rebinding in the first
> place, you most likely have a new default parameter setting in the newly
> binded instance.  So, in order to take advantage of parameters
> overriding the newly binded instance, you would have to have many of
> them and need to override some of the new ones.  Granted this seems like
> a valid usage scenario but a complex one and one that I am not sure
> would be used often. On top of that, most likely the RTL for a specific
> instance you are already overriding the parameter value with the module
> instantiation. By using a config with parameters you are stating that
> not only do you want to change the underlying code but you are changing
> the input parameters to it as well.  I just can't think of cases where
> this is needed, at least they seem very rare. Please enlighten me:')
>  
> Your examples do all use literals as Gordon stated and he mentioned that
> while simple to implement it's not practical. As a methodology enforcer
> on our design team I can say that we frown on literals in RTL code.
> Which means that we'd want to used parameter values as inputs to the
> config parameter override. 
>  
> Finally, I would definitely agree with Gordon on parameter win scenarios
> which goes back to my argument about whether we need this feature.  In a
> scenario where we do need it, perhaps you can give us an example of why
> the config should win over the instantiated redefine of the parameter.
> In our RTL models the instantiated redefine seems like the golden
> location.  Otherwise it really complicates debug and readability. 
>  
> Hope this is clear, Thanks, -Tom
>  
> -----Original Message-----
> From: owner-sv-bc@server.eda.org <mailto:owner-sv-bc@server.eda.org> [mailto:owner-sv-bc@server.eda.org] On
> Behalf Of Gordon Vreugdenhil
> Sent: Friday, August 10, 2007 10:25 AM
> To: Mark Hartoog
> Cc: mills@lcdm-eng.com <mailto:mills@lcdm-eng.com>; sv-bc@server.eda.org <mailto:sv-bc@server.eda.org>
> Subject: Re: [sv-bc] configurations and parameters
>  
>  
>  
> BTW, Mark, have you thought through how "works like bind" will
> impact the name resolution?  Since a config impacts an instance
> in the middle of a module, I think that my view that names
> shouldn't be imported late would make this much simpler and
> consistent to describe.  Otherwise we'd have to have yet another
> set of different rules for this kind of situation versus bind.
> That assumes that you don't want to *change* the meaning of a name
> binding decision in later code due to the impact of the config.
>  
> Having the tighter more local rules makes language extensions like
> this much more symmetric and easier to see how they would just fall
> into place without additional special rules and irregularities.
>  
> Gord.
>  
> Mark Hartoog wrote:
>   
>> This would work for value parameters, but does not work as well for
>>     
> type
>   
>> parameters.
>>  
>> Users will want to use user defined types for type parameters and
>> defparams are not
>> allowed to type parameters. 
>>  
>>     
>>> -----Original Message-----
>>> From: owner-sv-bc@eda.org <mailto:owner-sv-bc@eda.org> [mailto:owner-sv-bc@eda.org] On 
>>> Behalf Of Saikat Bandyopadhyay
>>> Sent: Thursday, August 09, 2007 9:35 PM
>>> To: 'Gordon Vreugdenhil'; mills@lcdm-eng.com <mailto:mills@lcdm-eng.com>
>>> Cc: sv-bc@eda.org <mailto:sv-bc@eda.org>
>>> Subject: RE: [sv-bc] configurations and parameters
>>>  
>>> Hi,
>>> Few issues/suggestions
>>>  
>>> 1. In the example from Gord, where WIDTH is set as parameter 
>>> from configuration, scope resolving can get very complicated. 
>>> I would suggest against introducing such changes in SV.
>>>    We should rather have parameter/localparam declarations 
>>> inside configurations which can be used for overriding 
>>> instance parameters.
>>> This will not work like binding and cannot handle Gord's case.
>>>  
>>> 2. For overriding parameters inside configuration, instead of 
>>> introducing a new Syntax, with it's precedence complexity, we 
>>> can think of using defparam inside configuration.
>>>   
>>> Slightly modified version of Don's example with my suggestions:
>>> module top ();
>>>   adder a1 (...);
>>>   adder a2 (...);
>>>   adder a3 #(.size(4)) (...);
>>>   adder a4 (...);
>>>   adder a5 #(.out(16)) (...);
>>>   adder a6 #(.out(32)) (...);
>>> endmodule // top
>>>  
>>> //file adder.v, default rtlLib
>>> module adder #(parameter size = 12) (...);
>>>   // rtl adder
>>>   // description
>>>   ...
>>> endmodule // adder
>>>  
>>>  
>>> //file adder2.v, in diffRTLLib
>>> module adder #(parameter out = 10) (...);
>>>   // different rtl adder
>>>   // description
>>>   ...
>>> endmodule // adder
>>>  
>>>  
>>> //file adder.vg, in gateLib
>>> module adder (...);
>>>   // gate-level adder
>>>   // description
>>>   ...
>>> endmodule // adder
>>>  
>>>  
>>> //This configuration is very verbose for discussion purposes.
>>> config cfgl;
>>>   design rtlLib.top;
>>>   default liblist rtlLIb;
>>>   instance top.a2 liblist gateLib;
>>>  
>>>   // SUGGESTION
>>>   localparam WIDTH = 8;
>>>  
>>>   //using default lib, override instantiated parameter 
>>> setting .size(4)
>>>   // SUGGESTION
>>>   defparam top.a3.size = WIDTH*2; //adder from default liblist
>>>  
>>>   //different RTLLib, used parameter setting from module,
>>>   //not changed by instantiation or configuration
>>>   instance top.a4 liblist diffRTLLib; //adder from other than 
>>> default liblist
>>>  
>>>   //different RTLLib, parameter is changed by instantiation 
>>> but not configuration
>>>   instance top.a5 liblist diffRTLLib; //adder from other than 
>>> default liblist
>>>  
>>>   //different rtl lib, overriding instantiated parameter 
>>> setting of .out(32)
>>>   instance top.a6 liblist diffRTLLib; //adder from other than 
>>> default liblist
>>>  
>>>   //parameter specified separately from instance library binding.
>>>   defparam top.a6.out = 8;
>>>  
>>> endconfig
>>>  
>>> Thank you,
>>> Saikat
>>>  
>>>  
>>> -----Original Message-----
>>> From: owner-sv-bc@eda.org <mailto:owner-sv-bc@eda.org> [mailto:owner-sv-bc@eda.org] On 
>>> Behalf Of Gordon Vreugdenhil
>>> Sent: Thursday, August 09, 2007 11:33 PM
>>> To: mills@lcdm-eng.com <mailto:mills@lcdm-eng.com>
>>> Cc: sv-bc@eda.org <mailto:sv-bc@eda.org>
>>> Subject: Re: [sv-bc] configurations and parameters
>>>  
>>> Don, your examples all use trivial overrides using literals.
>>>  
>>> Would you expect something like the following to work:
>>>  
>>>    module top ();
>>>      parameter WIDTH = 16;
>>>      adder a1 (...);
>>>    endmodule
>>>  
>>>    config cfgl;
>>>      design rtlLib.top;
>>>      instance top.a1 #(.size(WIDTH));
>>>    endconfig
>>>  
>>> It seems to me that such a use model would be required in 
>>> order to make this viable in practice.  I would expect such 
>>> scenarios to sort of behave like "bind" in terms of 
>>> resolution of provided actuals.
>>>  
>>> Of course restricting overrides to literals is much simpler 
>>> but I'm not sure that customers will be happy with that.  
>>> Allowing fully general constant expression overrides might be 
>>> difficult and slow implementation, but allowing at least an 
>>> association to another named parameter should probably be permitted.
>>>  
>>> As a second comment, I am not sure that I would agree that a 
>>> configuration parameter value *always* wins.  In particular, 
>>> as I mentioned in the meeting, I think that config parameters 
>>> should be handled as just a replacement instantiation override.
>>> The implication of this is that a defparam into "top.a1" 
>>> would win over the configured value.
>>>  
>>> Gord.
>>>  
>>> Don Mills wrote:
>>>       
>>>> As I discussed during the conference on Monday - I would like to 
>>>> pursue the enhancement of setting parameters via 
>>>>         
>>> configurations.  The 
>>>       
>>>> discussion on Monday noted that there are a number of 
>>>>         
>>> issues regarding 
>>>       
>>>> configurations that need to be addressed, with setting 
>>>>         
>>> parameters via 
>>>       
>>>> configurations being just one of many.  I was tasked 
>>>>         
>>> (volunteered) to 
>>>       
>>>> gather up the issue/wish list regarding configurations and 
>>>>         
>>> then start 
>>>       
>>>> working through it.  Based on the verbal discussion we had on 
>>>> configurations and the need to have all items resolved by Nov 1 in 
>>>> order to be part of the next 1800 spec, I see a large task 
>>>>         
>>> at hand.  I  
>>>       
>>>> feel we might have to take small steps - put some of the easier 
>>>> enhancements in now and add the rest in the next rev.  Of 
>>>>         
>>> course I am 
>>>       
>>>> just speculating at this point.
>>>>  
>>>> My enhancement request/proposal for configurations is to add the 
>>>> ability to set/modify parameters within a configuration.  I have 
>>>> pieced together some sample code that shows how I think 
>>>>         
>>> this could work.
>>>       
>>>> // Obviously, parameters set by configurations
>>>> //   must take precedent over instantiation parameter values.
>>>> // For this example, I assume that for models from different lib's,
>>>> //   the port list for each model are (must be?) identical.
>>>>  
>>>> module top ();
>>>>  //See configuration below for details of these instantiations.
>>>>  adder a1 (...);
>>>>  adder a2 (...);
>>>>  adder a3 #(.size(4)) (...);
>>>>  adder a4 (...);
>>>>  adder a5 #(.out(16)) (...);
>>>>  adder a6 #(.out(32)) (...);
>>>> endmodule // top
>>>>  
>>>> //file adder.v, default rtlLib
>>>> module adder #(parameter size = 12) (...);  // rtl adder  // 
>>>> description  ...
>>>> endmodule // adder
>>>>  
>>>>  
>>>> //file adder2.v, in diffRTLLib
>>>> module adder #(parameter out = 10) (...);
>>>>  // different rtl adder
>>>>  // description
>>>>  ...
>>>> endmodule // adder
>>>>  
>>>>  
>>>> //file adder.vg, in gateLib
>>>> module adder (...);
>>>>  // gate-level adder
>>>>  // description
>>>>  ...
>>>> endmodule // adder
>>>>  
>>>>  
>>>> //This configuration is very verbose for discussion purposes.
>>>> config cfgl;
>>>>  design rtlLib.top;
>>>>  default liblist rtlLIb;
>>>>  instance top.a2 liblist gateLib;
>>>>  
>>>>  //default default lib, override instantiated parameter 
>>>>         
>>> setting .size(4)
>>>       
>>>>  instance top.a3 #(.size(16)); //adder from default liblist
>>>>  
>>>>  //different RTLLib, used parameter setting from module,
>>>>  //not changed by instantiation or configuration
>>>>  instance top.a4 liblist diffRTLLib; //adder from other 
>>>>         
>>> than default 
>>>       
>>>> liblist
>>>>  
>>>>  //different RTLLib, parameter is changed by instantiation but not 
>>>> configuration  instance top.a5 liblist diffRTLLib; //adder 
>>>>         
>>> from other 
>>>       
>>>> than default liblist
>>>>  
>>>>  //different rtl lib, overriding instantiated parameter setting of
>>>>         
>>> .out(32)
>>>       
>>>>  instance top.a6 #(.out(8)) liblist diffRTLLib; //adder 
>>>>         
>>> from other than 
>>>       
>>>> default liblist
>>>>  
>>>> endconfig
>>>>  
>>>>  
>>>> -- 
>>>> ==========================================================
>>>> Don Mills
>>>> mills@lcdm-eng.com <mailto:mills@lcdm-eng.com>
>>>> www.lcdm-eng.com <http://www.lcdm-eng.com>
>>>> ==========================================================
>>>>  
>>>>  
>>>>         
>>> -- 
>>> --------------------------------------------------------------------
>>> Gordon Vreugdenhil                                503-685-0808
>>> Model Technology (Mentor Graphics)                gordonv@model.com <mailto:gordonv@model.com>
>>>  
>>>  
>>> -- 
>>> This message has been scanned for viruses and
>>> dangerous content by MailScanner, and is
>>> believed to be clean.
>>>  
>>>  
>>>  
>>>  
>>>  
>>>  
>>> -- 
>>> This message has been scanned for viruses and
>>> dangerous content by MailScanner, and is
>>> believed to be clean.
>>>  
>>>  
>>>       
>  
>   
>
>
>
> -- 
> ==========================================================
> Don Mills
> mills@lcdm-eng.com <mailto:mills@lcdm-eng.com>
> www.lcdm-eng.com <http://www.lcdm-eng.com>
> ==========================================================
>
> -- 
> This message has been scanned for viruses and
> dangerous content by *MailScanner* <http://www.mailscanner.info/>, and is
> believed to be clean. 

-- 
    Soli Deo Gloria
    Adam Krolnik
    Director of Design Verification
    VeriSilicon Inc.
    Plano TX. 75074
    Co-author "Assertion-Based Design"


-- 
This message has been scanned for viruses and
dangerous content by MailScanner, and is
believed to be clean.
Received on Fri Sep 14 08:08:30 2007

This archive was generated by hypermail 2.1.8 : Fri Sep 14 2007 - 08:08:56 PDT