|
|
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
|
|
|
|
|
|
|
|
|
|
|