‎"Behind every stack of books there is a flood of knowledge."

CS441 – Architecture & CS 301 – Assembly Language



Project 1 Presentation Schedule

Tuesday, October 9, 2007

ARM Cpu Architecture
Dustin Rice
Biological Computing with Genetic Regulatory Networks
Walker Wheeler
Biological Computing with Neurons
Jay Schamel
Distributed Computing
Ryan Turnquist
Thursday, October 11

Perpendicular Bit Recording
Paul deVries
Semiconductor Fabrication
Tim Kvitek
Out-of-Order Execution
Aren Ray
Tuesday, October 16

Multi-core CPUs
Julien Barrellon
Motorola 68HC11 Architecture
Jonathan Sawyer
Jeremy Favier
Thursday, October 18

Hardware Support for Virtualization
Ben Hartman
Introduction to Quantum Computing (or in PDF)
Chris Granade
Review for midterm
Dr. Lawlor


Etching Printed Circuit Boards the Gootee Way

CS 441 Lecture, Dr. Lawlor

Semiconductor manufacturing is just a long series of deposit/mask/etch cycles, building up the parts of the circuit on a piece of silicon.

This is the “Gootee method” for garage printed circuit board (PCB) manufacturing.  It uses an ordinary laser printout as an acid-etch mask on a copper-clad fiberglass board.  It takes maybe half an hour to prepare a circuit board this way, plus a little more time to drill holes and solder on components. (This information is FYI on a personal hobby of mine–it will not appear on the test!)

Prepare the Mask

  • Draw your desired wiring patterns in any drawing program–everywhere you draw black, you’ll get toner, which will protect the copper.  Unprotected copper will be eaten away by acid.
    • I use the free SVG vector drawing program Inkscape.  You do have to flip the design backwards so it’s oriented properly once ironed on!
  • Print your PCB pattern onto *glossy* *inkjet* paper with a laser printer.  The laser toner will barely bond to the paper’s glossy surface, which makes it easier to transfer onto copper.
    • I used OfficeMax Semi-Gloss Color Laser Printer Paper, which is about 7 cents per page.
    • Some printers’ toner seems to work better than others, so try a few printers.  The printout from a wax or inkjet printer won’t stick or resist the acid, so use a laser printer. Color laser works, too!

Here are a few of my PCB masks: (PNG image) (vector SVG image).

Preview Image Map 0

Mask Off Your Copper-Clad Board With Toner

  • Start with a manufactured copper-clad fiberglass board.  I used “one-ounce” copper boards (one ounce of copper per square yard, which is a layer only 35um thick!).
    • Thin floppy boards are $0.95 for a 4″x8″ piece at Electronic Goldmine.  Thicker, sturdier boards are a few dollars each.  I can’t recommend the “phenolic” boards, which are more plasticky; fiberglass boards are stronger and better at repelling solder, herding it onto the copper.
  • Scour the PCB clean with Scotchbrite-style scouring pads–two passes, horizontal and vertical.  Press hard!  You’re both scraping off oxidation and adding some tooth to the surface.  Try not to leave greasy fingerprints on the board from this point onward.
  • Wipe the PCB clean with acetone.  Alcohol works too, but acetone seems to help the toner stick better.
  • Heat up the PCB with an electric iron on the hottest setting.  The PCB should be quite hot for the next step.
  • Gently place the printed paper pattern toner-down onto the PCB.  It should stick almost immediately.  Iron the back of the pattern *firmly*.  Too light and the pattern won’t stick. Too hard and the pattern will be squished outwards, filling in small holes (like dot gain, as in the example below).  This step basically glues the toner pattern to the PCB.
  • Drop the paper-coated PCB in warm water.  Wait a few minutes, and gently peel off the top few layers of paper.
  • Back in the water.  Wait a few more minutes, and finally gently scrub away most of the remaining paper.  You should now be down to bare copper where you want nonconducting fiberclass on your finished PCB, and toner (with a few stuck-on bits of paper) where you want conductive solderable copper.  It’s not necessary to remove every particle of paper, since the acid will soak through the paper anyway.

Preview Image Map 0
img_6072 img_6074 img_6077 img_6082 img_6085
Preview Image Map 1
img_6086 img_6088 img_6089 img_6091

