URL
https://opencores.org/ocsvn/socgen/socgen/trunk
Subversion Repositories socgen
[/] [socgen/] [trunk/] [doc/] [src/] [guides/] [guide_database.html] - Rev 120
Go to most recent revision | Compare with Previous | Blame | View Log
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html> <head> <meta http-equiv="CONTENT-TYPE" content="text/html; charset=UTF-8"> <title>Design Database Management</title> <meta name="GENERATOR" content="OpenOffice.org 3.0 (Linux)"> <meta name="CREATED" content="0;0"> <meta name="CHANGED" content="20100309;9302100"> <meta name="KEYWORDS" content="start"> <meta name="Info 3" content=""> <meta name="Info 4" content=""> <meta name="date" content="2008-01-08T12:01:41-0500"> <meta name="robots" content="index,follow"> </head> <body dir="ltr" lang="en-US"> <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 from 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 inefficiencies that is inherent in handcrafting a design. <br> <br> <br> <br> <br> <br> <br> <h2><a name="manifesto"></a><font size="+2">Principles for Creating Reusable Design</font>s<br> </h2> <p><br> </p> <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> <br> <h2><font size="+1">Maintain the design<br> </font></h2> Releasing a chip to production is not the end of the job. You must still continue to maintain the design. You cannot archive a chip data base into offline storage and simply put it on the shelf. Do you really think that you can pull it down 20 years later and recreate the chip? Bit Rot is real. Even if you can read the bits off the magtape that you used to use then you will find that you can no longer get the same version of the tools that you used to build the chip. The original IC process will be long gone and the current ones have added new requirements that your code doesn't meet.<br> <br> When you finish a chip you archive an exact copy of all the data and freeze that forever. Your design then continues to live on. When you get a new version of a tool you rebuild and test everything and fix problems. As new processes come online you retarget the design to use them. As component ip is reved you upgrade and run the test suite.<br> <br> Then when your original product is winding down and someone wants a follow up product then you have a head start.<br> <br> <br> <h2><font><font size="+1">Design for the lowest common denominator</font></font></h2> Everybody loves to use some quirky little feature of the design target to squeeze a little extra performance 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 behavioral 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><br> </p> <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> <br> Quotes and Thoughts<br> ------------------<br> "Every piece of knowledge must have a single, unambiguous, authoritative representation within a system." From The Pragmatic Programmer<br> <br> <br> Not doing so makes it difficult to ensure that bug fixes and enhancements created by one user can be made available to all users. Every piece of data 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 Revision Control System 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.Never check a generated file in an RCS repository. They should only contain the minimal seed data needed to rebuild the entire design. It should never contain any files that were generated by the build process. <br> <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">.<br> <br> <br> </font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></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><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><font><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 file.</font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></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> "Unlike" is a deliberately nebulous 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 file and then use a tool to put them back together.<br> <br> <br> <h2></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">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></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></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></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>A full design will consist of several different databases that are layered. Upper ones may override any content from a lower layer. Requirements created by the Component Designers are only minimums, The Architects and Si-Makers are free to override and tighten any requirement from any lower level. Parameters should be used to give the downstream designers the ability to tune the design for the target process.<br> </p> <p><br> <br> </p> <br> <br> <br> <br> <br> <h2><a name="manifesto"></a>Design Directory<br> </h2> <p></p> <p></p> <br> <p><img style="width: 800px; height: 600px;" alt="" src="../png/data_fig1.png"><br> <br> </p> <p><br> <br> </p> <p><br> </p> <br> <p><br> </p> <h2>DOC<br> </h2> The documentation directory. <br> <br> <p><br> </p> <h2>TOOLS<br> </h2> <p>The tools directory contains all of the socgen tools needed to build , simulate and synthesize all of the systems and components in the database. Scripts and installation instructions are provided for any other opensource tools that may be required. There are also instructions for any proprietary tools that are used.<br> </p> <br> <br> <h2>LIB</h2> <p>A library is a collection of building blocks that may not be synthesizable in all target technologies and may require customizations. The use of lib parts in the rtl code will facilitate porting a component into different technologies.</p> <br> <h2>BENCH<br> </h2> <p>A testbench is used for all simulations and test suites. Any system or component may be simulated. Components can only do generic rtl sims while systems may do either generic rtl ,specific rtl or gate sims. Generic rtl models are included in the socgen library, specific ones must be obtained from the IC vendor.<br> </p> <p><br> </p> <br> <h2>TARGETS</h2> <p>A target is a specific physical design that can implement a component. Targets can be asic or fpga and include a Printed circuit board(PCB) that may include other electronic components. The goal for all components is to assign them to at least one target and prove that the work in silicon<br> </p> <p> </p> <p><br> </p> <p><br> </p> <p><br> <br> </p> <h2>WORK<br> </h2> <p>The work directory is a composite image of the projects directory plus any additional links needed for simulation and synthesis. All design processes are run in this directory and it contains all the generated files that are produced.<br> </p> <p><br> </p> <br> <p><br> <br> </p> <h2>PROJECTS</h2> <p>A project is a collection of components. A database must define at least one project to create an area where components may be stored. Other projects may be created as needed to group similar components together and reducing clutter. <br> </p> <p><br> <br> <br> <br> </p> <h2><a name="manifesto"></a>Project Directory<br> </h2> <p><br> <img style="width: 800px; height: 600px;" alt="" src="../png/data_fig2.png"><br> </p> <p></p> <br> <br> <p><br> <br> </p> <p><br> <br> </p> <h2>SW<br> </h2> <p>The sw directory contains the source files and build scripts for any bit images needed for the design<br> </p> <p><br> </p> <br> <h2>BIN<br> </h2> <p>A project is a collection o. <br> </p> <p><br> </p> <p><br> </p> <p><br> <br> </p> <h2>CHILDREN<br> </h2> <p>A project is a collection o. <br> </p> <p><br> <br> </p> <h2>IP<br> </h2> <p>A project is a collection o. <br> </p> <p><br> </p> <p><br> </p> <p><br> </p> <p><br> </p> <p><br> </p> <h2><a name="manifesto"></a>Component Directory</h2> <br> <br> <img style="width: 800px; height: 600px;" alt="" src="../png/data_fig3.png"><br> <br> <br> <br> <br> <br> <br> <p><br> </p> <h2>RTL<br> </h2> <p>A <br> </p> <h2><small>RTL</small><br> </h2> <p>A </p> <h2><small>RTL</small><br> </h2> <p>A </p> <br> <h2><small>RTL</small><br> </h2> <p>A </p> <h2><small>RTL</small><br> </h2> <p>A </p> <h2><small>RTL</small><br> </h2> <p>A </p> <p><br> </p> <p><br> </p> <p><br> <br> </p> <p><br> <br> </p> <h2>SIM<br> </h2> <p>A project is a collection o. </p> <p></p> <p><br> <br> </p> <p><br> </p> <h2>SYN<br> </h2> <p>A project is a collection o. <br> </p> <p><br> <br> </p> <h2>DOC<br> </h2> <p>A project is a collection o. </p> <p></p> <p><br> </p> <p><br> </p> <p><br> </p> </body> </html>
Go to most recent revision | Compare with Previous | Blame | View Log