201 lines
		
	
	
		
			6.2 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
			
		
		
	
	
			201 lines
		
	
	
		
			6.2 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
<!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> |