OpenCores
URL https://opencores.org/ocsvn/socgen/socgen/trunk

Subversion Repositories socgen

[/] [socgen/] [trunk/] [doc/] [src/] [guides/] [guide_database.html] - Diff between revs 27 and 49

Go to most recent revision | Show entire file | Details | Blame | View Log

Rev 27 Rev 49
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&nbsp; components created by a variety of sources. It will
 
show how to create a component that can be reused and provides&nbsp; a
 
free opensourced tool set&nbsp; 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>&nbsp;&nbsp; <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.&nbsp; <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.&nbsp; 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&nbsp; 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&nbsp; 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>

powered by: WebSVN 2.1.0

© copyright 1999-2025 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.