Line 16... |
Line 16... |
<div id="toc__header" dir="ltr">
|
<div id="toc__header" dir="ltr">
|
<p><br>
|
<p><br>
|
<br>
|
<br>
|
</p>
|
</p>
|
</div>
|
</div>
|
<h1><a name="socgen_project"></a>SOCGEN Project</h1>
|
<h1><a name="socgen_project"></a><font size="+3">SOCGEN Project</font></h1>
|
<h2><a name="manifesto"></a>Database Guidelines</h2>
|
<h2><br>
|
|
</h2>
|
|
The mission of the SOCGEN project is to provide a blueprint showing
|
|
digital designers how to create a System_on_chip (SOC) by
|
|
assembling components created by a variety of sources. It will
|
|
show how to create a component that can be reused and provides a
|
|
free opensourced tool set that can be used to assemble and verify
|
|
a design. It employs modern design for reuse techniques to reduce the
|
|
waste and ineffiencies that is inherent in handcrafting a design<br>
|
|
<br>
|
|
<br>
|
|
<br>
|
|
<br>
|
|
<br>
|
|
<br>
|
|
<h2><a name="manifesto"></a><font size="+2">Principles for Reusable
|
|
design</font><br>
|
|
</h2>
|
<p><br>
|
<p><br>
|
</p>
|
</p>
|
<p>Have a backup plan</p>
|
|
<p> <br>
|
|
<br>
|
<br>
|
|
<h2><font size="+1">Plan ahead<br>
|
|
</font></h2>
|
|
You may start a design with the intent that it is only going to be used
|
|
for one specific purpose only to find out later that other designers
|
|
want to use it. Create all designs with the intent that they will be
|
|
reused in ways that you haven't imagined and you won't have to scramble
|
|
later. <br>
|
|
<br>
|
|
<h2><font><font size="+1">Design for the lowest common demoninator</font></font></h2>
|
|
Everybody loves to use some quirky little feature of the design target
|
|
to squeeze a little extra preformance out of the system. But if you do
|
|
then you are locked into that target and cannot easily reuse the design
|
|
on a different target. Why do you think they put those features in the
|
|
first place? Instead you should survey the field and only use the
|
|
features that all target technologies can match<br>
|
|
<br>
|
|
<br>
|
|
<h2><font><font><font><font size="+1">Design in a completely generic
|
|
technology<br>
|
|
</font></font></font></font></h2>
|
|
Design is a two step process. First the design is created and verified
|
|
in a completely generic behaverioral RTL format and then converted into
|
|
the target technology. It is tempting to try to save time be designing
|
|
in the target technology but this will make it harder to reuse.<br>
|
|
<br>
|
|
<br>
|
|
<h2><font><font><font><font><font><font><font><font size="+1">Automate
|
|
Everything</font></font></font></font></font></font></font></font><br>
|
|
</h2>
|
|
<p>
|
|
Handcrafting a design file is a time consuming and error prone
|
|
operation. Tasks that are preformed on every design should be done by a
|
|
tool. The designers job is to create the configuration files
|
|
needed by the tools and let automation do all the work.<br>
|
</p>
|
</p>
|
<p>Plan ahead and allow for the worst case configurations</p>
|
|
<p>Design for the lowest common denominator.</p>
|
|
<p>Design first for a completely generic target and then retarget for
|
|
the correct one.</p>
|
|
<p>Store only the seed data needed to generate the database ( keep it
|
|
small and easy to manage)</p>
|
|
<p>Do not check generated files into the database ( generation must
|
|
not change the database)</p>
|
|
<p>Do not copy data. Every object has one and one one storage
|
|
location</p>
|
|
<p>Do not mix unlike objects in the same container. </p>
|
|
<p>Store the databases by their source and not by where they are
|
|
used. Use links to get them to where they are needed</p>
|
|
<p>A full design will consist of several different databases that are
|
|
layered. Upper ones may override any content from a lower layer</p>
|
|
<p><br>
|
<p><br>
|
|
</p>
|
|
<h2><font><font><font><font><font><font><font><font size="+1">Never
|
|
Check Generated Files into a Database</font></font></font></font></font></font></font></font></h2>
|
|
The Revision Control System (RCS) that contains the design should only
|
|
contain the minimul seed data needed to rebuild the entire design. It
|
|
should never contain any files that were generated by the build
|
|
process. <br>
|
|
<br>
|
|
<h2><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font
|
|
size="+1">Do not keep duplicate copies of a file in the database</font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></h2>
|
|
Doing so makes it difficult to ensure that bug fixes and enhancements
|
|
created by one user can be made available to all users. Every file
|
|
should have one and only one location in the database<br>
|
<br>
|
<br>
|
|
<h2><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font
|
|
size="+1">Do not build the design inside of an RCS database.</font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></h2>
|
|
It is really hard to keep track of all the new files that you have
|
|
added that you need to check into the RCS if they are buried by
|
|
gigabytes of generated files from the build process. Use symbolic links
|
|
to create a work area where generated files are kept outside the
|
|
database.<br>
|
|
<br>
|
|
<p>
|
|
</p>
|
|
<p></p>
|
|
<h2><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font
|
|
size="+1">Store files based on their source and not their use.</font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></h2>
|
|
Are you creating a chip using IP from Joe's IP Emporium? Why not create
|
|
a spot inside your chip database for Joes files? Because that is not
|
|
planning ahead. Later if your lab starts another chip that also uses
|
|
Joes IP then they will also need access to those files. Create a spot
|
|
for files where everybody can simply access them by linking the desired
|
|
files into there database<font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font
|
|
size="+1">.</font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font>
|
|
<p></p>
|
|
<h2><br>
|
|
</h2>
|
|
<h2><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font
|
|
size="+1">Do not mix unlike objects in the same container.</font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></h2>
|
|
<p>"Unlike" is a delibertely nebulious term. It can mean anything and
|
|
everything. If you have a instance of a hard macro that is
|
|
unsynthesizable then do not put it in a file along with synthesisable
|
|
rtl code. If you have code belonging to one designer then do not mix it
|
|
with code belonging to another. If you do then you have to worry about
|
|
file locking. Fragment the design so that each object is in it's own
|
|
container and then use a tool to put them back together.<br>
|
|
</p>
|
|
<br>
|
|
<br>
|
|
<h2><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font>Layer
|
|
the
|
|
design.</font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></h2>
|
|
<p>A full design will consist of several different databases that are
|
|
layered. Upper ones may override any content from a lower layer<br>
|
</p>
|
</p>
|
<p><br>
|
<p><br>
|
<br>
|
<br>
|
</p>
|
</p>
|
|
<br>
|
|
<br>
|
|
<br>
|
|
<h2><a name="manifesto"></a>Database Guidelines</h2>
|
|
<p></p>
|
|
<p></p>
|
|
<br>
|
<p><img style="width: 800px; height: 600px;" alt=""
|
<p><img style="width: 800px; height: 600px;" alt=""
|
src="../png/data_fig1.png"><br>
|
src="../png/data_fig1.png"><br>
|
<br>
|
<br>
|
</p>
|
</p>
|
<p><br>
|
<p><br>
|