URL
https://opencores.org/ocsvn/socgen/socgen/trunk
Subversion Repositories socgen
Compare Revisions
- This comparison shows the changes necessary to convert path
/socgen/trunk/doc/src/guides
- from Rev 28 to Rev 49
- ↔ Reverse comparison
Rev 28 → Rev 49
/guide_database.html
18,35 → 18,129
<br> |
</p> |
</div> |
<h1><a name="socgen_project"></a>SOCGEN Project</h1> |
<h2><a name="manifesto"></a>Database Guidelines</h2> |
<h1><a name="socgen_project"></a><font size="+3">SOCGEN Project</font></h1> |
<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> |
<p>Have a backup plan</p> |
<p> <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>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> |
<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> |
<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><br> |
<br> |
</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="" |
src="../png/data_fig1.png"><br> |
<br> |