diff --git a/index.html b/index.html index 0b846959196b48656f18b804320c0e6003b7caca..44ab69d7b49ba2ecb24ca52aff2d4ccfbfdf6f7e 100644 --- a/index.html +++ b/index.html @@ -7,6 +7,10 @@ <meta charset="utf-8"> <style> body { + font: 14px sans-serif; +} + +text { font: 10px sans-serif; } .axis path, @@ -23,96 +27,109 @@ body { </style> <body> + <script src="d3.v3.min.js"></script> -<script> -var margin = {top: 20, right: 20, bottom: 30, left: 40}, +<h1>Ring Oscillators</h1> +<p>We started this page to catalog tests of speed for a variety of microprocessors and electronics modules. Here we define speed as how fast information can transit from external electronics into the core where microcode is running and back out again. A good way to test this is by constructing a ring oscillator, which simply sends token back and forth, producing a waveform that can be measured with an oscilloscope.</p> + + +<h2>GPIO</h2> +<p>To measure speed across a GPIO layer, we use a logic level as out token.</p> + +<div id='gpio'></div> + +<h2>RF</h2> +<p>To measure speed across a radio link, we use the smallest supported packet.</p> +<div id='rf'></div> + + +<script> +function make_graph(div_id,json_key,axis_labels,use_khz){ + var margin = {top: 20, right: 20, bottom: 30, left: 40}, width = 960 - margin.left - margin.right, height = 600 - margin.top - margin.bottom; + var x = d3.scale.linear().range([0, width]); + var y = d3.scale.linear().range([height, 0]); + var color = d3.scale.category10(); + var xAxis = d3.svg.axis().scale(x).orient("bottom").tickSize(-height,0); + var yAxis = d3.svg.axis().scale(y).orient("left").tickSize(-width,0); + + var svg = d3.select(div_id).append("svg") + .attr("width", width + margin.left + margin.right) + .attr("height", height + margin.top + margin.bottom) + .append("g") + .attr("transform", "translate(" + margin.left + "," + margin.top + ")"); + + d3.json("ring.json", function(error, json) { + if (error) throw error; + data = json[json_key]; + console.log(data); + update(data); + }); + + function update(data) { + var cols = d3.scale.category10(); + + function period_to_freq(p){ + if (use_khz) return 1000./p; + else return 1/p; + } + + x.domain([0,d3.max(data, function(d) { return 1.1*d.dev_board_price; })]).nice(); + y.domain([0,d3.max(data, function(d) { return 1.1*period_to_freq(d.ring_period); })]).nice(); + + var node = svg.selectAll("g").data(data).enter().append("g").append("a") + .attr("xlink:href", function(d) { return d.subdirectory_path; }); + + node.append("circle") + .attr("class", "dot") + .attr("cx", function(d) { return x(d.dev_board_price); }) + .attr("cy", function(d) { return y( 1.0*period_to_freq(d.ring_period) ); }) + .attr("r", 3.5) + .style("fill",function(d,i){return cols(i);}); + node.append("text") + .attr("x", function(d) { return x(d.dev_board_price)+5; }) + .attr("y", function(d) { return y( 1.0*period_to_freq(d.ring_period) ); }) + .style("font-size","15px") + .style("font-family","sans-serif") + .text(function(d) { return d.name; }); + + svg.insert("g",":first-child") + .attr("class", "x axis") + .attr("transform", "translate(0," + height + ")") + .call(xAxis) + .append("text") + .attr("class", "label") + .attr("x", width) + .attr("y", 25) + .style("text-anchor", "end") + .style("font-size","15px") + + .text(axis_labels[0]); + + svg.insert("g",":first-child") + .attr("class", "y axis") + .call(yAxis) + .append("text") + .attr("class", "label") + .attr("transform", "rotate(-90)") + .attr("y", -25) + .attr("dy", ".2em") + .style("text-anchor", "end") + .style("font-size","15px") + .text(axis_labels[1]) + } -var x = d3.scale.linear() - .range([0, width]); - -var y = d3.scale.linear() - .range([height, 0]); - -var color = d3.scale.category10(); - -var xAxis = d3.svg.axis() - .scale(x) - .orient("bottom") - .tickSize(-height,0); - -var yAxis = d3.svg.axis() - .scale(y) - .orient("left") - .tickSize(-width,0); - -var svg = d3.select("body").append("svg") - .attr("width", width + margin.left + margin.right) - .attr("height", height + margin.top + margin.bottom) - .append("g") - .attr("transform", "translate(" + margin.left + "," + margin.top + ")"); - -d3.json("ring.json", function(error, json) { - if (error) throw error; - data = json["tests"]; - update(data); - }); - -function update(data) { - var cols = d3.scale.category10(); - - x.domain(d3.extent(data, function(d) { return 1.1*d.dev_board_price; })).nice(); - y.domain(d3.extent(data, function(d) { return 1.1*1000./d.ring_period; })).nice(); - - var node = svg.selectAll("g").data(data).enter().append("g").append("a") - .attr("xlink:href", function(d) { return d.subdirectory_path; }); - - node.append("circle") - .attr("class", "dot") - .attr("cx", function(d) { return x(d.dev_board_price); }) - .attr("cy", function(d) { return y( 1000./d.ring_period ); }) - .attr("r", 3.5) - .style("fill",function(d,i){return cols(i);}); - node.append("text") - .attr("x", function(d) { return x(d.dev_board_price)+5; }) - .attr("y", function(d) { return y( 1000./d.ring_period ); }) - .style("font-size","15px") - .style("font-family","sans-serif") - .text(function(d) { return d.name; }); - - svg.insert("g",":first-child") - .attr("class", "x axis") - .attr("transform", "translate(0," + height + ")") - .call(xAxis) - .append("text") - .attr("class", "label") - .attr("x", width) - .attr("y", 25) - .style("text-anchor", "end") - .style("font-size","15px") - - .text("dev board price ($)"); - - svg.insert("g",":first-child") - .attr("class", "y axis") - .call(yAxis) - .append("text") - .attr("class", "label") - .attr("transform", "rotate(-90)") - .attr("y", -25) - .attr("dy", ".71em") - .style("text-anchor", "end") - .style("font-size","15px") - .text("ring frequency (MHz)") } -</script> +make_graph("#gpio","gpio",["dev board price ($)", "ring frequency (MHz)"],0) +make_graph("#rf","rf",["dev board price ($)", "ring frequency (kHz)"],1) + +</script> -<!--<a href='http://fab.cba.mit.edu/classes/865.15/people/sam.calisch/9/index.html'><img src='img/ring-speed-vs-cost.png'></a>--> </body> </html> \ No newline at end of file diff --git a/radio/nrf24L01/nrf-ftdi-interior.png b/rf/nrf24L01/nrf-ftdi-interior.png similarity index 100% rename from radio/nrf24L01/nrf-ftdi-interior.png rename to rf/nrf24L01/nrf-ftdi-interior.png diff --git a/radio/nrf24L01/nrf-ftdi-layout.png b/rf/nrf24L01/nrf-ftdi-layout.png similarity index 100% rename from radio/nrf24L01/nrf-ftdi-layout.png rename to rf/nrf24L01/nrf-ftdi-layout.png diff --git a/radio/nrf24L01/nrf-ftdi-ring.c b/rf/nrf24L01/nrf-ftdi-ring.c similarity index 100% rename from radio/nrf24L01/nrf-ftdi-ring.c rename to rf/nrf24L01/nrf-ftdi-ring.c diff --git a/radio/nrf24L01/nrf-ftdi-ring.make b/rf/nrf24L01/nrf-ftdi-ring.make similarity index 100% rename from radio/nrf24L01/nrf-ftdi-ring.make rename to rf/nrf24L01/nrf-ftdi-ring.make diff --git a/radio/nrf24L01/nrf-ftdi-traces.png b/rf/nrf24L01/nrf-ftdi-traces.png similarity index 100% rename from radio/nrf24L01/nrf-ftdi-traces.png rename to rf/nrf24L01/nrf-ftdi-traces.png diff --git a/radio/nrf24L01/nrf24-state-diagram.png b/rf/nrf24L01/nrf24-state-diagram.png similarity index 100% rename from radio/nrf24L01/nrf24-state-diagram.png rename to rf/nrf24L01/nrf24-state-diagram.png diff --git a/radio/nrf24L01/ring.png b/rf/nrf24L01/ring.png similarity index 100% rename from radio/nrf24L01/ring.png rename to rf/nrf24L01/ring.png diff --git a/radio/nrf24L01/ring2.png b/rf/nrf24L01/ring2.png similarity index 100% rename from radio/nrf24L01/ring2.png rename to rf/nrf24L01/ring2.png diff --git a/radio/nrf24L01/serial-monitor.py b/rf/nrf24L01/serial-monitor.py similarity index 100% rename from radio/nrf24L01/serial-monitor.py rename to rf/nrf24L01/serial-monitor.py diff --git a/radio/nrf24L01/serial.h b/rf/nrf24L01/serial.h similarity index 100% rename from radio/nrf24L01/serial.h rename to rf/nrf24L01/serial.h diff --git a/radio/nrf52832/nrf52-rf-ring-2.png b/rf/nrf52832/nrf52-rf-ring-2.png similarity index 100% rename from radio/nrf52832/nrf52-rf-ring-2.png rename to rf/nrf52832/nrf52-rf-ring-2.png diff --git a/radio/nrf52832/nrf52-rf-ring.ino b/rf/nrf52832/nrf52-rf-ring.ino similarity index 100% rename from radio/nrf52832/nrf52-rf-ring.ino rename to rf/nrf52832/nrf52-rf-ring.ino diff --git a/radio/nrf52832/nrf52-rf-ring.png b/rf/nrf52832/nrf52-rf-ring.png similarity index 100% rename from radio/nrf52832/nrf52-rf-ring.png rename to rf/nrf52832/nrf52-rf-ring.png diff --git a/radio/nrf52832/radio-modes.png b/rf/nrf52832/radio-modes.png similarity index 100% rename from radio/nrf52832/radio-modes.png rename to rf/nrf52832/radio-modes.png diff --git a/radio/nrf52832/radio-timing.png b/rf/nrf52832/radio-timing.png similarity index 100% rename from radio/nrf52832/radio-timing.png rename to rf/nrf52832/radio-timing.png diff --git a/ring.json b/ring.json index d4b00633b442ae921d8b414909eabe375d05402b..5236e3472d79fe0484cd207dca23b3b43a2c0a14 100644 --- a/ring.json +++ b/ring.json @@ -15,7 +15,7 @@ "name":"nrf52", "serial_number":"", "subdirectory_path":"rf/nrf52832", - "dev_board_price":5, + "dev_board_price":5.0, "dev_board_sales link":"", "ic_price":0.0, "ic_sales_link":"", @@ -25,14 +25,13 @@ "name":"nrf24L01", "serial_number":"", "subdirectory_path":"rf/nrf24L01", - "dev_board_price":4, + "dev_board_price":4.0, "dev_board_sales link":"", "ic_price":0.0, "ic_sales_link":"", "ring_period":390.0 } ], - "gpio":[ { "name":"nucleo, mbed", @@ -42,7 +41,7 @@ "dev_board_sales link":"", "ic_price":0.0, "ic_sales_link":"", - "ring_period":700.0 + "ring_period":0.7 }, { "name":"lpc1768, mbed", @@ -52,7 +51,7 @@ "dev_board_sales_link":"", "ic_price":0.0, "ic_sales_link":"", - "ring_period":400.0 + "ring_period":0.4 }, { "name":"ATmega32u4, Arduino", @@ -62,7 +61,7 @@ "dev_board_sales_link":"", "ic_price":0.0, "ic_sales_link":"", - "ring_period":22000.0 + "ring_period":22.0 }, { "name":"ATmega32u4, Port", @@ -72,7 +71,7 @@ "dev_board_sales_link":"", "ic_price":0.0, "ic_sales_link":"", - "ring_period":2200.0 + "ring_period":2.2 }, { "name":"Teensy, Teensyduino", @@ -82,7 +81,7 @@ "dev_board_sales_link":"", "ic_price":0.0, "ic_sales_link":"", - "ring_period":5500.0 + "ring_period":5.5 }, { "name":"Teensy, Port", @@ -92,7 +91,7 @@ "dev_board_sales_link":"", "ic_price":0.0, "ic_sales_link":"", - "ring_period":3500.0 + "ring_period":3.5 }, { "name":"RaspberryPi, PythonGPIO", @@ -102,7 +101,7 @@ "dev_board_sales_link":"", "ic_price":0.0, "ic_sales_link":"", - "ring_period":10000.0 + "ring_period":10.0 }, { "name":"RaspberryPi, C", @@ -112,7 +111,7 @@ "dev_board_sales_link":"", "ic_price":0.0, "ic_sales_link":"", - "ring_period":400.0 + "ring_period":0.4 }, { "name":"PSoc 5LP, API", @@ -122,7 +121,7 @@ "dev_board_sales_link":"", "ic_price":0.0, "ic_sales_link":"", - "ring_period":1200.0 + "ring_period":1.2 }, { "name":"PSoc 5LP, Hardware", @@ -132,7 +131,7 @@ "dev_board_sales_link":"", "ic_price":0.0, "ic_sales_link":"", - "ring_period":160.0 + "ring_period":0.16 }, { "name":"XMega8E5", @@ -142,7 +141,7 @@ "dev_board_sales_link":"", "ic_price":3.00, "ic_sales_link":"", - "ring_period":252.0 + "ring_period":0.252 }, { "name":"RPiZero, BCM2835", @@ -152,7 +151,7 @@ "dev_board_sales_link":"", "ic_price":0.00, "ic_sales_link":"", - "ring_period":350 + "ring_period":0.35 }, { "name":"RPiZero, node rpio", @@ -162,7 +161,7 @@ "dev_board_sales_link":"", "ic_price":0.00, "ic_sales_link":"", - "ring_period":7648 + "ring_period":7.648 }, { "name":"C.H.I.P. pro, shell", @@ -172,7 +171,7 @@ "dev_board_sales_link":"", "ic_price":0.00, "ic_sales_link":"", - "ring_period":11000000 + "ring_period":11000 }, { "name":"NRF52", @@ -182,7 +181,7 @@ "dev_board_sales_link":"", "ic_price":3.00, "ic_sales_link":"", - "ring_period":377 + "ring_period":0.377 } ] } \ No newline at end of file