Etch Away Unmasked Copper With Acid

  • Drop toner-coated PCB in acid.  For a 1″ board, I used Gootee’s new formula of 100mL of hydrogen peroxide and 50mL of muriatic acid to take off exposed copper.  Tie a monofilament fishing line through a hole in the board to make it easier to remove and jiggle around in the acid.
    • The hyrogen peroxide is just the ordinary 3% H2O2 you buy for disinfectant.  It’s about $1 per quart.  Without the hydrogen peroxide, the acid will work, but it’s way slower, and tends to eat the toner.
    • Muriatic acid is 28% Hydrochloric Acid.  It’s about $10/gallon and sold at hardware stores for etching concrete.  CAUTION: It’s acid!  Be sure to ear eye protection and nitrile gloves!
  • The acid will etch away exposed copper, turning the copper a dull brown and the acid Cu2+ green.  Fresh warm acid will only take about five minutes to eat through all the exposed areas on a small board.  Overused or cold acid might take an hour or more and eat away at the toner, so change your acid every few parts. Since copper-bearing acid is denser and sinks, the top parts of the board will become visibly clean first.
    • I think it’s safe to dispose of small quantities of used acid by diluting with water, neutralizing with baking soda, and pouring down the sink (you do this with hydrogen peroxide when you rinse a cut, and muriatic acid is hosed off construction sites regularly).  You could also neutralize and then dry in a pan to a powder.  On a commercial scale, you’d have to comply with EPA rules.
  • Once clean, and all the traces of copper are gone from the non-tonered parts of the board, take the board out of the acid and rinse with cold water.
  • Wipe away the toner with acetone or lacquer thinner on a paper towel.  You should have clear, bright copper underneath!  If the copper is a dirty, spotty brown then the acid must have eaten into it; you might want to switch printers or toner brands.
Preview Image Map 0
img_6092 img_6094 img_6095 img_6096 img_6100
Preview Image Map 1
img_6101 img_6102 img_6107 img_6108 img_6110

Mount Components

  • Drill component mounting holes with *tiny* 20-45 thousandth drill bits (preferably about 30-40 thou; a 1/32″ drill bit is 31 thou).  You can pretty easily drill four or five boards at once, although keeping them aligned is tricky.  Carbide bits don’t get dull, but they shatter really easily.  A drill press or good dremel tool is a big help.  Pilot holes help keep a stack of boards aligned.
  • Push components in from non-copper side, and hot glue them down.  This makes the components a lot easier to solder.
  • Solder the component leads to the copper.  Soldering is really a breeze on a clean fiberglass board with bright copper.  It’s really tricky if your holes are too big,or if the copper is oxidized from spending too long in the acid.  Folding leads over so they lay flat is a bit stronger, and makes soldering even easier, but does take more time.
Preview Image Map 0
img_6111 img_6115 img_6117 img_6118 img_6119

Digital vs. Analog Circuits: Not a Binary Choice!

CS 441 Lecture, Dr. Lawlor

Counting on your fingers uses “digits” in the computational sense; digital storage uses discrete values, like the fingers which are either up or down.  A 25%-raised pinky finger does not represent one-quarter, it represents zero!  This means your fingers can bounce around a bit, and you can still tell which number you’re on.  Lots of systems are digital:

  • Counting on your fingers.  (Individual fingers are either up or down.)
  • Stop lights. (Lights are either green, yellow, or red.)
  • The legal system.  (You’re either guilty or not guilty.)
  • Computers.  (It’s either 1 or 0.)
  • Digital radio (XM), digital audio, digital TV, digital cable (You either get a perfect noise-free signal, or you get nothing!)

The other major way to represent values is in analog.  Analog allows continuous variation, which initially sounds a lot better than the jumpy lumpy digital approach.  For example, you could represent the total weight of sand in a pile by raising your pinky by 10% per pound.  So 8.7 pounds of sand would just by an 87% raised pinky.  8.6548 pounds of sand would be an 86.548% raised pinky.   Lots of systems are also analog:

  • The real world under classical physics.  (Weight, length, pressure, sound, brightness, temperature, dirtyness, etc. all vary continuously if you ignore quantum effects)
  • Pre-2000 audio equipment.  (Analog voltage represents sound pressure.)
  • The telephone system. (It’s an analog signal from your house to your telco.)
  • FM and AM radio, analog TV, analog satellite.  (All noisy analog broadcasts.)

Note that in theory, one pinky can represent weight with any desired degree of precision, but in practice, there’s no way to hold your pinky that steady, or to read off the pinky-height that accurately.  Sadly, it’s not much easier to build a precise electronic circuit than it is to build a more-precise pinky.

