1
0
mirror of https://github.com/taigrr/arduinolibs synced 2025-01-18 04:33:12 -08:00

Ring oscillator noise source class

This commit is contained in:
Rhys Weatherley 2015-03-22 08:56:26 +10:00
parent 0c52bf0d50
commit f2f8ed28ea
18 changed files with 1230 additions and 3 deletions

187
doc/crypto-rng-ring.dox Normal file
View File

@ -0,0 +1,187 @@
/*
* Copyright (C) 2015 Southern Storm Software, Pty Ltd.
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
* to deal in the Software without restriction, including without limitation
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
* and/or sell copies of the Software, and to permit persons to whom the
* Software is furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included
* in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
* DEALINGS IN THE SOFTWARE.
*/
/**
\file crypto-rng-ring.dox
\page crypto_rng_ring Ring Oscillator Noise Sources
This page discusses how to construct and use a noise source based on the
jitter from a ring oscillator. The circuit here is very simple: more
complex ring oscillator designs are possible and may give better results.
\note The output from a ring oscillator is not generally as good as a
"true" noise source. The oscillation can easily settle into regular
patterns or sync up with other clock sources on the board. It is even
possible to "hack" a ring oscillator by injecting chosen frequencies
on the power supply rails to force the oscillation into a predictable
waveform (see <a href="http://www.cl.cam.ac.uk/~atm26/papers/markettos-ches2009-inject-trng.pdf">this paper</a> for an example).
It is very important that the output of this class be whitened with
\link RNGClass RNG\endlink before it is used for cryptography and that
the device is isolated from attacker-controlled sources of power.
Unless you have a very good reason to use a ring oscillator,
TransistorNoiseSource is usually a better option.
\section ring_osc_theory Ring oscillator theory
A ring oscillator is formed out of an odd number of inverter gates.
A 1 value on the input to the first gate will be inverted several times,
resulting in a 0 value being fed back into the first gate. In turn that
0 is inverted several times to generate another 1. And so on.
In schematic form, a 3-stage ring oscillator looks like this:
\image html ring_oscillator_basic.png
Because electronic circuits are not instanteous devices it can take some
time for the values to propagate down the inverter chain. The longer the
chain (5-stage, 7-stage, 9-stage, or more) the longer the propagation delay.
The important thing is that the delay is not fixed: differences in
components, ambient temperature, and other factors combine to introduce a
little bit of random jitter in the output waveform.
For our purposes, the jitter is what we are after. The timing differences
from one rising edge to the the next gives us the random bits.
The triangular-shaped output from the final inverter isn't very friendly to
microprocessors. So it is common to select out the jitter using a
D flip-flop and a periodic clock signal:
\image html ring_oscillator_sampled.png
Practical designs inside CPU's often use multiple ring oscillators XOR'ed
together:
\image html ring_oscillator_multi.png
Even after all that the output won't be uniformly random. It is necessary
to whiten the output with a secure hash function before using the data
for cryptography. Fortunately for us, \link RNGClass::stir() RNG.stir()\endlink
has built-in support for whitening so we just need to collect the raw bits.
\section ring_osc_ours Our ring oscillator
To keep things simple, we are going to use a single 5-stage ring oscillator
with a sampling clock provided by a 555 timer:
\image html ring_oscillator.png
The components were deliberately chosen to be commonly available. The only
special one is the 555. I recommend using the CMOS LM7555 variant (or
something equivalent) instead because it can operate at higher frequencies
than a garden variety 555. The 56 ohm resistor on the output of U2 inhibits
ringing on the clock line: we want the noise to come from U1 not U2.
The frequency output from U1 will depend upon the properties of your 4069
chip. A cheap bargain bin chip is actually better than a high quality chip.
Some inverter datasheets I have read proudly advertise reduced jitter
but the jitter is what we are after here. My 4069 was generating about
1.7MHz with a 5-stage ring oscillator. Other chips I tried were able
to exceed 12MHz with a 3-stage ring oscillator. Because the Arduino isn't
fast enough to sample high frequency signals, lower is actually better
for our needs.
To further lower the frequency to something the Arduino can measure,
the 555 timer should be set to between 100kHz and 200kHz (it's ok to be
a little over 200kHz). Start with an R1 value of about 2.2K and adjust
it up or down to get the frequency into the target range. Also measure
the output frequency from U3A and try to target between 20kHz and 50kHz.
The Arduino can easily sample that without putting too much burden
on the CPU. The signal should be very jittery at this point.
This design can of course be improved by using multiple ring oscillators
and an XOR gate, but I wanted to keep the component count low for the
basic design.
\section ring_osc_parts Parts list
\li 1 x 4069 CMOS Hex Inverter
\li 1 x 4013 Dual D Flip-Flop
\li 1 x LM7555 CMOS Timer
\li 1 x 10uF electrolytic capacitor (25V or better)
\li 1 x 100nF ceramic capacitor
\li 1 x 10nF ceramic capacitor
\li 1 x 1nF ceramic capacitor
\li 1 x 56 ohm resistor
\li 1 x 1.2k ohm resistor
\li 1 x 2.2k ohm resistor (or some other value for R1)
\section ring_osc_connecting Connecting to the Arduino
The RingOscillatorNoiseSource class uses the input capture feature of
the AVR microcontroller to measure the time between successive rising
edges. Input capture is only possible on certain pins and the output
of the circuit above needs to be connected to the correct pin:
<table>
<tr><td>Variant</td><td>Arduino Pin / AVR Pin</td><td>Timer</td></tr>
<tr><td>Arduino Uno</td><td>D8 / PB0</td><td>Timer 1</td></tr>
<tr><td>Arduino Leonardo</td><td>D4 / PD4</td><td>Timer 1</td></tr>
<tr><td>Arduino Mega or Mega 2560</td><td>D49 / PL0</td><td>Timer 4</td></tr>
</table>
If your board is not pin-compatible with one of the above, then the
source for the RingOscillatorNoiseSource class will need to be modified
to use a different pin/timer combination. Also, when the timer is in
use by this class it cannot be used for other application tasks.
The timer is set up in free-running mode to count as fast as possible.
Whenever a rising edge occurs on the input signal, the timer's current
value is written to a special register and an interrupt occurs.
Within the interrupt service routine, the previous register value is
subtracted from the current value to determine the amount of time that
has elapsed between the two rising edges.
The jitter is extracted from the time difference in a very simple way:
the lowest bit of the difference is the jitter and all other bits
are discarded. The interrupt service routine collects up 16 bits of
jitter over successive input pulses and then passes them to the
higher level code in the RingOscillatorNoiseSource class.
Within the higher level code, the input bits are first debiased using the
Von Neumann method to discard the parts of the signal that don't jitter
very much:
\li Collect two input bits.
\li If they are the same, then discard both.
\li If they are different, then choose one as the output bit and discard
the other one.
The debiased bits are collected up into a 256-bit buffer. Once the buffer
is full it is passed to \link RNGClass::stir() RNG.stir()\endlink to be
whitened and incorporated into the global random number pool.
And that's it!
As noted earlier, the output from a ring oscillator is not uniform.
To deal with this, the RingOscillatorNoiseSource class takes a fairly
conservative approach. It credits a very small amount of entropy to
each full buffer, forcing the system to collect more input data
to achieve full entropy.
My investigations showed that at 20kHz it takes about a second to generate
256 bits of good random data after Von Neumann debiasing and whitening.
Two to three seconds after startup there should be enough entropy in the
random number pool to generate encryption keys and other secret material
safely. The \link RNGClass::available() RNG.available()\endlink function
can be used to determine when there is enough entropy in the pool
for the application's needs.
*/

