From: Adam Krolnik (adamk@cyrix.com)
Date: Wed Apr 28 1999 - 09:14:32 PDT
Good morning Tom,
Here are some clarifications and extra considerations.
:>1. (2.1) Should the listing of files contained in a library be standardized?!
: Absolutely not. This is an implementation-specific decision and is a key
I'm an IP/library provider (E.g. I'm providing PCI slave models - synthesizable
and simulation model. or I'm a foundary providing a library of macro cells.)
Here's my library/design. Use the 'lib.map' file as the library mapping file.
You are now saying I have to have (like the PLI stuff) different files for
each vendor to map files into a library. The value added features you
provide will be lost in the fact that some engineer will have
to translate one file into another.
Instead, how about specifying (like we are doing for attributes) a
syntax for additional items in a lib.map. That way vendors can do additional
stuff if they wish and IP providers and users only need to deal with 1
library file.
<p>:>4. (2.1.1) What happens with multiple cells in a library with the same
cell name?
: The LAST cell encountered is written to the library. I've added this
Isn't this possibly covering up an error? What is the definition of
a duplicate cell? Same module name? Same module name and ports? Same module
name, ports and external parameters? We came across an anomaly where
we had a cell defined twice (in different library files) one with a
parameter (that we would override sometimes at instantiation) and one
without. Both library cells would get used depending on whether a
parameter was overidden. E.g.
module AND (y,a,b);
parameter WIDTH = 1;
input [WIDTH-1:0] a, b;
output [WIDTH-1:0] y;
assign y = a & b;
endmodule
...
//instantiate the gate.
AND #(2) a1(.y(dst[1:0]), .a(ds1[1:0]), .b({2{c}}));
AND a2(.y(e[1]), .a(dst[1]), .b(dst[0]));
:>6. (3.1) Recommend replacing 'selection_clause' and 'expansion_clause' with
Recommend replacing these clauses with this and documenting them:
config_rule_statement
::= default liblist [{library_identifier}]
| path inst_name liblist [{library_identifier}]
| path inst_name binding cell_selection
| cell cell_selection liblist [{library_identifier}]
| cell cell_selection binding cell_selection[:config]
cell_selection ::= [library_identifier.]cell_identifier
I continually refer from one to the other to understand what's going on. This
coupled with the restrictions on only this with that makes it difficult to see
what you can specifiy.
:>1. What about include paths: for a configuration? for a library?
: Not sure what you mean by "include path". Configurations themselves reside
I mean +incdir+
IP and libraries include files in their source files. There is no way
to specify where to find these include files. E.g.
% ls ackPCIlib
pcislave.cfg
io.v
fsm.v
constants.h
queue.v
lib.map
% egrep include ackPCIlib/*.v
io.v: `include "constants.h"
fsm.v: `include "constants.h"
If I produce IP, I want to specify where my include files are located. How
do I do this - say if they are in a separate directory from other source files?
If I produce a library, how do I specify where my specific include files are
located - I also don't want others to get my include files if they happen
to have a file named similarly.
:>2. What `timescale will a module inherit when compiled into a library
Right now everything works because if you specify 1 timescale, it needs
to be set in all files, or set by the first file read in. When you
compile a library of files this rule will no longer work! Every file
compiled into a library would then need to have a `timescale specified.
Otherwise I bet people will have problems. Then to make it easy
to change timescales, people should include 1 common definition hence
we have a need for being able to specify where to get include files
from.
:>3. What happens with conflicting `defparam statements when compiled into
Our language for conflicting defparam statements states that the last
one read in will take precedence over the others. With unordered files
from a library I can potentially see problems where 1 day the 'last
defparam read' will switch around start doing something else.
:>4. What about +define+SYMBOL values for a configuration?
The problem I see is that we're pitching configuration files/libraries as
a way to package files/IP for use by others. Preprocessor definitions
are used today to provide options, different operation, different
internal configurations. I think there should be some way to provide
a definition so a user can refer to a specific configuration and
override definitions that they wish to change.
This idea is in keeping with the Object oriented programming model. A default
or standard set of things are provided. You are able to alter defaults or
add extra stuff and still refer to the original items without having to copy
code and rename everything.
This is why hierarchical configurations are nice. One can define a configuration
of a specific piece and have that be utilized at another level to refer to
the entire object instead of (like it is today) referring to all its
component pieces. Being able to override something in a hierarchical
configuration without having to copy/rename or modify an existing one
is in keeping with this new programming model.
<p><p><p> Adam Krolnik
Verification Engineer
Cyrix - NSC.
Richardson TX. 75085
This archive was generated by hypermail 2.1.4
: Mon Jul 08 2002 - 12:53:26 PDT
and
sponsored by Boyd Technology, Inc.