1135 lines
61 KiB
HTML
1135 lines
61 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
<meta name="description" content="Printable Version of this Document Alliance Check Toolkit. Contents Printable Version of this Document Toolkit Purpose Release Notes Toolkit Contents Toolkit Layout Benchmark Makefiles Setting Up...">
|
|
<meta name="keywords" content="">
|
|
<link rel="icon" href="../favicon.ico">
|
|
|
|
<title>Alliance Check Toolkit - Coriolis VLSI CAD Tools [offline]</title>
|
|
|
|
<!-- Stylesheets -->
|
|
<link href="../theme/css/bootstrap.css" rel="stylesheet">
|
|
<link href="../theme/css/fonts.css" rel="stylesheet">
|
|
<link href="../theme/css/nest.css" rel="stylesheet">
|
|
<link href="../theme/css/pygment.css" rel="stylesheet">
|
|
<link href="../theme/css/coriolis.css" rel="stylesheet">
|
|
<!-- /Stylesheets -->
|
|
|
|
<script src="../theme/js/jquery.min.js"></script>
|
|
<script src="../theme/js/bootstrap.min.js"></script>
|
|
|
|
<!-- RSS Feeds -->
|
|
<!-- /RSS Feeds -->
|
|
|
|
<!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
|
|
<!--[if lt IE 9]>
|
|
<script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
|
|
<script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
|
|
<![endif]-->
|
|
|
|
|
|
|
|
</head>
|
|
|
|
<body>
|
|
<!-- Header -->
|
|
<div class="header-container" style="background: linear-gradient(rgba(0, 0, 0, 0.2), rgba(0, 0, 0, 0.2)), url('../images/common/layout-motif-faded-4.png'); background-position: center; ">
|
|
|
|
|
|
<!--
|
|
<div class="container">
|
|
<nav class="navbar navbar-default">
|
|
<div class="container-fluid">
|
|
<div class="navbar-header">
|
|
<a class="navbar-brand" href="../"><img class="mr20" src="../images/common/Coriolis-logo-white-4-small.png" alt="logo">Coriolis VLSI CAD Tools [offline]</a>
|
|
</div>
|
|
<ul class="nav navbar-nav">
|
|
<li><a href="../pages/gitlab.html">Git</a></li>
|
|
<li><a href="../pages/documentation.html">Documentation</a></li>
|
|
<li class="dropdown">
|
|
<button class="btn btn-default dropdown-toggle" type="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="true">
|
|
<span class="caret"></span>Topics
|
|
</button>
|
|
<ul class="dropdown-menu">
|
|
<li><a class="dropdown-item " href="../pages/homepage.html">Coriolis <span class="sc">vlsi</span> Backend Tools</a></li>
|
|
<li><a class="dropdown-item " href="../pages/symbolic-layout.html">Symbolic Layout</a></li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
</div>
|
|
</nav>
|
|
</div> <!-- navbar container -->
|
|
-->
|
|
|
|
<!-- Static navbar -->
|
|
<div class="container">
|
|
<div class="header-nav">
|
|
<div class="header-logo">
|
|
<a class="pull-left" href="../"><img class="mr20" src="../images/common/Coriolis-logo-white-4-small.png" alt="logo">Coriolis VLSI CAD Tools [offline]</a>
|
|
</div>
|
|
<div class="nav pull-right">
|
|
<a href="../pages/gitlab.html">Git</a>
|
|
<a href="../pages/documentation.html">Documentation</a>
|
|
</div>
|
|
<div class="nav pull-right">
|
|
<div class="dropdown">
|
|
<button class="btn btn-default dropdown-toggle" type="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="true">
|
|
<span class="caret"></span>Topics
|
|
</button>
|
|
<ul class="dropdown-menu">
|
|
<li><a class="dropdown-item " href="../pages/homepage.html">Coriolis <span class="sc">vlsi</span> Backend Tools</a></li>
|
|
<li><a class="dropdown-item " href="../pages/symbolic-layout.html">Symbolic Layout</a></li>
|
|
</ul>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<!-- /Static navbar -->
|
|
|
|
<!-- Header -->
|
|
<div class="container header-wrapper">
|
|
<div class="row">
|
|
<div class="col-lg-12">
|
|
<div class="header-content">
|
|
<a href="https://www.lip6.fr/"><img class="mr20" height="60px" src="../images/common/LogoLIP6Blanc.png" alt="LIP6"></a>
|
|
<a href="https://www.sorbonne-universite.fr/"><img class="mr20" height="60px" src="../images/common/logo-SU-blanc-700px.png" alt="Sorbonne Universite"></a>
|
|
<a href="https://www.cnrs.fr/"><img class="mr20" height="60px" src="../images/common/LOGO-cnrs-white-large.png" alt="CNRS"></a>
|
|
<h1 class="header-title text-uppercase">Alliance Check Toolkit</h1>
|
|
<div class="header-underline"></div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<!-- /Header -->
|
|
|
|
</div>
|
|
<!-- /Header -->
|
|
|
|
|
|
<!-- Content -->
|
|
<div class="container content">
|
|
<!-- -*- Mode: rst -*- -->
|
|
<!-- URLs that changes between the various backends. -->
|
|
<div class="section" id="printable-version-of-this-document">
|
|
<h2><a class="toc-backref" href="#id3">Printable Version of this Document</a></h2>
|
|
<p><a class="reference external" href="../pdfs/CheckToolkit.pdf">Alliance Check Toolkit</a>.</p>
|
|
<div class="contents topic" id="contents">
|
|
<p class="topic-title">Contents</p>
|
|
<ul class="simple">
|
|
<li><a class="reference internal" href="#printable-version-of-this-document" id="id3">Printable Version of this Document</a></li>
|
|
<li><a class="reference internal" href="#toolkit-purpose" id="id4">Toolkit Purpose</a></li>
|
|
<li><a class="reference internal" href="#release-notes" id="id5">Release Notes</a></li>
|
|
<li><a class="reference internal" href="#toolkit-contents" id="id6">Toolkit Contents</a></li>
|
|
<li><a class="reference internal" href="#toolkit-layout" id="id7">Toolkit Layout</a></li>
|
|
<li><a class="reference internal" href="#benchmark-makefiles" id="id8">Benchmark Makefiles</a></li>
|
|
<li><a class="reference internal" href="#setting-up-the-user-s-environement" id="id9">Setting Up the User's Environement</a></li>
|
|
<li><a class="reference internal" href="#benchmarks-special-notes" id="id10">Benchmarks Special Notes</a></li>
|
|
<li><a class="reference internal" href="#libraries-makefiles" id="id11">Libraries Makefiles</a></li>
|
|
<li><a class="reference internal" href="#macro-blocks-makefiles" id="id12">Macro-Blocks Makefiles</a></li>
|
|
<li><a class="reference internal" href="#tools-scripts" id="id13">Tools & Scripts</a></li>
|
|
<li><a class="reference internal" href="#cadence-support" id="id14"><span class="sc">Cadence</span> Support</a></li>
|
|
<li><a class="reference internal" href="#technologies" id="id15">Technologies</a></li>
|
|
</ul>
|
|
</div>
|
|
<!-- -*- Mode: rst; explicit-buffer-name: "definition.rst<documentation/etc>" -*- -->
|
|
<!-- HTML/LaTeX backends mixed macros. -->
|
|
<!-- Acronyms & names. -->
|
|
<!-- URLs -->
|
|
<!-- Standard CAO/VLSI Concepts. -->
|
|
<!-- Alliance & MBK Concepts -->
|
|
<!-- Hurricane Concepts. -->
|
|
<!-- -*- Mode: rst -*- -->
|
|
<!-- Acronyms & Names -->
|
|
</div>
|
|
<div class="section" id="toolkit-purpose">
|
|
<h2><a class="toc-backref" href="#id4">Toolkit Purpose</a></h2>
|
|
<p>This toolkit has been created to allow developpers to share through <span class="cb">git</span> a set
|
|
of benchmarks to validate their changes in <span class="sc">Alliance</span> & <span class="sc">Coriolis</span> before commiting
|
|
and pushing them in their central repositories. A change will be considered as
|
|
validated when all the developpers can run successfully all the benchs in their
|
|
respective environments.</p>
|
|
<p>As a consequence, this repository is likely to be <em>very</em> unstable and the commits
|
|
not well documenteds as they will be quick corrections made by the developpers.</p>
|
|
</div>
|
|
<div class="section" id="release-notes">
|
|
<h2><a class="toc-backref" href="#id5">Release Notes</a></h2>
|
|
<div class="section" id="august-30-2019">
|
|
<h3>August 30, 2019</h3>
|
|
<p><span class="sc">Katana</span> is now used as the default router. It can now manage a complete chip design
|
|
with I/O pads. As a consequence, the <span class="cb">Makefile</span> are all modificated, the variable
|
|
<tt class="docutils literal">USE_KATANA=Yes</tt> is changed to <tt class="docutils literal">USE_KITE=No</tt> (see <a class="reference internal" href="#benchmark-makefiles">Benchmark Makefiles</a>).</p>
|
|
<p>Designs with I/O pads are also modificated to be processed by <span class="sc">Katana</span> as it uses
|
|
a different approach.</p>
|
|
<p></p>
|
|
</div>
|
|
</div>
|
|
<div class="section" id="toolkit-contents">
|
|
<h2><a class="toc-backref" href="#id6">Toolkit Contents</a></h2>
|
|
<p>The toolkit provides:</p>
|
|
<ul class="simple">
|
|
<li><strong>OK Status.</strong> A set of eight benchmark designs that are used as regression tests (see <a class="reference internal" href="#go-sh">go.sh</a>).
|
|
Benchmarks with multiple target technologies still count as one.</li>
|
|
<li><strong>KO Status.</strong> Examples that currently fails due to incomplete or poorly implemenented
|
|
features of <span class="sc">Coriolis</span>.</li>
|
|
<li><strong>Unchecked.</strong> Non-fonctional examples, or really too long to run for a regression test.</li>
|
|
</ul>
|
|
<table class="table">
|
|
<colgroup>
|
|
<col width="28%" />
|
|
<col width="25%" />
|
|
<col width="37%" />
|
|
<col width="10%" />
|
|
</colgroup>
|
|
<thead valign="bottom">
|
|
<tr><th class="head">Design</th>
|
|
<th class="head">Technology</th>
|
|
<th class="head">Cell Libraries</th>
|
|
<th class="head">Status</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody valign="top">
|
|
<tr><td><tt class="docutils literal">adder</tt></td>
|
|
<td><span class="sc">mosis</span></td>
|
|
<td><tt class="docutils literal">nsxlib</tt>, <tt class="docutils literal">mpxlib</tt>, <tt class="docutils literal">msplib</tt></td>
|
|
<td>Unchecked</td>
|
|
</tr>
|
|
<tr><td><span class="sc">am2901</span> (standard cells)</td>
|
|
<td>Symbolic cmos</td>
|
|
<td><tt class="docutils literal">sxlib</tt>, <tt class="docutils literal">pxlib</tt></td>
|
|
<td>OK</td>
|
|
</tr>
|
|
<tr><td><span class="sc">am2901</span> (datapath)</td>
|
|
<td>Symbolic cmos</td>
|
|
<td><tt class="docutils literal">sxlib</tt>, <tt class="docutils literal">dp_sxlib</tt>, <tt class="docutils literal">pxlib</tt></td>
|
|
<td>OK</td>
|
|
</tr>
|
|
<tr><td><tt class="docutils literal"><span class="pre">alliance-run</span></tt> (<span class="sc">am2901</span>)</td>
|
|
<td>Symbolic cmos</td>
|
|
<td><tt class="docutils literal">sxlib</tt>, <tt class="docutils literal">dp_sxlib</tt>, <tt class="docutils literal">padlib</tt></td>
|
|
<td>Unchecked</td>
|
|
</tr>
|
|
<tr><td><tt class="docutils literal">RingOscillator</tt></td>
|
|
<td>Symbolic cmos</td>
|
|
<td><tt class="docutils literal">sxlib</tt></td>
|
|
<td>OK</td>
|
|
</tr>
|
|
<tr><td><span class="sc">cpu</span></td>
|
|
<td><span class="sc">mosis</span></td>
|
|
<td><tt class="docutils literal">nsxlib</tt>, <tt class="docutils literal">mpxlib</tt>, <tt class="docutils literal">msplib</tt></td>
|
|
<td>OK</td>
|
|
</tr>
|
|
<tr><td colspan="4"><strong>SNX</strong></td>
|
|
</tr>
|
|
<tr><td><span class="sc">snx</span> / Alliance</td>
|
|
<td>Symbolic cmos</td>
|
|
<td><tt class="docutils literal">sclib</tt></td>
|
|
<td>Unchecked</td>
|
|
</tr>
|
|
<tr><td><span class="sc">snx</span> / sxlib2M</td>
|
|
<td>Symbolic cmos 2M</td>
|
|
<td><tt class="docutils literal">sxlib</tt></td>
|
|
<td>OK</td>
|
|
</tr>
|
|
<tr><td><span class="sc">snx</span> / cmos</td>
|
|
<td>Symbolic cmos</td>
|
|
<td><tt class="docutils literal">sxlib</tt>, <tt class="docutils literal">pxlib</tt></td>
|
|
<td>OK</td>
|
|
</tr>
|
|
<tr><td><span class="sc">snx</span> / cmos45</td>
|
|
<td>Symbolic cmos 45</td>
|
|
<td><tt class="docutils literal">nsxlib</tt>, <tt class="docutils literal">mpxlib</tt></td>
|
|
<td>OK</td>
|
|
</tr>
|
|
<tr><td><span class="sc">snx</span> / FreePDK_45</td>
|
|
<td>FreePDK 45</td>
|
|
<td><tt class="docutils literal">gscl45</tt></td>
|
|
<td>OK</td>
|
|
</tr>
|
|
<tr><td><span class="sc">snx</span> / c35b4</td>
|
|
<td>AMS 350nm c35b4</td>
|
|
<td><tt class="docutils literal">corelib</tt></td>
|
|
<td>KO</td>
|
|
</tr>
|
|
<tr><td colspan="4"><strong>6502</strong></td>
|
|
</tr>
|
|
<tr><td><span class="sc">6502</span> / cmos45</td>
|
|
<td>Symbolic cmos 45</td>
|
|
<td><tt class="docutils literal">nsxlib</tt></td>
|
|
<td>OK</td>
|
|
</tr>
|
|
<tr><td><span class="sc">Arlet6502</span> / cmos350</td>
|
|
<td>Symbolic cmos 45</td>
|
|
<td><tt class="docutils literal">nsxlib</tt></td>
|
|
<td>OK</td>
|
|
</tr>
|
|
<tr><td colspan="4"><strong>MIPS</strong></td>
|
|
</tr>
|
|
<tr><td><span class="sc">mips</span> (microprogrammed)</td>
|
|
<td>Symbolic cmos</td>
|
|
<td><tt class="docutils literal">sxlib</tt>, <tt class="docutils literal">dp_sxlib</tt>, <tt class="docutils literal">rf2lib</tt></td>
|
|
<td>OK</td>
|
|
</tr>
|
|
<tr><td><span class="sc">mips</span> (pipeline)</td>
|
|
<td>Symbolic cmos</td>
|
|
<td><tt class="docutils literal">sxlib</tt>, <tt class="docutils literal">dp_sxlib</tt>, <tt class="docutils literal">rf2lib</tt></td>
|
|
<td>OK</td>
|
|
</tr>
|
|
<tr><td><span class="sc">mips</span> (pipeline+chip)</td>
|
|
<td>Symbolic cmos</td>
|
|
<td><tt class="docutils literal">sxlib</tt>, <tt class="docutils literal">dp_sxlib</tt>, <tt class="docutils literal">rf2lib</tt>, <tt class="docutils literal">pxlib</tt></td>
|
|
<td>Unchecked</td>
|
|
</tr>
|
|
<tr><td colspan="4"><strong>Miscellaneous</strong></td>
|
|
</tr>
|
|
<tr><td><span class="sc">fpga</span> (<tt class="docutils literal">Moc4x4_L4C12</tt>)</td>
|
|
<td>Symbolic cmos</td>
|
|
<td><tt class="docutils literal">sxlib</tt></td>
|
|
<td>KO</td>
|
|
</tr>
|
|
<tr><td><span class="sc">ispd05</span> (<tt class="docutils literal">bigblue1</tt>)</td>
|
|
<td>None</td>
|
|
<td>Generated on the fly</td>
|
|
<td>Unchecked</td>
|
|
</tr>
|
|
<tr><td><span class="sc">ARMv2a</span></td>
|
|
<td>Symbolic cmos</td>
|
|
<td><tt class="docutils literal">sxlib</tt>, <tt class="docutils literal">pxlib</tt></td>
|
|
<td>OK</td>
|
|
</tr>
|
|
<tr><td colspan="4"><strong>Vex RISC-V</strong></td>
|
|
</tr>
|
|
<tr><td><span class="sc">VexRiscV</span> / cmos</td>
|
|
<td>Symbolic cmos</td>
|
|
<td><tt class="docutils literal">sxlib</tt>, <tt class="docutils literal">pxlib</tt></td>
|
|
<td>OK</td>
|
|
</tr>
|
|
<tr><td><span class="sc">VexRiscV</span> / cmos45</td>
|
|
<td>Symbolic cmos 45</td>
|
|
<td><tt class="docutils literal">nsxlib</tt>, <tt class="docutils literal">mpxlib</tt></td>
|
|
<td>OK</td>
|
|
</tr>
|
|
<tr><td><span class="sc">VexRiscV</span> / FreePDK_45</td>
|
|
<td>FreePDK 45</td>
|
|
<td><tt class="docutils literal">gscl45</tt></td>
|
|
<td>KO</td>
|
|
</tr>
|
|
<tr><td><span class="sc">VexRiscV</span> / c35b4</td>
|
|
<td>AMS 350nm c35b4</td>
|
|
<td><tt class="docutils literal">corelib</tt></td>
|
|
<td>KO</td>
|
|
</tr>
|
|
<tr><td colspan="4"><strong>nMigen basic ALU example</strong></td>
|
|
</tr>
|
|
<tr><td><span class="sc">alu</span> / scn6m_deep_09</td>
|
|
<td><span class="sc">mosis</span></td>
|
|
<td><tt class="docutils literal">nsxlib</tt></td>
|
|
<td>Unchecked</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<p></p>
|
|
<ul>
|
|
<li><p class="first">The <span class="sc">nMigen</span> design is the basic <span class="sc">alu</span> taken from the distribution to perform
|
|
integration test in the design flow. The target technology is the <span class="sc">mosis</span> 180nm
|
|
(<tt class="docutils literal">scn6m_deep</tt>).</p>
|
|
</li>
|
|
<li><p class="first">The <span class="sc">Arlet6502</span> is taken from <a class="reference external" href="https://github.com/Arlet/verilog-6502">Arlet's MOS 6502 core</a> and is routed using the
|
|
four metal symbolic technology (so the router has three availables).</p>
|
|
</li>
|
|
<li><p class="first">Three cell libraries.</p>
|
|
<p>All thoses libraries are for use with <span class="sc">mosis</span> and <span class="sc">FreePDK45</span> technologies.
|
|
We provides them as part of the toolkit as we are still in the process of validating
|
|
that technology, and we may have to perform quick fixes on them. The design are
|
|
configured to use them instead of those supplied by the <span class="sc">Alliance</span> installation.</p>
|
|
<ol class="arabic simple">
|
|
<li><tt class="docutils literal">nsxlib</tt> : Standard Cell library, compliant with <span class="sc">mosis</span>.</li>
|
|
<li><tt class="docutils literal">mpxlib</tt> : Pad library, compliant with <span class="sc">Coriolis</span>.</li>
|
|
<li><tt class="docutils literal">msplib</tt> : Pad library, compliant with <span class="sc">Alliance</span> / <tt class="docutils literal">ring</tt>. Cells in this
|
|
library are <em>wrappers</em> around their counterpart in <tt class="docutils literal">mpxlib</tt>, they provides
|
|
an outer layout shell that is usable by <tt class="docutils literal">ring</tt>.</li>
|
|
</ol>
|
|
</li>
|
|
<li><p class="first">The <span class="sc">rds</span> files for <span class="sc">mosis</span> (<tt class="docutils literal">scn6m_deep_09.rds</tt>) and <span class="sc">FreePDK45</span> technologies,
|
|
for the same reason as the cell libraries.</p>
|
|
</li>
|
|
<li><p class="first">Miscellenous helper scripts.</p>
|
|
</li>
|
|
</ul>
|
|
</div>
|
|
<div class="section" id="toolkit-layout">
|
|
<h2><a class="toc-backref" href="#id7">Toolkit Layout</a></h2>
|
|
<p>The files are organized as follow :</p>
|
|
<table class="table">
|
|
<colgroup>
|
|
<col width="44%" />
|
|
<col width="56%" />
|
|
</colgroup>
|
|
<thead valign="bottom">
|
|
<tr><th class="head">Directory</th>
|
|
<th class="head">Contents</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody valign="top">
|
|
<tr><td><tt class="docutils literal">./etc/</tt></td>
|
|
<td>Configuration files</td>
|
|
</tr>
|
|
<tr><td><tt class="docutils literal">./etc/mk/</tt></td>
|
|
<td>Makefiles rules to build benchmarks. This directory
|
|
must be symbolic linked into each benchmark directory</td>
|
|
</tr>
|
|
<tr><td><tt class="docutils literal">./etc/mk/users.d/</tt></td>
|
|
<td>Directory holding the configuration for each user</td>
|
|
</tr>
|
|
<tr><td><tt class="docutils literal">./bin/</tt></td>
|
|
<td>Additionnal scripts</td>
|
|
</tr>
|
|
<tr><td><tt class="docutils literal"><span class="pre">./cells/<LIBDIR></span></tt></td>
|
|
<td>Standard cells libraries.</td>
|
|
</tr>
|
|
<tr><td><tt class="docutils literal"><span class="pre">./benchs/<BENCH>/<techno>/</span></tt></td>
|
|
<td>Benchmark directories</td>
|
|
</tr>
|
|
<tr><td><tt class="docutils literal">./doc/</tt></td>
|
|
<td>This documentation directory</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<p></p>
|
|
</div>
|
|
<div class="section" id="benchmark-makefiles">
|
|
<h2><a class="toc-backref" href="#id8">Benchmark Makefiles</a></h2>
|
|
<p>A benchmark <span class="cb">Makefile</span> is build by setting up variables <tt class="docutils literal"><span class="pre">USE_<FEATURE>=Yes/No</span></tt>
|
|
then including the set of rules <tt class="docutils literal"><span class="pre">./mk/design-flow.mk</span></tt>. The directory
|
|
<tt class="docutils literal"><span class="pre">alliance-check-toolkit/etc/mk/</span></tt> must be symlinked in the directory where the
|
|
<span class="cb">Makefile</span> resides.</p>
|
|
<p>The <span class="cb">Makefile</span> provides some or all of the following targets. If the place
|
|
and route stage of a benchmark has multiple target technology, one directory
|
|
is created for each.</p>
|
|
<table class="table">
|
|
<colgroup>
|
|
<col width="14%" />
|
|
<col width="22%" />
|
|
<col width="64%" />
|
|
</colgroup>
|
|
<tbody valign="top">
|
|
<tr><td rowspan="9"><span class="sc">Coriolis</span></td>
|
|
<td><tt class="docutils literal">blif</tt></td>
|
|
<td>Synthetize the netlist with <tt class="docutils literal">Yosys</tt>.</td>
|
|
</tr>
|
|
<tr><td><em>layout</em></td>
|
|
<td>The complete symbolic layout of the design (P&R).</td>
|
|
</tr>
|
|
<tr><td><tt class="docutils literal">gds</tt></td>
|
|
<td>Generate the real layout (<span class="sc">gdsii</span>)</td>
|
|
</tr>
|
|
<tr><td><tt class="docutils literal">druc</tt></td>
|
|
<td>Symbolic layout checking</td>
|
|
</tr>
|
|
<tr><td><tt class="docutils literal">lvx</tt></td>
|
|
<td>Perform <span class="sc">lvs</span>.</td>
|
|
</tr>
|
|
<tr><td><tt class="docutils literal">graal</tt></td>
|
|
<td>Launch <tt class="docutils literal">graal</tt> in the <span class="cb">Makefile</span> 's environement</td>
|
|
</tr>
|
|
<tr><td><tt class="docutils literal">dreal</tt></td>
|
|
<td>Launch <tt class="docutils literal">dreal</tt> in the <span class="cb">Makefile</span> 's environement, and load
|
|
the <tt class="docutils literal">gds</tt> file of the design.</td>
|
|
</tr>
|
|
<tr><td><tt class="docutils literal">view</tt></td>
|
|
<td>Launch <span class="cb">cgt</span> and load the design (chip)</td>
|
|
</tr>
|
|
<tr><td><span class="cb">cgt</span></td>
|
|
<td>Launch <span class="cb">cgt</span> in the <span class="cb">Makefile</span> 's environement</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<p>A top <span class="cb">Makefile</span> in a bench directory must looks like:</p>
|
|
<div class="highlight"><pre><span></span> <span class="nv">LOGICAL_SYNTHESIS</span> <span class="o">=</span> Yosys
|
|
<span class="nv">PHYSICAL_SYNTHESIS</span> <span class="o">=</span> Coriolis
|
|
<span class="nv">DESIGN_KIT</span> <span class="o">=</span> nsxlib45
|
|
|
|
<span class="nv">USE_CLOCKTREE</span> <span class="o">=</span> No
|
|
<span class="nv">USE_DEBUG</span> <span class="o">=</span> No
|
|
<span class="nv">USE_KITE</span> <span class="o">=</span> No
|
|
|
|
<span class="nv">NETLISTS</span> <span class="o">=</span> VexRiscv
|
|
|
|
<span class="cp"> include ./mk/design-flow.mk</span>
|
|
|
|
<span class="nf">blif</span><span class="o">:</span> <span class="n">VexRiscv</span>.<span class="n">blif</span>
|
|
<span class="nf">layout</span><span class="o">:</span> <span class="n">vexriscv_r</span>.<span class="n">ap</span>
|
|
<span class="nf">gds</span><span class="o">:</span> <span class="n">vexriscv_r</span>.<span class="n">gds</span>
|
|
|
|
<span class="nf">lvx</span><span class="o">:</span> <span class="n">lvx</span>-<span class="n">vst</span>-<span class="n">vexriscv</span>
|
|
<span class="nf">drc</span><span class="o">:</span> <span class="n">druc</span>-<span class="n">vexriscv_r</span>
|
|
</pre></div>
|
|
<p></p>
|
|
<p>Where variables have the following meaning:</p>
|
|
<table class="table">
|
|
<colgroup>
|
|
<col width="30%" />
|
|
<col width="70%" />
|
|
</colgroup>
|
|
<thead valign="bottom">
|
|
<tr><th class="head">Variable</th>
|
|
<th class="head">Usage</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody valign="top">
|
|
<tr><td><tt class="docutils literal">LOGICAL_SYNTHESIS</tt></td>
|
|
<td>Tells what synthesis tool to use between <tt class="docutils literal">Alliance</tt> or
|
|
<tt class="docutils literal">Yosys</tt>. Netlists must be pre-generated if this variable
|
|
is empty or not present</td>
|
|
</tr>
|
|
<tr><td><tt class="docutils literal">PHYSICAL_SYNTHESIS</tt></td>
|
|
<td>Tells what place & route tools to use between <tt class="docutils literal">Alliance</tt>
|
|
(i.e. <tt class="docutils literal">ocp</tt>, <tt class="docutils literal">nero</tt> & <tt class="docutils literal">ring</tt>) and <tt class="docutils literal">Coriolis</tt></td>
|
|
</tr>
|
|
<tr><td><tt class="docutils literal">DESIGN_KIT</tt></td>
|
|
<td>The target technology and the standard cell libraries to
|
|
use, for the supported values see below.</td>
|
|
</tr>
|
|
<tr><td><tt class="docutils literal">NETLISTS</tt></td>
|
|
<td>The list of <em>netlists</em> that are requireds to perform the
|
|
place and route stage. See the complete explanation below</td>
|
|
</tr>
|
|
<tr><td><tt class="docutils literal">VST_FLAGS</tt></td>
|
|
<td>Flags to be passed to the tools driving <span class="cb">vst</span> files.
|
|
Due to some non-standard syntax in the <span class="sc">Alliance</span> format,
|
|
if you have a hierarchical design, please set it to
|
|
<tt class="docutils literal"><span class="pre">--vst-use-concat</span></tt></td>
|
|
</tr>
|
|
<tr><td><tt class="docutils literal">USE_CLOCKTREE</tt></td>
|
|
<td>Adds a clock-tree to the design (<span class="sc">Coriolis</span>)</td>
|
|
</tr>
|
|
<tr><td><tt class="docutils literal">USE_DEBUG</tt></td>
|
|
<td>Use the debugger enabled version of <span class="cb">cgt</span></td>
|
|
</tr>
|
|
<tr><td><tt class="docutils literal">USE_KITE</tt></td>
|
|
<td>Use the old <span class="sc">Kite</span> (digital only) router</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<p>Detailed semantic of the <tt class="docutils literal">NETLISTS</tt> variable:</p>
|
|
<ul class="simple">
|
|
<li>Netlists name must be given without file extensions. Those are guessed according
|
|
to the selected synthesis tool.</li>
|
|
<li>According to the value of <tt class="docutils literal">LOGICAL_SYNTHESIS</tt> they are user supplied or generated.
|
|
In the later case, be aware that calling the <tt class="docutils literal">clean</tt> target will remove
|
|
the generated files.</li>
|
|
<li>In case the logical synthesis stage is needed, the file holding the behavioral
|
|
description is the <em>first</em> of the item list. In certain contexts, it will also be
|
|
considered as the chip's core.</li>
|
|
<li>If the behavioral description is hierarchical, each sub model must be added to
|
|
the <tt class="docutils literal">NETLISTS</tt> variable (<em>after</em> the top level one). In case of <span class="sc">Yosys</span>
|
|
synthesis, <tt class="docutils literal">blif2vst.py</tt> will generate a <span class="cb">vst</span> file for each model of the
|
|
hierarchy. We add them to the list so a <tt class="docutils literal">make clean</tt> will remove not only
|
|
the top level <span class="cb">vst</span> (and associated <span class="cb">ap</span> after placement), but the whole
|
|
hierarchy.</li>
|
|
</ul>
|
|
<p>A slightly more complex example is below. The behavioral description that will
|
|
be synthetised must be in <tt class="docutils literal">alu_hier</tt> (in fact <tt class="docutils literal">alu_hier.il</tt> or <tt class="docutils literal">alu_hier.v</tt>
|
|
as we are using <span class="sc">Yosys</span>). Two sub-model are generated by the synthesis, <tt class="docutils literal">add</tt>
|
|
and <tt class="docutils literal">sub</tt>, so we add them in tail of the <tt class="docutils literal">NETLISTS</tt> variable.</p>
|
|
<div class="highlight"><pre><span></span> <span class="nv">LOGICAL_SYNTHESIS</span> <span class="o">=</span> Yosys
|
|
<span class="nv">PHYSICAL_SYNTHESIS</span> <span class="o">=</span> Coriolis
|
|
<span class="nv">DESIGN_KIT</span> <span class="o">=</span> nsxlib
|
|
|
|
<span class="nv">YOSYS_FLATTEN</span> <span class="o">=</span> No
|
|
<span class="nv">VST_FLAGS</span> <span class="o">=</span> --vst-use-concat
|
|
<span class="nv">USE_CLOCKTREE</span> <span class="o">=</span> No
|
|
<span class="nv">USE_DEBUG</span> <span class="o">=</span> No
|
|
<span class="nv">USE_KITE</span> <span class="o">=</span> No
|
|
|
|
<span class="nv">NETLISTS</span> <span class="o">=</span> alu_hier <span class="se">\</span>
|
|
add <span class="se">\</span>
|
|
sub
|
|
|
|
include ./mk/design-flow.mk
|
|
|
|
blif: alu_hier.blif
|
|
vst: alu_hier.vst
|
|
layout: alu_hier_r.ap
|
|
gds: alu_hier_r.gds
|
|
|
|
lvx: lvx-alu_hier_r
|
|
druc: druc-alu_hier_r
|
|
view: cgt-alu_hier_r
|
|
graal: graal-alu_hier_r
|
|
</pre></div>
|
|
<p>Availables design kits (to set <tt class="docutils literal">DESIGN_KIT</tt>):</p>
|
|
<table class="table">
|
|
<colgroup>
|
|
<col width="30%" />
|
|
<col width="70%" />
|
|
</colgroup>
|
|
<thead valign="bottom">
|
|
<tr><th class="head">Value</th>
|
|
<th class="head">Design kit</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody valign="top">
|
|
<tr><td><tt class="docutils literal">sxlib</tt></td>
|
|
<td>The default <span class="sc">Alliance</span> symbolic technology. Use the
|
|
<tt class="docutils literal">sxlib</tt> and <tt class="docutils literal">pxlib</tt> libraries.</td>
|
|
</tr>
|
|
<tr><td><tt class="docutils literal">nsxlib</tt></td>
|
|
<td>Symbolic technology fitted for <span class="sc">mosis</span> 180nm, 6 metal
|
|
layers <span class="sc">scn6m_deep</span></td>
|
|
</tr>
|
|
<tr><td><tt class="docutils literal">nsxlib45</tt></td>
|
|
<td>The symbolic technology fitted for 180nm and below.
|
|
Used for <span class="sc">FreePDK45</span> in symbolic mode.</td>
|
|
</tr>
|
|
<tr><td><tt class="docutils literal">FreePDK_45</tt></td>
|
|
<td>Direct use of the real technology <span class="sc">FreePDK45</span>.</td>
|
|
</tr>
|
|
<tr><td><tt class="docutils literal">c35b4</tt></td>
|
|
<td>AMS 350nm c35b4 real technology.</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<p></p>
|
|
</div>
|
|
<div class="section" id="setting-up-the-user-s-environement">
|
|
<h2><a class="toc-backref" href="#id9">Setting Up the User's Environement</a></h2>
|
|
<p>Before running the benchmarks, you must create a configuration file to tell
|
|
where all the softwares are installeds. The file is to be created in the directory:</p>
|
|
<pre class="literal-block">
|
|
alliance-check-toolkit/etc/mk/users.d/
|
|
</pre>
|
|
<p>The file itself must be named from your username, if mine is <tt class="docutils literal">jpc</tt>:</p>
|
|
<pre class="literal-block">
|
|
alliance-check-toolkit/etc/mk/users.d/user-jpc.mk
|
|
</pre>
|
|
<p>Example of file contents:</p>
|
|
<div class="highlight"><pre><span></span><span class="c"># Where Jean-Paul Chaput gets his tools installeds.</span>
|
|
|
|
<span class="k">export </span><span class="nv">NDA_TOP</span> <span class="o">=</span> <span class="si">${</span><span class="nv">HOME</span><span class="si">}</span>/crypted/soc/techno
|
|
<span class="k">export </span><span class="nv">AMS_C35B4</span> <span class="o">=</span> <span class="si">${</span><span class="nv">NDA_TOP</span><span class="si">}</span>/AMS/035hv-4.10
|
|
<span class="k">export </span><span class="nv">FreePDK_45</span> <span class="o">=</span> <span class="si">${</span><span class="nv">HOME</span><span class="si">}</span>/coriolis-2.x/work/DKs/FreePDK45
|
|
<span class="k">export </span><span class="nv">CORIOLIS_TOP</span> <span class="o">=</span> <span class="k">$(</span>HOME<span class="k">)</span>/coriolis-2.x/<span class="k">$(</span>BUILD_VARIANT<span class="k">)$(</span>LIB_SUFFIX_<span class="k">)</span>/<span class="k">$(</span>BUILD_TYPE_DIR<span class="k">)</span>/install
|
|
<span class="k">export </span><span class="nv">ALLIANCE_TOP</span> <span class="o">=</span> <span class="k">$(</span>HOME<span class="k">)</span>/alliance/<span class="k">$(</span>BUILD_VARIANT<span class="k">)$(</span>LIB_SUFFIX_<span class="k">)</span>/install
|
|
<span class="k">export </span><span class="nv">CHECK_TOOLKIT</span> <span class="o">=</span> <span class="k">$(</span>HOME<span class="k">)</span>/coriolis-2.x/src/alliance-check-toolkit
|
|
<span class="k">export </span><span class="nv">AVERTEC_TOP</span> <span class="o">=</span> /dsk/l1/tasyag/Linux.el7_64/install
|
|
<span class="k">export </span><span class="nv">YOSYS_TOP</span> <span class="o">=</span> /usr
|
|
</pre></div>
|
|
<p>All the variable names and values are more or less self explanatory...</p>
|
|
<div class="section" id="coriolis-configuration-files">
|
|
<h3><span class="sc">Coriolis</span> Configuration Files</h3>
|
|
<p>Unlike <span class="sc">Alliance</span> which is entirely configured through environement variables
|
|
or system-wide configuration file, <span class="sc">Coriolis</span> uses configuration files in
|
|
the current directory. They are present for each bench:</p>
|
|
<ul class="simple">
|
|
<li><tt class="docutils literal"><span class="pre"><cwd>/coriolis2/__init__.py</span></tt> : Just to tell <span class="sc">Python</span> that this directory
|
|
contains a module and be able to <em>import</em> it.</li>
|
|
<li><tt class="docutils literal"><span class="pre"><cwd>/coriolis2/settings.py</span></tt> : Override system configuration, and setup
|
|
technology.</li>
|
|
</ul>
|
|
</div>
|
|
<div class="section" id="coriolis-and-clock-tree-generation">
|
|
<h3><span class="sc">Coriolis</span> and Clock Tree Generation</h3>
|
|
<p>When <span class="sc">Coriolis</span> is used, it create a clock tree which modificate the original
|
|
netlist. The new netlist, with a clock tree, has a postfix of <tt class="docutils literal">_clocked</tt>.</p>
|
|
<div class="admonition note">
|
|
<p class="first admonition-title">Note</p>
|
|
<p class="last"><strong>Trans-hierarchical Clock-Tree.</strong> As <span class="sc">Coriolis</span> do not flatten the
|
|
designs it creates, not only the top-level netlist is modificated. All the
|
|
sub-blocks connected to the master clock are also duplicateds, whith the
|
|
relevant part of the clock-tree included.</p>
|
|
</div>
|
|
</div>
|
|
<div class="section" id="rhel6-and-clones">
|
|
<h3><span class="sc">rhel6</span> and Clones</h3>
|
|
<p>Under <span class="sc">rhel6</span> the developpement version of <span class="sc">Coriolis</span> needs the <tt class="docutils literal"><span class="pre">devtoolset-2</span></tt>.
|
|
<tt class="docutils literal">os.mk</tt> tries, based on <tt class="docutils literal">uname</tt> to switch it on or off.</p>
|
|
<p></p>
|
|
</div>
|
|
<div class="section" id="yosys-wrapper-script-yosys-py">
|
|
<h3>Yosys Wrapper Script <tt class="docutils literal">yosys.py</tt></h3>
|
|
<p>As far as I understand, <tt class="docutils literal">yosys</tt> do not allow it's scripts to be parametriseds.
|
|
The <tt class="docutils literal">yosys.py</tt> script is a simple wrapper around <tt class="docutils literal">yosys</tt> that generate a
|
|
custom tailored <span class="sc">tcl</span> script then call <tt class="docutils literal">yosys</tt> itself. It can manage two
|
|
input file formats, <span class="sc">Verilog</span> and <span class="sc">rtlil</span> and produce a <tt class="docutils literal">blif</tt> netlist.</p>
|
|
<div class="highlight"><pre><span></span>ego@home:VexRiscv/cmos350$ ../../../bin/yosys.py <span class="se">\</span>
|
|
--input-lang<span class="o">=</span>Verilog <span class="se">\</span>
|
|
--design<span class="o">=</span>VexRiscv <span class="se">\</span>
|
|
--top<span class="o">=</span>VexRiscv <span class="se">\</span>
|
|
--liberty<span class="o">=</span>../../../cells/nsxlib/nsxlib.lib
|
|
</pre></div>
|
|
<p>Here is an example of generated <span class="sc">tcl</span> script: <tt class="docutils literal">VexRiscv.ys</tt>:</p>
|
|
<div class="highlight"><pre><span></span><span class="k">set</span> verilog_file VexRiscv.v
|
|
<span class="k">set</span> verilog_top VexRiscv
|
|
<span class="k">set</span> liberty_file ...<span class="o">/</span>alliance-check-toolkit<span class="o">/</span>cells<span class="o">/</span>nsxlib<span class="o">/</span>nsxlib.lib
|
|
<span class="nv">yosys</span> read_verilog <span class="nv">$verilog_file</span>
|
|
<span class="nv">yosys</span> hierarchy <span class="o">-</span>check <span class="o">-</span>top <span class="nv">$verilog_top</span>
|
|
<span class="nv">yosys</span> synth <span class="o">-</span>top <span class="nv">$verilog_top</span>
|
|
<span class="nv">yosys</span> dfflibmap <span class="o">-</span>liberty <span class="nv">$liberty_file</span>
|
|
<span class="nv">yosys</span> abc <span class="o">-</span>liberty <span class="nv">$liberty_file</span>
|
|
<span class="nv">yosys</span> clean
|
|
<span class="nv">yosys</span> write_blif VexRiscv.blif
|
|
</pre></div>
|
|
</div>
|
|
</div>
|
|
<div class="section" id="benchmarks-special-notes">
|
|
<h2><a class="toc-backref" href="#id10">Benchmarks Special Notes</a></h2>
|
|
<div class="section" id="alliance-run">
|
|
<h3><tt class="docutils literal"><span class="pre">alliance-run</span></tt></h3>
|
|
<p>This benchmark comes mostly with it's own rules and do not uses the ones supplieds
|
|
by <tt class="docutils literal">rules.mk</tt>. It uses only the top-level configuration variables.</p>
|
|
<p>It a sligtly modified copy of the <tt class="docutils literal"><span class="pre">alliance-run</span></tt> found in the <span class="sc">Alliance</span> package
|
|
(modification are all in the <span class="cb">Makefile</span>). It build an <span class="sc">am2901</span>, but it is
|
|
splitted in a control and an operative part (data-path). This is to also check
|
|
the data-path features of <span class="sc">Alliance</span>.</p>
|
|
<p>And lastly, it provides a check for the <span class="sc">Coriolis</span> encapsulation of <span class="sc">Alliance</span>
|
|
through <span class="sc">Python</span> wrappers. The support is still incomplete and should be used
|
|
only by very experienced users. See the <tt class="docutils literal">demo*</tt> rules.</p>
|
|
</div>
|
|
<div class="section" id="am2901-standard-cells">
|
|
<h3><span class="sc">am2901</span> standard cells</h3>
|
|
<p>This benchmark can be run in loop to check slight variations. The clock tree generator
|
|
modify the netlist trans-hierarchically then saves the new netlist. But, when there's
|
|
a block <em>without</em> a clock (say an <span class="sc">alu</span> for instance) it is not modificated yet saved.
|
|
So the <tt class="docutils literal">vst</tt> file got rewritten. And while the netlist is rewritten
|
|
in a deterministic way (from how it was parsed), it is <em>not</em> done the same way due
|
|
to instance and terminal re-ordering. So, from run to run, we get identical netlists
|
|
but different files inducing slight variations in how the design is placed and routed.
|
|
We use this <em>defect</em> to generate deterministic series of random variation that helps
|
|
check the router. All runs are saved in a <tt class="docutils literal">./runs</tt> sub-directory.</p>
|
|
<p>The script to perform a serie of run is <tt class="docutils literal">./doRun.sh</tt>.</p>
|
|
<p>To reset the serie to a specific run (for debug), you may use <tt class="docutils literal">./setRun.sh</tt>.</p>
|
|
<p></p>
|
|
</div>
|
|
</div>
|
|
<div class="section" id="libraries-makefiles">
|
|
<h2><a class="toc-backref" href="#id11">Libraries Makefiles</a></h2>
|
|
<div class="admonition note">
|
|
<p class="first admonition-title">Note</p>
|
|
<p>For those part to work, you need to get <tt class="docutils literal">hitas</tt> & <tt class="docutils literal">yagle</tt>:</p>
|
|
<blockquote class="last">
|
|
<a class="reference external" href="https://soc-extras.lip6.fr/en/tasyag-abstract-en/">HiTas -- Static Timing Analyser</a></blockquote>
|
|
</div>
|
|
<p>The <tt class="docutils literal"><span class="pre">bench/etc/mk/check-library.mk</span></tt> provides rules to perform the check of a library
|
|
as a whole or cell by cell. To avoid too much clutter in the library directory,
|
|
all the intermediate files generated by the verification tools are kept in a
|
|
<tt class="docutils literal">./check/</tt> subdirectory. Once a cell has been validated, a <tt class="docutils literal"><span class="pre">./check/<cell>.ok</span></tt>
|
|
is generated too prevent it to be checked again in subsequent run. If you
|
|
want to force the recheck of the cell, do not forget to remove this file.</p>
|
|
<div class="section" id="checking-procedure">
|
|
<h3>Checking Procedure</h3>
|
|
<ul class="simple">
|
|
<li>DRC with <tt class="docutils literal">druc</tt>.</li>
|
|
<li>Formal proof between the layout and the behavioral description. This is a
|
|
somewhat long chain of tools:<ol class="arabic">
|
|
<li><tt class="docutils literal">cougar</tt>, extract the spice netlist (<tt class="docutils literal">.spi</tt>).</li>
|
|
<li><tt class="docutils literal">yagle</tt>, rebuild a behavioral description (<tt class="docutils literal">.vhd</tt>) from the spice
|
|
netlist.</li>
|
|
<li><tt class="docutils literal">vasy</tt>, convert the <tt class="docutils literal">.vhd</tt> into a <tt class="docutils literal">.vbe</tt> (Alliance <span class="sc">vhdl</span> subset
|
|
for behavioral descriptions).</li>
|
|
<li><tt class="docutils literal">proof</tt>, perform the formal proof between the refence <tt class="docutils literal">.vbe</tt> and the
|
|
extracted one.</li>
|
|
</ol>
|
|
</li>
|
|
</ul>
|
|
<table class="table">
|
|
<colgroup>
|
|
<col width="33%" />
|
|
<col width="67%" />
|
|
</colgroup>
|
|
<thead valign="bottom">
|
|
<tr><th class="head">Rule or File</th>
|
|
<th class="head">Action</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody valign="top">
|
|
<tr><td><tt class="docutils literal"><span class="pre">check-lib</span></tt></td>
|
|
<td>Validate every cell of the library</td>
|
|
</tr>
|
|
<tr><td><tt class="docutils literal"><span class="pre">clean-lib-tmp</span></tt></td>
|
|
<td>Remove all intermediate files in the <tt class="docutils literal">./check</tt>
|
|
subdirectory <strong>except</strong> for the <tt class="docutils literal">*.ok</tt> ones.
|
|
That is, cells validated will not be rechecked.</td>
|
|
</tr>
|
|
<tr><td><tt class="docutils literal"><span class="pre">clean-lib</span></tt></td>
|
|
<td>Remove all files in <tt class="docutils literal">./check</tt>, including <tt class="docutils literal">*.ok</tt></td>
|
|
</tr>
|
|
<tr><td><tt class="docutils literal"><span class="pre">./check/<cell>.ok</span></tt></td>
|
|
<td>Use this rule to perform the individual check of
|
|
<tt class="docutils literal"><cell></tt>. If the cell is validated, a file of
|
|
the same name will be created, preventing the cell
|
|
to be checked again.</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
<div class="section" id="synopsys-liberty-lib-generation">
|
|
<h3>Synopsys Liberty .lib Generation</h3>
|
|
<p>The generation of the liberty file is only half-automated. <tt class="docutils literal">hitas</tt> / <tt class="docutils literal">yagle</tt>
|
|
build the base file, then we manually perform the two modifications (see below).</p>
|
|
<p>The rule to call to generate the liberty file is: <tt class="docutils literal"><span class="pre"><libname>-dot-lib</span></tt> where
|
|
<tt class="docutils literal"><libname></tt> is the name of the library. To avoid erasing the previous one (and
|
|
presumably hand patched), this rule create a <tt class="docutils literal"><span class="pre"><libname>.lib.new</span></tt>.</p>
|
|
<ol class="arabic">
|
|
<li><p class="first">Run the <tt class="docutils literal">./bin/cellsArea.py</tt> script which will setup the areas of the cells
|
|
(in square um). Work on <tt class="docutils literal"><span class="pre"><libname>.lib.new</span></tt>.</p>
|
|
</li>
|
|
<li><p class="first">For the synchronous flip-flop, add the functional description to their
|
|
timing descriptions:</p>
|
|
<pre class="literal-block">
|
|
cell (sff1_x4) {
|
|
pin (ck) {
|
|
direction : input ;
|
|
clock : true ;
|
|
/* Timing informations ... */
|
|
}
|
|
pin (q) {
|
|
direction : output ;
|
|
function : "IQ" ;
|
|
/* Timing informations ... */
|
|
}
|
|
ff(IQ,IQN) {
|
|
next_state : "i" ;
|
|
clocked_on : "ck" ;
|
|
}
|
|
}
|
|
|
|
cell (sff2_x4) {
|
|
pin (ck) {
|
|
direction : input ;
|
|
clock : true ;
|
|
/* Timing informations ... */
|
|
}
|
|
pin (q) {
|
|
direction : output ;
|
|
function : "IQ" ;
|
|
/* Timing informations ... */
|
|
}
|
|
ff(IQ,IQN) {
|
|
next_state : "(cmd * i1) + (cmd' * i0)" ;
|
|
clocked_on : "ck" ;
|
|
}
|
|
}
|
|
</pre>
|
|
</li>
|
|
</ol>
|
|
<div class="admonition note">
|
|
<p class="first admonition-title">Note</p>
|
|
<p class="last">The tristate cells <strong>ts_</strong> and <strong>nts_</strong> are not included in the <tt class="docutils literal">.lib</tt>.</p>
|
|
</div>
|
|
</div>
|
|
<div class="section" id="helpers-scripts">
|
|
<h3>Helpers Scripts</h3>
|
|
<p><span class="sc">tcl</span> scripts for <tt class="docutils literal">avt_shell</tt> related to cell validation and characterization,
|
|
in <tt class="docutils literal">./benchs/bin</tt>, are:</p>
|
|
<ul class="simple">
|
|
<li><tt class="docutils literal">extractCell.tcl</tt>, read a spice file and generate a <span class="sc">vhdl</span> behavioral
|
|
description (using <tt class="docutils literal">yagle</tt>). This file needs to be processed further by
|
|
<tt class="docutils literal">vasy</tt> to become an Alliance behavioral file (<tt class="docutils literal">vbe</tt>). It takes two
|
|
arguments: the technology file and the cell spice file.
|
|
Cell which name starts by <tt class="docutils literal">sff</tt> will be treated as D flip-flop.</li>
|
|
<li><tt class="docutils literal">buildLib.tcl</tt>, process all cells in a directory to buil a liberty
|
|
file. Takes two arguments, the technology file and the name of the
|
|
liberty file to generate. The collection of characterized cells will
|
|
be determined by the <tt class="docutils literal">.spi</tt> files found in the current directory.</li>
|
|
</ul>
|
|
</div>
|
|
</div>
|
|
<div class="section" id="macro-blocks-makefiles">
|
|
<h2><a class="toc-backref" href="#id12">Macro-Blocks Makefiles</a></h2>
|
|
<p>The <tt class="docutils literal"><span class="pre">bench/etc/mk/check-generator.mk</span></tt> provides rules to perform the check of a
|
|
macro block generator. As one library cell may be used to build multiple macro-blocks,
|
|
one <span class="cb">Makefile</span> per macro must be provided. The <em>dot</em> extension of a <span class="cb">Makefile</span> is
|
|
expected to be the name of the macro-block. Here is a small example for the register
|
|
file generator, <tt class="docutils literal">Makefile.block_rf2</tt>:</p>
|
|
<div class="highlight"><pre><span></span> <span class="nv">TK_RTOP</span> <span class="o">=</span> ../..
|
|
<span class="nb">export</span> <span class="nv">MBK_CATA_LIB</span> <span class="o">=</span> <span class="k">$(</span>TOOLKIT_CELLS_TOP<span class="k">)</span>/nrf2lib
|
|
|
|
<span class="cp"> include $(TK_RTOP)/etc/mk/alliance.mk</span>
|
|
<span class="cp"> include $(TK_RTOP)/etc/mk/mosis.mk</span>
|
|
<span class="cp"> include $(TK_RTOP)/etc/mk/check-generator.mk</span>
|
|
|
|
<span class="nf">check-gen</span><span class="o">:</span> ./<span class="n">check</span>/<span class="n">block_rf</span>2<span class="n">_p_b_</span>4<span class="n">_p_w_</span>6.<span class="n">ok</span> \
|
|
./<span class="n">check</span>/<span class="n">block_rf</span>2<span class="n">_p_b_</span>2<span class="n">_p_w_</span>32.<span class="n">ok</span> \
|
|
./<span class="n">check</span>/<span class="n">block_rf</span>2<span class="n">_p_b_</span>64<span class="n">_p_w_</span>6.<span class="n">ok</span> \
|
|
./<span class="n">check</span>/<span class="n">block_rf</span>2<span class="n">_p_b_</span>16<span class="n">_p_w_</span>32.<span class="n">ok</span> \
|
|
./<span class="n">check</span>/<span class="n">block_rf</span>2<span class="n">_p_b_</span>32<span class="n">_p_w_</span>32.<span class="n">ok</span>
|
|
</pre></div>
|
|
<div class="admonition note">
|
|
<p class="first admonition-title">Note</p>
|
|
<p class="last">In the <tt class="docutils literal"><span class="pre">check-gen</span></tt> rule, the name of the block <strong>must</strong> match the <em>dot</em>
|
|
extension of the <span class="cb">Makefile</span>, here: <tt class="docutils literal">block_rf2</tt>.</p>
|
|
</div>
|
|
<p>Macro-block generators are parametrized. We uses a special naming convention
|
|
to pass parameters names and values trough the rule name. To declare a parameter,
|
|
add <tt class="docutils literal">_p_</tt>, then the name of the parameter and it's value separated by a <tt class="docutils literal">_</tt>.</p>
|
|
<table class="table">
|
|
<colgroup>
|
|
<col width="46%" />
|
|
<col width="54%" />
|
|
</colgroup>
|
|
<thead valign="bottom">
|
|
<tr><th class="head">String in Rule Name</th>
|
|
<th class="head">Call to the generator</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody valign="top">
|
|
<tr><td><tt class="docutils literal">_p_b_16_p_w_32</tt></td>
|
|
<td><tt class="docutils literal"><span class="pre">-b</span> 16 <span class="pre">-w</span> 32</tt></td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<p>When multiple flavor of a generator could be built upon the same cell library,
|
|
one <span class="cb">Makefile</span> per flavor is provided. To run them all at once, a <tt class="docutils literal">makeAll.sh</tt>
|
|
script is also available.</p>
|
|
<p>The <tt class="docutils literal"><span class="pre">check-gen</span></tt> rule only perform a <span class="sc">drc</span> and a <span class="sc">lvs</span> to check that their
|
|
router as correctly connected the cells of a macro-block. It doesn't perform
|
|
any functional verification.</p>
|
|
<p>To perform a functional abstraction with <tt class="docutils literal">yagle</tt> you may use the following
|
|
command:</p>
|
|
<pre class="literal-block">
|
|
ego@home:nrf2lib> make -f Makefile.block_rf2 block_rf2_b_4_p_w_6_kite.vhd
|
|
</pre>
|
|
<p>Even if the resulting <span class="sc">vhdl</span> cannot be used it is always good to look in
|
|
the report file <tt class="docutils literal">block_rf2_b_4_p_w_6_kite.rep</tt> for any error or warning,
|
|
particularly any disconnected transistor.</p>
|
|
<div class="section" id="calling-the-generator">
|
|
<h3>Calling the Generator</h3>
|
|
<p>A script <tt class="docutils literal">./check/generator.py</tt> must be written in order to call the generator
|
|
in standalone mode. This script is quite straigthforward, what changes between
|
|
generators is the command line options and the <tt class="docutils literal">stratus.buildModel()</tt> call.</p>
|
|
<p>After the generator call, we get a netlist and placement, but it is not finished
|
|
until it is routed with the <span class="sc">Coriolis</span> router.</p>
|
|
<div class="admonition note">
|
|
<p class="first admonition-title">Note</p>
|
|
<p class="last">Currently all macro-block generators are part of the <span class="sc">Stratus</span> netlist capture
|
|
language tool from <span class="sc">Coriolis</span>.</p>
|
|
</div>
|
|
</div>
|
|
<div class="section" id="scaling-the-cell-library">
|
|
<h3>Scaling the Cell Library</h3>
|
|
<p>This operation has to be done once, when the cell library is initially ported.
|
|
The result is put in the <span class="cb">git</span> repository, so there's no need to run it again
|
|
on a provided library.</p>
|
|
<p>The script is <tt class="docutils literal">./check/scaleCell.py</tt>. It is very sensitive on the way
|
|
the library pathes are set in <tt class="docutils literal">.coriolis2/settings.py</tt>. It must have the
|
|
target cell library setup as the <tt class="docutils literal">WORKING_LIBRARY</tt> and the source cell
|
|
library in the <tt class="docutils literal">SYSTEM_LIBRARY</tt>. The technology must be set to the target
|
|
one. And, of course, the script must be run the directory where <tt class="docutils literal">.coriolis2/</tt>
|
|
is located.</p>
|
|
<p>The heart of the script is the <tt class="docutils literal">scaleCell()</tt> function, which work on the
|
|
original cell in variable <tt class="docutils literal">sourceCell</tt> (argument) and <tt class="docutils literal">scaledCell</tt>, the
|
|
converted one. Although the script is configured to use the <em>scaled</em>
|
|
technology, this do not affect the values of the coordinates of the cells
|
|
we read, whatever their origin. This means that when we read the <tt class="docutils literal">sourceCell</tt>,
|
|
the coordinates of it's components keeps the value they have under <tt class="docutils literal">SxLib</tt>.
|
|
It is <em>when</em> we duplicate them into the <tt class="docutils literal">scaledCell</tt> that we perform the
|
|
scaling (i.e. multiply by two) and do whatever adjustments we need.
|
|
So when we have an adjustment to do on a specific segment, say slihgtly shift
|
|
a <tt class="docutils literal">NDIF</tt>, the coordinates must be expressed as in <tt class="docutils literal">SxLib</tt> (once more: <em>before</em>
|
|
scaling).</p>
|
|
<div class="admonition note">
|
|
<p class="first admonition-title">Note</p>
|
|
<p class="last">There is a safety in <tt class="docutils literal">./check/scaleCell.py</tt>, it will not run until the
|
|
target library has not been emptied of it's cells.</p>
|
|
</div>
|
|
<p>The script contains a <tt class="docutils literal">getDeltas()</tt> function which provide a table on how
|
|
to resize some layers (width and extension).</p>
|
|
<p>As the scaling operations is very specific to each macro-block, this script
|
|
is <em>not</em> shared, but customized for each one.</p>
|
|
</div>
|
|
</div>
|
|
<div class="section" id="tools-scripts">
|
|
<h2><a class="toc-backref" href="#id13">Tools & Scripts</a></h2>
|
|
<div class="section" id="one-script-to-run-them-all-go">
|
|
<span id="go-sh"></span><h3>One script to run them all: <tt class="docutils literal">go.sh</tt></h3>
|
|
<p>To call all the bench's <tt class="docutils literal">Makefile</tt> sequentially and execute one or more rules on
|
|
each, the small script utility <tt class="docutils literal">go.sh</tt> is available. Here are some examples:</p>
|
|
<pre class="literal-block">
|
|
ego@home:bench$ ./bin/go.sh clean
|
|
ego@home:bench$ ./bin/go.sh lvx
|
|
</pre>
|
|
</div>
|
|
<div class="section" id="command-line-cgt-dochip">
|
|
<h3>Command Line <span class="cb">cgt</span>: <tt class="docutils literal">doChip.py</tt></h3>
|
|
<p>As a alternative to <span class="cb">cgt</span>, the small helper script <tt class="docutils literal">doChip.py</tt> allows to
|
|
perform all the P&R tasks, on an stand-alone block or a whole chip.</p>
|
|
</div>
|
|
<div class="section" id="blif-netlist-converter">
|
|
<h3>Blif Netlist Converter</h3>
|
|
<p>The <tt class="docutils literal">blif2vst.py</tt> script convert a <tt class="docutils literal">.blif</tt> netlist into an <span class="sc">Alliance</span> one
|
|
(<span class="cb">vst</span>). This is a very straightforward encapsulation of <span class="sc">Coriolis</span>.
|
|
It could have been included in <tt class="docutils literal">doChip.py</tt>, but then the <tt class="docutils literal">make</tt> rules
|
|
would have been much more complicateds.</p>
|
|
</div>
|
|
<div class="section" id="pad-layout-converter-px2mpx">
|
|
<h3>Pad Layout Converter <tt class="docutils literal">px2mpx.py</tt></h3>
|
|
<p>The <tt class="docutils literal">px2mpx.py</tt> script convert pad layout from the <tt class="docutils literal">pxlib</tt> (<span class="sc">Alliance</span> dummy
|
|
technology) into <tt class="docutils literal">mpxlib</tt> (<span class="sc">mosis</span> compliant symbolic technology).</p>
|
|
<p>Basically it multiplies all the coordinate by two as the source technology
|
|
is 1µ type and the target one a 2µ. In addition it performs some adjustement
|
|
on the wire extension and minimal width and the blockage sizes.</p>
|
|
<p>As it is a one time script, it is heavily hardwired, so before using it
|
|
do not forget to edit it to suit your needs.</p>
|
|
<p>The whole conversion process is quite tricky as we are cheating with the
|
|
normal use of the software. The steps are as follow:</p>
|
|
<ol class="arabic simple">
|
|
<li>Using the <span class="sc">Alliance</span> dummy technology and in an empty directory, run
|
|
the script. The layouts of the converted pads (<tt class="docutils literal">*_mpx.ap</tt>) will be
|
|
created.</li>
|
|
<li>In a second directory, this time configured for the <span class="sc">mosis</span> technology
|
|
(see <tt class="docutils literal">.coriolis2_techno.conf</tt>) copy the converted layouts. In addition
|
|
to the layouts, this directory <strong>must also contain</strong> the behavioral
|
|
description of the pads (<tt class="docutils literal">.vbe</tt>). Otherwise, you will not be able to
|
|
see the proper layout.</li>
|
|
<li>When you are satisfied with the new layout of the pads, you can copy
|
|
them back in the official pad cell library.</li>
|
|
</ol>
|
|
<div class="admonition note">
|
|
<p class="first admonition-title">Note</p>
|
|
<p><strong>How Coriolis Load Cells.</strong>
|
|
Unlike in <span class="sc">Alliance</span>, <span class="sc">Coriolis</span> maintain a much tighter relationship
|
|
between physical and logical (structural or behavioral) views. The
|
|
loading process of a cell try <em>first</em> to load the logical view, and
|
|
if found, keep tab of the directory it was in. <em>Second</em> it tries to
|
|
load the physical view from the same directory the logical view was
|
|
in. If no logical view is found, only the physical is loaded.</p>
|
|
<p>Conversely, when saving a cell, the directory it was loaded from
|
|
is kept, so that the cell will be overwritten, and not duplicated
|
|
in the working directory as it was in <span class="sc">Alliance</span>.</p>
|
|
<p class="last">This explains why the behavioral view of the pad is needed in
|
|
the directory the layouts are put into. Otherwise you would only see
|
|
the pads of the system library (if any).</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="section" id="cadence-support">
|
|
<h2><a class="toc-backref" href="#id14"><span class="sc">Cadence</span> Support</a></h2>
|
|
<p>To perform comparisons with <span class="sc">Cadence</span> <span class="sc">edi</span> tools (i.e. <tt class="docutils literal">encounter</tt>
|
|
<span class="sc">NanoRoute</span>), some benchmarks have a sub-directory <tt class="docutils literal">encounter</tt>
|
|
holding all the necessary files. Here is an example for the design
|
|
named <tt class="docutils literal"><fpga></tt>.</p>
|
|
<table class="table">
|
|
<colgroup>
|
|
<col width="36%" />
|
|
<col width="64%" />
|
|
</colgroup>
|
|
<thead valign="bottom">
|
|
<tr><th class="head" colspan="2"><tt class="docutils literal">encounter</tt> directory</th>
|
|
</tr>
|
|
<tr><th class="head">File Name</th>
|
|
<th class="head">Contents</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody valign="top">
|
|
<tr><td><tt class="docutils literal">fpga_export.lef</tt></td>
|
|
<td>Technology & standard cells for the design</td>
|
|
</tr>
|
|
<tr><td><tt class="docutils literal">fpga_export.def</tt></td>
|
|
<td>The design itself, flattened to the standard
|
|
cells.</td>
|
|
</tr>
|
|
<tr><td><tt class="docutils literal">fpga_nano.def</tt></td>
|
|
<td>The placed and routed result.</td>
|
|
</tr>
|
|
<tr><td><tt class="docutils literal">fpga.tcl</tt></td>
|
|
<td>The <span class="sc">tcl</span> script to be run by <tt class="docutils literal">encounter</tt></td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<p>The LEF/DEF file exported or imported by Coriolis are <em>not</em> true physical
|
|
files. They are pseudo-real, in the sense that all the dimensions are
|
|
directly taken from the symbolic with the simple rule <tt class="docutils literal">1 lambda = 1 micron</tt>.</p>
|
|
<div class="admonition note">
|
|
<p class="first admonition-title">Note</p>
|
|
<p class="last"><strong>LEF/DEF files:</strong> Coriolis is able to import/export in those
|
|
formats only if it has been compiled against the <span class="sc">Si2</span> relevant libraries
|
|
that are subjects to specific license agreements. So in case we don't
|
|
have access to thoses we supplies the generated LEF/DEF files.</p>
|
|
</div>
|
|
<p>The <tt class="docutils literal">encounter</tt> directory contains the LEF/DEF files and the <span class="sc">tcl</span>
|
|
script to be run by <tt class="docutils literal">encounter</tt>:</p>
|
|
<pre class="literal-block">
|
|
ego@home:encounter> . ../../etc/EDI1324.sh
|
|
ego@home:encounter> encounter -init ./fpga.tcl
|
|
</pre>
|
|
<p>Example of <span class="sc">tcl</span> script for <tt class="docutils literal">encounter</tt>:</p>
|
|
<div class="highlight"><pre><span></span><span class="nv">set_global</span> _enable_mmmc_by_default_flow <span class="nv">$CTE::mmmc_default</span>
|
|
<span class="nv">suppressMessage</span> ENCEXT-2799
|
|
<span class="nv">win</span>
|
|
<span class="nv">loadLefFile</span> fpga_export.lef
|
|
<span class="nv">loadDefFile</span> fpga_export.def
|
|
<span class="nv">floorPlan</span> <span class="o">-</span>site core <span class="o">-</span>r <span class="mf">0.998676319592</span> <span class="mf">0.95</span> <span class="mf">0.0</span> <span class="mf">0.0</span> <span class="mf">0.0</span> <span class="mf">0.0</span>
|
|
<span class="nv">getIoFlowFlag</span>
|
|
<span class="nv">fit</span>
|
|
<span class="nv">setDrawView</span> place
|
|
<span class="nv">setPlaceMode</span> <span class="o">-</span>fp false
|
|
<span class="nv">placeDesign</span>
|
|
<span class="nv">generateTracks</span>
|
|
<span class="nv">generateVias</span>
|
|
<span class="nv">setNanoRouteMode</span> <span class="o">-</span>quiet <span class="o">-</span>drouteFixAntenna <span class="mi">0</span>
|
|
<span class="nv">setNanoRouteMode</span> <span class="o">-</span>quiet <span class="o">-</span>drouteStartIteration <span class="mi">0</span>
|
|
<span class="nv">setNanoRouteMode</span> <span class="o">-</span>quiet <span class="o">-</span>routeTopRoutingLayer <span class="mi">5</span>
|
|
<span class="nv">setNanoRouteMode</span> <span class="o">-</span>quiet <span class="o">-</span>routeBottomRoutingLayer <span class="mi">2</span>
|
|
<span class="nv">setNanoRouteMode</span> <span class="o">-</span>quiet <span class="o">-</span>drouteEndIteration <span class="mi">0</span>
|
|
<span class="nv">setNanoRouteMode</span> <span class="o">-</span>quiet <span class="o">-</span>routeWithTimingDriven false
|
|
<span class="nv">setNanoRouteMode</span> <span class="o">-</span>quiet <span class="o">-</span>routeWithSiDriven false
|
|
<span class="nv">routeDesign</span> <span class="o">-</span>globalDetail
|
|
<span class="k">global</span> dbgLefDefOutVersion
|
|
<span class="k">set</span> dbgLefDefOutVersion <span class="mf">5.7</span>
|
|
<span class="nv">defOut</span> <span class="o">-</span>floorplan <span class="o">-</span>netlist <span class="o">-</span>routing fpga_nano.def
|
|
</pre></div>
|
|
</div>
|
|
<div class="section" id="technologies">
|
|
<h2><a class="toc-backref" href="#id15">Technologies</a></h2>
|
|
<p>We provides configuration files for the publicly available <span class="sc">mosis</span>
|
|
technology <tt class="docutils literal">SCN6M_DEEP</tt>.</p>
|
|
<ul class="simple">
|
|
<li><tt class="docutils literal">./bench/etc/scn6m_deep_09.rds</tt>, <span class="sc">rds</span> rules for symbolic to real
|
|
transformation.</li>
|
|
<li><tt class="docutils literal">./bench/etc/scn6m_deep.hsp</tt>, transistor spice models for <tt class="docutils literal">yagle</tt>.</li>
|
|
</ul>
|
|
<p>References:</p>
|
|
<ul class="simple">
|
|
<li><a class="reference external" href="https://www.mosis.com/files/scmos/scmos.pdf">MOSIS Scalable CMOS (SCMOS)</a></li>
|
|
<li><a class="reference external" href="ftp://ftp.mosis.com/pub/mosis/vendors/tsmc-018/t92y_mm_non_epi_thk_mtl-params.txt">MOSIS Wafer Acceptance Tests</a></li>
|
|
</ul>
|
|
</div>
|
|
|
|
</div>
|
|
<!-- /Content -->
|
|
|
|
<!-- Footer -->
|
|
<div class="footer gradient-2">
|
|
<div class="container footer-container ">
|
|
<div class="row">
|
|
<div class="col-xs-4 col-sm-3 col-md-3 col-lg-3">
|
|
<div class="footer-title">Social</div>
|
|
<ul class="list-unstyled">
|
|
</ul>
|
|
</div>
|
|
<div class="col-xs-4 col-sm-3 col-md-3 col-lg-2">
|
|
</div>
|
|
<div class="col-xs-4 col-sm-3 col-md-3 col-lg-3">
|
|
<div class="footer-title">Links</div>
|
|
<ul class="list-unstyled">
|
|
<li><a href="https://coriolis.lip6.fr/" target="_blank">Alliance/Coriolis</a></li>
|
|
<li><a href="https://www-soc.lip6.fr/" target="_blank">CIAN Team Website</a></li>
|
|
<li><a href="https://f-si.org" target="_blank">Free Silicon Foundation</a></li>
|
|
</ul>
|
|
</div>
|
|
<div class="col-xs-12 col-sm-3 col-md-3 col-lg-4">
|
|
<p class="pull-right text-right">
|
|
<small><em>Proudly powered by <a href="http://docs.getpelican.com/" target="_blank">pelican</a></em></small><br/>
|
|
<small><em><span class="sc">NEST</span> theme by <a href="https://github.com/molivier" target="_blank">molivier</a></em></small><br/>
|
|
<small>Copyright © 2020-2020 Sorbonne Universite</small>
|
|
</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<!-- /Footer -->
|
|
</body>
|
|
</html> |