<!doctype html> <html> <head> <meta charset="utf-8"> <title>Fomu: An FPGA in your USB Port</title> <meta name="description" content="A framework for easily creating beautiful presentations using HTML"> <meta name="author" content="Sean "xobs" Cross"> <meta name="apple-mobile-web-app-capable" content="yes"> <meta name="apple-mobile-web-app-status-bar-style" content="black-translucent"> <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no"> <link rel="stylesheet" href="css/reveal.css"> <link rel="stylesheet" href="css/theme/solarized.css" id="theme"> <!-- Theme used for syntax highlighting of code --> <link rel="stylesheet" href="lib/css/zenburn.css"> <!-- Printing and PDF exports --> <script> var link = document.createElement('link'); link.rel = 'stylesheet'; link.type = 'text/css'; link.href = window.location.search.match(/print-pdf/gi) ? 'css/print/pdf.css' : 'css/print/paper.css'; document.getElementsByTagName('head')[0].appendChild(link); </script> <!--[if lt IE 9]> <script src="lib/js/html5shiv.js"></script> <![endif]--> <style> /********************************************* * ZOOM REVERSE TRANSITION (i.e. zoom out) *********************************************/ .reveal .slides section[data-transition=zoomrev], .reveal.zoomrev .slides section:not([data-transition]) { transition-timing-function: ease; } .reveal .slides > section[data-transition=zoomrev].past, .reveal .slides > section[data-transition~=zoomrev-out].past, .reveal.zoomrev .slides > section:not([data-transition]).past { visibility: hidden; -webkit-transform: scale(0.2); transform: scale(0.2); } .reveal .slides > section[data-transition=zoomrev].future, .reveal .slides > section[data-transition~=zoomrev-in].future, .reveal.zoomrev .slides > section:not([data-transition]).future { visibility: hidden; -webkit-transform: scale(16); transform: scale(16); } .reveal .slides > section > section[data-transition=zoomrev].past, .reveal .slides > section > section[data-transition~=zoomrev-out].past, .reveal.zoomrev .slides > section > section:not([data-transition]).past { -webkit-transform: translate(0, 150%); transform: translate(0, 150%); } .reveal .slides > section > section[data-transition=zoomrev].future, .reveal .slides > section > section[data-transition~=zoomrev-in].future, .reveal.zoomrev .slides > section > section:not([data-transition]).future { -webkit-transform: translate(0, -150%); transform: translate(0, -150%); } </style> </head> <body> <!-- Start of main presentation --> <div class="reveal"> <div class="footer"> <a class="url" href="https://p.xobs.io/td19/">p.xobs.io/td19</a> <span class="theme">Teardown 2019</span><span class="hashtag"> | #teardown2019</span><span class="twitter"> | @teardown</span> </div> <div class="slides"> <section> <h2>Fomu: an FPGA in your USB Port</h2> <img src="img/tomu-fomu-case-superwide.jpg"> <p> Fomu (with case): an FPGA in your USB port. Crowdfunding now! One week to go. <a href="https://t.xobs.io/fomu">t.xobs.io/fomu</a> </p> </section> <section data-background-image="css/theme/lca2019-title-bg-transparent.svg"> <h1>Fomu: An FPGA in your USB Port</h1> <h4>A whirlwind introduction to Fomu and FPGAs</h4> <p align="right"> <small>Sean Cross - <a href="https://xobs.io/">https://xobs.io/</a> - @xobs</small> </p> </section> <section> <h3>Outline</h3> <ol> <li>What is an FPGA?</li> <li>What is Fomu?</li> <li>What is this PCB?</li> <li> <ul> <li>Modifications made</li> <li>Differences to final PCB</li> </ul> </li> <li>Levels of Fomu</li> <li> <ol> <li>Python / Interpreted</li> <li>RISC-V</li> <li>Verilog / FPGA</li> </ol> </li> <li>Fomu Firmware Layout</li> <li> <ol> <li>Bootloader</li> <li>Recovery</li> <li>Magic constants</li> <li>Interpreters</li> <li>Updates</li> </ol> </li> <li>Loading firmware onto Fomu</li> <li>Blinkenlights</li> </ol> </section> </div> </div> <!-- class="reveal" --> <!-- End of main presentation --> <!-- Start of configuration section --> <script src="lib/js/head.min.js"></script> <script src="js/reveal.js"></script> <script> var presenter = !!Reveal.getQueryHash().s; // More info https://github.com/hakimel/reveal.js#configuration Reveal.initialize({ controls: presenter ? false : true, progress: true, history: true, center: true, controlsTutorial: presenter ? false : true, slideNumber: presenter ? null : 'c/t', // The "normal" size of the presentation, aspect ratio will be preserved // when the presentation is scaled to fit different resolutions. Can be // specified using percentage units. width: 960, height: 700, // Factor of the display size that should remain empty around the content margin: 0.1, multiplex: { url: 'https://p.xobs.io/', id: 'cbd6556886c2825d', secret: Reveal.getQueryHash().s || null }, // Bounds for smallest/largest possible scale to apply to content minScale: 0.02, maxScale: 5.5, transition: 'slide', // none/fade/slide/convex/concave/zoom // More info https://github.com/hakimel/reveal.js#dependencies dependencies: [ { src: 'lib/js/classList.js', condition: function () { return !document.body.classList; } }, { src: 'plugin/markdown/marked.js', condition: function () { return !!document.querySelector('[data-markdown]'); } }, { src: 'plugin/markdown/markdown.js', condition: function () { return !!document.querySelector('[data-markdown]'); } }, { src: 'plugin/highlight/highlight.js', async: true, callback: function () { hljs.initHighlightingOnLoad(); } }, { src: 'plugin/search/search.js', async: true }, { src: 'plugin/zoom-js/zoom.js', async: true }, { src: 'plugin/notes/notes.js', async: true }, { src: 'lib/js/socket.io.js', async: true }, { src: presenter ? 'plugin/multiplex/master.js' : 'plugin/multiplex/client.js', async: true }, ] }); </script> </body> </html>