258 lines
11 KiB
HTML
258 lines
11 KiB
HTML
<!DOCTYPE html>
|
||
<html>
|
||
<head>
|
||
<title>etc-nand</title>
|
||
<meta charset="utf-8">
|
||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||
<link rel="icon" sizes="512x512" href="res/favicon.png">
|
||
<link rel="image_src" type="image/png" href="res/favicon.png">
|
||
<link type="application/atom+xml" rel="alternate" title="alexs168's blog" href="atom.xml">
|
||
</head>
|
||
<body>
|
||
<style>
|
||
|
||
@font-face {
|
||
font-family: 'DejaVu Sans Mono';
|
||
src:local('DejaVu Sans Mono'),
|
||
url('res/DejaVuSansMono.woff2') format('woff2'),
|
||
local('Courier New'),
|
||
local(Courier),
|
||
local(monospace);
|
||
font-weight: normal;
|
||
font-style: normal;
|
||
font-display: swap;
|
||
}
|
||
|
||
/*
|
||
@font-face {
|
||
font-family: 'DejaVu Sans Mono';
|
||
src:local('DejaVu Sans Mono'),
|
||
url('res/DejaVuSansMono-Bold.woff2') format('woff2'),
|
||
local('Courier New'),
|
||
local(Courier),
|
||
local(monospace);
|
||
font-weight: bold;
|
||
font-style: normal;
|
||
font-display: swap;
|
||
}
|
||
|
||
@font-face {
|
||
font-family: 'DejaVu Sans';
|
||
src:local('DejaVu Sans'),
|
||
url('res/DejaVuSans-Bold.woff2') format('woff2'),
|
||
local('Courier New');
|
||
font-weight: bold;
|
||
font-style: normal;
|
||
font-display: swap;
|
||
}
|
||
|
||
@font-face {
|
||
font-family: 'DejaVu Sans';
|
||
src:local('DejaVu Sans'),
|
||
url('res/DejaVuSans.woff2') format('woff2'),
|
||
local('Courier New');
|
||
font-weight: normal;
|
||
font-style: normal;
|
||
font-display: swap;
|
||
}*/
|
||
|
||
body {
|
||
font-family: DejaVu Sans Mono;
|
||
font-size: 17pt;
|
||
}
|
||
|
||
td {
|
||
width: 100%;
|
||
display: inline;
|
||
vertical-align: top;
|
||
}
|
||
|
||
h1,h2,h3,h4 {
|
||
margin-top: 1%;
|
||
margin-bottom: 0.75%;
|
||
margin-left: -0.75%;
|
||
}
|
||
|
||
p {
|
||
margin-top: 0.75%;
|
||
margin-bottom: 0.75%;
|
||
}
|
||
|
||
ul {
|
||
margin-top: 0%;
|
||
}
|
||
|
||
.current {
|
||
font-weight: bold;
|
||
}
|
||
|
||
pre {
|
||
margin-top: 0px;
|
||
margin-bottom: 0px;
|
||
display: inline;
|
||
}
|
||
|
||
a {
|
||
color: #3f51b5;
|
||
text-decoration: none;
|
||
}
|
||
|
||
a:visited {
|
||
color: #3f51b5;
|
||
text-decoration: none;
|
||
}
|
||
</style>
|
||
<table>
|
||
<tr>
|
||
<td><span class="sidebar" style><span class="column-fixed" style="display: inline-flex; position: fixed; justify-content: center; width: 25%"><table><tr><td><span class="table-of-contents" style><div style="
|
||
border:1.2pt solid black;
|
||
border-radius:2pt;
|
||
|
||
|
||
padding:3%;"><p><span style="text-decoration: underline">Table of contents</span><br></p><p style="line-height:1.1"><span class style="display:flex; text-indent:0pt;"><span class style="margin-right: 11pt;">├─</span> <span class style="flex:1;"><span class="headingr" id="headingr-0"><a href="#loc-1">Overview</a></span></span></span></p><p style="line-height:1.1"><span class style="display:flex; text-indent:0pt;"><span class style="margin-right: 11pt;">| ├─</span> <span class style="flex:1;"><span class="headingr" id="headingr-1"><a href="#loc-2">Estimates</a></span></span></span></p><p style="line-height:1.1"><span class style="display:flex; text-indent:0pt;"><span class style="margin-right: 11pt;">| └─</span> <span class style="flex:1;"><span class="headingr" id="headingr-2"><a href="#loc-3">Planned Specifications</a></span></span></span></p><p style="line-height:1.1"><span class style="display:flex; text-indent:0pt;"><span class style="margin-right: 11pt;">├─</span> <span class style="flex:1;"><span class="headingr" id="headingr-3"><a href="#loc-4">Purchase</a></span></span></span></p><p style="line-height:1.1"><span class style="display:flex; text-indent:0pt;"><span class style="margin-right: 11pt;">└─</span> <span class style="flex:1;"><span class="headingr" id="headingr-4"><a href="#loc-5">Images</a></span></span></span></p><p style="line-height:1.1"><span class style="display:flex; text-indent:0pt;"><span class style="margin-right: 11pt;"> ├─</span> <span class style="flex:1;"><span class="headingr" id="headingr-5"><a href="#loc-6">16 bit register</a></span></span></span></p><p style="line-height:1.1"><span class style="display:flex; text-indent:0pt;"><span class style="margin-right: 11pt;"> ├─</span> <span class style="flex:1;"><span class="headingr" id="headingr-6"><a href="#loc-7">8 bit ALU slice</a></span></span></span></p><p style="line-height:1.1"><span class style="display:flex; text-indent:0pt;"><span class style="margin-right: 11pt;"> └─</span> <span class style="flex:1;"><span class="headingr" id="headingr-7"><a href="#add8">8 bit adder</a></span></span></span></p></div></span><span class="table-of-contents" style><script>document.addEventListener('DOMContentLoaded', function() {
|
||
let tags = ['h2', 'h3', 'h4'].flatMap(x => Array.from(document.getElementsByTagName(x))).sort((a, b) => a.getBoundingClientRect().top - b.getBoundingClientRect().top);
|
||
let pageHeight = document.documentElement.scrollHeight-window.innerHeight;
|
||
document.addEventListener('scroll', (event) => {
|
||
let progress = -(document.documentElement.getBoundingClientRect().y / pageHeight);
|
||
let delta = progress * window.innerHeight;
|
||
let idx = tags.map(x => 0 > x.getBoundingClientRect().top - delta).lastIndexOf(true);
|
||
Array.from(document.getElementsByClassName('headingr')).map(x => x.classList.remove('current'));
|
||
if (idx != -1) {
|
||
document.getElementById('headingr-' + idx).classList.add('current');
|
||
}
|
||
}
|
||
);
|
||
})</script><style>
|
||
.table-of-contents > p > span { width: 100%; }
|
||
</style></span></td></tr><tr><td><br>
|
||
<a href="index.html"><b>Website Home</b></a> <br>
|
||
</td></tr><tr><td><p>Renderings of this page:</p><ul><li><a href="#" onclick="gotoVariant(".min.pdf");">minimal PDF (printable)</a></li><li><a href="#" onclick="gotoVariant(".nano.html");">minimal HTML</a></li></ul></td></tr><tr><td><a href="atom.xml">Atom feed</a> <br>
|
||
</td></tr><tr><td><style>
|
||
@media only screen and (max-width: 1200px) {
|
||
.sidebar {
|
||
display: none !important;
|
||
}
|
||
|
||
.column-fixed {
|
||
width: 0% !important;
|
||
}
|
||
|
||
.body-column {
|
||
left: 3% !important;
|
||
}
|
||
}
|
||
|
||
@media only screen and (max-width: 1800px) {
|
||
.body-column > span {
|
||
width: 75% !important;
|
||
}
|
||
}
|
||
|
||
@media only screen and (max-width: 1200px) {
|
||
.body-column {
|
||
width: 97% !important;
|
||
}
|
||
.body-column > span {
|
||
width: 100% !important;
|
||
}
|
||
}
|
||
|
||
.hide { display: inline; background: black; transition: background 0.3s linear; }
|
||
.hide:hover, .hide:focus { background: transparent; }
|
||
</style></td></tr></table><style>
|
||
.column-fixed > table > tbody > tr > td > * { width: 100%; }
|
||
</style></span></span></td>
|
||
<td><span class="body-column" style="position: absolute; left: 28%; width: 72%"><span style="
|
||
|
||
|
||
width:50%;
|
||
|
||
display:inline-block"><div style="
|
||
|
||
|
||
|
||
|
||
"><p><br></p><h1>etc-nand</h1></div><div style="
|
||
|
||
|
||
|
||
|
||
"><br>You can click the PCB images to switch to the other side.</div><div style="
|
||
|
||
|
||
|
||
|
||
"><p><br><span id="loc-1" style="text-decoration: underline"><h2>Overview</h2></span></p><p>etc-nand is a real-world <a href="https://github.com/ETC-A/etca-spec/">ETC.A</a> CPU built from almost only quad NAND gate ICs (74hc00)</p><p>It will probably be finished in a few months.</p></div><div style="
|
||
|
||
|
||
|
||
|
||
"><p><br><span id="loc-2" style="text-decoration: underline"><h3>Estimates</h3></span></p><p>Estimated gate count:</p><ul><li>2800 NAND gates</li><li>320 tristate buffers</li></ul><p><br>
|
||
Estimated component counts:</p><ul><li>700x 74hc00 quad NAND gates</li><li>40x 74HC54 octal tristate buffers</li><li>a few simple resistors</li></ul></div><div style="
|
||
|
||
|
||
|
||
|
||
"><p><br><span id="loc-3" style="text-decoration: underline"><h3>Planned Specifications</h3></span> ETC.A base instruction set + byte operations + S&F + Von Neumann</p><p>The CPU will communicate with peripherals over a 16 bit data + 15 bit address memory bus</p></div><div style="
|
||
|
||
|
||
|
||
|
||
"><p><br><span id="loc-4" style="text-decoration: underline"><h2>Purchase</h2></span> You will be able to purchase one in the future.</p><p>Stay tuned!</p></div><div style="
|
||
|
||
|
||
|
||
|
||
"><br><span id="loc-5" style="text-decoration: underline"><h2>Images</h2></span> Images of PCBs that are either already manifactured or currently beeing manifactured by JLCPCB.</div><div style="
|
||
|
||
|
||
|
||
|
||
"><p><br><span id="loc-6" style="text-decoration: underline"><h3>16 bit register</h3></span></p><img draggable="false" tite="Click Me!" src="res/etc-nand/reg16_front.png" data-other="res/etc-nand/reg16_back.png" onclick="swapFrontBack(this);" style="width:80%; cursor:pointer;"><script>
|
||
function swapFrontBack(img) {
|
||
let oldsrc = img.src;
|
||
img.src = img.dataset.other;
|
||
img.dataset.other = oldsrc;
|
||
}
|
||
</script></div><div style="
|
||
|
||
|
||
|
||
|
||
"><p><br><span id="loc-7" style="text-decoration: underline"><h3>8 bit ALU slice</h3></span> A <a href="#add8">8 bit adder module</a> will be placed in the middle</p><img draggable="false" tite="Click Me!" src="res/etc-nand/alu8_front.png" data-other="res/etc-nand/alu8_back.png" onclick="swapFrontBack(this);" style="width:80%; cursor:pointer;"><script>
|
||
function swapFrontBack(img) {
|
||
let oldsrc = img.src;
|
||
img.src = img.dataset.other;
|
||
img.dataset.other = oldsrc;
|
||
}
|
||
</script></div><div style="
|
||
|
||
|
||
|
||
|
||
"><p><br><span id="add8" style="text-decoration: underline"><h3>8 bit adder</h3></span></p><img draggable="false" tite="Click Me!" src="res/etc-nand/add8_front.png" data-other="res/etc-nand/add8_back.png" onclick="swapFrontBack(this);" style="width:80%; cursor:pointer;"><script>
|
||
function swapFrontBack(img) {
|
||
let oldsrc = img.src;
|
||
img.src = img.dataset.other;
|
||
img.dataset.other = oldsrc;
|
||
}
|
||
</script></div></span></span></td>
|
||
<td></td>
|
||
</tr>
|
||
</table>
|
||
<script>
|
||
|
||
function gotoVariant(variant) {
|
||
window.location.href = window.location.href.replace(/\.\w+.html/g, variant);
|
||
}
|
||
|
||
window.addEventListener('beforeprint', (event) => {
|
||
gotoVariant('.min.pdf');
|
||
});
|
||
|
||
</script>
|
||
<script src="coffee.js" async>
|
||
</script>
|
||
</body>
|
||
</html>
|