View File

@ -31,7 +31,7 @@
\li Stream ciphers: ChaCha \li Stream ciphers: ChaCha
\li Hash algorithms: SHA1, SHA256, SHA512, SHA3_256, SHA3_512, BLAKE2s, BLAKE2b \li Hash algorithms: SHA1, SHA256, SHA512, SHA3_256, SHA3_512, BLAKE2s, BLAKE2b
\li Public key algorithms: Curve25519 \li Public key algorithms: Curve25519
\li Random number generation: \link RNGClass RNG\endlink, TransistorNoiseSource \li Random number generation: \link RNGClass RNG\endlink, TransistorNoiseSource, RingOscillatorNoiseSource
All cryptographic algorithms have been optimized for 8-bit Arduino platforms All cryptographic algorithms have been optimized for 8-bit Arduino platforms
like the Uno. Memory usage is also reduced, particularly for SHA1, SHA256, like the Uno. Memory usage is also reduced, particularly for SHA1, SHA256,

View File

@ -95,7 +95,7 @@ realtime clock and the LCD library to implement an alarm clock.
\li Stream ciphers: ChaCha \li Stream ciphers: ChaCha
\li Hash algorithms: SHA1, SHA256, SHA512, SHA3_256, SHA3_512, BLAKE2s, BLAKE2b \li Hash algorithms: SHA1, SHA256, SHA512, SHA3_256, SHA3_512, BLAKE2s, BLAKE2b
\li Public key algorithms: Curve25519 \li Public key algorithms: Curve25519
\li Random number generation: \link RNGClass RNG\endlink, TransistorNoiseSource \li Random number generation: \link RNGClass RNG\endlink, TransistorNoiseSource, RingOscillatorNoiseSource
More information can be found on the \ref crypto "Cryptographic Library" page. More information can be found on the \ref crypto "Cryptographic Library" page.

View File

