» pages: blog | About Me | projects | Resume |

what I’ve been doing..

VLSI, fpga, projects, uController — davidb — November 16th, 2008

I’ve been extremely busy the last 10 weeks. I decided it would be a good idea to take 4 graduate level computer engineering classes (3 project-based) at the same time. Guess what – it’s not. But, I made it through and I’m pretty damn proud of myself. So, since I think it’s pretty interesting, I decided to post what I’ve been up to the past couple of months.

First, the most recently completed project – VLSI. For my project, my partner and I had to design and layout an 8-bit Brent-Kung adder with BIST using TSMC 0.35 micron N-Well process technology. What’s that? Well, an 8-bit adder is a device that adds two 8-bit numbers. Brent-Kung is a specific type of tree-adder (defining the way the circuit is organized) that is used as a basis for many other tree-adder networks as it attempts to minimize wiring tracks and fanout gate count. BIST stands for built-in self test, a mechanism that allows the circuit to test itself. The final area for the entire circuit (8-bit BK adder with BIST) was 28,757 square microns. Any one extra interested in this can read my final report. For fun, and to show how one goes about doing physical layout, here’s some pictures of our final layout. First, the adder with BIST. On the left is the adder/BIST on the I/O pad. On the right, the adder/BIST itself. For a closer view, just click on the image.

PPA8BIST on IO Pad

Next,the adder layout. Note: that space at the left top and bottom was on purpose: it’s for the DFF.

PPA8 - BK adder

Next, everyone’s favorite ASCII art: the “I passed LVS check mark/smiley face.” For those not-so-familiar with VLSI/Mentor Graphics tools, LVS stand for layout versus schematic. That means it compares my wonderful layout (those colorful polygons seen above) versus my schematic to ensure the extracted netlists from both the layout and schematic match. The schematic is functionally verified to work correctly by simulating it. In theory, if the schematic works and the layout passes LVS, the circuit should work. However, post-layout simulations should be done as well.

LVS

When we finished the layout, we printed it to the 36″ plotter. Naturally, I hung my masterpiece on the wall above my bed.

Plot of PPA8BIST proudly hung above my bed

The next project of interest: the heart rate monitor. The point of the project was to implement a complete automatic data acquisition system. (sensors, signal conditioning, analog-to-digital conversion, uController, and finally digital-to-analog conversion). The sensor for the system that we used was an opto-isolator. It works by emitting IR light through an LED that is then picked up by a photo transistor. So, for the heart rate sensor, a human finger rests on top of the opto-isolator that produces a varying voltage as a result of the blood flow through the finger. This signal is quite noisy and quite low in amplitude, so it was connected to an amplifier and low pass filter. Because the ATD we used requires 0 to 5V on the input, we added a final stage to level shift and amplify the signal to that range. This was then connected to the input of an HCS12 microcontroller programmed to calculate the heart rate and display it to a monitor via serial connection. If you’re interested, we made a poster displaying the schematics and a bit more detail on how the system works. You can take a look at that here. Here’s a picture of the final circuit and my beautiful finger.

Heart rate monitor circuit. Notice my finger!

And, just to prove it works, here’s the oscilloscope output.

Heart beat oscilloscope output

The final project I’ve been working on is an implementation of a median filter on a FPGA. Median filters are used to remove salt and peppering effects from an image. The system interfaces an external memory chip to the FPGA and connects to a PC via a parallel port. A program from a computer sends the gray-scale PNG image to the FPGA. The FPGA then processes the image and sends it back to the PC. The project was done using VHDL and the FPGA was a Xilinx Spartan II. In addition, a histogram stretching algorithm was implemented on the FPGA. Histogram stretching is a form of contrast enhancement. Once the median filter was successfully implemented, the histogram stretching algorithm was quite easy. Unfortunately, there’s no pictures for this one. This was a long quarter, but now I get 2 weeks to relax and work on a couple of my independent projects before I dive back into the school work.

proprietary fpga dev board + linux

fpga, linux, projects, virtualization — davidb — May 12th, 2008

For my Digital System Design course I was given the option to do the standard labs (about 3 labs and 2 projects: a vending machine controller and a BIST) or implement my own project of similar complexity. I decided to go with latter as it sounded like a good learning experience. So, I wrote up my proposal and got my FPGA board: a Digilent BASYS. For my project, I decided to implement a clone of the popular 80’s Simon game by Matel.

I wanted to be able to work on this project from home, so I went ahead and downloaded Xilinx ISE Webpack from http://www.xilinx.com. I run Linux (specifically Debian) as my primary OS, so I installed the Linux version of ISE. The install certainly could have gone smoother (it seems to be targeted more towards RedHat), but thanks to a bit of research I was able to get it running smoothly. Unfortunately, Digilent (the maker of the development board I’m using) only has a Windows version of their software for programming the FPGA. I thought I was out of luck and would have to develop on my machine and then use a Windows machine to actually program the FPGA. But, thanks to VMWare, that’s not a problem.

The only thing that I have really missed since I completely switched over to Linux about a year ago is Microsoft Office. Open Office just doesn’t do it for me 100% (especially given the amount of .doc and .docx files I get from professors here at RIT). So, I run VMWare Server with XP as a guest operating system to address that problem. This way, I don’t have to reboot to open a word document or write a paper. This is also useful as it allows me to run a bunch of other Windows-only applications without the any real hassle.

That’s definitely spiffy, but what’s even cooler is the ability to share physical hardware between the host and guest OS. I can map a USB controller to my guest OS that will give me the ability to use USB devices in my VM just as I would if I were running WIndows nativelly on the machine. Long story short – this nifty feature allows me to install Digilent’s programming software in Windows and program the FPGA without rebooting.

(c) 2010 david-brenner.net | powered by WordPress with Barecity