OpenCores
URL https://opencores.org/ocsvn/usb1_funct/usb1_funct/trunk

Subversion Repositories usb1_funct

[/] [usb1_funct/] [trunk/] [doc/] [success_story.txt] - Diff between revs 9 and 10

Only display areas with differences | Details | Blame | View Log

Rev 9 Rev 10
OpenCores.Org USB1.1 Function Controller Success Story
OpenCores.Org USB1.1 Function Controller Success Story
As part of the undergraduate program in Computer Engineering at the
As part of the undergraduate program in Computer Engineering at the
University of Waterloo, all students must participate in a fourth year
University of Waterloo, all students must participate in a fourth year
design project. Our team created a PC Oscilloscope, since we had
design project. Our team created a PC Oscilloscope, since we had
frequently encountered problems with a lack of access to oscilloscopes
frequently encountered problems with a lack of access to oscilloscopes
when working on our own personal projects. Real oscilloscopes are
when working on our own personal projects. Real oscilloscopes are
expensive, and definitely outside our student budgets. Our concept was
expensive, and definitely outside our student budgets. Our concept was
to create a cheap, full featured oscilloscope by harnessing a PC’s
to create a cheap, full featured oscilloscope by harnessing a PC’s
computing power and display ability.
computing power and display ability.
When designing the oscilloscope, we quickly concluded that we needed a
When designing the oscilloscope, we quickly concluded that we needed a
relatively high bandwidth, common and affordable connection between a
relatively high bandwidth, common and affordable connection between a
PC and our device. USB was the natural choice. Our school had provided
PC and our device. USB was the natural choice. Our school had provided
us with an Altera Excalibur FPGA development kit, so we began by
us with an Altera Excalibur FPGA development kit, so we began by
searching for USB Core IP. After a few promising leads, none of the
searching for USB Core IP. After a few promising leads, none of the
companies were willing to donate a USB function controller to our
companies were willing to donate a USB function controller to our
project.
project.
At this point, Evan Jones remembered hearing about OpenCores, and
At this point, Evan Jones remembered hearing about OpenCores, and
immediately discovered the USB1.1 function controller. We began by
immediately discovered the USB1.1 function controller. We began by
reading the little documentation that was available. Since the author
reading the little documentation that was available. Since the author
of the component used a Phillips USB tranceiver and Philips does not
of the component used a Phillips USB tranceiver and Philips does not
provide samples of that particular part, we ordered samples of a
provide samples of that particular part, we ordered samples of a
nearly pin USB tranceiver from Fairchild Semiconductor. Meanwhile, we
nearly pin USB tranceiver from Fairchild Semiconductor. Meanwhile, we
compiled the component with the Altera Quartus tools.
compiled the component with the Altera Quartus tools.
Once the trancievers arrived, we soldered up a quick circuit to connect
Once the trancievers arrived, we soldered up a quick circuit to connect
the USB cable to our prototype board. The very first time we connected
the USB cable to our prototype board. The very first time we connected
the device to our PC, the PC crashed. We assumed that this was a good
the device to our PC, the PC crashed. We assumed that this was a good
sign, as at least the PC was seeing the USB device. After some more
sign, as at least the PC was seeing the USB device. After some more
debugging using another computer running Linux, we determined that
debugging using another computer running Linux, we determined that
while the device and the PC were communicating, something was going
while the device and the PC were communicating, something was going
wrong. The PC was reporting that the device was sending “babble”.
wrong. The PC was reporting that the device was sending “babble”.
We spent the next few days debugging. First we resoldered our USB
We spent the next few days debugging. First we resoldered our USB
interface circuit to reduce noise. We manually decoded the signals on
interface circuit to reduce noise. We manually decoded the signals on
the USB bus using an oscilloscope. We were stumped. It looked like the
the USB bus using an oscilloscope. We were stumped. It looked like the
beginning of the USB enumeration was working correctly, but it would
beginning of the USB enumeration was working correctly, but it would
still fail and reset the bus.
still fail and reset the bus.
We took a break and returned to it in a few days and redid absolutely
We took a break and returned to it in a few days and redid absolutely
everything from scratch. This time the PC detected an unknown USB
everything from scratch. This time the PC detected an unknown USB
device. It turns out that our problem was that we set an incorrect
device. It turns out that our problem was that we set an incorrect
setting in the VHDL header for our particular FPGA. With the default
setting in the VHDL header for our particular FPGA. With the default
settings and a recompile, the device worked.
settings and a recompile, the device worked.
It took us a few more weeks until we worked out our software device
It took us a few more weeks until we worked out our software device
driver and the remainder of the device logic, but that was all
driver and the remainder of the device logic, but that was all
relatively straightforward. The OpenCores USB function controller
relatively straightforward. The OpenCores USB function controller
worked as advertised. If we were to do the project again, we would
worked as advertised. If we were to do the project again, we would
easily be able to get it up and running in a few hours.
easily be able to get it up and running in a few hours.
Evan Jones                    http://www.eng.uwaterloo.ca/~ejones/
Evan Jones                    http://www.eng.uwaterloo.ca/~ejones/
Mauro Loconsolo               4ydp_waterloo@rogers.com
Mauro Loconsolo               4ydp_waterloo@rogers.com
Evan Robinson                 e2robins@uwaterloo.ca
Evan Robinson                 e2robins@uwaterloo.ca
Sahand Sojoodi                sahands@hotmail.com
Sahand Sojoodi                sahands@hotmail.com
 
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.