~ruther/vhdl-i2c

1470daa0225350271fd285a4707737ec6b0c7601 — Rutherther 1 year, 2 months ago 8ce5b7c
docs: add basic documentation
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="&#160;" 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=".&#160;" 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:&#160;" 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.
![Basys 3 board connected to SSD1306 display with a counter running](./img/fpga-board-ssd1306.jpg)

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.

![``master`` entity inputs and outputs diagram](./blocks/svg/master.svg){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.

![``slave`` entity inputs and outputs diagram](./blocks/svg/slave.svg){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.

![``address_generator`` entity inputs and outputs diagram](./blocks/svg/address_generator.svg){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.

![``address_detector`` entity inputs and outputs diagram](./blocks/svg/address_detector.svg){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.

![``rx`` entity inputs and outputs diagram](./blocks/svg/rx.svg){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.

![``tx`` entity inputs and outputs diagram](./blocks/svg/tx.svg){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.

![``scl_generator`` entity inputs and outputs diagram](./blocks/svg/scl_generator.svg){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.

![``startstop_condition_detector`` entity inputs and outputs diagram](./blocks/svg/startstop_condition_detector.svg){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``.

![``startstop_condition_generator`` entity inputs and outputs diagram](./blocks/svg/startstop_condition_generator.svg){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.

![``master_state`` entity inputs and outputs diagram](./blocks/svg/master_state.svg){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.

![``slave_state`` entity inputs and outputs diagram](./blocks/svg/slave_state.svg){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)

Do not follow this link