@ -0,0 +1,263 @@
/*
* Copyright (C) 2015 Southern Storm Software, Pty Ltd.
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
* to deal in the Software without restriction, including without limitation
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
* and/or sell copies of the Software, and to permit persons to whom the
* Software is furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included
* in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
* DEALINGS IN THE SOFTWARE.
*/
#include "RingOscillatorNoiseSource.h"
#include "Crypto.h"
#include "RNG.h"
#include <Arduino.h>
/**
* \class RingOscillatorNoiseSource RingOscillatorNoiseSource.h <RingOscillatorNoiseSource.h>
* \brief Processes the signal from a ring oscillator based noise source.
*
* This class processes input from a ring oscillator noise source, such as
* that described \ref crypto_rng_ring "here".
*
* \note The output from a ring oscillator is not generally as good as a
* "true" noise source. The oscillation can easily settle into regular
* patterns or sync up with other clock sources on the board. It is even
* possible to "hack" a ring oscillator by injecting chosen frequencies
* on the power supply rails to force the oscillation into a predictable
* waveform (see <a href="http://www.cl.cam.ac.uk/~atm26/papers/markettos-ches2009-inject-trng.pdf">this paper</a> for an example).
* It is very important that the output of this class be whitened with
* \link RNGClass RNG\endlink before it is used for cryptography and that
* the device is isolated from attacker-controlled sources of power.
* Unless you have a very good reason to use a ring oscillator,
* TransistorNoiseSource is usually a better option.
*
* The noise is read from an input capture pin on the Arduino and stirred
* into the random number pool on a regular basis. The following pins are
* used on different Arduino variants:
*
* <table>
* <tr><td>Variant</td><td>Arduino Pin / AVR Pin</td><td>Timer</td></tr>
* <tr><td>Arduino Uno</td><td>D8 / PB0</td><td>Timer 1</td></tr>
* <tr><td>Arduino Leonardo</td><td>D4 / PD4</td><td>Timer 1</td></tr>
* <tr><td>Arduino Mega or Mega 2560</td><td>D49 / PL0</td><td>Timer 4</td></tr>
* </table>
*
* If your board is not pin-compatible with one of the above, then the
* source for the RingOscillatorNoiseSource class will need to be modified
* to use a different pin/timer combination. Also, when the timer is in
* use by this class it cannot be used for other application tasks.
*
* The example below shows how to initialize a ring oscillator based noise
* source and use it with \link RNGClass RNG\endlink:
*
* \code
* #include <Crypto.h>
* #include <RNG.h>
* #include <RingOscillatorNoiseSource.h>
*
* // Noise source to seed the random number generator.
* RingOscillatorNoiseSource noise;
*
* void setup() {
* // Initialize the random number generator with the application tag
* // "MyApp 1.0" and load the previous seed from EEPROM address 500.
* RNG.begin("MyApp 1.0", 500);
*
* // ...
* }
*
* void loop() {
* // ...
*
* // If the noise source has accumulated new entropy, then stir it in.
* RNG.stir(noise);
*
* // Perform regular housekeeping on the random number generator.
* RNG.loop();
*
* // ...
* }
* \endcode
*
* For more information, see the documentation for \link RNGClass RNG\endlink.
*
* \sa \link RNGClass RNG\endlink, NoiseSource, TransistorNoiseSource
*/
// Choose the input capture timer and pin to use for this board.
#if defined(__AVR_ATmega2560__) || defined(__AVR_ATmega1280__)
// Arduino Mega or Mega 2560 - input capture on TIMER4 and D49/PL0.
#define RING_TIMER 4
#define RING_PIN 49
#define RING_CAPT_vect TIMER4_CAPT_vect
#define RING_ICR ICR4
#elif defined(__AVR_ATmega32U4__) || defined(__AVR_ATmega16U4__)
// Arduino Leonardo - input capture on Timer1 and D4/PD4.
#define RING_TIMER 1
#define RING_PIN 4
#define RING_CAPT_vect TIMER1_CAPT_vect
#define RING_ICR ICR1
#else
// Assuming Arduino Uno or equivalent - input capture on TIMER1 and D8/PB0.
#define RING_TIMER 1
#define RING_PIN 8
#define RING_CAPT_vect TIMER1_CAPT_vect
#define RING_ICR ICR1
#endif
// Calibration states.
#define NOISE_NOT_CALIBRATING 0
#define NOISE_CALIBRATING 1
// If there is no capture event for this many milliseconds,
// then assume that the oscillator is stopped or disconnected.
#define RING_DISCONNECT_TIME 200
RingOscillatorNoiseSource::RingOscillatorNoiseSource()
: calState(NOISE_CALIBRATING)
, lastSignal(millis())
{
// Initialize the bit collection routines.
restart();
// Set up the capture pin as an input with no pull-ups.
pinMode(RING_PIN, INPUT);
digitalWrite(RING_PIN, LOW);
#if RING_TIMER == 1
// Set up TIMER1 to perform input capture on PB8/D8.
TCCR1B = 0; // Turn off TIMER1.
TIMSK1 = 0; // Turn off TIMER1 interrupts.
TCNT1 = 0; // Zero the timer.
TCCR1A = 0; // Turn off output compare.
TCCR1B |= (1 << ICES1); // Input capture on rising edge.
TIMSK1 |= (1 << ICIE1); // Input capture interrupts enabled.
// Start TIMER1 at the highest frequency with no prescaling.
TCCR1B |= (1 << CS10);
#elif RING_TIMER == 4
// Set up TIMER4 to perform input capture on PL0/D49.
TCCR4B = 0; // Turn off TIMER4.
TIMSK4 = 0; // Turn off TIMER4 interrupts.
TCNT4 = 0; // Zero the timer.
TCCR4A = 0; // Turn off output compare.
TCCR4B |= (1 << ICES4); // Input capture on rising edge.
TIMSK4 |= (1 << ICIE4); // Input capture interrupts enabled.
// Start TIMER4 at the highest frequency with no prescaling.
TCCR4B |= (1 << CS10);
#endif
}
RingOscillatorNoiseSource::~RingOscillatorNoiseSource()
{
// Turn off the capture timer.
#if RING_TIMER == 1
TCCR1B = 0;
#elif RING_TIMER == 4
TCCR4B = 0;
#endif
// Clean up.
clean(buffer);
}
bool RingOscillatorNoiseSource::calibrating() const
{
return calState == NOISE_CALIBRATING;
}
static uint16_t volatile out = 0;
static uint8_t volatile outBits = 0;
// Interrupt service routine for the timer's input capture interrupt.
ISR(RING_CAPT_vect)
{
// We are interested in the jitter; that is the difference in
// time between one rising edge and the next in the signal.
// Extract a single bit from the jitter and add it to the
// rolling "out" buffer for the main code to process later.
// If the buffer overflows, we discard bits and keep going.
static uint16_t prev = 0;
uint16_t next = RING_ICR;
out = (out << 1) | ((next - prev) & 1);
prev = next;
++outBits;
}
void RingOscillatorNoiseSource::stir()
{
// If the "out" buffer is full, then convert the bits. Turn off
// interrupts while we read the "out" buffer and reset "outBits".
unsigned long now = millis();
cli();
if (outBits >= 16) {
uint16_t bits = out;
outBits = 0;
sei();
for (uint8_t index = 0; index < 8; ++index) {
// Collect two bits of input and remove bias using the Von Neumann
// method. If both bits are the same, then discard both.
// Otherwise choose one of the bits and output that one.
// We have to do this carefully so that instruction timing does
// not reveal the value of the bit that is chosen.
if ((bits ^ (bits << 1)) & 0x8000) {
// The bits are different: add the top-most to the buffer.
if (posn < sizeof(buffer)) {
buffer[posn] = (buffer[posn] >> 1) |
(((uint8_t)(bits >> 8)) & (uint8_t)0x80);
if (++bitNum >= 8) {
++posn;
bitNum = 0;
}
}
}
bits = bits << 2;
}
} else {
// The "out" buffer isn't full yet. Re-enable interrupts.
sei();
// If it has been too long since the last useful block,
// then go back to calibrating. The oscillator may be
// stopped or disconnected.
if (calState == NOISE_NOT_CALIBRATING) {
if ((now - lastSignal) >= RING_DISCONNECT_TIME) {
restart();
calState = NOISE_CALIBRATING;
}
}
}
// If the buffer is full, then stir it into the random number pool.
// We credit 1 bit of entropy for every 8 bits of output because
// ring oscillators aren't quite as good as a true noise source.
// We have to collect a lot more data to get something random enough.
if (posn >= sizeof(buffer)) {
output(buffer, posn, posn);
restart();
calState = NOISE_NOT_CALIBRATING;
lastSignal = now;
}
}
void RingOscillatorNoiseSource::restart()
{
clean(buffer);
prevBit = 0;
posn = 0;
bitNum = 0;
}

View File

@ -0,0 +1,50 @@
/*
* Copyright (C) 2015 Southern Storm Software, Pty Ltd.
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
* to deal in the Software without restriction, including without limitation
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
* and/or sell copies of the Software, and to permit persons to whom the
* Software is furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included
* in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
* DEALINGS IN THE SOFTWARE.
*/
#ifndef CRYPTO_RINGOSCILLATORNOISESOURCE_H
#define CRYPTO_RINGOSCILLATORNOISESOURCE_H
#include <inttypes.h>
#include "NoiseSource.h"
class RingOscillatorNoiseSource : public NoiseSource
{
public:
RingOscillatorNoiseSource();
virtual ~RingOscillatorNoiseSource();
bool calibrating() const;
void stir();
private:
uint8_t prevBit;
uint8_t posn;
uint8_t bitNum;
uint8_t calState;
uint8_t buffer[32];
unsigned long lastSignal;
void restart();
};
#endif

View File

@ -72,7 +72,7 @@
* } * }
* \endcode * \endcode
* *
* \sa \link RNGClass RNG\endlink, NoiseSource * \sa \link RNGClass RNG\endlink, NoiseSource, RingOscillatorNoiseSource
*/ */
/* /*

View File

@ -4,6 +4,7 @@
#include <Crypto.h> #include <Crypto.h>
#include <RNG.h> #include <RNG.h>
#include <TransistorNoiseSource.h> #include <TransistorNoiseSource.h>
#include <RingOscillatorNoiseSource.h>
// Change "MyApp 1.0" to some other tag for your application // Change "MyApp 1.0" to some other tag for your application
// so that different applications will generate different results // so that different applications will generate different results
@ -15,6 +16,7 @@
// Noise source to seed the random number generator. // Noise source to seed the random number generator.
TransistorNoiseSource noise(A1); TransistorNoiseSource noise(A1);
//RingOscillatorNoiseSource noise;
bool calibrating = false; bool calibrating = false;
byte data[32]; byte data[32];

View File

@ -0,0 +1,44 @@
// This example dumps the raw data from a ring oscillator noise source
// without any of the whitening normally performed by the RNG class.
#include <Crypto.h>
#include <RingOscillatorNoiseSource.h>
char const hexchars[] = "0123456789ABCDEF";
class RawNoiseSource : public RingOscillatorNoiseSource
{
public:
RawNoiseSource() : RingOscillatorNoiseSource() {}
protected:
void output(const uint8_t *data, size_t len, unsigned int credit)
{
for (size_t posn = 0; posn < len; ++posn) {
uint8_t value = data[posn];
Serial.print(hexchars[(value >> 4) & 0x0F]);
Serial.print(hexchars[value & 0x0F]);
}
Serial.println();
}
};
RawNoiseSource noise;
bool calibrating = true;
void setup() {
Serial.begin(9600);
Serial.println();
Serial.println("calibrating");
}
void loop() {
noise.stir();
bool nowCalibrating = noise.calibrating();
if (nowCalibrating != calibrating) {
calibrating = nowCalibrating;
if (calibrating)
Serial.println("calibrating");
}
}

View File

@ -17,6 +17,7 @@ CFB KEYWORD1
CTR KEYWORD1 CTR KEYWORD1
OFB KEYWORD1 OFB KEYWORD1
RingOscillatorNoiseSource KEYWORD1
RNG KEYWORD1 RNG KEYWORD1
TransistorNoiseSource KEYWORD1 TransistorNoiseSource KEYWORD1

View File

@ -0,0 +1,441 @@
#FIG 3.2 Produced by xfig version 3.2.5c
Landscape
Center
Metric
A4
100.00
Single
-2
1200 2
6 9135 2025 9315 2295
2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2
9210 2295 9240 2295
2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2
9175 2250 9275 2250
2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2
9135 2205 9315 2205
2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2
9225 2025 9225 2205
-6
6 10485 2700 10665 2970
2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2
10560 2970 10590 2970
2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2
10525 2925 10625 2925
2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2
10485 2880 10665 2880
2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2
10575 2700 10575 2880
-6
6 8820 1530 8910 1620
1 3 0 1 0 -1 0 0 20 0.000 1 0.0000 8865 1575 30 30 8865 1575 8865 1605
-6
6 9180 1980 9270 2070
1 3 0 1 0 -1 0 0 20 0.000 1 0.0000 9225 2025 30 30 9225 2025 9225 2055
-6
6 7785 1125 8865 1755
6 7785 1395 8865 1755
1 3 0 1 0 7 0 0 -1 0.000 1 0.0000 8550 1575 45 45 8550 1575 8550 1620
2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 4
8145 1395 8145 1755 8505 1575 8145 1395
2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2
8145 1575 7785 1575
2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2
8595 1575 8865 1575
4 0 0 0 -1 16 6 0.0000 4 75 120 7875 1530 11\001
4 0 0 0 -1 16 6 0.0000 4 75 120 8685 1530 10\001
-6
4 0 0 50 -1 0 12 0.0000 4 135 360 8190 1260 U1E\001
-6
6 6705 1125 7785 1755
6 6705 1395 7785 1755
1 3 0 1 0 7 0 0 -1 0.000 1 0.0000 7470 1575 45 45 7470 1575 7470 1620
2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 4
7065 1395 7065 1755 7425 1575 7065 1395
2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2
7065 1575 6705 1575
2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2
7515 1575 7785 1575
4 0 0 0 -1 16 6 0.0000 4 75 120 6795 1530 13\001
4 0 0 0 -1 16 6 0.0000 4 75 120 7605 1530 12\001
-6
4 0 0 50 -1 0 12 0.0000 4 135 345 7110 1260 U1F\001
-6
6 3375 630 6705 1980
6 3465 1395 4545 1755
1 3 0 1 0 7 0 0 -1 0.000 1 0.0000 4230 1575 45 45 4230 1575 4230 1620
2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 4
3825 1395 3825 1755 4185 1575 3825 1395
2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2
3825 1575 3465 1575
2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2
4275 1575 4545 1575
4 0 0 0 -1 16 6 0.0000 4 75 60 3600 1530 1\001
4 0 0 0 -1 16 6 0.0000 4 75 60 4365 1530 2\001
-6
6 4545 1395 5625 1755
1 3 0 1 0 7 0 0 -1 0.000 1 0.0000 5310 1575 45 45 5310 1575 5310 1620
2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 4
4905 1395 4905 1755 5265 1575 4905 1395
2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2
4905 1575 4545 1575
2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2
5355 1575 5625 1575
4 0 0 0 -1 16 6 0.0000 4 75 60 4680 1530 3\001
4 0 0 0 -1 16 6 0.0000 4 75 60 5445 1530 4\001
-6
6 5625 1395 6705 1755
1 3 0 1 0 7 0 0 -1 0.000 1 0.0000 6390 1575 45 45 6390 1575 6390 1620
2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 4
5985 1395 5985 1755 6345 1575 5985 1395
2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2
5985 1575 5625 1575
2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2
6435 1575 6705 1575
4 0 0 0 -1 16 6 0.0000 4 75 60 5760 1530 5\001
4 0 0 0 -1 16 6 0.0000 4 75 60 6525 1530 6\001
-6
6 3870 1710 4050 1980
2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2
3945 1980 3975 1980
2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2
3910 1935 4010 1935
2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2
3870 1890 4050 1890
2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2
3960 1710 3960 1890
-6
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
1 1 1.00 60.00 120.00
3960 1485 3960 900
4 0 0 10 -1 16 6 0.0000 4 75 60 4050 1800 7\001
4 0 0 7 -1 16 6 0.0000 4 75 120 4005 1305 14\001
4 0 0 50 -1 0 12 0.0000 4 135 240 3870 765 5V\001
4 0 0 50 -1 0 12 0.0000 4 135 375 3375 1260 U1A\001
4 0 0 50 -1 0 12 0.0000 4 135 375 4950 1260 U1B\001
4 0 0 50 -1 0 12 0.0000 4 135 375 6030 1260 U1C\001
-6
6 1215 1575 1440 1890
5 1 0 1 0 -1 0 0 -1 0.000 1 0 0 0 1350.000 1900.000 1260 1780 1350 1750 1440 1780
2 1 0 1 0 -1 0 0 -1 0.000 0 1 -1 0 0 2
1350 1750 1350 1890
2 1 0 1 0 -1 0 0 -1 0.000 0 1 -1 0 0 2
1260 1710 1440 1710
2 1 0 1 0 -1 0 0 -1 0.000 0 1 -1 0 0 2
1350 1710 1350 1575
2 1 0 1 0 -1 0 0 -1 0.000 0 1 -1 0 0 2
1286 1604 1286 1674
2 1 0 1 0 -1 0 0 -1 0.000 0 1 -1 0 0 2
1256 1639 1316 1639
-6
6 1935 1575 2115 1890
2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2
2025 1710 2025 1575
2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2
2025 1755 2025 1890
2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2
1935 1710 2115 1710
2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2
1935 1755 2115 1755
-6
6 1620 2070 1800 2340
2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2
1695 2340 1725 2340
2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2
1660 2295 1760 2295
2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2
1620 2250 1800 2250
2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2
1710 2070 1710 2250
-6
6 1665 2025 1755 2115
1 3 0 1 0 -1 0 0 20 0.000 1 0.0000 1710 2070 30 30 1710 2070 1710 2100
-6
6 1665 1305 1755 1395
1 3 0 1 0 -1 0 0 20 0.000 1 0.0000 1710 1350 30 30 1710 1350 1710 1380
-6
6 3555 3690 3645 4140
2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2
3600 4045 3600 4140
2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 7
3600 3780 3560 3807 3640 3861 3560 3915 3640 3969 3560 4023
3600 4050
2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2
3600 3690 3600 3785
-6
6 3555 4365 3645 4815
2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2
3600 4720 3600 4815
2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 7
3600 4455 3560 4482 3640 4536 3560 4590 3640 4644 3560 4698
3600 4725
2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2
3600 4365 3600 4460
-6
6 3510 5175 3690 5490
2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2
3600 5310 3600 5175
2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2
3600 5355 3600 5490
2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2
3510 5310 3690 5310
2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2
3510 5355 3690 5355
-6
6 3555 3330 3645 3420
1 3 0 1 0 -1 0 0 20 0.000 1 0.0000 3600 3375 30 30 3600 3375 3600 3405
-6
6 3555 4230 3645 4320
1 3 0 1 0 -1 0 0 20 0.000 1 0.0000 3600 4275 30 30 3600 4275 3600 4305
-6
6 3825 4905 3915 4995
1 3 0 1 0 -1 0 0 20 0.000 1 0.0000 3870 4950 30 30 3870 4950 3870 4980
-6
6 3555 4905 3645 4995
1 3 0 1 0 -1 0 0 20 0.000 1 0.0000 3600 4950 30 30 3600 4950 3600 4980
-6
6 4545 3330 4635 3420
1 3 0 1 0 -1 0 0 20 0.000 1 0.0000 4590 3375 30 30 4590 3375 4590 3405
-6
6 10035 3330 12600 4905
5 1 0 1 0 7 50 -1 -1 0.000 0 0 0 0 10575.000 4050.000 10530 4050 10575 4005 10620 4050
6 10485 4635 10665 4905
2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2
10560 4905 10590 4905
2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2
10525 4860 10625 4860
2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2
10485 4815 10665 4815
2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2
10575 4635 10575 4815
-6
6 10530 3780 10620 3870
1 3 0 1 0 -1 0 0 20 0.000 1 0.0000 10575 3825 30 30 10575 3825 10575 3855
-6
6 10530 4230 10620 4320
1 3 0 1 0 -1 0 0 20 0.000 1 0.0000 10575 4275 30 30 10575 4275 10575 4305
-6
1 3 0 1 0 7 0 0 -1 0.000 1 0.0000 11970 4275 45 45 11970 4275 12015 4275
2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
11025 3375 11925 3375 11925 4500 11025 4500 11025 3375
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 3
11025 4185 11115 4275 11025 4365
2 1 0 1 0 0 20 0 -1 0.000 0 0 0 0 0 2
11865 4230 11790 4230
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 3
11025 3600 10575 3600 10575 4635
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
11025 3825 10575 3825
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
11025 4275 10575 4275
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
11925 3600 12285 3600
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
12015 4275 12285 4275
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
11025 4050 10620 4050
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 3
1 1 1.00 60.00 120.00
10530 4050 10125 4050 10125 3600
4 0 0 20 -1 16 6 0.0000 4 75 90 11790 3645 Q\001
4 0 0 20 -1 16 6 0.0000 4 75 90 11790 4320 Q\001
4 0 0 20 -1 16 6 0.0000 4 75 360 11070 4095 RESET\001
4 0 0 20 -1 16 6 0.0000 4 75 210 11070 3870 SET\001
4 0 0 20 -1 16 6 0.0000 4 75 75 11070 3645 D\001
4 0 0 20 -1 16 6 0.0000 4 75 210 11160 4320 CLK\001
4 0 0 0 -1 16 6 0.0000 4 75 120 11970 3555 13\001
4 0 0 0 -1 16 6 0.0000 4 75 120 11970 4185 12\001
4 0 0 0 -1 16 6 0.0000 4 75 60 10935 3555 9\001
4 0 0 0 -1 16 6 0.0000 4 75 120 10890 4230 11\001
4 0 0 0 -1 16 6 0.0000 4 75 60 10935 3780 8\001
4 0 0 0 -1 16 6 0.0000 4 75 120 10890 4005 10\001
4 0 0 50 -1 0 12 0.0000 4 135 240 10035 3465 5V\001
4 0 0 50 -1 0 12 0.0000 4 135 375 12195 4005 U3B\001
-6
6 4500 6030 4680 6300
2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2
4575 6300 4605 6300
2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2
4540 6255 4640 6255
2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2
4500 6210 4680 6210
2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2
4590 6030 4590 6210
-6
6 4995 6030 5175 6300
2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2
5070 6300 5100 6300
2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2
5035 6255 5135 6255
2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2
4995 6210 5175 6210
2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2
5085 6030 5085 6210
-6
6 4995 5715 5175 6030
2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2
5085 5850 5085 5715
2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2
5085 5895 5085 6030
2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2
4995 5850 5175 5850
2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2
4995 5895 5175 5895
-6
6 3510 5490 3690 5760
2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2
3585 5760 3615 5760
2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2
3550 5715 3650 5715
2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2
3510 5670 3690 5670
2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2
3600 5490 3600 5670
-6
6 7695 2700 8865 3285
6 7785 2700 8865 3060
1 3 0 1 0 7 0 0 -1 0.000 1 0.0000 8550 2880 45 45 8550 2880 8550 2925
2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 4
8145 2700 8145 3060 8505 2880 8145 2700
2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2
8145 2880 7785 2880
2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2
8595 2880 8865 2880
4 0 0 0 -1 16 6 0.0000 4 75 60 7920 2835 9\001
4 0 0 0 -1 16 6 0.0000 4 75 60 8685 2835 8\001
-6
6 7695 2880 7875 3150
2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2
7770 3150 7800 3150
2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2
7735 3105 7835 3105
2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2
7695 3060 7875 3060
2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2
7785 2880 7785 3060
-6
4 0 0 50 -1 0 12 0.0000 4 135 375 8190 3285 U1D\001
-6
6 7155 4590 7605 4680
2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2
7250 4635 7155 4635
2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 7
7515 4635 7488 4595 7434 4675 7380 4595 7326 4675 7272 4595
7245 4635
2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2
7605 4635 7510 4635
-6
1 3 0 1 0 7 0 0 -1 0.000 1 0.0000 11070 2250 45 45 11070 2250 11115 2250
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
8865 1575 10125 1575
2 1 0 1 0 0 0 0 -1 4.000 0 0 0 0 0 2
11385 2250 11115 2250
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 3
10125 1800 9225 1800 9225 2115
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
10125 2025 9225 2025
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
1 1 1.00 60.00 120.00
10575 1350 10575 900
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
10575 2475 10575 2700
2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
10125 1350 11025 1350 11025 2475 10125 2475 10125 1350
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 3
10125 2160 10215 2250 10125 2340
2 1 0 1 0 0 20 0 -1 0.000 0 0 0 0 0 2
10965 2205 10890 2205
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 4
8865 1575 8865 2250 3465 2250 3465 1575
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 4
1350 1620 1350 1350 2025 1350 2025 1620
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 4
1350 1890 1350 2070 2025 2070 2025 1845
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
1 1 1.00 60.00 120.00
1710 1350 1710 900
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 4
1 1 1.00 60.00 120.00
5085 3825 5085 3375 3600 3375 3600 2925
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
3600 3735 3600 3330
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
3600 4410 3600 4140
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
4275 4275 3600 4275
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
4275 4950 3600 4950
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 3
4275 4635 3870 4635 3870 4950
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
3600 4725 3600 5220
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
4590 5400 4590 6075
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
5085 5760 5085 5400
2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
4275 3825 5400 3825 5400 5400 4275 5400 4275 3825
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
4590 3825 4590 3375
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
1 1 1.00 60.00 120.00
11025 1575 11925 1575
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 4
10125 2250 9675 2250 9675 4635 7605 4635
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
7155 4635 5400 4635
4 0 0 50 -1 0 12 0.0000 4 135 240 10485 765 5V\001
4 0 0 20 -1 16 6 0.0000 4 75 90 10890 1620 Q\001
4 0 0 20 -1 16 6 0.0000 4 75 90 10890 2295 Q\001
4 0 0 0 -1 16 6 0.0000 4 75 60 11115 1530 1\001
4 0 0 0 -1 16 6 0.0000 4 75 60 11115 2160 2\001
4 0 0 0 -1 16 6 0.0000 4 75 60 9990 1530 5\001
4 0 0 0 -1 16 6 0.0000 4 75 60 9990 2205 3\001
4 0 0 20 -1 16 6 0.0000 4 75 360 10170 2070 RESET\001
4 0 0 0 -1 16 6 0.0000 4 75 60 9990 1755 6\001
4 0 0 0 -1 16 6 0.0000 4 75 60 9990 1980 4\001
4 0 0 20 -1 16 6 0.0000 4 75 210 10170 1845 SET\001
4 0 0 20 -1 16 6 0.0000 4 75 75 10170 1620 D\001
4 0 0 20 -1 16 6 0.0000 4 75 210 10260 2295 CLK\001
4 0 0 10 -1 16 6 0.0000 4 75 60 10665 2610 7\001
4 0 0 7 -1 16 6 0.0000 4 75 120 10620 1260 14\001
4 0 0 50 -1 0 12 0.0000 4 135 375 11295 1980 U3A\001
4 0 0 7 -1 16 6 0.0000 4 75 195 10485 1485 Vdd\001
4 0 0 10 -1 16 6 0.0000 4 75 195 10485 2430 Vss\001
4 0 0 50 -1 0 12 0.0000 4 135 240 1620 855 5V\001
4 0 0 50 -1 0 12 0.0000 4 135 525 2205 1800 100nF\001
4 0 0 50 -1 0 12 0.0000 4 135 420 720 1800 10uF\001
4 0 0 50 -1 0 12 0.0000 4 135 2070 5130 2655 4069 CMOS Hex Inverter\001
4 0 0 0 -1 16 6 0.0000 4 75 60 4635 3780 4\001
4 0 0 10 -1 16 6 0.0000 4 75 60 5130 3780 8\001
4 0 0 50 -1 0 12 0.0000 4 135 240 4725 4635 U2\001
4 0 0 50 -1 0 12 0.0000 4 135 240 3510 2790 5V\001
4 0 0 0 -1 16 6 0.0000 4 75 60 4140 4185 7\001
4 0 0 0 -1 16 6 0.0000 4 75 60 4140 4590 6\001
4 0 0 0 -1 16 6 0.0000 4 75 60 4140 4905 2\001
4 0 0 7 -1 16 6 0.0000 4 75 60 4635 5535 1\001
4 0 0 0 -1 16 6 0.0000 4 75 60 5130 5535 5\001
4 0 0 50 -1 0 12 0.0000 4 135 1845 5670 5130 LM7555 CMOS Timer\001
4 0 0 50 -1 0 12 0.0000 4 180 1845 11025 2970 4013 Dual D Flip-Flop\001
4 0 0 50 -1 0 12 0.0000 4 135 420 5265 5940 10nF\001
4 0 0 20 -1 16 6 0.0000 4 75 180 4365 4320 DIS\001
4 0 0 20 -1 16 6 0.0000 4 75 210 4365 4680 THR\001
4 0 0 20 -1 16 6 0.0000 4 75 255 4365 4995 TRIG\001
4 0 0 20 -1 16 6 0.0000 4 75 270 4950 5310 CTRL\001
4 0 0 20 -1 16 6 0.0000 4 75 240 4455 5310 GND\001
4 0 0 20 -1 16 6 0.0000 4 75 360 4410 4005 RESET\001
4 0 0 20 -1 16 6 0.0000 4 75 195 4995 4005 Vcc\001
4 0 0 0 -1 16 6 0.0000 4 75 60 5490 4545 3\001
4 0 0 20 -1 16 6 0.0000 4 75 225 5130 4680 OUT\001
4 0 0 50 -1 0 12 0.0000 4 180 570 12105 1620 Output\001
4 0 0 50 -1 0 12 0.0000 4 135 315 3105 5400 1nF\001
4 0 0 50 -1 0 12 0.0000 4 135 390 3060 4680 1.2K\001
4 0 0 50 -1 0 12 0.0000 4 135 240 3150 4005 R1\001
4 0 0 50 -1 0 12 0.0000 4 135 1890 945 3870 Choose R1 for between\001
4 0 0 50 -1 0 12 0.0000 4 135 345 7200 4500 56R\001
4 0 0 50 -1 0 12 0.0000 4 180 1980 900 4140 100 and 200 kHz output\001
4 0 0 50 -1 0 12 0.0000 4 135 660 1485 4410 from U2\001
4 0 0 50 -1 0 12 0.0000 4 180 3315 8280 5895 Place U1 and U2 on opposite sides of the\001
4 0 0 50 -1 0 12 0.0000 4 180 3540 8280 6120 PCB layout to avoid the regular signal from\001
# or
4 0 0 50 -1 0 12 0.0000 4 180 3465 8280 6345 U2 affecting the ring oscillator's behaviour\001

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

View File

@ -0,0 +1,39 @@
#FIG 3.2 Produced by xfig version 3.2.5c
Landscape
Center
Metric
A4
100.00
Single
-2
1200 2
6 7155 1710 7245 1800
1 3 0 1 0 -1 0 0 20 0.000 1 0.0000 7200 1755 30 30 7200 1755 7200 1785
-6
1 3 0 1 0 7 0 0 -1 0.000 1 0.0000 4590 1755 45 45 4590 1755 4635 1755
1 3 0 1 0 7 0 0 -1 0.000 1 0.0000 5715 1755 45 45 5715 1755 5760 1755
1 3 0 1 0 7 0 0 -1 0.000 1 0.0000 6840 1755 45 45 6840 1755 6885 1755
2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2
4185 1755 3825 1755
2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2
4635 1755 4950 1755
2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 4
4185 1575 4185 1935 4545 1755 4185 1575
2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2
5310 1755 4950 1755
2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2
5760 1755 6075 1755
2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 4
5310 1575 5310 1935 5670 1755 5310 1575
2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2
6435 1755 6075 1755
2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2
6885 1755 7200 1755
2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 4
6435 1575 6435 1935 6795 1755 6435 1575
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
1 1 1.00 60.00 120.00
7200 1755 7875 1755
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 4
7200 1755 7200 1350 3825 1350 3825 1755
4 0 0 50 -1 0 12 0.0000 4 180 570 8010 1800 Output\001

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 KiB

View File

@ -0,0 +1,146 @@
#FIG 3.2 Produced by xfig version 3.2.5c
Landscape
Center
Metric
A4
100.00
Single
-2
1200 2
5 1 0 1 0 7 0 0 -1 0.000 0 0 0 0 5671.500 1807.500 6221 1515 6294 1808 6221 2100
5 1 0 1 0 7 0 0 -1 0.000 0 0 0 0 5532.919 1807.500 6074 1515 6148 1808 6074 2100
6 1125 1170 4995 4050
6 1125 1170 4995 1755
6 4185 1395 4635 1755
1 3 0 1 0 7 0 0 -1 0.000 1 0.0000 4590 1575 45 45 4590 1575 4635 1575
2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 4
4185 1395 4185 1755 4545 1575 4185 1395
-6
6 4905 1530 4995 1620
1 3 0 1 0 -1 0 0 20 0.000 1 0.0000 4950 1575 30 30 4950 1575 4950 1605
-6
1 3 0 1 0 7 0 0 -1 0.000 1 0.0000 1890 1575 45 45 1890 1575 1935 1575
1 3 0 1 0 7 0 0 -1 0.000 1 0.0000 3015 1575 45 45 3015 1575 3060 1575
2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2
1485 1575 1125 1575
2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2
1935 1575 2250 1575
2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 4
1485 1395 1485 1755 1845 1575 1485 1395
2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2
2610 1575 2250 1575
2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2
3060 1575 3375 1575
2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 4
2610 1395 2610 1755 2970 1575 2610 1395
2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2
4185 1575 3825 1575
2 1 2 1 0 7 50 -1 -1 3.000 0 0 -1 0 0 2
3375 1575 3825 1575
2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2
4635 1575 4950 1575
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 4
4950 1575 4950 1170 1125 1170 1125 1575
-6
6 1125 2070 4995 2655
6 4185 2295 4635 2655
1 3 0 1 0 7 0 0 -1 0.000 1 0.0000 4590 2475 45 45 4590 2475 4635 2475
2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 4
4185 2295 4185 2655 4545 2475 4185 2295
-6
6 4905 2430 4995 2520
1 3 0 1 0 -1 0 0 20 0.000 1 0.0000 4950 2475 30 30 4950 2475 4950 2505
-6
1 3 0 1 0 7 0 0 -1 0.000 1 0.0000 1890 2475 45 45 1890 2475 1935 2475
1 3 0 1 0 7 0 0 -1 0.000 1 0.0000 3015 2475 45 45 3015 2475 3060 2475
2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2
1485 2475 1125 2475
2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2
1935 2475 2250 2475
2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 4
1485 2295 1485 2655 1845 2475 1485 2295
2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2
2610 2475 2250 2475
2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2
3060 2475 3375 2475
2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 4
2610 2295 2610 2655 2970 2475 2610 2295
2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2
4185 2475 3825 2475
2 1 2 1 0 7 50 -1 -1 3.000 0 0 -1 0 0 2
3375 2475 3825 2475
2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2
4635 2475 4950 2475
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 4
4950 2475 4950 2070 1125 2070 1125 2475
-6
6 1125 3465 4995 4050
6 4185 3690 4635 4050
1 3 0 1 0 7 0 0 -1 0.000 1 0.0000 4590 3870 45 45 4590 3870 4635 3870
2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 4
4185 3690 4185 4050 4545 3870 4185 3690
-6
6 4905 3825 4995 3915
1 3 0 1 0 -1 0 0 20 0.000 1 0.0000 4950 3870 30 30 4950 3870 4950 3900
-6
1 3 0 1 0 7 0 0 -1 0.000 1 0.0000 1890 3870 45 45 1890 3870 1935 3870
1 3 0 1 0 7 0 0 -1 0.000 1 0.0000 3015 3870 45 45 3015 3870 3060 3870
2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2
1485 3870 1125 3870
2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2
1935 3870 2250 3870
2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 4
1485 3690 1485 4050 1845 3870 1485 3690
2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2
2610 3870 2250 3870
2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2
3060 3870 3375 3870
2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 4
2610 3690 2610 4050 2970 3870 2610 3690
2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2
4185 3870 3825 3870
2 1 2 1 0 7 50 -1 -1 3.000 0 0 -1 0 0 2
3375 3870 3825 3870
2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2
4635 3870 4950 3870
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 4
4950 3870 4950 3465 1125 3465 1125 3870
-6
2 1 2 1 0 7 50 -1 -1 3.000 0 0 -1 0 0 2
2880 2700 2880 3330
-6
2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
7875 1575 8775 1575 8775 2700 7875 2700 7875 1575
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 3
7875 2385 7965 2475 7875 2565
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
1 1 1.00 60.00 120.00
8775 1800 9450 1800
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 1 3
8 1 1.00 60.00 120.00
6975 3150 6975 2475 7875 2475
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
6210 1575 4905 1575
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 4
4950 3870 5670 3870 5670 2025 5805 2025
2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2
6951 1808 7875 1800
2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2
6221 2027 5709 2027
2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2
6221 1515 6586 1515
2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2
6586 2100 6221 2100
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 4
4950 2475 5310 2475 5310 1800 6255 1800
3 2 0 1 0 7 0 0 -1 0.000 0 0 0 3
6951 1808 6805 1588 6586 1515
0.000 -1.000 0.000
3 2 0 1 0 7 0 0 -1 0.000 0 0 0 3
6951 1808 6805 2027 6586 2100
0.000 -1.000 0.000
4 0 0 50 -1 0 12 0.0000 4 135 135 7920 1845 D\001
4 0 0 50 -1 0 12 0.0000 4 165 135 8595 1845 Q\001
4 0 0 50 -1 0 12 0.0000 4 135 390 8010 2520 CLK\001
4 0 0 50 -1 0 12 0.0000 4 180 570 9540 1845 Output\001
4 0 0 50 -1 0 12 0.0000 4 180 1320 6435 3375 Sampling Clock\001

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.3 KiB

View File

@ -0,0 +1,54 @@
#FIG 3.2 Produced by xfig version 3.2.5c
Landscape
Center
Metric
A4
100.00
Single
-2
1200 2
6 3825 1395 7875 1980
6 7155 1755 7245 1845
1 3 0 1 0 -1 0 0 20 0.000 1 0.0000 7200 1800 30 30 7200 1800 7200 1830
-6
1 3 0 1 0 7 0 0 -1 0.000 1 0.0000 4590 1800 45 45 4590 1800 4635 1800
1 3 0 1 0 7 0 0 -1 0.000 1 0.0000 5715 1800 45 45 5715 1800 5760 1800
1 3 0 1 0 7 0 0 -1 0.000 1 0.0000 6840 1800 45 45 6840 1800 6885 1800
2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2
4185 1800 3825 1800
2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2
4635 1800 4950 1800
2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 4
4185 1620 4185 1980 4545 1800 4185 1620
2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2
5310 1800 4950 1800
2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2
5760 1800 6075 1800
2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 4
5310 1620 5310 1980 5670 1800 5310 1620
2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2
6435 1800 6075 1800
2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 2
6885 1800 7200 1800
2 1 0 1 0 7 0 0 -1 0.000 0 0 -1 0 0 4
6435 1620 6435 1980 6795 1800 6435 1620
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 4
7200 1800 7200 1395 3825 1395 3825 1800
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
7200 1800 7875 1800
-6
2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
7875 1575 8775 1575 8775 2700 7875 2700 7875 1575
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 3
7875 2385 7965 2475 7875 2565
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
1 1 1.00 60.00 120.00
8775 1800 9450 1800
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 1 3
8 1 1.00 60.00 120.00
6975 3150 6975 2475 7875 2475
4 0 0 50 -1 0 12 0.0000 4 135 135 7920 1845 D\001
4 0 0 50 -1 0 12 0.0000 4 165 135 8595 1845 Q\001
4 0 0 50 -1 0 12 0.0000 4 135 390 8010 2520 CLK\001
4 0 0 50 -1 0 12 0.0000 4 180 570 9540 1845 Output\001
4 0 0 50 -1 0 12 0.0000 4 180 1320 6435 3375 Sampling Clock\001

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.1 KiB