A doc/bib.csl => doc/bib.csl +227 -0
@@ 0,0 1,227 @@
+<?xml version="1.0" encoding="utf-8"?>
+<style xmlns="http://purl.org/net/xbiblio/csl" class="note" version="1.0" demote-non-dropping-particle="sort-only" default-locale="de-DE">
+ <info>
+ <title>Hochschule der Medien Stuttgart (Deutsch)</title>
+ <title-short>HdM Stuttgart</title-short>
+ <id>http://www.zotero.org/styles/stuttgart-media-university</id>
+ <link href="http://www.zotero.org/styles/stuttgart-media-university" rel="self"/>
+ <link href="http://www.zotero.org/styles/technische-universitat-wien" rel="template"/>
+ <link href="https://github.com/citation-style-language/styles/issues/175" rel="documentation"/>
+ <link href="http://www.hdm-stuttgart.de/" rel="documentation"/>
+ <author>
+ <name>Julian Koegel</name>
+ <email>ju.koegel@googlemail.com</email>
+ </author>
+ <category citation-format="note"/>
+ <category field="social_science"/>
+ <updated>2012-09-27T22:06:38+00:00</updated>
+ <rights license="http://creativecommons.org/licenses/by-sa/3.0/">This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 License</rights>
+ </info>
+ <locale xml:lang="de">
+ <terms>
+ <term name="et-al">u.a.</term>
+ <term name="and">und</term>
+ <term name="retrieved">zugegriffen am</term>
+ <term name="accessed">Zugriff:</term>
+ <term name="ibid">ebenda</term>
+ <term name="page" form="short">S.</term>
+ <term name="section" form="short">Abs.</term>
+ </terms>
+ </locale>
+ <!--
+ macro definitions
+ author
+ editor
+ accessed
+ date
+ year-date
+ pages
+ point-locators
+ point-locators-subsequent
+ hasUrl
+ -->
+ <macro name="author">
+ <names variable="author">
+ <name name-as-sort-order="all" sort-separator=", " delimiter="; " delimiter-precedes-last="never"/>
+ <label form="short" prefix=" (" suffix=")"/>
+ <substitute>
+ <names variable="editor"/>
+ <text variable="title"/>
+ </substitute>
+ </names>
+ <text macro="anon"/>
+ </macro>
+ <macro name="author-short">
+ <names variable="author" delimiter="; ">
+ <name form="short" delimiter="; " initialize-with=". " delimiter-precedes-last="never" sort-separator=","/>
+ <substitute>
+ <names variable="editor"/>
+ <text variable="title"/>
+ </substitute>
+ </names>
+ <text macro="anon"/>
+ </macro>
+ <macro name="editor">
+ <names variable="editor" delimiter="; ">
+ <name name-as-sort-order="all" sort-separator=", " delimiter="; " delimiter-precedes-last="never" form="long"/>
+ <label form="short" prefix=" (" suffix=")"/>
+ </names>
+ </macro>
+ <macro name="anon">
+ <choose>
+ <if variable="author editor translator" match="none">
+ <text term="anonymous" form="short" suffix=" " strip-periods="true"/>
+ </if>
+ </choose>
+ </macro>
+ <macro name="accessed">
+ <text term="accessed"/>
+ <date variable="accessed" prefix=" ">
+ <date-part form="numeric" name="day" suffix="."/>
+ <date-part form="numeric" name="month" suffix="."/>
+ <date-part form="long" name="year"/>
+ </date>
+ </macro>
+ <macro name="date">
+ <choose>
+ <if variable="issued">
+ <date variable="issued">
+ <date-part form="numeric" name="day" suffix="."/>
+ <date-part form="numeric" name="month" suffix="."/>
+ <date-part form="long" name="year"/>
+ </date>
+ </if>
+ <else>
+ <date variable="accessed">
+ <date-part form="numeric" name="day" suffix="."/>
+ <date-part form="numeric" name="month" suffix="."/>
+ <date-part form="long" name="year"/>
+ </date>
+ </else>
+ </choose>
+ </macro>
+ <macro name="year-date">
+ <choose>
+ <if type="webpage">
+ <choose>
+ <if variable="issued">
+ <date variable="issued">
+ <date-part name="year"/>
+ </date>
+ </if>
+ <else>
+ <date variable="accessed">
+ <date-part name="year"/>
+ </date>
+ </else>
+ </choose>
+ </if>
+ <else>
+ <date variable="issued">
+ <date-part name="year"/>
+ </date>
+ </else>
+ </choose>
+ </macro>
+ <macro name="pages">
+ <label variable="locator" form="short" prefix=", " suffix=". " strip-periods="true"/>
+ <text variable="page"/>
+ </macro>
+ <macro name="point-locators-subsequent">
+ <group>
+ <choose>
+ <if locator="page" match="none">
+ <choose>
+ <if type="bill book graphic legal_case legislation motion_picture report song" match="any">
+ <choose>
+ <if variable="volume">
+ <group>
+ <text term="volume" form="short" text-case="lowercase" suffix=" "/>
+ <number variable="volume" form="numeric"/>
+ <label variable="locator" form="short" prefix=", "/>
+ </group>
+ </if>
+ <else>
+ <label variable="locator" form="short" suffix=" "/>
+ </else>
+ </choose>
+ </if>
+ </choose>
+ </if>
+ <else-if type="bill book graphic legal_case legislation motion_picture report song" match="any">
+ <number variable="volume" form="numeric" suffix=":"/>
+ </else-if>
+ </choose>
+ <label variable="locator" form="short" suffix=" "/>
+ <text variable="locator"/>
+ </group>
+ </macro>
+ <citation et-al-min="3" et-al-use-first="1" disambiguate-add-year-suffix="true">
+ <layout delimiter="; ">
+ <choose>
+ <if position="ibid">
+ <text term="ibid"/>
+ <text macro="point-locators-subsequent" prefix=", "/>
+ </if>
+ <else>
+ <text macro="author-short"/>
+ <text macro="year-date" prefix=" (" suffix=")"/>
+ <text macro="point-locators-subsequent" prefix=", "/>
+ </else>
+ </choose>
+ </layout>
+ </citation>
+ <bibliography hanging-indent="true">
+ <sort>
+ <key macro="author"/>
+ <key macro="date"/>
+ </sort>
+ <layout>
+ <group font-weight="bold">
+ <text macro="author"/>
+ <text macro="year-date" prefix=" (" suffix="):"/>
+ </group>
+ <text variable="title" prefix=" "/>
+ <choose>
+ <if type="webpage">
+ <text macro="date" prefix=". "/>
+ </if>
+ <else-if type="speech" match="any">
+ <text variable="publisher-place" prefix=", "/>
+ <text macro="date" prefix=", "/>
+ <text macro="accessed" prefix=", "/>
+ </else-if>
+ <else-if type="article-newspaper article-magazine article-journal" match="any">
+ <text value=". In: "/>
+ <text variable="container-title" font-style="italic"/>
+ <text variable="collection-title" prefix=", Reihe "/>
+ <text variable="volume" prefix=", Band "/>
+ <text variable="issue" prefix=", Ausgabe "/>
+ <text macro="date" prefix=", "/>
+ <text macro="pages"/>
+ </else-if>
+ <else-if type="chapter" match="any">
+ <text macro="editor" prefix=". In: " suffix=": "/>
+ <text variable="container-title" font-style="italic"/>
+ <text value=". "/>
+ <text variable="publisher-place" suffix=": "/>
+ <text variable="publisher"/>
+ <text macro="pages"/>
+ </else-if>
+ <else>
+ <text value=". "/>
+ <text variable="publisher-place" suffix=": "/>
+ <text variable="publisher"/>
+ </else>
+ </choose>
+ <choose>
+ <if variable="URL">
+ <text value="URL: " prefix=", "/>
+ <text variable="URL"/>
+ <text macro="accessed" prefix=" [" suffix="]"/>
+ </if>
+ </choose>
+ <text variable="note" prefix=", "/>
+ </layout>
+ </bibliography>
+</style>
A doc/blocks/svg/address_detector.svg => doc/blocks/svg/address_detector.svg +136 -0
@@ 0,0 1,136 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="15.2535cm" height="12cm">
+<style type="text/css" >
+ <![CDATA[
+ /* Text styles */
+ .label {
+ font-family: Arial;
+ font-size: 10pt;
+ font-weight: normal;
+ }
+
+ .entity {
+ font-family: Arial;
+ font-size: 12pt;
+ font-weight: bold;
+ }
+
+ .port {
+ font-family: Arial;
+ font-size: 12pt;
+ font-weight: normal;
+ }
+
+ .vector {
+ font-family: Arial;
+ font-size: 10pt;
+ font-weight: normal;
+ }
+
+ .generics {
+ font-family: Arial;
+ font-size: 10pt;
+ font-weight: normal;
+ }
+
+ /* Text alignment */
+ .right {
+ dominant-baseline: central;
+ text-anchor: end;
+ }
+
+ .left {
+ dominant-baseline: central;
+ text-anchor: start;
+ }
+
+ .center {
+ dominant-baseline: central;
+ text-anchor: middle;
+ }
+
+ /* Shape styles */
+ .entityBox {
+ stroke-width: 0.05cm;
+ stroke: #000000;
+ fill: #FFFFFF;
+ }
+
+ .portBox {
+ stroke-width: 0.00cm;
+ stroke: #FFF;
+ fill: #FFFFFF;
+ }
+
+ .labelBox {
+ stroke-width: 0.00cm;
+ stroke: #000000;
+ fill: #FFFFFF;
+ }
+
+ .vectorLength {
+ stroke-width: 0.00cm;
+ fill: #FFFFFF;
+ }
+
+ .genericsBox {
+ stroke-width: 0.02cm;
+ stroke: #BFBFBF;
+ fill: #F2F2F2;
+ }
+
+ .connector {
+ stroke-width: 0.025cm;
+ stroke: #000000;
+ fill: #FFFFFF;
+ }
+
+ ]]>
+</style>
+<g>
+<rect class="labelBox" x="1.5cm" y="-0.43cm" width="12.2535cm" height="1cm" />
+<text class="label center" x="7.62674cm" y="0.07cm" ></text>
+<rect class="entityBox" x="1.475cm" y="0.545cm" width="12.3035cm" height="9.05cm" />
+<text class="entity center" x="7.62674cm" y="1.07cm" >address_detector</text>
+<rect class="portBox" x="1.5cm" y="1.57cm" width="6.12674cm" height="1cm" />
+<text class="port left" x="1.75cm" y="2.07cm" >address_i</text>
+<line class="connector" x1="1.5cm" y1="2.07cm" x2="0.5cm" y2="2.07cm" />
+<line class="connector" x1="0.75cm" y1="2.32cm" x2="1.25cm" y2="1.82cm" />
+<text class="vector right" x="1.1cm" y="1.67cm" >7</text>
+<rect class="portBox" x="1.5cm" y="2.57cm" width="6.12674cm" height="1cm" />
+<text class="port left" x="1.75cm" y="3.07cm" >store_address_i</text>
+<line class="connector" x1="1.5cm" y1="3.07cm" x2="0.5cm" y2="3.07cm" />
+<rect class="portBox" x="1.5cm" y="3.57cm" width="6.12674cm" height="1cm" />
+<text class="port left" x="1.75cm" y="4.07cm" >scl_rising</text>
+<line class="connector" x1="1.5cm" y1="4.07cm" x2="0.5cm" y2="4.07cm" />
+<rect class="portBox" x="1.5cm" y="4.57cm" width="6.12674cm" height="1cm" />
+<text class="port left" x="1.75cm" y="5.07cm" >scl_falling_delayed_i</text>
+<line class="connector" x1="1.5cm" y1="5.07cm" x2="0.5cm" y2="5.07cm" />
+<rect class="portBox" x="7.62674cm" y="1.57cm" width="6.12674cm" height="1cm" />
+<text class="port right" x="13.5035cm" y="2.07cm" >sda_enable_o</text>
+<line class="connector" x1="13.7535cm" y1="2.07cm" x2="14.7535cm" y2="2.07cm" />
+<rect class="portBox" x="1.5cm" y="5.57cm" width="6.12674cm" height="1cm" />
+<text class="port left" x="1.75cm" y="6.07cm" >sda_i</text>
+<line class="connector" x1="1.5cm" y1="6.07cm" x2="0.5cm" y2="6.07cm" />
+<rect class="portBox" x="1.5cm" y="6.57cm" width="6.12674cm" height="1cm" />
+<text class="port left" x="1.75cm" y="7.07cm" >start_i</text>
+<line class="connector" x1="1.5cm" y1="7.07cm" x2="0.5cm" y2="7.07cm" />
+<rect class="portBox" x="7.62674cm" y="2.57cm" width="6.12674cm" height="1cm" />
+<text class="port right" x="13.5035cm" y="3.07cm" >rw_o</text>
+<line class="connector" x1="13.7535cm" y1="3.07cm" x2="14.7535cm" y2="3.07cm" />
+<rect class="portBox" x="7.62674cm" y="3.57cm" width="6.12674cm" height="1cm" />
+<text class="port right" x="13.5035cm" y="4.07cm" >success_o</text>
+<line class="connector" x1="13.7535cm" y1="4.07cm" x2="14.7535cm" y2="4.07cm" />
+<rect class="portBox" x="7.62674cm" y="4.57cm" width="6.12674cm" height="1cm" />
+<text class="port right" x="13.5035cm" y="5.07cm" >fail_o</text>
+<line class="connector" x1="13.7535cm" y1="5.07cm" x2="14.7535cm" y2="5.07cm" />
+<rect class="portBox" x="1.5cm" y="8.57cm" width="12.2535cm" height="1cm" />
+<text class="port center" x="7.62674cm" y="9.07cm" >rst_in</text>
+<line class="connector" x1="7.62674cm" y1="9.57cm" x2="7.62674cm" y2="10.57cm" />
+<circle class="connector" cx="7.62674cm" cy="9.745cm" r="0.125cm" />
+<rect class="portBox" x="1.5cm" y="7.57cm" width="6.12674cm" height="1cm" />
+<text class="port left" x="1.75cm" y="8.07cm" >clk_i</text>
+<line class="connector" x1="0.5cm" y1="8.07cm" x2="1.5cm" y2="8.07cm" />
+<line class="connector" x1="1.5cm" y1="8.22cm" x2="1.7cm" y2="8.07cm" />
+<line class="connector" x1="1.5cm" y1="7.92cm" x2="1.7cm" y2="8.07cm" />
+</g>
+</svg>
A doc/blocks/svg/address_generator.svg => doc/blocks/svg/address_generator.svg +139 -0
@@ 0,0 1,139 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="15.2535cm" height="13cm">
+<style type="text/css" >
+ <![CDATA[
+ /* Text styles */
+ .label {
+ font-family: Arial;
+ font-size: 10pt;
+ font-weight: normal;
+ }
+
+ .entity {
+ font-family: Arial;
+ font-size: 12pt;
+ font-weight: bold;
+ }
+
+ .port {
+ font-family: Arial;
+ font-size: 12pt;
+ font-weight: normal;
+ }
+
+ .vector {
+ font-family: Arial;
+ font-size: 10pt;
+ font-weight: normal;
+ }
+
+ .generics {
+ font-family: Arial;
+ font-size: 10pt;
+ font-weight: normal;
+ }
+
+ /* Text alignment */
+ .right {
+ dominant-baseline: central;
+ text-anchor: end;
+ }
+
+ .left {
+ dominant-baseline: central;
+ text-anchor: start;
+ }
+
+ .center {
+ dominant-baseline: central;
+ text-anchor: middle;
+ }
+
+ /* Shape styles */
+ .entityBox {
+ stroke-width: 0.05cm;
+ stroke: #000000;
+ fill: #FFFFFF;
+ }
+
+ .portBox {
+ stroke-width: 0.00cm;
+ stroke: #FFF;
+ fill: #FFFFFF;
+ }
+
+ .labelBox {
+ stroke-width: 0.00cm;
+ stroke: #000000;
+ fill: #FFFFFF;
+ }
+
+ .vectorLength {
+ stroke-width: 0.00cm;
+ fill: #FFFFFF;
+ }
+
+ .genericsBox {
+ stroke-width: 0.02cm;
+ stroke: #BFBFBF;
+ fill: #F2F2F2;
+ }
+
+ .connector {
+ stroke-width: 0.025cm;
+ stroke: #000000;
+ fill: #FFFFFF;
+ }
+
+ ]]>
+</style>
+<g>
+<rect class="labelBox" x="1.5cm" y="-0.43cm" width="12.2535cm" height="1cm" />
+<text class="label center" x="7.62674cm" y="0.07cm" ></text>
+<rect class="entityBox" x="1.475cm" y="0.545cm" width="12.3035cm" height="10.05cm" />
+<text class="entity center" x="7.62674cm" y="1.07cm" >address_generator</text>
+<rect class="portBox" x="1.5cm" y="1.57cm" width="6.12674cm" height="1cm" />
+<text class="port left" x="1.75cm" y="2.07cm" >address_i</text>
+<line class="connector" x1="1.5cm" y1="2.07cm" x2="0.5cm" y2="2.07cm" />
+<line class="connector" x1="0.75cm" y1="2.32cm" x2="1.25cm" y2="1.82cm" />
+<text class="vector right" x="1.1cm" y="1.67cm" >7</text>
+<rect class="portBox" x="1.5cm" y="2.57cm" width="6.12674cm" height="1cm" />
+<text class="port left" x="1.75cm" y="3.07cm" >rw_i</text>
+<line class="connector" x1="1.5cm" y1="3.07cm" x2="0.5cm" y2="3.07cm" />
+<rect class="portBox" x="1.5cm" y="3.57cm" width="6.12674cm" height="1cm" />
+<text class="port left" x="1.75cm" y="4.07cm" >store_address_rw_i</text>
+<line class="connector" x1="1.5cm" y1="4.07cm" x2="0.5cm" y2="4.07cm" />
+<rect class="portBox" x="1.5cm" y="4.57cm" width="6.12674cm" height="1cm" />
+<text class="port left" x="1.75cm" y="5.07cm" >start_i</text>
+<line class="connector" x1="1.5cm" y1="5.07cm" x2="0.5cm" y2="5.07cm" />
+<rect class="portBox" x="1.5cm" y="5.57cm" width="6.12674cm" height="1cm" />
+<text class="port left" x="1.75cm" y="6.07cm" >scl_rising_i</text>
+<line class="connector" x1="1.5cm" y1="6.07cm" x2="0.5cm" y2="6.07cm" />
+<rect class="portBox" x="1.5cm" y="6.57cm" width="6.12674cm" height="1cm" />
+<text class="port left" x="1.75cm" y="7.07cm" >scl_falling_delayed_i</text>
+<line class="connector" x1="1.5cm" y1="7.07cm" x2="0.5cm" y2="7.07cm" />
+<rect class="portBox" x="7.62674cm" y="1.57cm" width="6.12674cm" height="1cm" />
+<text class="port right" x="13.5035cm" y="2.07cm" >sda_enable_o</text>
+<line class="connector" x1="13.7535cm" y1="2.07cm" x2="14.7535cm" y2="2.07cm" />
+<rect class="portBox" x="1.5cm" y="7.57cm" width="6.12674cm" height="1cm" />
+<text class="port left" x="1.75cm" y="8.07cm" >sda_i</text>
+<line class="connector" x1="1.5cm" y1="8.07cm" x2="0.5cm" y2="8.07cm" />
+<rect class="portBox" x="7.62674cm" y="2.57cm" width="6.12674cm" height="1cm" />
+<text class="port right" x="13.5035cm" y="3.07cm" >noack_o</text>
+<line class="connector" x1="13.7535cm" y1="3.07cm" x2="14.7535cm" y2="3.07cm" />
+<rect class="portBox" x="7.62674cm" y="3.57cm" width="6.12674cm" height="1cm" />
+<text class="port right" x="13.5035cm" y="4.07cm" >unexpected_sda_o</text>
+<line class="connector" x1="13.7535cm" y1="4.07cm" x2="14.7535cm" y2="4.07cm" />
+<rect class="portBox" x="7.62674cm" y="4.57cm" width="6.12674cm" height="1cm" />
+<text class="port right" x="13.5035cm" y="5.07cm" >done_o</text>
+<line class="connector" x1="13.7535cm" y1="5.07cm" x2="14.7535cm" y2="5.07cm" />
+<rect class="portBox" x="1.5cm" y="9.57cm" width="12.2535cm" height="1cm" />
+<text class="port center" x="7.62674cm" y="10.07cm" >rst_in</text>
+<line class="connector" x1="7.62674cm" y1="10.57cm" x2="7.62674cm" y2="11.57cm" />
+<circle class="connector" cx="7.62674cm" cy="10.745cm" r="0.125cm" />
+<rect class="portBox" x="1.5cm" y="8.57cm" width="6.12674cm" height="1cm" />
+<text class="port left" x="1.75cm" y="9.07cm" >clk_i</text>
+<line class="connector" x1="0.5cm" y1="9.07cm" x2="1.5cm" y2="9.07cm" />
+<line class="connector" x1="1.5cm" y1="9.22cm" x2="1.7cm" y2="9.07cm" />
+<line class="connector" x1="1.5cm" y1="8.92cm" x2="1.7cm" y2="9.07cm" />
+</g>
+</svg>
A doc/blocks/svg/master.svg => doc/blocks/svg/master.svg +190 -0
@@ 0,0 1,190 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="18.3835cm" height="19cm">
+<style type="text/css" >
+ <![CDATA[
+ /* Text styles */
+ .label {
+ font-family: Arial;
+ font-size: 10pt;
+ font-weight: normal;
+ }
+
+ .entity {
+ font-family: Arial;
+ font-size: 12pt;
+ font-weight: bold;
+ }
+
+ .port {
+ font-family: Arial;
+ font-size: 12pt;
+ font-weight: normal;
+ }
+
+ .vector {
+ font-family: Arial;
+ font-size: 10pt;
+ font-weight: normal;
+ }
+
+ .generics {
+ font-family: Arial;
+ font-size: 10pt;
+ font-weight: normal;
+ }
+
+ /* Text alignment */
+ .right {
+ dominant-baseline: central;
+ text-anchor: end;
+ }
+
+ .left {
+ dominant-baseline: central;
+ text-anchor: start;
+ }
+
+ .center {
+ dominant-baseline: central;
+ text-anchor: middle;
+ }
+
+ /* Shape styles */
+ .entityBox {
+ stroke-width: 0.05cm;
+ stroke: #000000;
+ fill: #FFFFFF;
+ }
+
+ .portBox {
+ stroke-width: 0.00cm;
+ stroke: #FFF;
+ fill: #FFFFFF;
+ }
+
+ .labelBox {
+ stroke-width: 0.00cm;
+ stroke: #000000;
+ fill: #FFFFFF;
+ }
+
+ .vectorLength {
+ stroke-width: 0.00cm;
+ fill: #FFFFFF;
+ }
+
+ .genericsBox {
+ stroke-width: 0.02cm;
+ stroke: #BFBFBF;
+ fill: #F2F2F2;
+ }
+
+ .connector {
+ stroke-width: 0.025cm;
+ stroke: #000000;
+ fill: #FFFFFF;
+ }
+
+ ]]>
+</style>
+<g>
+<rect class="genericsBox" x="12.6956cm" y="0.5cm" width="5.18795cm" height="1cm" />
+<text class="generics" x="12.8206cm" y="0.875cm" >SCL_FALLING_DELAY</text>
+<text class="generics" x="12.8206cm" y="1.375cm" >SCL_MIN_STABLE_CYCLES</text>
+</g>
+<g>
+<rect class="labelBox" x="1.5cm" y="0.5cm" width="11.1956cm" height="1cm" />
+<text class="label center" x="7.09778cm" y="1cm" ></text>
+<rect class="entityBox" x="1.475cm" y="1.475cm" width="11.2456cm" height="16.05cm" />
+<text class="entity center" x="7.09778cm" y="2cm" >master</text>
+<rect class="portBox" x="1.5cm" y="2.5cm" width="5.59778cm" height="1cm" />
+<text class="port left" x="1.75cm" y="3cm" >slave_address_i</text>
+<line class="connector" x1="1.5cm" y1="3cm" x2="0.5cm" y2="3cm" />
+<line class="connector" x1="0.75cm" y1="3.25cm" x2="1.25cm" y2="2.75cm" />
+<text class="vector right" x="1.1cm" y="2.6cm" >7</text>
+<rect class="portBox" x="1.5cm" y="3.5cm" width="5.59778cm" height="1cm" />
+<text class="port left" x="1.75cm" y="4cm" >generate_ack_i</text>
+<line class="connector" x1="1.5cm" y1="4cm" x2="0.5cm" y2="4cm" />
+<rect class="portBox" x="1.5cm" y="4.5cm" width="5.59778cm" height="1cm" />
+<text class="port left" x="1.75cm" y="5cm" >expect_ack_i</text>
+<line class="connector" x1="1.5cm" y1="5cm" x2="0.5cm" y2="5cm" />
+<rect class="portBox" x="7.09778cm" y="2.5cm" width="5.59778cm" height="1cm" />
+<text class="port right" x="12.4456cm" y="3cm" >rx_valid_o</text>
+<line class="connector" x1="12.6956cm" y1="3cm" x2="13.6956cm" y2="3cm" />
+<rect class="portBox" x="7.09778cm" y="3.5cm" width="5.59778cm" height="1cm" />
+<text class="port right" x="12.4456cm" y="4cm" >rx_data_o</text>
+<line class="connector" x1="12.6956cm" y1="4cm" x2="13.6956cm" y2="4cm" />
+<line class="connector" x1="12.9456cm" y1="4.25cm" x2="13.4456cm" y2="3.75cm" />
+<text class="vector left" x="13.0956cm" y="3.6cm" >8</text>
+<rect class="portBox" x="1.5cm" y="5.5cm" width="5.59778cm" height="1cm" />
+<text class="port left" x="1.75cm" y="6cm" >rx_confirm_i</text>
+<line class="connector" x1="1.5cm" y1="6cm" x2="0.5cm" y2="6cm" />
+<rect class="portBox" x="7.09778cm" y="4.5cm" width="5.59778cm" height="1cm" />
+<text class="port right" x="12.4456cm" y="5cm" >tx_ready_o</text>
+<line class="connector" x1="12.6956cm" y1="5cm" x2="13.6956cm" y2="5cm" />
+<rect class="portBox" x="1.5cm" y="6.5cm" width="5.59778cm" height="1cm" />
+<text class="port left" x="1.75cm" y="7cm" >tx_valid_i</text>
+<line class="connector" x1="1.5cm" y1="7cm" x2="0.5cm" y2="7cm" />
+<rect class="portBox" x="1.5cm" y="7.5cm" width="5.59778cm" height="1cm" />
+<text class="port left" x="1.75cm" y="8cm" >tx_data_i</text>
+<line class="connector" x1="1.5cm" y1="8cm" x2="0.5cm" y2="8cm" />
+<line class="connector" x1="0.75cm" y1="8.25cm" x2="1.25cm" y2="7.75cm" />
+<text class="vector right" x="1.1cm" y="7.6cm" >8</text>
+<rect class="portBox" x="1.5cm" y="8.5cm" width="5.59778cm" height="1cm" />
+<text class="port left" x="1.75cm" y="9cm" >tx_clear_buffer_i</text>
+<line class="connector" x1="1.5cm" y1="9cm" x2="0.5cm" y2="9cm" />
+<rect class="portBox" x="7.09778cm" y="5.5cm" width="5.59778cm" height="1cm" />
+<text class="port right" x="12.4456cm" y="6cm" >err_noack_data_o</text>
+<line class="connector" x1="12.6956cm" y1="6cm" x2="13.6956cm" y2="6cm" />
+<rect class="portBox" x="7.09778cm" y="6.5cm" width="5.59778cm" height="1cm" />
+<text class="port right" x="12.4456cm" y="7cm" >err_noack_address_o</text>
+<line class="connector" x1="12.6956cm" y1="7cm" x2="13.6956cm" y2="7cm" />
+<rect class="portBox" x="7.09778cm" y="7.5cm" width="5.59778cm" height="1cm" />
+<text class="port right" x="12.4456cm" y="8cm" >err_arbitration_o</text>
+<line class="connector" x1="12.6956cm" y1="8cm" x2="13.6956cm" y2="8cm" />
+<rect class="portBox" x="7.09778cm" y="8.5cm" width="5.59778cm" height="1cm" />
+<text class="port right" x="12.4456cm" y="9cm" >err_general_o</text>
+<line class="connector" x1="12.6956cm" y1="9cm" x2="13.6956cm" y2="9cm" />
+<rect class="portBox" x="1.5cm" y="9.5cm" width="5.59778cm" height="1cm" />
+<text class="port left" x="1.75cm" y="10cm" >stop_i</text>
+<line class="connector" x1="1.5cm" y1="10cm" x2="0.5cm" y2="10cm" />
+<rect class="portBox" x="1.5cm" y="10.5cm" width="5.59778cm" height="1cm" />
+<text class="port left" x="1.75cm" y="11cm" >start_i</text>
+<line class="connector" x1="1.5cm" y1="11cm" x2="0.5cm" y2="11cm" />
+<rect class="portBox" x="1.5cm" y="11.5cm" width="5.59778cm" height="1cm" />
+<text class="port left" x="1.75cm" y="12cm" >run_i</text>
+<line class="connector" x1="1.5cm" y1="12cm" x2="0.5cm" y2="12cm" />
+<rect class="portBox" x="1.5cm" y="12.5cm" width="5.59778cm" height="1cm" />
+<text class="port left" x="1.75cm" y="13cm" >rw_i</text>
+<line class="connector" x1="1.5cm" y1="13cm" x2="0.5cm" y2="13cm" />
+<rect class="portBox" x="7.09778cm" y="9.5cm" width="5.59778cm" height="1cm" />
+<text class="port right" x="12.4456cm" y="10cm" >dev_busy_o</text>
+<line class="connector" x1="12.6956cm" y1="10cm" x2="13.6956cm" y2="10cm" />
+<rect class="portBox" x="7.09778cm" y="10.5cm" width="5.59778cm" height="1cm" />
+<text class="port right" x="12.4456cm" y="11cm" >bus_busy_o</text>
+<line class="connector" x1="12.6956cm" y1="11cm" x2="13.6956cm" y2="11cm" />
+<rect class="portBox" x="7.09778cm" y="11.5cm" width="5.59778cm" height="1cm" />
+<text class="port right" x="12.4456cm" y="12cm" >waiting_o</text>
+<line class="connector" x1="12.6956cm" y1="12cm" x2="13.6956cm" y2="12cm" />
+<rect class="portBox" x="1.5cm" y="13.5cm" width="5.59778cm" height="1cm" />
+<text class="port left" x="1.75cm" y="14cm" >sda_i</text>
+<line class="connector" x1="1.5cm" y1="14cm" x2="0.5cm" y2="14cm" />
+<rect class="portBox" x="1.5cm" y="14.5cm" width="5.59778cm" height="1cm" />
+<text class="port left" x="1.75cm" y="15cm" >scl_i</text>
+<line class="connector" x1="1.5cm" y1="15cm" x2="0.5cm" y2="15cm" />
+<rect class="portBox" x="7.09778cm" y="12.5cm" width="5.59778cm" height="1cm" />
+<text class="port right" x="12.4456cm" y="13cm" >sda_enable_o</text>
+<line class="connector" x1="12.6956cm" y1="13cm" x2="13.6956cm" y2="13cm" />
+<rect class="portBox" x="7.09778cm" y="13.5cm" width="5.59778cm" height="1cm" />
+<text class="port right" x="12.4456cm" y="14cm" >scl_enable_o</text>
+<line class="connector" x1="12.6956cm" y1="14cm" x2="13.6956cm" y2="14cm" />
+<rect class="portBox" x="1.5cm" y="16.5cm" width="11.1956cm" height="1cm" />
+<text class="port center" x="7.09778cm" y="17cm" >rst_in</text>
+<line class="connector" x1="7.09778cm" y1="17.5cm" x2="7.09778cm" y2="18.5cm" />
+<circle class="connector" cx="7.09778cm" cy="17.675cm" r="0.125cm" />
+<rect class="portBox" x="1.5cm" y="15.5cm" width="5.59778cm" height="1cm" />
+<text class="port left" x="1.75cm" y="16cm" >clk_i</text>
+<line class="connector" x1="0.5cm" y1="16cm" x2="1.5cm" y2="16cm" />
+<line class="connector" x1="1.5cm" y1="16.15cm" x2="1.7cm" y2="16cm" />
+<line class="connector" x1="1.5cm" y1="15.85cm" x2="1.7cm" y2="16cm" />
+</g>
+</svg>
A doc/blocks/svg/master_state.svg => doc/blocks/svg/master_state.svg +203 -0
@@ 0,0 1,203 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16.8404cm" height="23cm">
+<style type="text/css" >
+ <![CDATA[
+ /* Text styles */
+ .label {
+ font-family: Arial;
+ font-size: 10pt;
+ font-weight: normal;
+ }
+
+ .entity {
+ font-family: Arial;
+ font-size: 12pt;
+ font-weight: bold;
+ }
+
+ .port {
+ font-family: Arial;
+ font-size: 12pt;
+ font-weight: normal;
+ }
+
+ .vector {
+ font-family: Arial;
+ font-size: 10pt;
+ font-weight: normal;
+ }
+
+ .generics {
+ font-family: Arial;
+ font-size: 10pt;
+ font-weight: normal;
+ }
+
+ /* Text alignment */
+ .right {
+ dominant-baseline: central;
+ text-anchor: end;
+ }
+
+ .left {
+ dominant-baseline: central;
+ text-anchor: start;
+ }
+
+ .center {
+ dominant-baseline: central;
+ text-anchor: middle;
+ }
+
+ /* Shape styles */
+ .entityBox {
+ stroke-width: 0.05cm;
+ stroke: #000000;
+ fill: #FFFFFF;
+ }
+
+ .portBox {
+ stroke-width: 0.00cm;
+ stroke: #FFF;
+ fill: #FFFFFF;
+ }
+
+ .labelBox {
+ stroke-width: 0.00cm;
+ stroke: #000000;
+ fill: #FFFFFF;
+ }
+
+ .vectorLength {
+ stroke-width: 0.00cm;
+ fill: #FFFFFF;
+ }
+
+ .genericsBox {
+ stroke-width: 0.02cm;
+ stroke: #BFBFBF;
+ fill: #F2F2F2;
+ }
+
+ .connector {
+ stroke-width: 0.025cm;
+ stroke: #000000;
+ fill: #FFFFFF;
+ }
+
+ ]]>
+</style>
+<g>
+<rect class="labelBox" x="1.5cm" y="-0.43cm" width="13.8404cm" height="1cm" />
+<text class="label center" x="8.42018cm" y="0.07cm" ></text>
+<rect class="entityBox" x="1.475cm" y="0.545cm" width="13.8904cm" height="20.05cm" />
+<text class="entity center" x="8.42018cm" y="1.07cm" >master_state</text>
+<rect class="portBox" x="8.42018cm" y="1.57cm" width="6.92018cm" height="1cm" />
+<text class="port right" x="15.0904cm" y="2.07cm" >rst_i2c_o</text>
+<line class="connector" x1="15.3404cm" y1="2.07cm" x2="16.3404cm" y2="2.07cm" />
+<rect class="portBox" x="1.5cm" y="1.57cm" width="6.92018cm" height="1cm" />
+<text class="port left" x="1.75cm" y="2.07cm" >start_i</text>
+<line class="connector" x1="1.5cm" y1="2.07cm" x2="0.5cm" y2="2.07cm" />
+<rect class="portBox" x="1.5cm" y="2.57cm" width="6.92018cm" height="1cm" />
+<text class="port left" x="1.75cm" y="3.07cm" >stop_i</text>
+<line class="connector" x1="1.5cm" y1="3.07cm" x2="0.5cm" y2="3.07cm" />
+<rect class="portBox" x="1.5cm" y="3.57cm" width="6.92018cm" height="1cm" />
+<text class="port left" x="1.75cm" y="4.07cm" >run_i</text>
+<line class="connector" x1="1.5cm" y1="4.07cm" x2="0.5cm" y2="4.07cm" />
+<rect class="portBox" x="1.5cm" y="4.57cm" width="6.92018cm" height="1cm" />
+<text class="port left" x="1.75cm" y="5.07cm" >rw_i</text>
+<line class="connector" x1="1.5cm" y1="5.07cm" x2="0.5cm" y2="5.07cm" />
+<rect class="portBox" x="1.5cm" y="5.57cm" width="6.92018cm" height="1cm" />
+<text class="port left" x="1.75cm" y="6.07cm" >expect_ack_i</text>
+<line class="connector" x1="1.5cm" y1="6.07cm" x2="0.5cm" y2="6.07cm" />
+<rect class="portBox" x="1.5cm" y="6.57cm" width="6.92018cm" height="1cm" />
+<text class="port left" x="1.75cm" y="7.07cm" >noack_address_i</text>
+<line class="connector" x1="1.5cm" y1="7.07cm" x2="0.5cm" y2="7.07cm" />
+<rect class="portBox" x="1.5cm" y="7.57cm" width="6.92018cm" height="1cm" />
+<text class="port left" x="1.75cm" y="8.07cm" >noack_data_i</text>
+<line class="connector" x1="1.5cm" y1="8.07cm" x2="0.5cm" y2="8.07cm" />
+<rect class="portBox" x="1.5cm" y="8.57cm" width="6.92018cm" height="1cm" />
+<text class="port left" x="1.75cm" y="9.07cm" >unexpected_sda_address_i</text>
+<line class="connector" x1="1.5cm" y1="9.07cm" x2="0.5cm" y2="9.07cm" />
+<rect class="portBox" x="1.5cm" y="9.57cm" width="6.92018cm" height="1cm" />
+<text class="port left" x="1.75cm" y="10.07cm" >unexpected_sda_data_i</text>
+<line class="connector" x1="1.5cm" y1="10.07cm" x2="0.5cm" y2="10.07cm" />
+<rect class="portBox" x="1.5cm" y="10.57cm" width="6.92018cm" height="1cm" />
+<text class="port left" x="1.75cm" y="11.07cm" >condition_early_i</text>
+<line class="connector" x1="1.5cm" y1="11.07cm" x2="0.5cm" y2="11.07cm" />
+<rect class="portBox" x="8.42018cm" y="2.57cm" width="6.92018cm" height="1cm" />
+<text class="port right" x="15.0904cm" y="3.07cm" >err_noack_address_o</text>
+<line class="connector" x1="15.3404cm" y1="3.07cm" x2="16.3404cm" y2="3.07cm" />
+<rect class="portBox" x="8.42018cm" y="3.57cm" width="6.92018cm" height="1cm" />
+<text class="port right" x="15.0904cm" y="4.07cm" >err_noack_data_o</text>
+<line class="connector" x1="15.3404cm" y1="4.07cm" x2="16.3404cm" y2="4.07cm" />
+<rect class="portBox" x="8.42018cm" y="4.57cm" width="6.92018cm" height="1cm" />
+<text class="port right" x="15.0904cm" y="5.07cm" >err_arbitration_o</text>
+<line class="connector" x1="15.3404cm" y1="5.07cm" x2="16.3404cm" y2="5.07cm" />
+<rect class="portBox" x="8.42018cm" y="5.57cm" width="6.92018cm" height="1cm" />
+<text class="port right" x="15.0904cm" y="6.07cm" >err_general_o</text>
+<line class="connector" x1="15.3404cm" y1="6.07cm" x2="16.3404cm" y2="6.07cm" />
+<rect class="portBox" x="1.5cm" y="11.57cm" width="6.92018cm" height="1cm" />
+<text class="port left" x="1.75cm" y="12.07cm" >start_condition_i</text>
+<line class="connector" x1="1.5cm" y1="12.07cm" x2="0.5cm" y2="12.07cm" />
+<rect class="portBox" x="1.5cm" y="12.57cm" width="6.92018cm" height="1cm" />
+<text class="port left" x="1.75cm" y="13.07cm" >stop_condition_i</text>
+<line class="connector" x1="1.5cm" y1="13.07cm" x2="0.5cm" y2="13.07cm" />
+<rect class="portBox" x="1.5cm" y="13.57cm" width="6.92018cm" height="1cm" />
+<text class="port left" x="1.75cm" y="14.07cm" >waiting_for_data_i</text>
+<line class="connector" x1="1.5cm" y1="14.07cm" x2="0.5cm" y2="14.07cm" />
+<rect class="portBox" x="1.5cm" y="14.57cm" width="6.92018cm" height="1cm" />
+<text class="port left" x="1.75cm" y="15.07cm" >rx_done_i</text>
+<line class="connector" x1="1.5cm" y1="15.07cm" x2="0.5cm" y2="15.07cm" />
+<rect class="portBox" x="1.5cm" y="15.57cm" width="6.92018cm" height="1cm" />
+<text class="port left" x="1.75cm" y="16.07cm" >tx_done_i</text>
+<line class="connector" x1="1.5cm" y1="16.07cm" x2="0.5cm" y2="16.07cm" />
+<rect class="portBox" x="8.42018cm" y="6.57cm" width="6.92018cm" height="1cm" />
+<text class="port right" x="15.0904cm" y="7.07cm" >address_gen_start_o</text>
+<line class="connector" x1="15.3404cm" y1="7.07cm" x2="16.3404cm" y2="7.07cm" />
+<rect class="portBox" x="1.5cm" y="16.57cm" width="6.92018cm" height="1cm" />
+<text class="port left" x="1.75cm" y="17.07cm" >address_gen_done_i</text>
+<line class="connector" x1="1.5cm" y1="17.07cm" x2="0.5cm" y2="17.07cm" />
+<rect class="portBox" x="8.42018cm" y="7.57cm" width="6.92018cm" height="1cm" />
+<text class="port right" x="15.0904cm" y="8.07cm" >address_gen_store_o</text>
+<line class="connector" x1="15.3404cm" y1="8.07cm" x2="16.3404cm" y2="8.07cm" />
+<rect class="portBox" x="8.42018cm" y="8.57cm" width="6.92018cm" height="1cm" />
+<text class="port right" x="15.0904cm" y="9.07cm" >req_start_o</text>
+<line class="connector" x1="15.3404cm" y1="9.07cm" x2="16.3404cm" y2="9.07cm" />
+<rect class="portBox" x="8.42018cm" y="9.57cm" width="6.92018cm" height="1cm" />
+<text class="port right" x="15.0904cm" y="10.07cm" >req_stop_o</text>
+<line class="connector" x1="15.3404cm" y1="10.07cm" x2="16.3404cm" y2="10.07cm" />
+<rect class="portBox" x="1.5cm" y="17.57cm" width="6.92018cm" height="1cm" />
+<text class="port left" x="1.75cm" y="18.07cm" >req_cond_done_i</text>
+<line class="connector" x1="1.5cm" y1="18.07cm" x2="0.5cm" y2="18.07cm" />
+<rect class="portBox" x="8.42018cm" y="10.57cm" width="6.92018cm" height="1cm" />
+<text class="port right" x="15.0904cm" y="11.07cm" >req_scl_continuous_o</text>
+<line class="connector" x1="15.3404cm" y1="11.07cm" x2="16.3404cm" y2="11.07cm" />
+<rect class="portBox" x="8.42018cm" y="11.57cm" width="6.92018cm" height="1cm" />
+<text class="port right" x="15.0904cm" y="12.07cm" >cond_gen_o</text>
+<line class="connector" x1="15.3404cm" y1="12.07cm" x2="16.3404cm" y2="12.07cm" />
+<rect class="portBox" x="8.42018cm" y="12.57cm" width="6.92018cm" height="1cm" />
+<text class="port right" x="15.0904cm" y="13.07cm" >address_gen_o</text>
+<line class="connector" x1="15.3404cm" y1="13.07cm" x2="16.3404cm" y2="13.07cm" />
+<rect class="portBox" x="8.42018cm" y="13.57cm" width="6.92018cm" height="1cm" />
+<text class="port right" x="15.0904cm" y="14.07cm" >receive_o</text>
+<line class="connector" x1="15.3404cm" y1="14.07cm" x2="16.3404cm" y2="14.07cm" />
+<rect class="portBox" x="8.42018cm" y="14.57cm" width="6.92018cm" height="1cm" />
+<text class="port right" x="15.0904cm" y="15.07cm" >transmit_o</text>
+<line class="connector" x1="15.3404cm" y1="15.07cm" x2="16.3404cm" y2="15.07cm" />
+<rect class="portBox" x="8.42018cm" y="15.57cm" width="6.92018cm" height="1cm" />
+<text class="port right" x="15.0904cm" y="16.07cm" >dev_busy_o</text>
+<line class="connector" x1="15.3404cm" y1="16.07cm" x2="16.3404cm" y2="16.07cm" />
+<rect class="portBox" x="8.42018cm" y="16.57cm" width="6.92018cm" height="1cm" />
+<text class="port right" x="15.0904cm" y="17.07cm" >bus_busy_o</text>
+<line class="connector" x1="15.3404cm" y1="17.07cm" x2="16.3404cm" y2="17.07cm" />
+<rect class="portBox" x="1.5cm" y="19.57cm" width="13.8404cm" height="1cm" />
+<text class="port center" x="8.42018cm" y="20.07cm" >rst_in</text>
+<line class="connector" x1="8.42018cm" y1="20.57cm" x2="8.42018cm" y2="21.57cm" />
+<circle class="connector" cx="8.42018cm" cy="20.745cm" r="0.125cm" />
+<rect class="portBox" x="1.5cm" y="18.57cm" width="6.92018cm" height="1cm" />
+<text class="port left" x="1.75cm" y="19.07cm" >clk_i</text>
+<line class="connector" x1="0.5cm" y1="19.07cm" x2="1.5cm" y2="19.07cm" />
+<line class="connector" x1="1.5cm" y1="19.22cm" x2="1.7cm" y2="19.07cm" />
+<line class="connector" x1="1.5cm" y1="18.92cm" x2="1.7cm" y2="19.07cm" />
+</g>
+</svg>
A doc/blocks/svg/rx.svg => doc/blocks/svg/rx.svg +145 -0
@@ 0,0 1,145 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="15.2535cm" height="13cm">
+<style type="text/css" >
+ <![CDATA[
+ /* Text styles */
+ .label {
+ font-family: Arial;
+ font-size: 10pt;
+ font-weight: normal;
+ }
+
+ .entity {
+ font-family: Arial;
+ font-size: 12pt;
+ font-weight: bold;
+ }
+
+ .port {
+ font-family: Arial;
+ font-size: 12pt;
+ font-weight: normal;
+ }
+
+ .vector {
+ font-family: Arial;
+ font-size: 10pt;
+ font-weight: normal;
+ }
+
+ .generics {
+ font-family: Arial;
+ font-size: 10pt;
+ font-weight: normal;
+ }
+
+ /* Text alignment */
+ .right {
+ dominant-baseline: central;
+ text-anchor: end;
+ }
+
+ .left {
+ dominant-baseline: central;
+ text-anchor: start;
+ }
+
+ .center {
+ dominant-baseline: central;
+ text-anchor: middle;
+ }
+
+ /* Shape styles */
+ .entityBox {
+ stroke-width: 0.05cm;
+ stroke: #000000;
+ fill: #FFFFFF;
+ }
+
+ .portBox {
+ stroke-width: 0.00cm;
+ stroke: #FFF;
+ fill: #FFFFFF;
+ }
+
+ .labelBox {
+ stroke-width: 0.00cm;
+ stroke: #000000;
+ fill: #FFFFFF;
+ }
+
+ .vectorLength {
+ stroke-width: 0.00cm;
+ fill: #FFFFFF;
+ }
+
+ .genericsBox {
+ stroke-width: 0.02cm;
+ stroke: #BFBFBF;
+ fill: #F2F2F2;
+ }
+
+ .connector {
+ stroke-width: 0.025cm;
+ stroke: #000000;
+ fill: #FFFFFF;
+ }
+
+ ]]>
+</style>
+<g>
+<rect class="labelBox" x="1.5cm" y="-0.43cm" width="12.2535cm" height="1cm" />
+<text class="label center" x="7.62674cm" y="0.07cm" ></text>
+<rect class="entityBox" x="1.475cm" y="0.545cm" width="12.3035cm" height="10.05cm" />
+<text class="entity center" x="7.62674cm" y="1.07cm" >rx</text>
+<rect class="portBox" x="1.5cm" y="1.57cm" width="6.12674cm" height="1cm" />
+<text class="port left" x="1.75cm" y="2.07cm" >start_read_i</text>
+<line class="connector" x1="1.5cm" y1="2.07cm" x2="0.5cm" y2="2.07cm" />
+<rect class="portBox" x="1.5cm" y="2.57cm" width="6.12674cm" height="1cm" />
+<text class="port left" x="1.75cm" y="3.07cm" >rst_i2c_i</text>
+<line class="connector" x1="1.5cm" y1="3.07cm" x2="0.5cm" y2="3.07cm" />
+<rect class="portBox" x="1.5cm" y="3.57cm" width="6.12674cm" height="1cm" />
+<text class="port left" x="1.75cm" y="4.07cm" >scl_rising</text>
+<line class="connector" x1="1.5cm" y1="4.07cm" x2="0.5cm" y2="4.07cm" />
+<rect class="portBox" x="1.5cm" y="4.57cm" width="6.12674cm" height="1cm" />
+<text class="port left" x="1.75cm" y="5.07cm" >scl_falling_delayed_i</text>
+<line class="connector" x1="1.5cm" y1="5.07cm" x2="0.5cm" y2="5.07cm" />
+<rect class="portBox" x="7.62674cm" y="1.57cm" width="6.12674cm" height="1cm" />
+<text class="port right" x="13.5035cm" y="2.07cm" >scl_stretch_o</text>
+<line class="connector" x1="13.7535cm" y1="2.07cm" x2="14.7535cm" y2="2.07cm" />
+<rect class="portBox" x="1.5cm" y="5.57cm" width="6.12674cm" height="1cm" />
+<text class="port left" x="1.75cm" y="6.07cm" >sda_i</text>
+<line class="connector" x1="1.5cm" y1="6.07cm" x2="0.5cm" y2="6.07cm" />
+<rect class="portBox" x="7.62674cm" y="2.57cm" width="6.12674cm" height="1cm" />
+<text class="port right" x="13.5035cm" y="3.07cm" >sda_enable_o</text>
+<line class="connector" x1="13.7535cm" y1="3.07cm" x2="14.7535cm" y2="3.07cm" />
+<rect class="portBox" x="7.62674cm" y="3.57cm" width="6.12674cm" height="1cm" />
+<text class="port right" x="13.5035cm" y="4.07cm" >done_o</text>
+<line class="connector" x1="13.7535cm" y1="4.07cm" x2="14.7535cm" y2="4.07cm" />
+<rect class="portBox" x="1.5cm" y="6.57cm" width="6.12674cm" height="1cm" />
+<text class="port left" x="1.75cm" y="7.07cm" >generate_ack_i</text>
+<line class="connector" x1="1.5cm" y1="7.07cm" x2="0.5cm" y2="7.07cm" />
+<rect class="portBox" x="7.62674cm" y="4.57cm" width="6.12674cm" height="1cm" />
+<text class="port right" x="13.5035cm" y="5.07cm" >read_valid_o</text>
+<line class="connector" x1="13.7535cm" y1="5.07cm" x2="14.7535cm" y2="5.07cm" />
+<rect class="portBox" x="7.62674cm" y="5.57cm" width="6.12674cm" height="1cm" />
+<text class="port right" x="13.5035cm" y="6.07cm" >read_ready_o</text>
+<line class="connector" x1="13.7535cm" y1="6.07cm" x2="14.7535cm" y2="6.07cm" />
+<rect class="portBox" x="7.62674cm" y="6.57cm" width="6.12674cm" height="1cm" />
+<text class="port right" x="13.5035cm" y="7.07cm" >read_data_o</text>
+<line class="connector" x1="13.7535cm" y1="7.07cm" x2="14.7535cm" y2="7.07cm" />
+<line class="connector" x1="14.0035cm" y1="7.32cm" x2="14.5035cm" y2="6.82cm" />
+<text class="vector left" x="14.1535cm" y="6.67cm" >8</text>
+<rect class="portBox" x="1.5cm" y="7.57cm" width="6.12674cm" height="1cm" />
+<text class="port left" x="1.75cm" y="8.07cm" >confirm_read_i</text>
+<line class="connector" x1="1.5cm" y1="8.07cm" x2="0.5cm" y2="8.07cm" />
+<rect class="portBox" x="1.5cm" y="9.57cm" width="12.2535cm" height="1cm" />
+<text class="port center" x="7.62674cm" y="10.07cm" >rst_in</text>
+<line class="connector" x1="7.62674cm" y1="10.57cm" x2="7.62674cm" y2="11.57cm" />
+<circle class="connector" cx="7.62674cm" cy="10.745cm" r="0.125cm" />
+<rect class="portBox" x="1.5cm" y="8.57cm" width="6.12674cm" height="1cm" />
+<text class="port left" x="1.75cm" y="9.07cm" >clk_i</text>
+<line class="connector" x1="0.5cm" y1="9.07cm" x2="1.5cm" y2="9.07cm" />
+<line class="connector" x1="1.5cm" y1="9.22cm" x2="1.7cm" y2="9.07cm" />
+<line class="connector" x1="1.5cm" y1="8.92cm" x2="1.7cm" y2="9.07cm" />
+</g>
+</svg>
A doc/blocks/svg/scl_generator.svg => doc/blocks/svg/scl_generator.svg +132 -0
@@ 0,0 1,132 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16.7966cm" height="11.5cm">
+<style type="text/css" >
+ <![CDATA[
+ /* Text styles */
+ .label {
+ font-family: Arial;
+ font-size: 10pt;
+ font-weight: normal;
+ }
+
+ .entity {
+ font-family: Arial;
+ font-size: 12pt;
+ font-weight: bold;
+ }
+
+ .port {
+ font-family: Arial;
+ font-size: 12pt;
+ font-weight: normal;
+ }
+
+ .vector {
+ font-family: Arial;
+ font-size: 10pt;
+ font-weight: normal;
+ }
+
+ .generics {
+ font-family: Arial;
+ font-size: 10pt;
+ font-weight: normal;
+ }
+
+ /* Text alignment */
+ .right {
+ dominant-baseline: central;
+ text-anchor: end;
+ }
+
+ .left {
+ dominant-baseline: central;
+ text-anchor: start;
+ }
+
+ .center {
+ dominant-baseline: central;
+ text-anchor: middle;
+ }
+
+ /* Shape styles */
+ .entityBox {
+ stroke-width: 0.05cm;
+ stroke: #000000;
+ fill: #FFFFFF;
+ }
+
+ .portBox {
+ stroke-width: 0.00cm;
+ stroke: #FFF;
+ fill: #FFFFFF;
+ }
+
+ .labelBox {
+ stroke-width: 0.00cm;
+ stroke: #000000;
+ fill: #FFFFFF;
+ }
+
+ .vectorLength {
+ stroke-width: 0.00cm;
+ fill: #FFFFFF;
+ }
+
+ .genericsBox {
+ stroke-width: 0.02cm;
+ stroke: #BFBFBF;
+ fill: #F2F2F2;
+ }
+
+ .connector {
+ stroke-width: 0.025cm;
+ stroke: #000000;
+ fill: #FFFFFF;
+ }
+
+ ]]>
+</style>
+<g>
+<rect class="genericsBox" x="11.1087cm" y="0.5cm" width="5.18795cm" height="0.5cm" />
+<text class="generics" x="11.2337cm" y="0.875cm" >MIN_STABLE_CYCLES = 5</text>
+</g>
+<g>
+<rect class="labelBox" x="1.5cm" y="0cm" width="9.60868cm" height="1cm" />
+<text class="label center" x="6.30434cm" y="0.5cm" ></text>
+<rect class="entityBox" x="1.475cm" y="0.975cm" width="9.65868cm" height="9.05cm" />
+<text class="entity center" x="6.30434cm" y="1.5cm" >scl_generator</text>
+<rect class="portBox" x="1.5cm" y="2cm" width="4.80434cm" height="1cm" />
+<text class="port left" x="1.75cm" y="2.5cm" >scl_i</text>
+<line class="connector" x1="1.5cm" y1="2.5cm" x2="0.5cm" y2="2.5cm" />
+<rect class="portBox" x="1.5cm" y="3cm" width="4.80434cm" height="1cm" />
+<text class="port left" x="1.75cm" y="3.5cm" >scl_rising_i</text>
+<line class="connector" x1="1.5cm" y1="3.5cm" x2="0.5cm" y2="3.5cm" />
+<rect class="portBox" x="1.5cm" y="4cm" width="4.80434cm" height="1cm" />
+<text class="port left" x="1.75cm" y="4.5cm" >scl_falling_i</text>
+<line class="connector" x1="1.5cm" y1="4.5cm" x2="0.5cm" y2="4.5cm" />
+<rect class="portBox" x="1.5cm" y="5cm" width="4.80434cm" height="1cm" />
+<text class="port left" x="1.75cm" y="5.5cm" >gen_continuous_i</text>
+<line class="connector" x1="1.5cm" y1="5.5cm" x2="0.5cm" y2="5.5cm" />
+<rect class="portBox" x="1.5cm" y="6cm" width="4.80434cm" height="1cm" />
+<text class="port left" x="1.75cm" y="6.5cm" >gen_rising_i</text>
+<line class="connector" x1="1.5cm" y1="6.5cm" x2="0.5cm" y2="6.5cm" />
+<rect class="portBox" x="1.5cm" y="7cm" width="4.80434cm" height="1cm" />
+<text class="port left" x="1.75cm" y="7.5cm" >gen_falling_i</text>
+<line class="connector" x1="1.5cm" y1="7.5cm" x2="0.5cm" y2="7.5cm" />
+<rect class="portBox" x="6.30434cm" y="2cm" width="4.80434cm" height="1cm" />
+<text class="port right" x="10.8587cm" y="2.5cm" >scl_enable_o</text>
+<line class="connector" x1="11.1087cm" y1="2.5cm" x2="12.1087cm" y2="2.5cm" />
+<rect class="portBox" x="6.30434cm" y="3cm" width="4.80434cm" height="1cm" />
+<text class="port right" x="10.8587cm" y="3.5cm" >cannot_comply_o</text>
+<line class="connector" x1="11.1087cm" y1="3.5cm" x2="12.1087cm" y2="3.5cm" />
+<rect class="portBox" x="1.5cm" y="9cm" width="9.60868cm" height="1cm" />
+<text class="port center" x="6.30434cm" y="9.5cm" >rst_in</text>
+<line class="connector" x1="6.30434cm" y1="10cm" x2="6.30434cm" y2="11cm" />
+<circle class="connector" cx="6.30434cm" cy="10.175cm" r="0.125cm" />
+<rect class="portBox" x="1.5cm" y="8cm" width="4.80434cm" height="1cm" />
+<text class="port left" x="1.75cm" y="8.5cm" >clk_i</text>
+<line class="connector" x1="0.5cm" y1="8.5cm" x2="1.5cm" y2="8.5cm" />
+<line class="connector" x1="1.5cm" y1="8.65cm" x2="1.7cm" y2="8.5cm" />
+<line class="connector" x1="1.5cm" y1="8.35cm" x2="1.7cm" y2="8.5cm" />
+</g>
+</svg>
A doc/blocks/svg/slave.svg => doc/blocks/svg/slave.svg +180 -0
@@ 0,0 1,180 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="17.3256cm" height="16.5cm">
+<style type="text/css" >
+ <![CDATA[
+ /* Text styles */
+ .label {
+ font-family: Arial;
+ font-size: 10pt;
+ font-weight: normal;
+ }
+
+ .entity {
+ font-family: Arial;
+ font-size: 12pt;
+ font-weight: bold;
+ }
+
+ .port {
+ font-family: Arial;
+ font-size: 12pt;
+ font-weight: normal;
+ }
+
+ .vector {
+ font-family: Arial;
+ font-size: 10pt;
+ font-weight: normal;
+ }
+
+ .generics {
+ font-family: Arial;
+ font-size: 10pt;
+ font-weight: normal;
+ }
+
+ /* Text alignment */
+ .right {
+ dominant-baseline: central;
+ text-anchor: end;
+ }
+
+ .left {
+ dominant-baseline: central;
+ text-anchor: start;
+ }
+
+ .center {
+ dominant-baseline: central;
+ text-anchor: middle;
+ }
+
+ /* Shape styles */
+ .entityBox {
+ stroke-width: 0.05cm;
+ stroke: #000000;
+ fill: #FFFFFF;
+ }
+
+ .portBox {
+ stroke-width: 0.00cm;
+ stroke: #FFF;
+ fill: #FFFFFF;
+ }
+
+ .labelBox {
+ stroke-width: 0.00cm;
+ stroke: #000000;
+ fill: #FFFFFF;
+ }
+
+ .vectorLength {
+ stroke-width: 0.00cm;
+ fill: #FFFFFF;
+ }
+
+ .genericsBox {
+ stroke-width: 0.02cm;
+ stroke: #BFBFBF;
+ fill: #F2F2F2;
+ }
+
+ .connector {
+ stroke-width: 0.025cm;
+ stroke: #000000;
+ fill: #FFFFFF;
+ }
+
+ ]]>
+</style>
+<g>
+<rect class="genericsBox" x="11.6376cm" y="0.5cm" width="5.18795cm" height="0.5cm" />
+<text class="generics" x="11.7626cm" y="0.875cm" >SCL_FALLING_DELAY = 5</text>
+</g>
+<g>
+<rect class="labelBox" x="1.5cm" y="0cm" width="10.1376cm" height="1cm" />
+<text class="label center" x="6.56882cm" y="0.5cm" ></text>
+<rect class="entityBox" x="1.475cm" y="0.975cm" width="10.1876cm" height="14.05cm" />
+<text class="entity center" x="6.56882cm" y="1.5cm" >slave</text>
+<rect class="portBox" x="1.5cm" y="2cm" width="5.06882cm" height="1cm" />
+<text class="port left" x="1.75cm" y="2.5cm" >address_i</text>
+<line class="connector" x1="1.5cm" y1="2.5cm" x2="0.5cm" y2="2.5cm" />
+<line class="connector" x1="0.75cm" y1="2.75cm" x2="1.25cm" y2="2.25cm" />
+<text class="vector right" x="1.1cm" y="2.1cm" >7</text>
+<rect class="portBox" x="1.5cm" y="3cm" width="5.06882cm" height="1cm" />
+<text class="port left" x="1.75cm" y="3.5cm" >generate_ack_i</text>
+<line class="connector" x1="1.5cm" y1="3.5cm" x2="0.5cm" y2="3.5cm" />
+<rect class="portBox" x="1.5cm" y="4cm" width="5.06882cm" height="1cm" />
+<text class="port left" x="1.75cm" y="4.5cm" >expect_ack_i</text>
+<line class="connector" x1="1.5cm" y1="4.5cm" x2="0.5cm" y2="4.5cm" />
+<rect class="portBox" x="6.56882cm" y="2cm" width="5.06882cm" height="1cm" />
+<text class="port right" x="11.3876cm" y="2.5cm" >rx_valid_o</text>
+<line class="connector" x1="11.6376cm" y1="2.5cm" x2="12.6376cm" y2="2.5cm" />
+<rect class="portBox" x="6.56882cm" y="3cm" width="5.06882cm" height="1cm" />
+<text class="port right" x="11.3876cm" y="3.5cm" >rx_data_o</text>
+<line class="connector" x1="11.6376cm" y1="3.5cm" x2="12.6376cm" y2="3.5cm" />
+<line class="connector" x1="11.8876cm" y1="3.75cm" x2="12.3876cm" y2="3.25cm" />
+<text class="vector left" x="12.0376cm" y="3.1cm" >8</text>
+<rect class="portBox" x="1.5cm" y="5cm" width="5.06882cm" height="1cm" />
+<text class="port left" x="1.75cm" y="5.5cm" >rx_confirm_i</text>
+<line class="connector" x1="1.5cm" y1="5.5cm" x2="0.5cm" y2="5.5cm" />
+<rect class="portBox" x="1.5cm" y="6cm" width="5.06882cm" height="1cm" />
+<text class="port left" x="1.75cm" y="6.5cm" >rx_stretch_i</text>
+<line class="connector" x1="1.5cm" y1="6.5cm" x2="0.5cm" y2="6.5cm" />
+<rect class="portBox" x="6.56882cm" y="4cm" width="5.06882cm" height="1cm" />
+<text class="port right" x="11.3876cm" y="4.5cm" >tx_ready_o</text>
+<line class="connector" x1="11.6376cm" y1="4.5cm" x2="12.6376cm" y2="4.5cm" />
+<rect class="portBox" x="1.5cm" y="7cm" width="5.06882cm" height="1cm" />
+<text class="port left" x="1.75cm" y="7.5cm" >tx_valid_i</text>
+<line class="connector" x1="1.5cm" y1="7.5cm" x2="0.5cm" y2="7.5cm" />
+<rect class="portBox" x="1.5cm" y="8cm" width="5.06882cm" height="1cm" />
+<text class="port left" x="1.75cm" y="8.5cm" >tx_data_i</text>
+<line class="connector" x1="1.5cm" y1="8.5cm" x2="0.5cm" y2="8.5cm" />
+<line class="connector" x1="0.75cm" y1="8.75cm" x2="1.25cm" y2="8.25cm" />
+<text class="vector right" x="1.1cm" y="8.1cm" >8</text>
+<rect class="portBox" x="1.5cm" y="9cm" width="5.06882cm" height="1cm" />
+<text class="port left" x="1.75cm" y="9.5cm" >tx_stretch_i</text>
+<line class="connector" x1="1.5cm" y1="9.5cm" x2="0.5cm" y2="9.5cm" />
+<rect class="portBox" x="1.5cm" y="10cm" width="5.06882cm" height="1cm" />
+<text class="port left" x="1.75cm" y="10.5cm" >tx_clear_buffer_i</text>
+<line class="connector" x1="1.5cm" y1="10.5cm" x2="0.5cm" y2="10.5cm" />
+<rect class="portBox" x="6.56882cm" y="5cm" width="5.06882cm" height="1cm" />
+<text class="port right" x="11.3876cm" y="5.5cm" >err_noack_o</text>
+<line class="connector" x1="11.6376cm" y1="5.5cm" x2="12.6376cm" y2="5.5cm" />
+<rect class="portBox" x="6.56882cm" y="6cm" width="5.06882cm" height="1cm" />
+<text class="port right" x="11.3876cm" y="6.5cm" >err_sda_o</text>
+<line class="connector" x1="11.6376cm" y1="6.5cm" x2="12.6376cm" y2="6.5cm" />
+<rect class="portBox" x="6.56882cm" y="7cm" width="5.06882cm" height="1cm" />
+<text class="port right" x="11.3876cm" y="7.5cm" >rw_o</text>
+<line class="connector" x1="11.6376cm" y1="7.5cm" x2="12.6376cm" y2="7.5cm" />
+<rect class="portBox" x="6.56882cm" y="8cm" width="5.06882cm" height="1cm" />
+<text class="port right" x="11.3876cm" y="8.5cm" >dev_busy_o</text>
+<line class="connector" x1="11.6376cm" y1="8.5cm" x2="12.6376cm" y2="8.5cm" />
+<rect class="portBox" x="6.56882cm" y="9cm" width="5.06882cm" height="1cm" />
+<text class="port right" x="11.3876cm" y="9.5cm" >bus_busy_o</text>
+<line class="connector" x1="11.6376cm" y1="9.5cm" x2="12.6376cm" y2="9.5cm" />
+<rect class="portBox" x="6.56882cm" y="10cm" width="5.06882cm" height="1cm" />
+<text class="port right" x="11.3876cm" y="10.5cm" >waiting_o</text>
+<line class="connector" x1="11.6376cm" y1="10.5cm" x2="12.6376cm" y2="10.5cm" />
+<rect class="portBox" x="1.5cm" y="11cm" width="5.06882cm" height="1cm" />
+<text class="port left" x="1.75cm" y="11.5cm" >sda_i</text>
+<line class="connector" x1="1.5cm" y1="11.5cm" x2="0.5cm" y2="11.5cm" />
+<rect class="portBox" x="1.5cm" y="12cm" width="5.06882cm" height="1cm" />
+<text class="port left" x="1.75cm" y="12.5cm" >scl_i</text>
+<line class="connector" x1="1.5cm" y1="12.5cm" x2="0.5cm" y2="12.5cm" />
+<rect class="portBox" x="6.56882cm" y="11cm" width="5.06882cm" height="1cm" />
+<text class="port right" x="11.3876cm" y="11.5cm" >sda_enable_o</text>
+<line class="connector" x1="11.6376cm" y1="11.5cm" x2="12.6376cm" y2="11.5cm" />
+<rect class="portBox" x="6.56882cm" y="12cm" width="5.06882cm" height="1cm" />
+<text class="port right" x="11.3876cm" y="12.5cm" >scl_enable_o</text>
+<line class="connector" x1="11.6376cm" y1="12.5cm" x2="12.6376cm" y2="12.5cm" />
+<rect class="portBox" x="1.5cm" y="14cm" width="10.1376cm" height="1cm" />
+<text class="port center" x="6.56882cm" y="14.5cm" >rst_in</text>
+<line class="connector" x1="6.56882cm" y1="15cm" x2="6.56882cm" y2="16cm" />
+<circle class="connector" cx="6.56882cm" cy="15.175cm" r="0.125cm" />
+<rect class="portBox" x="1.5cm" y="13cm" width="5.06882cm" height="1cm" />
+<text class="port left" x="1.75cm" y="13.5cm" >clk_i</text>
+<line class="connector" x1="0.5cm" y1="13.5cm" x2="1.5cm" y2="13.5cm" />
+<line class="connector" x1="1.5cm" y1="13.65cm" x2="1.7cm" y2="13.5cm" />
+<line class="connector" x1="1.5cm" y1="13.35cm" x2="1.7cm" y2="13.5cm" />
+</g>
+</svg>
A doc/blocks/svg/slave_state.svg => doc/blocks/svg/slave_state.svg +155 -0
@@ 0,0 1,155 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16.8404cm" height="14cm">
+<style type="text/css" >
+ <![CDATA[
+ /* Text styles */
+ .label {
+ font-family: Arial;
+ font-size: 10pt;
+ font-weight: normal;
+ }
+
+ .entity {
+ font-family: Arial;
+ font-size: 12pt;
+ font-weight: bold;
+ }
+
+ .port {
+ font-family: Arial;
+ font-size: 12pt;
+ font-weight: normal;
+ }
+
+ .vector {
+ font-family: Arial;
+ font-size: 10pt;
+ font-weight: normal;
+ }
+
+ .generics {
+ font-family: Arial;
+ font-size: 10pt;
+ font-weight: normal;
+ }
+
+ /* Text alignment */
+ .right {
+ dominant-baseline: central;
+ text-anchor: end;
+ }
+
+ .left {
+ dominant-baseline: central;
+ text-anchor: start;
+ }
+
+ .center {
+ dominant-baseline: central;
+ text-anchor: middle;
+ }
+
+ /* Shape styles */
+ .entityBox {
+ stroke-width: 0.05cm;
+ stroke: #000000;
+ fill: #FFFFFF;
+ }
+
+ .portBox {
+ stroke-width: 0.00cm;
+ stroke: #FFF;
+ fill: #FFFFFF;
+ }
+
+ .labelBox {
+ stroke-width: 0.00cm;
+ stroke: #000000;
+ fill: #FFFFFF;
+ }
+
+ .vectorLength {
+ stroke-width: 0.00cm;
+ fill: #FFFFFF;
+ }
+
+ .genericsBox {
+ stroke-width: 0.02cm;
+ stroke: #BFBFBF;
+ fill: #F2F2F2;
+ }
+
+ .connector {
+ stroke-width: 0.025cm;
+ stroke: #000000;
+ fill: #FFFFFF;
+ }
+
+ ]]>
+</style>
+<g>
+<rect class="labelBox" x="1.5cm" y="-0.43cm" width="13.8404cm" height="1cm" />
+<text class="label center" x="8.42018cm" y="0.07cm" ></text>
+<rect class="entityBox" x="1.475cm" y="0.545cm" width="13.8904cm" height="11.05cm" />
+<text class="entity center" x="8.42018cm" y="1.07cm" >i2c_slave_state</text>
+<rect class="portBox" x="8.42018cm" y="1.57cm" width="6.92018cm" height="1cm" />
+<text class="port right" x="15.0904cm" y="2.07cm" >rst_i2c_o</text>
+<line class="connector" x1="15.3404cm" y1="2.07cm" x2="16.3404cm" y2="2.07cm" />
+<rect class="portBox" x="1.5cm" y="1.57cm" width="6.92018cm" height="1cm" />
+<text class="port left" x="1.75cm" y="2.07cm" >noack_i</text>
+<line class="connector" x1="1.5cm" y1="2.07cm" x2="0.5cm" y2="2.07cm" />
+<rect class="portBox" x="1.5cm" y="2.57cm" width="6.92018cm" height="1cm" />
+<text class="port left" x="1.75cm" y="3.07cm" >expect_ack_i</text>
+<line class="connector" x1="1.5cm" y1="3.07cm" x2="0.5cm" y2="3.07cm" />
+<rect class="portBox" x="1.5cm" y="3.57cm" width="6.92018cm" height="1cm" />
+<text class="port left" x="1.75cm" y="4.07cm" >unexpected_sda_i</text>
+<line class="connector" x1="1.5cm" y1="4.07cm" x2="0.5cm" y2="4.07cm" />
+<rect class="portBox" x="8.42018cm" y="2.57cm" width="6.92018cm" height="1cm" />
+<text class="port right" x="15.0904cm" y="3.07cm" >err_noack_o</text>
+<line class="connector" x1="15.3404cm" y1="3.07cm" x2="16.3404cm" y2="3.07cm" />
+<rect class="portBox" x="8.42018cm" y="3.57cm" width="6.92018cm" height="1cm" />
+<text class="port right" x="15.0904cm" y="4.07cm" >err_sda_o</text>
+<line class="connector" x1="15.3404cm" y1="4.07cm" x2="16.3404cm" y2="4.07cm" />
+<rect class="portBox" x="1.5cm" y="4.57cm" width="6.92018cm" height="1cm" />
+<text class="port left" x="1.75cm" y="5.07cm" >start_condition_i</text>
+<line class="connector" x1="1.5cm" y1="5.07cm" x2="0.5cm" y2="5.07cm" />
+<rect class="portBox" x="1.5cm" y="5.57cm" width="6.92018cm" height="1cm" />
+<text class="port left" x="1.75cm" y="6.07cm" >stop_condition_i</text>
+<line class="connector" x1="1.5cm" y1="6.07cm" x2="0.5cm" y2="6.07cm" />
+<rect class="portBox" x="1.5cm" y="6.57cm" width="6.92018cm" height="1cm" />
+<text class="port left" x="1.75cm" y="7.07cm" >rw_i</text>
+<line class="connector" x1="1.5cm" y1="7.07cm" x2="0.5cm" y2="7.07cm" />
+<rect class="portBox" x="1.5cm" y="7.57cm" width="6.92018cm" height="1cm" />
+<text class="port left" x="1.75cm" y="8.07cm" >address_detect_success_i</text>
+<line class="connector" x1="1.5cm" y1="8.07cm" x2="0.5cm" y2="8.07cm" />
+<rect class="portBox" x="1.5cm" y="8.57cm" width="6.92018cm" height="1cm" />
+<text class="port left" x="1.75cm" y="9.07cm" >address_detect_fail_i</text>
+<line class="connector" x1="1.5cm" y1="9.07cm" x2="0.5cm" y2="9.07cm" />
+<rect class="portBox" x="8.42018cm" y="4.57cm" width="6.92018cm" height="1cm" />
+<text class="port right" x="15.0904cm" y="5.07cm" >address_detect_start_o</text>
+<line class="connector" x1="15.3404cm" y1="5.07cm" x2="16.3404cm" y2="5.07cm" />
+<rect class="portBox" x="8.42018cm" y="5.57cm" width="6.92018cm" height="1cm" />
+<text class="port right" x="15.0904cm" y="6.07cm" >address_detect_store_o</text>
+<line class="connector" x1="15.3404cm" y1="6.07cm" x2="16.3404cm" y2="6.07cm" />
+<rect class="portBox" x="8.42018cm" y="6.57cm" width="6.92018cm" height="1cm" />
+<text class="port right" x="15.0904cm" y="7.07cm" >address_detect_o</text>
+<line class="connector" x1="15.3404cm" y1="7.07cm" x2="16.3404cm" y2="7.07cm" />
+<rect class="portBox" x="8.42018cm" y="7.57cm" width="6.92018cm" height="1cm" />
+<text class="port right" x="15.0904cm" y="8.07cm" >receive_o</text>
+<line class="connector" x1="15.3404cm" y1="8.07cm" x2="16.3404cm" y2="8.07cm" />
+<rect class="portBox" x="8.42018cm" y="8.57cm" width="6.92018cm" height="1cm" />
+<text class="port right" x="15.0904cm" y="9.07cm" >transmit_o</text>
+<line class="connector" x1="15.3404cm" y1="9.07cm" x2="16.3404cm" y2="9.07cm" />
+<rect class="portBox" x="8.42018cm" y="9.57cm" width="6.92018cm" height="1cm" />
+<text class="port right" x="15.0904cm" y="10.07cm" >bus_busy_o</text>
+<line class="connector" x1="15.3404cm" y1="10.07cm" x2="16.3404cm" y2="10.07cm" />
+<rect class="portBox" x="1.5cm" y="10.57cm" width="13.8404cm" height="1cm" />
+<text class="port center" x="8.42018cm" y="11.07cm" >rst_in</text>
+<line class="connector" x1="8.42018cm" y1="11.57cm" x2="8.42018cm" y2="12.57cm" />
+<circle class="connector" cx="8.42018cm" cy="11.745cm" r="0.125cm" />
+<rect class="portBox" x="1.5cm" y="9.57cm" width="6.92018cm" height="1cm" />
+<text class="port left" x="1.75cm" y="10.07cm" >clk_i</text>
+<line class="connector" x1="0.5cm" y1="10.07cm" x2="1.5cm" y2="10.07cm" />
+<line class="connector" x1="1.5cm" y1="10.22cm" x2="1.7cm" y2="10.07cm" />
+<line class="connector" x1="1.5cm" y1="9.92cm" x2="1.7cm" y2="10.07cm" />
+</g>
+</svg>
A doc/blocks/svg/startstop_condition_detector.svg => doc/blocks/svg/startstop_condition_detector.svg +112 -0
@@ 0,0 1,112 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="10.9781cm" height="6cm">
+<style type="text/css" >
+ <![CDATA[
+ /* Text styles */
+ .label {
+ font-family: Arial;
+ font-size: 10pt;
+ font-weight: normal;
+ }
+
+ .entity {
+ font-family: Arial;
+ font-size: 12pt;
+ font-weight: bold;
+ }
+
+ .port {
+ font-family: Arial;
+ font-size: 12pt;
+ font-weight: normal;
+ }
+
+ .vector {
+ font-family: Arial;
+ font-size: 10pt;
+ font-weight: normal;
+ }
+
+ .generics {
+ font-family: Arial;
+ font-size: 10pt;
+ font-weight: normal;
+ }
+
+ /* Text alignment */
+ .right {
+ dominant-baseline: central;
+ text-anchor: end;
+ }
+
+ .left {
+ dominant-baseline: central;
+ text-anchor: start;
+ }
+
+ .center {
+ dominant-baseline: central;
+ text-anchor: middle;
+ }
+
+ /* Shape styles */
+ .entityBox {
+ stroke-width: 0.05cm;
+ stroke: #000000;
+ fill: #FFFFFF;
+ }
+
+ .portBox {
+ stroke-width: 0.00cm;
+ stroke: #FFF;
+ fill: #FFFFFF;
+ }
+
+ .labelBox {
+ stroke-width: 0.00cm;
+ stroke: #000000;
+ fill: #FFFFFF;
+ }
+
+ .vectorLength {
+ stroke-width: 0.00cm;
+ fill: #FFFFFF;
+ }
+
+ .genericsBox {
+ stroke-width: 0.02cm;
+ stroke: #BFBFBF;
+ fill: #F2F2F2;
+ }
+
+ .connector {
+ stroke-width: 0.025cm;
+ stroke: #000000;
+ fill: #FFFFFF;
+ }
+
+ ]]>
+</style>
+<g>
+<rect class="labelBox" x="1.5cm" y="-0.43cm" width="7.9781cm" height="1cm" />
+<text class="label center" x="5.48905cm" y="0.07cm" ></text>
+<rect class="entityBox" x="1.475cm" y="0.545cm" width="8.0281cm" height="4.05cm" />
+<text class="entity center" x="5.48905cm" y="1.07cm" >startstop_condition_detector</text>
+<rect class="portBox" x="1.5cm" y="1.57cm" width="3.98905cm" height="1cm" />
+<text class="port left" x="1.75cm" y="2.07cm" >sda_i</text>
+<line class="connector" x1="1.5cm" y1="2.07cm" x2="0.5cm" y2="2.07cm" />
+<rect class="portBox" x="1.5cm" y="2.57cm" width="3.98905cm" height="1cm" />
+<text class="port left" x="1.75cm" y="3.07cm" >scl_i</text>
+<line class="connector" x1="1.5cm" y1="3.07cm" x2="0.5cm" y2="3.07cm" />
+<rect class="portBox" x="5.48905cm" y="1.57cm" width="3.98905cm" height="1cm" />
+<text class="port right" x="9.2281cm" y="2.07cm" >start_o</text>
+<line class="connector" x1="9.4781cm" y1="2.07cm" x2="10.4781cm" y2="2.07cm" />
+<rect class="portBox" x="5.48905cm" y="2.57cm" width="3.98905cm" height="1cm" />
+<text class="port right" x="9.2281cm" y="3.07cm" >stop_o</text>
+<line class="connector" x1="9.4781cm" y1="3.07cm" x2="10.4781cm" y2="3.07cm" />
+<rect class="portBox" x="1.5cm" y="3.57cm" width="3.98905cm" height="1cm" />
+<text class="port left" x="1.75cm" y="4.07cm" >clk_i</text>
+<line class="connector" x1="0.5cm" y1="4.07cm" x2="1.5cm" y2="4.07cm" />
+<line class="connector" x1="1.5cm" y1="3.92cm" x2="1.7cm" y2="4.07cm" />
+<line class="connector" x1="1.5cm" y1="4.22cm" x2="1.7cm" y2="4.07cm" />
+</g>
+</svg>
A doc/blocks/svg/startstop_condition_generator.svg => doc/blocks/svg/startstop_condition_generator.svg +147 -0
@@ 0,0 1,147 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="15.915cm" height="13.5cm">
+<style type="text/css" >
+ <![CDATA[
+ /* Text styles */
+ .label {
+ font-family: Arial;
+ font-size: 10pt;
+ font-weight: normal;
+ }
+
+ .entity {
+ font-family: Arial;
+ font-size: 12pt;
+ font-weight: bold;
+ }
+
+ .port {
+ font-family: Arial;
+ font-size: 12pt;
+ font-weight: normal;
+ }
+
+ .vector {
+ font-family: Arial;
+ font-size: 10pt;
+ font-weight: normal;
+ }
+
+ .generics {
+ font-family: Arial;
+ font-size: 10pt;
+ font-weight: normal;
+ }
+
+ /* Text alignment */
+ .right {
+ dominant-baseline: central;
+ text-anchor: end;
+ }
+
+ .left {
+ dominant-baseline: central;
+ text-anchor: start;
+ }
+
+ .center {
+ dominant-baseline: central;
+ text-anchor: middle;
+ }
+
+ /* Shape styles */
+ .entityBox {
+ stroke-width: 0.05cm;
+ stroke: #000000;
+ fill: #FFFFFF;
+ }
+
+ .portBox {
+ stroke-width: 0.00cm;
+ stroke: #FFF;
+ fill: #FFFFFF;
+ }
+
+ .labelBox {
+ stroke-width: 0.00cm;
+ stroke: #000000;
+ fill: #FFFFFF;
+ }
+
+ .vectorLength {
+ stroke-width: 0.00cm;
+ fill: #FFFFFF;
+ }
+
+ .genericsBox {
+ stroke-width: 0.02cm;
+ stroke: #BFBFBF;
+ fill: #F2F2F2;
+ }
+
+ .connector {
+ stroke-width: 0.025cm;
+ stroke: #000000;
+ fill: #FFFFFF;
+ }
+
+ ]]>
+</style>
+<g>
+<rect class="genericsBox" x="13.7535cm" y="0.5cm" width="1.66155cm" height="0.5cm" />
+<text class="generics" x="13.8785cm" y="0.875cm" >DELAY</text>
+</g>
+<g>
+<rect class="labelBox" x="1.5cm" y="0cm" width="12.2535cm" height="1cm" />
+<text class="label center" x="7.62674cm" y="0.5cm" ></text>
+<rect class="entityBox" x="1.475cm" y="0.975cm" width="12.3035cm" height="11.05cm" />
+<text class="entity center" x="7.62674cm" y="1.5cm" >startstop_condition_generator</text>
+<rect class="portBox" x="1.5cm" y="2cm" width="6.12674cm" height="1cm" />
+<text class="port left" x="1.75cm" y="2.5cm" >sda_i</text>
+<line class="connector" x1="1.5cm" y1="2.5cm" x2="0.5cm" y2="2.5cm" />
+<rect class="portBox" x="1.5cm" y="3cm" width="6.12674cm" height="1cm" />
+<text class="port left" x="1.75cm" y="3.5cm" >scl_rising_i</text>
+<line class="connector" x1="1.5cm" y1="3.5cm" x2="0.5cm" y2="3.5cm" />
+<rect class="portBox" x="1.5cm" y="4cm" width="6.12674cm" height="1cm" />
+<text class="port left" x="1.75cm" y="4.5cm" >scl_falling_i</text>
+<line class="connector" x1="1.5cm" y1="4.5cm" x2="0.5cm" y2="4.5cm" />
+<rect class="portBox" x="1.5cm" y="5cm" width="6.12674cm" height="1cm" />
+<text class="port left" x="1.75cm" y="5.5cm" >scl_falling_delayed_i</text>
+<line class="connector" x1="1.5cm" y1="5.5cm" x2="0.5cm" y2="5.5cm" />
+<rect class="portBox" x="7.62674cm" y="2cm" width="6.12674cm" height="1cm" />
+<text class="port right" x="13.5035cm" y="2.5cm" >sda_enable_o</text>
+<line class="connector" x1="13.7535cm" y1="2.5cm" x2="14.7535cm" y2="2.5cm" />
+<rect class="portBox" x="1.5cm" y="6cm" width="6.12674cm" height="1cm" />
+<text class="port left" x="1.75cm" y="6.5cm" >start_condition_i</text>
+<line class="connector" x1="1.5cm" y1="6.5cm" x2="0.5cm" y2="6.5cm" />
+<rect class="portBox" x="1.5cm" y="7cm" width="6.12674cm" height="1cm" />
+<text class="port left" x="1.75cm" y="7.5cm" >stop_condition_i</text>
+<line class="connector" x1="1.5cm" y1="7.5cm" x2="0.5cm" y2="7.5cm" />
+<rect class="portBox" x="1.5cm" y="8cm" width="6.12674cm" height="1cm" />
+<text class="port left" x="1.75cm" y="8.5cm" >gen_start_i</text>
+<line class="connector" x1="1.5cm" y1="8.5cm" x2="0.5cm" y2="8.5cm" />
+<rect class="portBox" x="1.5cm" y="9cm" width="6.12674cm" height="1cm" />
+<text class="port left" x="1.75cm" y="9.5cm" >gen_stop_i</text>
+<line class="connector" x1="1.5cm" y1="9.5cm" x2="0.5cm" y2="9.5cm" />
+<rect class="portBox" x="7.62674cm" y="3cm" width="6.12674cm" height="1cm" />
+<text class="port right" x="13.5035cm" y="3.5cm" >req_scl_fall_o</text>
+<line class="connector" x1="13.7535cm" y1="3.5cm" x2="14.7535cm" y2="3.5cm" />
+<rect class="portBox" x="7.62674cm" y="4cm" width="6.12674cm" height="1cm" />
+<text class="port right" x="13.5035cm" y="4.5cm" >req_scl_rise_o</text>
+<line class="connector" x1="13.7535cm" y1="4.5cm" x2="14.7535cm" y2="4.5cm" />
+<rect class="portBox" x="7.62674cm" y="5cm" width="6.12674cm" height="1cm" />
+<text class="port right" x="13.5035cm" y="5.5cm" >early_condition_o</text>
+<line class="connector" x1="13.7535cm" y1="5.5cm" x2="14.7535cm" y2="5.5cm" />
+<rect class="portBox" x="7.62674cm" y="6cm" width="6.12674cm" height="1cm" />
+<text class="port right" x="13.5035cm" y="6.5cm" >done_o</text>
+<line class="connector" x1="13.7535cm" y1="6.5cm" x2="14.7535cm" y2="6.5cm" />
+<rect class="portBox" x="1.5cm" y="11cm" width="12.2535cm" height="1cm" />
+<text class="port center" x="7.62674cm" y="11.5cm" >rst_in</text>
+<line class="connector" x1="7.62674cm" y1="12cm" x2="7.62674cm" y2="13cm" />
+<circle class="connector" cx="7.62674cm" cy="12.175cm" r="0.125cm" />
+<rect class="portBox" x="1.5cm" y="10cm" width="6.12674cm" height="1cm" />
+<text class="port left" x="1.75cm" y="10.5cm" >clk_i</text>
+<line class="connector" x1="0.5cm" y1="10.5cm" x2="1.5cm" y2="10.5cm" />
+<line class="connector" x1="1.5cm" y1="10.65cm" x2="1.7cm" y2="10.5cm" />
+<line class="connector" x1="1.5cm" y1="10.35cm" x2="1.7cm" y2="10.5cm" />
+</g>
+</svg>
A doc/blocks/svg/tx.svg => doc/blocks/svg/tx.svg +148 -0
@@ 0,0 1,148 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="15.2535cm" height="14cm">
+<style type="text/css" >
+ <![CDATA[
+ /* Text styles */
+ .label {
+ font-family: Arial;
+ font-size: 10pt;
+ font-weight: normal;
+ }
+
+ .entity {
+ font-family: Arial;
+ font-size: 12pt;
+ font-weight: bold;
+ }
+
+ .port {
+ font-family: Arial;
+ font-size: 12pt;
+ font-weight: normal;
+ }
+
+ .vector {
+ font-family: Arial;
+ font-size: 10pt;
+ font-weight: normal;
+ }
+
+ .generics {
+ font-family: Arial;
+ font-size: 10pt;
+ font-weight: normal;
+ }
+
+ /* Text alignment */
+ .right {
+ dominant-baseline: central;
+ text-anchor: end;
+ }
+
+ .left {
+ dominant-baseline: central;
+ text-anchor: start;
+ }
+
+ .center {
+ dominant-baseline: central;
+ text-anchor: middle;
+ }
+
+ /* Shape styles */
+ .entityBox {
+ stroke-width: 0.05cm;
+ stroke: #000000;
+ fill: #FFFFFF;
+ }
+
+ .portBox {
+ stroke-width: 0.00cm;
+ stroke: #FFF;
+ fill: #FFFFFF;
+ }
+
+ .labelBox {
+ stroke-width: 0.00cm;
+ stroke: #000000;
+ fill: #FFFFFF;
+ }
+
+ .vectorLength {
+ stroke-width: 0.00cm;
+ fill: #FFFFFF;
+ }
+
+ .genericsBox {
+ stroke-width: 0.02cm;
+ stroke: #BFBFBF;
+ fill: #F2F2F2;
+ }
+
+ .connector {
+ stroke-width: 0.025cm;
+ stroke: #000000;
+ fill: #FFFFFF;
+ }
+
+ ]]>
+</style>
+<g>
+<rect class="labelBox" x="1.5cm" y="-0.43cm" width="12.2535cm" height="1cm" />
+<text class="label center" x="7.62674cm" y="0.07cm" ></text>
+<rect class="entityBox" x="1.475cm" y="0.545cm" width="12.3035cm" height="11.05cm" />
+<text class="entity center" x="7.62674cm" y="1.07cm" >tx</text>
+<rect class="portBox" x="1.5cm" y="1.57cm" width="6.12674cm" height="1cm" />
+<text class="port left" x="1.75cm" y="2.07cm" >start_write_i</text>
+<line class="connector" x1="1.5cm" y1="2.07cm" x2="0.5cm" y2="2.07cm" />
+<rect class="portBox" x="1.5cm" y="2.57cm" width="6.12674cm" height="1cm" />
+<text class="port left" x="1.75cm" y="3.07cm" >rst_i2c_i</text>
+<line class="connector" x1="1.5cm" y1="3.07cm" x2="0.5cm" y2="3.07cm" />
+<rect class="portBox" x="1.5cm" y="3.57cm" width="6.12674cm" height="1cm" />
+<text class="port left" x="1.75cm" y="4.07cm" >clear_buffer_i</text>
+<line class="connector" x1="1.5cm" y1="4.07cm" x2="0.5cm" y2="4.07cm" />
+<rect class="portBox" x="7.62674cm" y="1.57cm" width="6.12674cm" height="1cm" />
+<text class="port right" x="13.5035cm" y="2.07cm" >done_o</text>
+<line class="connector" x1="13.7535cm" y1="2.07cm" x2="14.7535cm" y2="2.07cm" />
+<rect class="portBox" x="7.62674cm" y="2.57cm" width="6.12674cm" height="1cm" />
+<text class="port right" x="13.5035cm" y="3.07cm" >unexpected_sda_o</text>
+<line class="connector" x1="13.7535cm" y1="3.07cm" x2="14.7535cm" y2="3.07cm" />
+<rect class="portBox" x="7.62674cm" y="3.57cm" width="6.12674cm" height="1cm" />
+<text class="port right" x="13.5035cm" y="4.07cm" >noack_o</text>
+<line class="connector" x1="13.7535cm" y1="4.07cm" x2="14.7535cm" y2="4.07cm" />
+<rect class="portBox" x="1.5cm" y="4.57cm" width="6.12674cm" height="1cm" />
+<text class="port left" x="1.75cm" y="5.07cm" >scl_rising_i</text>
+<line class="connector" x1="1.5cm" y1="5.07cm" x2="0.5cm" y2="5.07cm" />
+<rect class="portBox" x="1.5cm" y="5.57cm" width="6.12674cm" height="1cm" />
+<text class="port left" x="1.75cm" y="6.07cm" >scl_falling_delayed_i</text>
+<line class="connector" x1="1.5cm" y1="6.07cm" x2="0.5cm" y2="6.07cm" />
+<rect class="portBox" x="7.62674cm" y="4.57cm" width="6.12674cm" height="1cm" />
+<text class="port right" x="13.5035cm" y="5.07cm" >scl_stretch_o</text>
+<line class="connector" x1="13.7535cm" y1="5.07cm" x2="14.7535cm" y2="5.07cm" />
+<rect class="portBox" x="1.5cm" y="6.57cm" width="6.12674cm" height="1cm" />
+<text class="port left" x="1.75cm" y="7.07cm" >sda_i</text>
+<line class="connector" x1="1.5cm" y1="7.07cm" x2="0.5cm" y2="7.07cm" />
+<rect class="portBox" x="7.62674cm" y="5.57cm" width="6.12674cm" height="1cm" />
+<text class="port right" x="13.5035cm" y="6.07cm" >sda_enable_o</text>
+<line class="connector" x1="13.7535cm" y1="6.07cm" x2="14.7535cm" y2="6.07cm" />
+<rect class="portBox" x="7.62674cm" y="6.57cm" width="6.12674cm" height="1cm" />
+<text class="port right" x="13.5035cm" y="7.07cm" >ready_o</text>
+<line class="connector" x1="13.7535cm" y1="7.07cm" x2="14.7535cm" y2="7.07cm" />
+<rect class="portBox" x="1.5cm" y="7.57cm" width="6.12674cm" height="1cm" />
+<text class="port left" x="1.75cm" y="8.07cm" >valid_i</text>
+<line class="connector" x1="1.5cm" y1="8.07cm" x2="0.5cm" y2="8.07cm" />
+<rect class="portBox" x="1.5cm" y="8.57cm" width="6.12674cm" height="1cm" />
+<text class="port left" x="1.75cm" y="9.07cm" >write_data_i</text>
+<line class="connector" x1="1.5cm" y1="9.07cm" x2="0.5cm" y2="9.07cm" />
+<line class="connector" x1="0.75cm" y1="9.32cm" x2="1.25cm" y2="8.82cm" />
+<text class="vector right" x="1.1cm" y="8.67cm" >8</text>
+<rect class="portBox" x="1.5cm" y="10.57cm" width="12.2535cm" height="1cm" />
+<text class="port center" x="7.62674cm" y="11.07cm" >rst_in</text>
+<line class="connector" x1="7.62674cm" y1="11.57cm" x2="7.62674cm" y2="12.57cm" />
+<circle class="connector" cx="7.62674cm" cy="11.745cm" r="0.125cm" />
+<rect class="portBox" x="1.5cm" y="9.57cm" width="6.12674cm" height="1cm" />
+<text class="port left" x="1.75cm" y="10.07cm" >clk_i</text>
+<line class="connector" x1="0.5cm" y1="10.07cm" x2="1.5cm" y2="10.07cm" />
+<line class="connector" x1="1.5cm" y1="10.22cm" x2="1.7cm" y2="10.07cm" />
+<line class="connector" x1="1.5cm" y1="9.92cm" x2="1.7cm" y2="10.07cm" />
+</g>
+</svg>
A doc/blocks/vec.conf => doc/blocks/vec.conf +213 -0
@@ 0,0 1,213 @@
+#############################################################################
+# Parser keywords
+#############################################################################
+# Polarity
+HIGHActiveSuffix=_i
+LOWActiveSuffix=_in
+
+# Special ports
+resetName=rst_in
+clockName=clk_i
+
+# Default label to print above entity box. Leave empty if no label is desired
+default_label=
+
+
+#############################################################################
+# Font settings
+#############################################################################
+# Label
+label.fontFamily=Arial
+label.fontSize=10pt
+label.fontWeight=normal
+
+# Entity
+entity.fontFamily=Arial
+entity.fontSize=12pt
+entity.fontWeight=bold
+
+#Port
+port.fontFamily=Arial
+port.fontSize=12pt
+port.fontWeight=normal
+
+# Generic signal
+genericSignal.fontFamily=Arial
+genericSignal.fontSize=10pt
+genericSignal.fontWeight=normal
+
+# Vector
+vector.fontFamily=Arial
+vector.fontSize=10pt
+vector.fontWeight=normal
+
+
+#############################################################################
+# Shape settings
+#############################################################################
+# Margin
+vertical_Margin=0.5
+horizontal_Margin=0.5
+fixed_Width=0
+
+# Label
+label.stroke=none
+label.strokeWidth=0.00cm
+label.strokeColor=#000000
+label.fill=none
+label.fillColor=#FFFFFF
+
+# Entity
+entity.stroke=solid
+entity.strokeWidth=0.05cm
+entity.strokeColor=#000000
+entity.fill=solid
+entity.fillColor=#FFFFFF
+
+# Port
+port.stroke=none
+port.strokeWidth=0.00cm
+port.strokeColor=#FFF
+port.fill=none
+port.fillColor=#FFFFFF
+
+# Connector
+connector.stroke=solid
+connector.strokeWidth=0.025cm
+connector.strokeColor=#000000
+connector.fill=solid
+connector.fillColor=#FFFFFF
+
+# Generics
+generics.stroke=solid
+generics.strokeWidth=0.02cm
+generics.strokeColor=#BFBFBF
+generics.fill=solid
+generics.fillColor=#F2F2F2
+
+# Generic signal
+genericSignal.stroke=none
+genericSignal.strokeWidth=0.00cm
+genericSignal.strokeColor=#C2C2C2
+genericSignal.fill=none
+genericSignal.fillColor=#FFFFFF
+
+
+#############################################################################
+# Doku Wiki markup settings
+#############################################################################
+DokuWiki.enableExport=0
+
+# If left empty the output files will be placed in the same directory where the executable is located.
+# Both absolute and relative path are working
+DokuWiki.outputPath=dokuwiki
+
+
+#############################################################################
+# Markdown settings
+#############################################################################
+Markdown.enableExport=1
+
+# If left empty the output files will be placed in the same directory where the executable is located.
+# Both absolute and relative path are working
+Markdown.outputPath=markdown
+
+
+#############################################################################
+# LaTeX settings
+#############################################################################
+LaTeX.enableExport=0
+
+# If left empty the output files will be placed in the same directory where the executable is located.
+# Both absolute and relative path are working
+LaTeX.outputPath=latex
+
+# VEC can add a 'table' environment to label and place the actual tabular element.
+# VEC will use the entity name as caption and label
+LaTeX.addTable=1
+LaTeX.centering=1
+LaTeX.caption=1
+LaTeX.label=1
+
+
+#############################################################################
+# Table export settings
+#############################################################################
+# Set the entity information the table should contain
+Table.exportType=1
+Table.exportDirection=0
+Table.exportPolarity=0
+Table.exportDescription=1
+Table.exportBlank1=0
+Table.exportBlank2=0
+
+# Export generics. Generate a seperate table for generic signals
+Table.exportGenerics=1
+
+# Heading formatting
+Table.boldHeadings=1
+
+# Column alignments
+Table.centeredName=0
+Table.centeredType=0
+Table.centeredDirection=1
+Table.centeredPolarity=1
+Table.centeredDescription=0
+Table.centeredBlank=0
+Table.centeredGenericName=0
+Table.centeredGenericType=0
+Table.centeredGenericDefaultValue=0
+
+# Column headings
+Table.Name_heading=Name
+Table.Type_heading=Type
+Table.Direction_heading=Direction
+Table.Polarity_heading=Polarity
+Table.Description_heading=Description
+Table.Blank1_heading=Blank1
+Table.Blank2_heading=Blank2
+Table.GenericName=Name
+Table.GenericType=Type
+Table.GenericDefaultValue=Default value
+
+# Captions for the port directions
+Table.caption_IN=IN
+Table.caption_OUT=OUT
+Table.caption_INOUT=INOUT
+Table.caption_BUFFER=BUFFER
+Table.caption_LINKAGE=LINKAGE
+
+# Polarity labels
+Table.caption_HIGHactive=HIGH
+Table.caption_LOWactive=LOW
+
+# Vector settings
+Table.combineNameAndType=0
+Table.showArrayLength=1
+Table.arrayNotation=1
+
+#############################################################################
+# FODG Export
+#############################################################################
+FODG.enableExport=0
+
+# If left empty the output files will be placed in the same directory where the executable is located
+FODG.outputPath=fodg
+
+
+#############################################################################
+# PNG Export
+#############################################################################
+PNG.enableExport=0
+
+# If left empty the output files will be placed in the same directory where the executable is located
+PNG.outputPath=png
+
+
+#############################################################################
+# SVG Export
+#############################################################################
+SVG.enableExport=1
+
+# If left empty the output files will be placed in the same directory where the executable is located
+SVG.outputPath=svg
A doc/defaults.yaml => doc/defaults.yaml +9 -0
@@ 0,0 1,9 @@
+citeproc: true
+output-file: report.pdf
+pdf-engine: tectonic
+filters:
+ - citeproc
+ - pandoc-svg.py
+input-files:
+ - index.md
+
A doc/figure_placement.tex => doc/figure_placement.tex +8 -0
@@ 0,0 1,8 @@
+\usepackage{float}
+\let\origfigure\figure
+\let\endorigfigure\endfigure
+\renewenvironment{figure}[1][2] {
+ \expandafter\origfigure\expandafter[htbp]
+} {
+ \endorigfigure
+}
A doc/index.md => doc/index.md +475 -0
@@ 0,0 1,475 @@
+---
+title: Report - NSV semestral project
+subtitle: I2C core + counter on SSD1306 display
+author: František Boháček
+documentclass: scrartcl
+date: January 20, 2023
+defaults:
+ - defaults.yaml
+csl: bib.csl
+references:
+ - type: incollection
+ id: i2c
+ title: "I2C-bus specification and user manual"
+ author: "NXP"
+ URL: https://www.nxp.com/docs/en/user-guide/UM10204.pdf
+ issued:
+ year: 2021
+ month: 1
+output:
+ rmarkdown::pdf_document:
+ fig_caption: yes
+ includes:
+ in_header: figure_placement.tex
+---
+
+# Introduction
+This project aims to implement I2C core, both master and slave.
+Then, a scenario will be implemented to verify I2C is working on real FPGA
+and not only in simulation. The master will be tested by showing three
+numbers as a counter on SSD1306 with I2C interface.
+
+I2C might be used for communication with multiple devices. It supports
+up to 3.4 Mbps speeds (High-speed mode). [-@i2c]
+That is sufficient for many applications.
+I2C is used often, most microcontrollers include
+I2C hardware support as well.
+
+There can be multiple devices on the bus
+with just two wires, called ``sda`` and ``scl``. Every slave
+gets an address assigned, and the master can select the device
+by transmitting the address corresponding to selected slave.
+There can be multiple masters on the bus. If both start
+a transaction at the same time, there is an arbitration.
+The first master that detects incorrect value of ``sda``
+loses, and the other one gets to make the transaction.
+
+# Manual
+The project consists of multiple VHDL libraries.
+The most important one is perhaps the i2c library located
+in the ``src/i2c`` folder. This library uses the utils library located
+in ``src/utils``. Blocks from the utils library are not documented here
+for their simplicity. It contains a ``open_drain_buffer``, a ``metastability_filter``, a ``pulse_delay``
+for delaying a pulse, ``sync_edge_detector`` for detecting rising or falling
+edges on a signal synchronous to a clock.
+
+There is ``ssd1306`` library with two entities for testing out the I2C master entity with
+SSD1306 display. One of these makes the display full on, the other has a counter that
+counts every second.
+
+Last, but not least there is ``mcu_slave`` library that contains two
+entities. One of these just respondes with a simple count when read I2C
+requested. The other entity is behaving as a register reader/writer,
+with 20 registers. The first written byte is treated as an address.
+Other read bytes are consecutive reads from the registers. Other
+writes are treated as consecutive writes to the registers.
+
+## SSD1306 display counter
+The SSD1306 display is a 128x64 display
+that supports various interfacing methods such as I2C.
+
+The characters used for the counter were obtained from a monochrome bitmap font [font8x8](https://github.com/dhepper/font8x8).
+
+The display first has to be initialized, the RAM nulled, and then data might be sent then.
+The display supports three addressing modes, page, horizontal, and vertical.
+It has multiple pages, each page consists of 8 rows on the display.
+The horizontal addressing mode is exploited for drawing characters/numbers.
+The character can be written in one go, and after a character is written,
+another one can be written correctly without adjusting the cursor.
+This makes it possible to draw characters without storing them in some kind of buffer
+on the master device.
+
+See the following figure showing the setup with Basys 3 board with SSD1306 counter entity
+connected to the SSD1306.
+
+
+The top level entity consists of three main entities. One of those is for a BCD counter,
+another for FSM for accessing the SSD1306 display, and the last for I2C master.
+
+There are also three supporting entities, two open drain buffers
+for ``scl`` and ``sda``. The last one is for treating metastability of the
+reset.
+
+## I2C
+The implementation consists of two separate top level entities,
+one of those is used for master entity and the other for slave entity.
+
+The ``sda`` and ``scl`` lines are controlled by ``sda_enable`` and ``scl_enable`` signals.
+Having these set to high means the line should be pulled down. There is also ``sda`` and
+``scl`` inputs that should get the actual values of the GPIO.
+An ``open_drain_buffer`` entity should be used
+to connect the input and enable output to the actual pad.
+
+Both master and slave entities share the rx and tx data interfaces.
+The difference is that master has signals for requesting a new transaction,
+but the slave waits for a start condition to start receiving/transmitting.
+
+### Entity ``master``
+The master entity is a top level entity for using the I2C
+core as a master. It connects all of the blocks for functioning
+I2C master.
+
+The entity has three control inputs ``start``, ``stop``, and ``run``.
+Run should be high when the master is operating. Setting start high
+will generate a start condition when possible. Setting stop high
+will generate a stop condition when possible.
+Both start and stop should be set high for just one cycle.
+When setting both start and stop high at the same time,
+one byte will be transmitted or received, and then stop condition
+generated.
+
+{width=400px}
+
+| **Name** | **Type** | **Description** |
+|---------------------|---------------------|-----------------|
+| clk_i | std_logic | |
+| rst_in | std_logic | |
+| slave_address_i | std_logic_vector[7] | |
+| generate_ack_i | std_logic | |
+| expect_ack_i | std_logic | |
+| rx_valid_o | std_logic | |
+| rx_data_o | std_logic_vector[8] | |
+| rx_confirm_i | std_logic | |
+| tx_ready_o | std_logic | |
+| tx_valid_i | std_logic | |
+| tx_data_i | std_logic_vector[8] | |
+| tx_clear_buffer_i | std_logic | |
+| err_noack_data_o | std_logic | |
+| err_noack_address_o | std_logic | |
+| err_arbitration_o | std_logic | |
+| err_general_o | std_logic | |
+| stop_i | std_logic | |
+| start_i | std_logic | |
+| run_i | std_logic | |
+| rw_i | std_logic | |
+| dev_busy_o | std_logic | |
+| bus_busy_o | std_logic | |
+| waiting_o | std_logic | |
+| sda_i | std_logic | |
+| scl_i | std_logic | |
+| sda_enable_o | std_logic | |
+| scl_enable_o | std_logic | |
+
+### Entity ``slave``
+Slave entity is a top level for I2C slave.
+
+It outputs the current state upon receiving _commands_ from the master.
+
+{width=400px}
+
+| **Name** | **Type** | **Description** |
+|-------------------|---------------------|-----------------|
+| clk_i | std_logic | |
+| rst_in | std_logic | |
+| address_i | std_logic_vector[7] | |
+| generate_ack_i | std_logic | |
+| expect_ack_i | std_logic | |
+| rx_valid_o | std_logic | |
+| rx_data_o | std_logic_vector[8] | |
+| rx_confirm_i | std_logic | |
+| rx_stretch_i | std_logic | |
+| tx_ready_o | std_logic | |
+| tx_valid_i | std_logic | |
+| tx_data_i | std_logic_vector[8] | |
+| tx_stretch_i | std_logic | |
+| tx_clear_buffer_i | std_logic | |
+| err_noack_o | std_logic | |
+| err_sda_o | std_logic | |
+| rw_o | std_logic | |
+| dev_busy_o | std_logic | |
+| bus_busy_o | std_logic | |
+| waiting_o | std_logic | |
+| sda_i | std_logic | |
+| scl_i | std_logic | |
+| sda_enable_o | std_logic | |
+| scl_enable_o | std_logic | |
+
+\newpage
+### Common
+All of the blocks responsible for receiving or sending data
+should get the``scl`` state from the input going to the FPGA/ASIC,
+the same goes for ``sda``.
+This makes sure that features such as scl stretching or arbitration
+are supported. If scl from ``scl_generator`` were to be used, there
+would be no possibility to detect either one of those.
+
+Some of the entities accept delayed falling pulse of ``scl``.
+This is to make sure ``sda`` is changed AFTER ``scl`` is indeed
+low. If ``sda`` was changed right away, it's possible there would
+be a device that would detect start or stop condition when
+there is no condition.
+
+#### Entity ``address_generator``
+Address generator is responsible for sending
+address upon requested. It's used in the I2C master
+to select a slave. Currently it supports only 7 bit addresses.
+
+{width=400px}
+
+| **Name** | **Type** | **Description** |
+|-----------------------|---------------------|-----------------|
+| clk_i | std_logic | Clock input |
+| rst_in | std_logic | Synchronous reset (active low) |
+| address_i | std_logic_vector[7] | The address to send |
+| rw_i | std_logic | R/W to send (R = 1) |
+| store_address_rw_i | std_logic | When to store address and ``rw`` |
+| start_i | std_logic | Start sending address |
+| scl_rising_i | std_logic | ``scl`` rising pulse |
+| scl_falling_delayed_i | std_logic | ``scl`` falling pulse delayed |
+| sda_enable_o | std_logic | Keep ``sda`` low |
+| sda_i | std_logic | Current ``sda`` level |
+| noack_o | std_logic | Did not get acknowledge |
+| unexpected_sda_o | std_logic | ``sda`` detected at ``scl`` rising edge is wrong. (Arbitration lost) |
+| done_o | std_logic | Address sent |
+
+#### Entity ``address_detector``
+Address detector looks at the received data to check
+if the address matches the address of the slave.
+Currently it supports only 7 bit addresses.
+
+{width=400px}
+
+| **Name** | **Type** | **Description** |
+|-----------------------|---------------------|-----------------|
+| clk_i | std_logic | Clock input |
+| rst_in | std_logic | Synchronous reset (active low) |
+| address_i | std_logic_vector[7] | The address to detect |
+| store_address_i | std_logic | When to store the address to buffer |
+| scl_rising | std_logic | ``scl`` rising pulse |
+| scl_falling_delayed_i | std_logic | ``scl`` falling pulse delayed |
+| sda_enable_o | std_logic | Keep ``sda`` low |
+| sda_i | std_logic | Current ``sda`` level |
+| start_i | std_logic | Start detecting address with next ``scl`` |
+| rw_o | std_logic | Detected R/W value |
+| success_o | std_logic | Address matching. ``rw`` set |
+| fail_o | std_logic | Address not matching |
+
+\newpage
+#### Entity ``rx``
+Receiver entity is responsible for receiving data from the
+data bit line (``sda``), and delivering the bytes received.
+It's not meant to be used as detector of the address, that is
+what ``address_detector`` is for.
+
+The entity supports ``scl`` stretching. When the data are not yet
+read (that should be signaled by ``confirm_read_i``), it will stretch
+the ``scl`` to prevent loss of data.
+For master, this means ``scl`` is not generated, for slave it
+means it's held down even though the master is trying to let go
+to get high level.
+
+The entity is also responsible for acknowledging the received data.
+All data are acknowledged.
+
+{width=400px}
+
+| **Name** | **Type** | **Description** |
+|-----------------------|---------------------|-----------------|
+| clk_i | std_logic | Clock input |
+| rst_in | std_logic | Synchronous reset (active low) |
+| start_read_i | std_logic | Read should be initiated on next scl |
+| rst_i2c_i | std_logic | Reset only i2c logic, keep data |
+| scl_rising | std_logic | ``scl`` rising pulse |
+| scl_falling_delayed_i | std_logic | ``scl`` falling pulse, delayed |
+| scl_stretch_o | std_logic | Keep ``scl`` low |
+| sda_i | std_logic | Current ``sda`` level |
+| sda_enable_o | std_logic | Whether to keep ``sda`` low |
+| done_o | std_logic | Byte received, acknowledged |
+| generate_ack_i | std_logic | Generate acknowledge after received |
+| read_valid_o | std_logic | ``read_data`` are valid for reading |
+| read_ready_o | std_logic | Ready for next transaction |
+| read_data_o | std_logic_vector[8] | Read data |
+| confirm_read_i | std_logic | Confirm data were read |
+
+\newpage
+#### Entity ``tx``
+Receiver entity is responsible for transmitting data to the
+data bit line (``sda``), and for storing the data to be sent next.
+It's not meant to be used as generator/sender of the address, that is
+what ``address_generator`` is for.
+
+The entity supports ``scl`` stretching. When there are not any
+data to be sent delivered yet, it will stretch
+the ``scl`` to prevent loss of data.
+For master, this means ``scl`` is not generated, for slave it
+means it's held down even though the master is trying to let go
+to get high level.
+
+If wrong level is detected on the ``sda`` upon rising edge of ``scl``,
+the entity signals
+
+The entity is also responsible for verifying acknowledge at the right time,
+and signaling that no acknowledge has been received.
+
+{width=400px}
+
+| **Name** | **Type** | **Description** |
+|-----------------------|---------------------|-----------------|
+| clk_i | std_logic | Clock input |
+| rst_in | std_logic | Synchronous reset (active low) |
+| start_write_i | std_logic | Write should be initiated |
+| rst_i2c_i | std_logic | Reset only i2c logic, keep data |
+| clear_buffer_i | std_logic | Clear transmit buffer |
+| done_o | std_logic | Data transmitted, and acknowledged |
+| unexpected_sda_o | std_logic | ``sda`` value was wrong on ``scl`` rising |
+| noack_o | std_logic | Did not get ACK |
+| scl_rising | std_logic | ``scl`` rising pulse |
+| scl_falling_delayed_i | std_logic | ``scl`` falling pulse, delayed |
+| scl_stretch_o | std_logic | Keep ``scl`` low |
+| sda_i | std_logic | Current ``sda`` level |
+| sda_enable_o | std_logic | Keep ``sda`` low |
+| ready_o | std_logic | Ready for new data |
+| valid_i | std_logic | Data in ``write_data`` are valid |
+| write_data_i | std_logic_vector[8] | Data to transmit |
+
+\newpage
+#### Entity ``scl_generator``
+Scl generator generates the ``scl`` while making sure
+to keep the signal high or low for at least specified number of cycles.
+It may send a signal when the ``scl`` cannot be set to high level,
+that could signal a slave pulling down the line.
+
+{width=400px}
+
+| **Name** | **Type** | **Description** |
+|------------------|-----------|-----------------|
+| clk_i | std_logic | Clock input |
+| rst_in | std_logic | Synchronous reset (active low) |
+| scl_i | std_logic | Current level of ``scl`` |
+| scl_rising_i | std_logic | ``scl`` rising pulse |
+| scl_falling_i | std_logic | ``scl`` falling pulse |
+| gen_continuous_i | std_logic | Generate continuous ``scl`` clock |
+| gen_rising_i | std_logic | Generate rising edge |
+| gen_falling_i | std_logic | Generate falling edge |
+| scl_enable_o | std_logic | Keep ``scl`` low |
+| cannot_comply_o | std_logic | Cannot set ``scl`` high |
+
+
+| **Name** | **Type** | **Description** |
+|-------------------|----------|-------------------|
+| MIN_STABLE_CYCLES | natural | How many clock cycles to keep ``scl`` on stable |
+
+#### Entity ``startstop_condition_detector``
+This entity detects either start or stop condition.
+It produces a pulse for duration of one clock cycle
+when either start or stop is detected.
+
+{width=300px}
+
+| **Name** | **Type** | **Description** |
+|----------|-----------|-----------------|
+| clk_i | std_logic | Clock input |
+| sda_i | std_logic | Current ``sda`` level |
+| scl_i | std_logic | Current level of ``scl`` |
+| start_o | std_logic | Start condition detected |
+| stop_o | std_logic | Stop condition detected |
+
+\newpage
+#### Entity ``startstop_condition_generator``
+Generates either start or stop condition. If the
+scl has to be changed to different level, it generates
+a request that should be handled by the ``scl_generator``.
+The generator should be able to generate the condition
+from any starting state, as long as nothing else, including
+the slaves, is not holding down either ``scl`` or ``sda``.
+If the ``sda`` has to be changed to be able to generate the condition,
+``scl`` is first requested to be pulled down, ``sda`` is changed,
+after that, ``scl`` is requested to be high, and as last, the
+``sda`` is changed to generate the condition. Some of those might
+be omitted according to the actual state of the ``sda`` and ``scl``.
+
+{width=400px}
+
+| **Name** | **Type** | **Description** |
+|-----------------------|-----------|-----------------|
+| clk_i | std_logic | Clock input |
+| rst_in | std_logic | Synchronous reset (active low) |
+| sda_i | std_logic | Current level of ``sda`` |
+| scl_rising_i | std_logic | ``scl`` rising pulse |
+| scl_falling_i | std_logic | ``scl`` falling pulse |
+| scl_falling_delayed_i | std_logic | ``scl`` delayed falling pulse |
+| sda_enable_o | std_logic | Keep ``sda`` low |
+| start_condition_i | std_logic | Start condition detected |
+| stop_condition_i | std_logic | Stop condition detected |
+| gen_start_i | std_logic | Generate start condition |
+| gen_stop_i | std_logic | Generate stop condition |
+| req_scl_fall_o | std_logic | Request scl falling edge |
+| req_scl_rise_o | std_logic | Request scl rising edge |
+| early_condition_o | std_logic | Detected early condition (prior to generating ourselves) |
+| done_o | std_logic | Requested condition generated |
+
+
+| **Name** | **Type** | **Description** |
+|----------|----------|-------------------|
+| DELAY | natural | How long to wait after each operation |
+
+#### Entity ``master_state``
+This entity is a FSM for the ``master`` entity.
+It commands what should be done, such as generating
+the address, receiving data, transmitting data, etc.
+It also detects errors and in case of one, outputs it.
+The errors are cleared upon next start request so that
+it might be validated if there has been a new error for the
+start request.
+
+Inputs and outputs from other entities, should be explained by other entities well already.
+
+{width=400px}
+
+#### Entity ``slave_state``
+This entity is a FSM for the ``slave`` entity.
+It commands what should be done, such as detecting
+the address, receiving data, transmitting data, etc.
+It also detects errors and in case of one, outputs it.
+The errors are cleared upon next start condition.
+
+Inputs and outputs from other entities, should be explained by other entities well already.
+
+{width=400px}
+
+# Conclusion
+Both master and slave have been verified to be working in simulation and on an FPGA board.
+All found issues were found, and when the issues were found on the FPGA, but not in simulation,
+a new testcase has been added to make sure the behavior is verified if there were any changes made.
+
+The components correctly monitor the bus even when they are not being used,
+and output if the bus is busy or not. There are errors reported
+in case something went wrong (cannot set ``sda``, arbitration lost, etc.).
+This should make the I2C components usable in real applications even if more masters
+are incorporated on the bus.
+
+There are some things that could be added or changed in the future, such as:
+- 10 bit addressing support
+- More error states (timeout)
+- Disabling data acknowledge
+- Adding behavioral i2c master and i2c slave modules for simulation
+
+The 10 bit addressing is not currently supported, although its support should not be hard
+to implement. ``address_generator`` and ``address_detector`` entities interfaces make
+it so that it would be sufficient to pospone setting ``done`` after the second byte
+is received instead of the first one.
+
+So far if the scl generator entity detects an error (that it cannot get the line high),
+it will produce a signal to say that, but this signal is not utilized in the FSM entity
+for the master. That means if the line stays low indefinitely, the master will become stuck
+without notifying the application about a possible problem. One of the slave devices could
+be erroneously holding down the line.
+
+Currently it's not possible to disable the data acknowledge in the rx entity.
+Some applications don't produce acknowledge if data are not ready yet or
+if wrong command has been received. Although I don't think this complies with the standard,
+it could come in handy to support this as well.
+
+The simulation currently uses blocking procedures for testing.
+These procedures are called from the top level simulation entities.
+This makes it hard to test some of the features such as verifying whether
+error signal became high at the correct``scl`` edge.
+It's also quite hard to test having multiple devices on the bus sending data simultaneously.
+That could come in handy to test arbitration.
+Both of these could be overcome by adding i2c behavioral modules, and instead of generating
+the ``scl`` and ``sda`` from the top level testing entity, they would be generated
+by these behavioral models.
+The top level entity would just notify the behavioral models to start generating or expect the
+given transaction.
+
+# References
A doc/pandoc-svg.py => doc/pandoc-svg.py +51 -0
@@ 0,0 1,51 @@
+#!/usr/bin/env python3
+"""
+Pandoc filter to convert svg files to pdf as suggested at:
+https://github.com/jgm/pandoc/issues/265#issuecomment-27317316
+"""
+
+__author__ = "Jerome Robert"
+
+import mimetypes
+import subprocess
+import os
+import sys
+from pandocfilters import toJSONFilter, Str, Para, Image
+
+fmt_to_option = {
+ "latex": ("--export-filename","pdf"),
+ "beamer": ("--export-filename","pdf"),
+ #use PNG because EMF and WMF break transparency
+ "docx": ("--export-png", "png"),
+ #because of IE
+ "html": ("--export-png", "png")
+}
+
+def svg_to_any(key, value, fmt, meta):
+ if key == 'Image':
+ if len(value) == 2:
+ # before pandoc 1.16
+ alt, [src, title] = value
+ attrs = None
+ else:
+ attrs, alt, [src, title] = value
+ mimet,_ = mimetypes.guess_type(src)
+ option = fmt_to_option.get(fmt)
+ if mimet == 'image/svg+xml' and option:
+ base_name,_ = os.path.splitext(src)
+ eps_name = base_name + "." + option[1]
+ try:
+ mtime = os.path.getmtime(eps_name)
+ except OSError:
+ mtime = -1
+ if mtime < os.path.getmtime(src):
+ cmd_line = ['inkscape', option[0], eps_name, src]
+ sys.stderr.write("Running %s\n" % " ".join(cmd_line))
+ subprocess.call(cmd_line, stdout=sys.stderr.fileno())
+ if attrs:
+ return Image(attrs, alt, [eps_name, title])
+ else:
+ return Image(alt, [eps_name, title])
+
+if __name__ == "__main__":
+ toJSONFilter(svg_to_any)