In other words, the problem with analog systems is that they are precision-limited.  To store a more precise weight, your storage device must be made more precise.  Precision stinks.  The real world is messy, and that messiness screws up electrical circuits like it screws up everything else (ever hear of clogged pipes, fuel injectors, or arteries?).  Messiness includes noise and the gross term “nonlinearity”, which  just means input-vs-output is not a straight line–so the system’s output isn’t the same as its input.

Yes, it’s always possible to make your system more precise.  The only problem is cost.  For example, here’s a review of some excellent, shielded, quality AC power cables for audio equipment.   These cables supposedly pick up less noise than ordinary 50-cent AC plug.  But the price tag starts at $2500–for a 3-foot length!

Note in many cases the desired output is indeed highly nonlinear–the output isn’t simply proportional to the input.  If you’re designing an analog audio amplification circuit, nonlinearity is considered “bad”, because it means the output isn’t a precise duplicate of the input, and the circuit has lost signal quality (think of the rattling base thumping down the street!).  But most computations are nonlinear, so an analog circuit to do those computations should also be nonlinear.  Such analog computers, without any digital logic, have actually been built!  In some sense, the best possible simulation of a mechanical system is the system itself, which can be considered a mechanical analog computer simulating… a mechanical analog computer.  The downside of such a “simulation” is noise, repeatability, and design and fabrication cost.

Luckily, digital systems can be made extraordinarily complex without encountering noise problems.  Digital systems scale better because to gain precision in a digital system, you don’t have to make your digits better, you just add more digits.  This quantity-instead-of-quality approach seems to be the dominant way we build hardware today.  But be aware that analog computers might make a comeback in a power-limited world–considering that a single transistor can add, multiply, and divide, digital logic might not be able to compete!  Also, there are potential computability differences between digital and analog computers.

How many levels?

OK.  So digital computation divides the analog world into discrete levels, which gives you noise immunity, which lets you build more capable hardware for less money.  The question still remains: how many of these discrete levels should we choose to use?

  • An analog system uses an infinite number of signal levels (a continuously varying signal)
  • ATSC Digital TV uses 8 levels (see the “8vsb eye diagram“)
  • Gigabit ethernet uses 5 levels (PAM-5, -2v, -1v, 0v, +1v, +2v)
  • Fast ethernet uses 3 levels (-1v, 0v, +1v)
  • USB, serial, and digital logic almost all uses only two levels (0 and 1)
  • A broken computer has only one level (off)

Two levels is the cheapest, crappiest system you can choose that will still get something done.  Hence, clearly, it will invariably be the most popular!

For a visual example of this, here’s a little TTL inverter-via-NAND circuit:
trivial TTL 7400 circuit

Here’s the chip’s input-vs-output voltage curve, measured using the “Input” and “Output” wires shown above.
oscilloscope trace, TTL 7400 chip

The Y axis is voltage, with zero thorough five volts shown.  The X axis is time, as the input voltage sweeps along.  Two curves are shown: the straight line is the input voltage, smoothly increasing from slightly negative to close to 5 volts.  The “output” curve is high, over 4v for input voltages below 1v; then drops to near 0v output for input voltages above 1.3v.  High voltage is a “1”; low voltage is a “0”.  So this circuit “inverts” a signal, flipping zero to one and vice versa.  Here’s the digital input vs output for this chip:

Input Output
0 1
1 0

Here’s the trace of another chip of the same type.  Note the curve isn’t exactly the same!
oscilloscope trace, 7400 chip

These two chips don’t behave in exactly the same way, at least seen from the analog perspective of “how many volts is it sending out?”.  But seen from the digital perspective, 0 or 1 output for 0 or 1 input, they’re identical!


  • Final Exam and Overall Course Grades are posted on NetRun and UAOnline.
  • HW9 is available on NetRun, and due at midnight on Monday, December 11, 2006.
  • The Final Exam will be held in-class on Thursday, December 14 at 3:15pm in the usual room, Chapman 106. The format will be typical: closed-book, closed-notes, comprehensive coverage with focus on the more recent stuff. See the Lecture Notes for the complete coverage, but you should know about general performance stuff (code rearrangement, pipelining, caching, and parallelism), funky flow control (switch, computed jump, function pointers, dynamic binary translation, and threads), and the details of how to compile and link programs.
  • HW8 is available on NetRun, and due at midnight on Monday, November 20, 2006.
  • HW7 is available on NetRun, and due at midnight on Monday, November 13, 2006.
  • HW6 is available on NetRun, and due at midnight on Monday, November 6, 2006. I’ve also posted the little Beaker timing example.
  • Course Grades so far are posted on NetRun, now including midterm grades!
  • The midterm exam will be held at the usual class time (3:30pm) on Friday, October 20. To study, I suggest reading the lecture notes, reading chapters 1-3 of the textbook, and looking over your old homeworks. We’ll also hold a review session on Wednesday, October 18 at the usual class time.
  • HW5 is available on NetRun, and due at midnight on Friday, October 13, 2006. Trust me–you DON’T want to be coding on Friday the 13th, so get started early!
  • HW4 is available on NetRun, and due at midnight on Monday, October 2, 2006. It’s just normal x86 in 32 and 64-bit mode.
  • HW3 is available on NetRun, and due at midnight on Monday, September 25, 2006. It’s based on funk_emu.
  • HW2 is available on NetRun, and due at midnight on Monday, September 18, 2006. It’s another fast one, so get started early!
  • HW1 is available on NetRun. If you don’t see the string “HW1” at the bottom of this NetRun page, send me an email!
  • Blackboard is back in action. I’ll try to post a copy of major announcements there, but NetRun is actually the main thing to watch.



Lecture Notes:

[TXT] 09_10_analog_digital.html 10-Sep-2007 23:40 9.0K
[TXT] 09_12_vhdl.html 17-Oct-2007 17:29 12K
[TXT] 09_18_assembly.html 17-Feb-2009 14:09 11K
[TXT] 09_20_CPUs.html 20-Sep-2007 09:35 8.3K
[TXT] 09_25_MIPS.html 25-Sep-2007 12:58 7.4K
[TXT] 10_02_superscalar.html 01-Oct-2007 21:26 5.5K
[TXT] 10_04_cache.html 04-Oct-2007 11:31 26K
[TXT] 10_11_pcb.html 12-Oct-2007 20:15 13K
[DIR] 10_11_pcb/ 11-Oct-2007 17:31
[TXT] 10_23_midterm.html 17-Oct-2007 18:24 2.0K
[TXT] 10_25_parallel.html 24-Oct-2007 18:24 5.7K
[TXT] 10_30_floatingpoint.html 30-Oct-2007 11:40 19K
[TXT] 11_01_sse.html 01-Nov-2007 15:21 16K
[TXT] 11_06_threading.html 06-Nov-2007 09:39 29K
[TXT] 11_08_tbb.html 08-Nov-2007 22:50 3.7K
[TXT] 11_13_floating_asm.html 13-Nov-2007 08:35 17K
[TXT] 11_15_MPI_and_science.html 15-Nov-2007 08:52 1.2K
[TXT] 11_26_powerwall_parallel.html 26-Nov-2007 23:37 3.6K
[TXT] 11_28_parallel_speed.html 29-Nov-2007 09:45 7.5K
[TXT] 12_11_openMP.html 17-Feb-2009 14:09 1.6K
[TXT] 12_13_final.html 12-Dec-2007 22:29 3.0K
[TXT] 10-Sep-2007 23:38 351
[DIR] scientific_data/ 15-Nov-2007 08:52
[TXT] template.html 10-Sep-2007 23:38 411



Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )


Connecting to %s


This entry was posted on March 22, 2013 by in Electronic & Computer Engineering, Embedded System, Science & Technology.
Virtual Fashion Technology

Virtual Fashion Education


"chúng tôi chỉ là tôi tớ của anh em, vì Đức Kitô" (2Cr 4,5b)


News About Tech, Money and Innovation


Modern art using the GPU

Theme Showcase

Find the perfect theme for your blog.


Learn to Learn

Gocomay's Blog

Con tằm đến thác vẫn còn vương tơ

Toán cho Vật lý

Khoa Vật lý, Đại học Sư phạm Tp.HCM - ĐT :(08)-38352020 - 109

Maths 4 Physics & more...

Blog Toán Cao Cấp (M4Ps)

Bucket List Publications

Indulge- Travel, Adventure, & New Experiences


‎"Behind every stack of books there is a flood of knowledge."

The Blog

The latest news on and the WordPress community.

%d bloggers like this: