<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-865007134733273439</id><updated>2012-01-27T12:54:25.877-05:00</updated><category term='sonar'/><category term='Debian'/><category term='Xilinx'/><category term='AX8'/><category term='undersampling'/><category term='vgo'/><category term='A/D'/><category term='robot'/><category term='STM32'/><category term='ARM'/><category term='beagleboard'/><category term='Cypress'/><category term='DFU'/><category term='FX2'/><category term='blog'/><category term='offtopic'/><category term='Atmel'/><category term='USB'/><category term='Octave'/><category term='HDMI'/><category term='Nyquist'/><category term='Atlys'/><category term='Linux'/><category term='html'/><category term='DP1205'/><category term='AVR'/><category term='STM32F4DISCOVERY'/><category term='Radiotronix'/><category term='FPGA'/><category term='asciimathml'/><category term='MHZ100Q'/><category term='Digilent'/><category term='CIC'/><title type='text'>Sensicomm LLC - Signals, sensors, comms</title><subtitle type='html'>I'm a consultant in the field of digital signal processing. 
This blog contains comments related to my work.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://blog.sensicomm.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/865007134733273439/posts/default'/><link rel='alternate' type='text/html' href='http://blog.sensicomm.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Joe Rothweiler</name><uri>http://www.blogger.com/profile/07215509695497889602</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>23</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-865007134733273439.post-2254658657832058972</id><published>2012-01-27T12:54:00.000-05:00</published><updated>2012-01-27T12:54:25.887-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='STM32F4DISCOVERY'/><category scheme='http://www.blogger.com/atom/ns#' term='ARM'/><category scheme='http://www.blogger.com/atom/ns#' term='STM32'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='DFU'/><category scheme='http://www.blogger.com/atom/ns#' term='USB'/><title type='text'>STM32 STM32F4DISCOVERY arm eval board and Linux</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-0zBB6SBj1r4/TyLhLu5jq3I/AAAAAAAAACc/mClsCPAXqvU/s1600/dscn0002edit.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://2.bp.blogspot.com/-0zBB6SBj1r4/TyLhLu5jq3I/AAAAAAAAACc/mClsCPAXqvU/s320/dscn0002edit.jpg" width="190" /&gt;&lt;/a&gt;&lt;/div&gt;Picked up this eval board at the last Embedded Systems Conference, and finally starting to work with it. The chip is a 168MHz ARM Cortex M4 with 12-bit A/D and D/A's . The eval board includes an accelerometer, microphone, and separate audio D/A chip, among other things. Pricing is really interesting. Here are Digikey quantity-1 prices:&lt;br /&gt;STM32F4DISCOVERY $19.50&lt;br /&gt;STM32F407VGT6&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $16.00&lt;br /&gt;STM32F103C8T6&amp;nbsp;&amp;nbsp;&amp;nbsp; $ 5.71&lt;br /&gt;(The F407 is the main ARM chip, and the F103 is a smaller ARM chip used as a programming interface). So the eval board is actually cheaper than the chips on it.&lt;br /&gt;&lt;br /&gt;The F407 chip has a built-in program loader using either the serial port or the USB port. Both are supported by Linux tools, so I'm ignoring the F103-based programming port and using the F407's USB port.&lt;br /&gt;&lt;br /&gt;Connections: I have USB cables from my Linux box to both the F103's mini-USB connector at the top and the F407's micro-USB connector at the bottom. The mini-usb is just used to supply power to the board, and isn't necessary if an external supply is used.&lt;br /&gt;&lt;br /&gt;The programming tool is dfu-util, from &lt;a href="http://dfu-util.gnumonks.org/"&gt;dfu-util.gnumonks.org&lt;/a&gt; . I downloaded and built the latest version from the git repository. To test it, I used the miniblink example program from the libopencm3 package at &lt;a href="http://www.libopencm3.org/wiki/Downloads"&gt;www.libopencm3.org/wiki/Downloads&lt;/a&gt; . libopencm3 uses the summon-arm toolchain, so I downloaded and built that as well so the example would compile easily. (This also means I now have 5 different versions of GNU GCC for ARM on my system: summon-arm (linaro-based), 2 from CodeSourcery, one from openembedded, and a built-from-scratch GCC. One of these days I'll simplify that).&lt;br /&gt;&lt;br /&gt;To program, I connect a jumper between the 3V and boot0 pins on connector P2. After hitting the black reset button, lsusb shows USB devices connected as:&lt;br /&gt;Bus 001 Device 011: ID 0483:df11 SGS Thomson Microelectronics STM Device in DFU Mode&lt;br /&gt;Bus 001 Device 012: ID 0483:3748 SGS Thomson Microelectronics ST-LINK/V2&lt;br /&gt;To use it without being root, I also added the line:&lt;br /&gt;SYSFS{idVendor}=="0483", SYSFS{idProduct}=="df11", MODE="666" GROUP="plugdev" SYMLINK+="usb/stm32_dfu"&lt;br /&gt;to plugdev (in Debian, I just created a new file in the /etc/udev/rules.d directory with this single line in it. Locations may be slightly different in other Linux distributions).&lt;br /&gt;With that done, the command:&lt;br /&gt;dfu-util&amp;nbsp; --device 0483:df11 --alt 0 \&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; --dfuse-address 0x08000000 \&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; --download /miniblink.bin&lt;br /&gt;works. I removed the jumper and hit reset again, and a single LED blinks, as expected.&lt;br /&gt;&lt;br /&gt;So that's "Hello, World" for the STM32F4DISCOVERY. Now I can start doing real work with it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/865007134733273439-2254658657832058972?l=blog.sensicomm.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.sensicomm.com/feeds/2254658657832058972/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=865007134733273439&amp;postID=2254658657832058972' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/865007134733273439/posts/default/2254658657832058972'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/865007134733273439/posts/default/2254658657832058972'/><link rel='alternate' type='text/html' href='http://blog.sensicomm.com/2012/01/stm32-stm32f4discovery-arm-eval-board.html' title='STM32 STM32F4DISCOVERY arm eval board and Linux'/><author><name>Joe Rothweiler</name><uri>http://www.blogger.com/profile/07215509695497889602</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-0zBB6SBj1r4/TyLhLu5jq3I/AAAAAAAAACc/mClsCPAXqvU/s72-c/dscn0002edit.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-865007134733273439.post-8385919460442158359</id><published>2011-11-23T16:29:00.000-05:00</published><updated>2011-11-23T16:29:26.651-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='CIC'/><category scheme='http://www.blogger.com/atom/ns#' term='MHZ100Q'/><category scheme='http://www.blogger.com/atom/ns#' term='beagleboard'/><category scheme='http://www.blogger.com/atom/ns#' term='asciimathml'/><title type='text'>Desampling using a Cascaded Integrator Comb filter</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-ghC987-c6y4/Ts1iG8gWvyI/AAAAAAAAACU/bQh2bnwMkVc/s1600/eqcic3_v1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="45" src="http://4.bp.blogspot.com/-ghC987-c6y4/Ts1iG8gWvyI/AAAAAAAAACU/bQh2bnwMkVc/s320/eqcic3_v1.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;Been working with a &lt;a href="http://www.beagleboard.org/"&gt;BeagleBoard&lt;/a&gt; for the last few months. Can't say much about the project but the Beagle is a nice ARM Linux platform. Finishing up, so now I have more time to update the &lt;a href="http://mhz100q.sourceforge.net/"&gt;MHZ100Q &lt;/a&gt;sourceforge project page.&lt;br /&gt;I've now added a page describing the ideas behind the Cascaded Integrator-Comb (CIC) filter, and why it makes such a nice desampling filter for a high-rate data acquisition system. Input is 100MHz at 8 bits, and the output is any integer submultiple down to about 1kHz. The hardware resources in the FPGA are low: a set of 64-bit adders and registers, along with a reasonable amount of control logic.&lt;br /&gt;The first version of the page is general description and overview. I plan to put more details of the math behind the CIC. In researching math and html, I found &lt;a href="http://www1.chapman.edu/%7Ejipsen/mathml/asciimath.html"&gt;asciimathml.js&lt;/a&gt; . It's an open source JavaScript package that lets one embed equations into a webpage's text using simple LaTeX-like strings. I've used it internally and it's really nice to use. Should be live on the mhz100q page in the near future.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/865007134733273439-8385919460442158359?l=blog.sensicomm.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.sensicomm.com/feeds/8385919460442158359/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=865007134733273439&amp;postID=8385919460442158359' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/865007134733273439/posts/default/8385919460442158359'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/865007134733273439/posts/default/8385919460442158359'/><link rel='alternate' type='text/html' href='http://blog.sensicomm.com/2011/11/desampling-using-cascaded-integrator.html' title='Desampling using a Cascaded Integrator Comb filter'/><author><name>Joe Rothweiler</name><uri>http://www.blogger.com/profile/07215509695497889602</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-ghC987-c6y4/Ts1iG8gWvyI/AAAAAAAAACU/bQh2bnwMkVc/s72-c/eqcic3_v1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-865007134733273439.post-5272883768813770976</id><published>2011-09-30T20:47:00.001-04:00</published><updated>2011-09-30T20:51:26.625-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='robot'/><category scheme='http://www.blogger.com/atom/ns#' term='vgo'/><title type='text'>Embedded systems Conference</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-dmczWzSGPbs/ToZgzaQr7dI/AAAAAAAAACE/3KyBgQJYges/s1600/vgo10_50.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/-dmczWzSGPbs/ToZgzaQr7dI/AAAAAAAAACE/3KyBgQJYges/s1600/vgo10_50.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;I was at the Embedded Systems Conference in Boston this week, and Vgo Communications &lt;a href="http://www.vgocomm.com/"&gt;www.vgocomm.com&lt;/a&gt; had their telepresence robot roaming around on the exhibits floor. It was pretty unobtrusive, just wandering around the booths along with the rest of us.&lt;br /&gt;I don't have any connection with them, just think it's a cute device.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/865007134733273439-5272883768813770976?l=blog.sensicomm.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.sensicomm.com/feeds/5272883768813770976/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=865007134733273439&amp;postID=5272883768813770976' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/865007134733273439/posts/default/5272883768813770976'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/865007134733273439/posts/default/5272883768813770976'/><link rel='alternate' type='text/html' href='http://blog.sensicomm.com/2011/09/embedded-systems-conference.html' title='Embedded systems Conference'/><author><name>Joe Rothweiler</name><uri>http://www.blogger.com/profile/07215509695497889602</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-dmczWzSGPbs/ToZgzaQr7dI/AAAAAAAAACE/3KyBgQJYges/s72-c/vgo10_50.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-865007134733273439.post-2319248711252971573</id><published>2011-05-17T13:35:00.001-04:00</published><updated>2011-05-17T13:38:58.536-04:00</updated><title type='text'>Acer Laptop and Linux</title><content type='html'>My old Averatec laptop started producing read errors on the hard drive - not good! I didn't lose anything important thanks to backups. PATA drives seem to be pretty much unavailable these days, so I ended up getting a new Acer 5253-BZ602 laptop. The first part of the fun with any new laptop is getting Linux installed and getting the peripherals working. Had to go with the latest Debian unstable distribution in order to get a working LAN driver. Most of the pieces are working now (graphics, wireless, ethernet, camera, etc). A web page with current status and driver info is at&lt;br /&gt;&lt;a href="http://www.sensicomm.com/main/linux/acer_5253/index.shtml"&gt;http://www.sensicomm.com/main/linux/acer_5253/index.shtml&lt;/a&gt; .&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/865007134733273439-2319248711252971573?l=blog.sensicomm.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.sensicomm.com/feeds/2319248711252971573/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=865007134733273439&amp;postID=2319248711252971573' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/865007134733273439/posts/default/2319248711252971573'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/865007134733273439/posts/default/2319248711252971573'/><link rel='alternate' type='text/html' href='http://blog.sensicomm.com/2011/05/acer-laptop-and-linux.html' title='Acer Laptop and Linux'/><author><name>Joe Rothweiler</name><uri>http://www.blogger.com/profile/07215509695497889602</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-865007134733273439.post-4284150876608728189</id><published>2011-03-11T08:11:00.003-05:00</published><updated>2011-03-11T09:10:53.287-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Xilinx'/><category scheme='http://www.blogger.com/atom/ns#' term='USB'/><category scheme='http://www.blogger.com/atom/ns#' term='MHZ100Q'/><title type='text'>USB inside an FPGA</title><content type='html'>I'm working on updating the &lt;a href="http://mhz100q.sourceforge.net/"&gt;MHZ100Q&lt;/a&gt; project, and for a low-cost USB interface I want to put all of the USB functions inside the FPGA. So externally the interface consists of a connector and 3 resistors - can't get much lower cost than that.&lt;br /&gt;I found 3 open source USB implementations:&lt;br /&gt;1) &lt;a href="http://www.opencores.org/"&gt;opencores.org&lt;/a&gt; has the usb1_funct and usb_phy Verilog projects, which implement a USB device controller and physical layer (transceiver) respectively.&lt;br /&gt;2) Joris has implemented the USB Communication Device Controller (CDC) protocol in VHDL. CDC devices basically look like an RS232 serial port to the host PC. This one is intended for use with an external PHY chip, and supports both full-speed(12MB/s) and high-speed(480MB/s) operation. Source is available on his website at &lt;a href="http://www.xs4all.nl/%7Erjoris/fpga/usb.html"&gt;www.xs4all.nl/~rjoris/fpga/usb.html&lt;/a&gt; .&lt;br /&gt;3) Robert E. Jenkins of Johns Hopkins has published the USBF_IFC VHDL core, which includes both controller and PHY functions. It's set up for a XESS board, and is available at &lt;a href="http://www.xess.com/projects/FPGA-USB-V2/readmeusb-v2.php"&gt;www.xess.com/projects/FPGA-USB-V2/readmeusb-v2.php&lt;/a&gt; .&lt;br /&gt;&lt;h2&gt;Evaluation&lt;/h2&gt;&lt;br /&gt;I ported all 3 to my custom PCB, and did a brief evaluation.&lt;br /&gt;1) The opencores modules went together easily, and Linux sees the USB device. I didn't implement any data transfers to/from the USB device, but it looks easy to do.&lt;br /&gt;2) I decided to use the Joris controller with the opencores soft PHY instead of an external chip. That limits me to full speed, but saves parts. After a bit of hacking around to get the signals and polarities right, the combination worked great. (Mixing VHDL and Verilog wasn't a problem). His test program gave about 10 megabytes/second transfer rates, which is just about the maximum possible rate for a full-speed device. I've posted my files to demo this combination on my website at &lt;a href="http://www.sensicomm.com/main/downloads/index.shtml"&gt;www.sensicomm.com/main/downloads/index.shtml&lt;/a&gt; (the specific file is 110310cdc_usb.tgz).&lt;br /&gt;3) USBF_IFC took a bit of hacking to get it to run on my board. As stated on the project web page, it was a project for lab classes and still has some quirks.&lt;br /&gt;&lt;br /&gt;I've been using USBF_IFC for several months now to test my hardware, but going forward I'm planning to use the Joris core. It's operation seems solid, being able to treat it as a serial device is nice for writing host software, and I can go to high speed if I add an external PHY in the future.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/865007134733273439-4284150876608728189?l=blog.sensicomm.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.sensicomm.com/feeds/4284150876608728189/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=865007134733273439&amp;postID=4284150876608728189' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/865007134733273439/posts/default/4284150876608728189'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/865007134733273439/posts/default/4284150876608728189'/><link rel='alternate' type='text/html' href='http://blog.sensicomm.com/2011/03/usb-inside-fpga.html' title='USB inside an FPGA'/><author><name>Joe Rothweiler</name><uri>http://www.blogger.com/profile/07215509695497889602</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-865007134733273439.post-1923325822338686598</id><published>2011-02-21T10:05:00.002-05:00</published><updated>2011-02-21T10:45:23.087-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Xilinx'/><category scheme='http://www.blogger.com/atom/ns#' term='HDMI'/><category scheme='http://www.blogger.com/atom/ns#' term='Atlys'/><title type='text'>ATLYS HDMI</title><content type='html'>Followup to my previous post, related to Kaveh's comment. This post describes how I set up HDMI TX and RX.&lt;br /&gt;To test HDMI TX and RX, I loaded the HDMI switch example from Xilinx App Note 495. Loaded Top-level files dvi_demo.v and dvi_demo.ucf into ISE WebPACK, along with all the lower-level modules they require. Everything is in xapp495.zip from Xilinx.&lt;br /&gt;Board configuration:&lt;br /&gt;JP6&amp;amp;JP7 in: link SCL/SDA between TX&amp;amp;RX.&lt;br /&gt;JP11 in: boot from USB stick.&lt;br /&gt;JP5 in: Enable J1 HDMI input.&lt;br /&gt;Connected J2 to display, J3 to source (J1 sometimes works as well).&lt;br /&gt;I load dvi_demo.bit from a USB stick - takes about 30 seconds each time.&lt;br /&gt;Tested with a Samsung TV and DirecTV box and Samsung BluRay.&lt;br /&gt;The LED's show that RX is sync'ing with the signal and the display shows up on the TV. Tried several channels at different resolutions (no 1080p ones available). Sometimes had to unplug and replug the HDMI cables to get things to sync up. Just video, no audio passing through yet for some reason.&lt;br /&gt;So that's my progress so far.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/865007134733273439-1923325822338686598?l=blog.sensicomm.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.sensicomm.com/feeds/1923325822338686598/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=865007134733273439&amp;postID=1923325822338686598' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/865007134733273439/posts/default/1923325822338686598'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/865007134733273439/posts/default/1923325822338686598'/><link rel='alternate' type='text/html' href='http://blog.sensicomm.com/2011/02/atlys-hdmi.html' title='ATLYS HDMI'/><author><name>Joe Rothweiler</name><uri>http://www.blogger.com/profile/07215509695497889602</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-865007134733273439.post-554568973282134973</id><published>2011-01-12T19:28:00.004-05:00</published><updated>2011-01-12T19:58:48.990-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Digilent'/><category scheme='http://www.blogger.com/atom/ns#' term='Xilinx'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='FPGA'/><category scheme='http://www.blogger.com/atom/ns#' term='HDMI'/><category scheme='http://www.blogger.com/atom/ns#' term='Atlys'/><title type='text'>Atlys and HDMI on Linux</title><content type='html'>Xilinx App Note 495 describes sample implementations of DVI/HDMI receiver and transmitter on the Digilent Atlys board. I built the code using WebPACK 12.4, and it works as advertised: The colorbar test pattern displays nicely on my HDMI monitor.&lt;br /&gt;&lt;br /&gt;Also installed Digilent's Linux version of their Adept tools for FPGA programming. They don't seem to have the full GUI version available, but the command-line tool was able to load my test code (as a WebPACK-generated .bit file) into the Atlys FPGA with no problem. Don't see any way to load code into the SPI flash: it appears that Windows-based tools are still needed for that.&lt;br /&gt;&lt;br /&gt;Only one minor glitch: I use Debian, which isn't one of Digilent's supported distributions. In recent versions of Debian, the udev package doesn't allow plugin devices to have protection mode 0666, which means that the Digilent tools will only work if run as root.&lt;br /&gt;The fix is to edit "&lt;span style="font-family:courier new;"&gt;/etc/udev/rules.d/52-digilent-usb.rules&lt;/span&gt;" and add a group:&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;SYSFS{idVendor}=="1443", MODE="666"  GROUP="plugdev"&lt;/span&gt;&lt;br /&gt;then any user in the "plugdev" group can run the Digilent tools. The &lt;span style="font-family:courier new;"&gt;/etc/group &lt;/span&gt;file should have a line like&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;plugdev:x:46:jr&lt;/span&gt;&lt;br /&gt;where "jr" is my username.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/865007134733273439-554568973282134973?l=blog.sensicomm.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.sensicomm.com/feeds/554568973282134973/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=865007134733273439&amp;postID=554568973282134973' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/865007134733273439/posts/default/554568973282134973'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/865007134733273439/posts/default/554568973282134973'/><link rel='alternate' type='text/html' href='http://blog.sensicomm.com/2011/01/atlys-and-hdmi-on-linux.html' title='Atlys and HDMI on Linux'/><author><name>Joe Rothweiler</name><uri>http://www.blogger.com/profile/07215509695497889602</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-865007134733273439.post-1616071921689425328</id><published>2010-12-29T10:56:00.005-05:00</published><updated>2010-12-29T11:10:33.603-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Digilent'/><category scheme='http://www.blogger.com/atom/ns#' term='Xilinx'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='FPGA'/><category scheme='http://www.blogger.com/atom/ns#' term='HDMI'/><category scheme='http://www.blogger.com/atom/ns#' term='Atlys'/><title type='text'>Digilent Atlys</title><content type='html'>For Christmas, Santa Claus brought a Digilent Atlys development board for the Xilinx Spartan-6 FPGA's. Nice board, with a bunch of peripherals (Ethernet, USB, audio, HDMI!, etc).&lt;br /&gt;The HDMI interface and protocol is implemented as firmware in the FPGA. My only test so far was to connect an HDMI output to a monitor and power up the board. It generates a test pattern of colored squares right out of the box. Nice. 2011 is going to be interesting.&lt;br /&gt;While setting it up, I also noticed that Digilent now provides tools for Linux programming and communication with their FPGA boards. Need to check those out as well.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/865007134733273439-1616071921689425328?l=blog.sensicomm.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.sensicomm.com/feeds/1616071921689425328/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=865007134733273439&amp;postID=1616071921689425328' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/865007134733273439/posts/default/1616071921689425328'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/865007134733273439/posts/default/1616071921689425328'/><link rel='alternate' type='text/html' href='http://blog.sensicomm.com/2010/12/digilent-atlys.html' title='Digilent Atlys'/><author><name>Joe Rothweiler</name><uri>http://www.blogger.com/profile/07215509695497889602</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-865007134733273439.post-1388038042423264505</id><published>2010-11-24T11:00:00.003-05:00</published><updated>2010-11-24T11:23:37.460-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sonar'/><category scheme='http://www.blogger.com/atom/ns#' term='FPGA'/><title type='text'>Saltwater immersion testing</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_H7xa_y64qyA/TO02-hw-MTI/AAAAAAAAAB0/xKf9UcmdsVk/s1600/img_2056_crop50.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 320px; height: 243px;" src="http://4.bp.blogspot.com/_H7xa_y64qyA/TO02-hw-MTI/AAAAAAAAAB0/xKf9UcmdsVk/s320/img_2056_crop50.jpg" alt="" id="BLOGGER_PHOTO_ID_5543147164206510386" border="0" /&gt;&lt;/a&gt;I've been working on a project that uses a custom A/D-FPGA board to generate and process sonar signals. Basic functionality is working, so the client took it to the dock for some live testing.&lt;br /&gt;The testing included an "unscheduled" saltwater immersion experiment, with power applied to the board no less.&lt;br /&gt;It was recovered after 24 hours; effects on the circuit were not beneficial.&lt;br /&gt;So far, it looks as if the flash memory and A/D converters survived with just minor corrosion on the leads. The FPGA is interesting: definitely nonfunctional, and there's a pit where the  epoxy case is crumbly. I suspect that the 1.2 volt switching regulator went out of range and fried the FPGA core.&lt;br /&gt;Next time we plan to use a waterproof case.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/865007134733273439-1388038042423264505?l=blog.sensicomm.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.sensicomm.com/feeds/1388038042423264505/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=865007134733273439&amp;postID=1388038042423264505' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/865007134733273439/posts/default/1388038042423264505'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/865007134733273439/posts/default/1388038042423264505'/><link rel='alternate' type='text/html' href='http://blog.sensicomm.com/2010/11/saltwater-immersion-testing.html' title='Saltwater immersion testing'/><author><name>Joe Rothweiler</name><uri>http://www.blogger.com/profile/07215509695497889602</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_H7xa_y64qyA/TO02-hw-MTI/AAAAAAAAAB0/xKf9UcmdsVk/s72-c/img_2056_crop50.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-865007134733273439.post-706706986469159379</id><published>2009-11-06T22:27:00.002-05:00</published><updated>2009-11-06T22:39:55.997-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='Debian'/><title type='text'>Grub-ing</title><content type='html'>Just got a nice Gateway quad-core PC to speed up FPGA designs, so time to install Debian Linux on it. Install went smoothly, until I tried to boot into Linux for the first time. Then I get error messages:&lt;br /&gt;ata1: softreset failed (device not ready)&lt;br /&gt;ata2: softreset failed (device not ready)&lt;br /&gt;and Linux hangs.&lt;br /&gt;After a lot of Google-ing and hacking (and hair-pulling), I finally found the problem: The Debian installer set the boot partition on the SATA drive to /dev/sdb3, and it really should have been /dev/sda3. Still get the "softreset failed" errors, but Linux boots and seems to operate normally.&lt;br /&gt;Thinking about the problem: I used a USB DVD drive for the install, and then disconnected it before booting. I suspect the DVD was sda and the sata disk was sdb during the install, and the sata became sda when booting without the DVD drive.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/865007134733273439-706706986469159379?l=blog.sensicomm.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.sensicomm.com/feeds/706706986469159379/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=865007134733273439&amp;postID=706706986469159379' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/865007134733273439/posts/default/706706986469159379'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/865007134733273439/posts/default/706706986469159379'/><link rel='alternate' type='text/html' href='http://blog.sensicomm.com/2009/11/grub-ing.html' title='Grub-ing'/><author><name>Joe Rothweiler</name><uri>http://www.blogger.com/profile/07215509695497889602</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-865007134733273439.post-3571498041321206635</id><published>2009-08-10T15:46:00.003-04:00</published><updated>2009-08-10T16:05:32.266-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Radiotronix'/><category scheme='http://www.blogger.com/atom/ns#' term='undersampling'/><category scheme='http://www.blogger.com/atom/ns#' term='Nyquist'/><category scheme='http://www.blogger.com/atom/ns#' term='DP1205'/><category scheme='http://www.blogger.com/atom/ns#' term='A/D'/><category scheme='http://www.blogger.com/atom/ns#' term='MHZ100Q'/><title type='text'>915MHz signal with a 100MHz A/D</title><content type='html'>I've been using a &lt;a href="http://www.radiotronix.com"&gt;Radiotronix&lt;/a&gt; DP-1205 RF transceiver that operates in the 915MHz unlicensed ISM band. The power level, operating frequency, FM deviation, etc., are set using the SPI serial interface. So I decided to see if my MHZ100Q A/D PCB could see the signal. I bypassed the antialiasing filter and associated buffer, and then coupled the transceiver signal to the input.&lt;br /&gt;It Works! The signal is low amplitude (less than 10% of full scale), and there are a lot of spurs 20dB down or so, but the carrier is clearly visible. The 902 to 928 MHz band is being undersampled at 100 MHZ so it shows up at 2 to 28 MHz in the digitized signal (in full compliance with Nyquist's rules).&lt;br /&gt;The A/D is only spec'ed to 550 MHz, so I wouldn't trust the signal and distortion levels, but it's definitely a usable signal.&lt;br /&gt;More details on the  &lt;a href="http://mhz100q.sourceforge.net/ex_nyquist.shtml"&gt;MHZ100Q&lt;/a&gt; project site at Source Forge.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/865007134733273439-3571498041321206635?l=blog.sensicomm.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.sensicomm.com/feeds/3571498041321206635/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=865007134733273439&amp;postID=3571498041321206635' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/865007134733273439/posts/default/3571498041321206635'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/865007134733273439/posts/default/3571498041321206635'/><link rel='alternate' type='text/html' href='http://blog.sensicomm.com/2009/08/915mhz-signal-with-100mhz-ad.html' title='915MHz signal with a 100MHz A/D'/><author><name>Joe Rothweiler</name><uri>http://www.blogger.com/profile/07215509695497889602</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-865007134733273439.post-973571915279879568</id><published>2009-04-15T15:25:00.004-04:00</published><updated>2009-04-15T15:34:07.453-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Digilent'/><category scheme='http://www.blogger.com/atom/ns#' term='Xilinx'/><category scheme='http://www.blogger.com/atom/ns#' term='FPGA'/><category scheme='http://www.blogger.com/atom/ns#' term='Octave'/><category scheme='http://www.blogger.com/atom/ns#' term='A/D'/><category scheme='http://www.blogger.com/atom/ns#' term='USB'/><title type='text'>MHZ100Q - on sourceforge</title><content type='html'>I can now digitize one signal at 100MHz using my A/D card, capture in the Digilent Xilinx FPGA board, and upload to a PC via the USB port. I'm using Octave to upload and display the data, making a sort of oscilloscope. So I decided it's time to create a sourceforge open-source project.&lt;br /&gt;It's &lt;a href="http://mhz100q.sourceforge.net"&gt;http://mhz100q.sourceforge.net&lt;/a&gt; . Code is all in Subversion. It's all there, but I still need to create some build instructions and other documentation.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/865007134733273439-973571915279879568?l=blog.sensicomm.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.sensicomm.com/feeds/973571915279879568/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=865007134733273439&amp;postID=973571915279879568' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/865007134733273439/posts/default/973571915279879568'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/865007134733273439/posts/default/973571915279879568'/><link rel='alternate' type='text/html' href='http://blog.sensicomm.com/2009/04/mhz100q-on-sourceforge.html' title='MHZ100Q - on sourceforge'/><author><name>Joe Rothweiler</name><uri>http://www.blogger.com/profile/07215509695497889602</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-865007134733273439.post-2639327399245973805</id><published>2009-03-02T10:36:00.004-05:00</published><updated>2009-03-02T10:58:41.971-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Digilent'/><category scheme='http://www.blogger.com/atom/ns#' term='Xilinx'/><category scheme='http://www.blogger.com/atom/ns#' term='FPGA'/><category scheme='http://www.blogger.com/atom/ns#' term='Cypress'/><category scheme='http://www.blogger.com/atom/ns#' term='USB'/><category scheme='http://www.blogger.com/atom/ns#' term='FX2'/><title type='text'>Cypress CY7C68013A (FX2) USB to FPGA</title><content type='html'>I just got the USB interface working under Linux for the Digilent Nexys and Nexys 2 FPGA boards.  Started with some ideas from the blog at &lt;a href="http://braiden.org/?p=59"&gt;braiden.org&lt;/a&gt; , updated the FX2 firmware and added from VHDL test code. Details  at &lt;a href="http://www.sensicomm.com/main/projects/fpga/ieee_fpga.shtml#nexys_usb"&gt;www.sensicomm.com/main/projects/fpga/ieee_fpga.shtml#nexys_usb&lt;/a&gt; .&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/865007134733273439-2639327399245973805?l=blog.sensicomm.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.sensicomm.com/feeds/2639327399245973805/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=865007134733273439&amp;postID=2639327399245973805' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/865007134733273439/posts/default/2639327399245973805'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/865007134733273439/posts/default/2639327399245973805'/><link rel='alternate' type='text/html' href='http://blog.sensicomm.com/2009/03/cypress-cy7c68013a-fx2-usb-to-fpga.html' title='Cypress CY7C68013A (FX2) USB to FPGA'/><author><name>Joe Rothweiler</name><uri>http://www.blogger.com/profile/07215509695497889602</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-865007134733273439.post-6440381045910188837</id><published>2009-02-14T11:35:00.003-05:00</published><updated>2009-02-14T12:37:56.130-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='blog'/><category scheme='http://www.blogger.com/atom/ns#' term='offtopic'/><title type='text'>Noise-blog</title><content type='html'>Created a separate blog for less-technical happenings. (Signals here, random noise there). It's at &lt;a href="http://noise-blog.sensicomm.com/"&gt;noise-blog.sensicomm.com&lt;/a&gt;. Alternate is &lt;a href="http://joerothweiler.blogspot.com/"&gt;joerothweiler.blogspot.com&lt;/a&gt; (most noise-related names on blogspot are already taken).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/865007134733273439-6440381045910188837?l=blog.sensicomm.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.sensicomm.com/feeds/6440381045910188837/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=865007134733273439&amp;postID=6440381045910188837' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/865007134733273439/posts/default/6440381045910188837'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/865007134733273439/posts/default/6440381045910188837'/><link rel='alternate' type='text/html' href='http://blog.sensicomm.com/2009/02/noise-blog.html' title='Noise-blog'/><author><name>Joe Rothweiler</name><uri>http://www.blogger.com/profile/07215509695497889602</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-865007134733273439.post-3752646733534723987</id><published>2008-12-09T20:00:00.003-05:00</published><updated>2008-12-09T20:26:55.024-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='FPGA'/><category scheme='http://www.blogger.com/atom/ns#' term='A/D'/><title type='text'>Quad 100 MHz A/D PCB</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_H7xa_y64qyA/ST8U7Cw4NOI/AAAAAAAAAAc/P_lDjk9UAVc/s1600-h/a2d_diag_crop.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 200px; height: 67px;" src="http://2.bp.blogspot.com/_H7xa_y64qyA/ST8U7Cw4NOI/AAAAAAAAAAc/P_lDjk9UAVc/s200/a2d_diag_crop.png" alt="" id="BLOGGER_PHOTO_ID_5277960292888229090" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_H7xa_y64qyA/ST8ZUA-Q-kI/AAAAAAAAAAk/OLvnRbqoW7g/s1600-h/a2d_vgaplot.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 200px; height: 31px;" src="http://2.bp.blogspot.com/_H7xa_y64qyA/ST8ZUA-Q-kI/AAAAAAAAAAk/OLvnRbqoW7g/s200/a2d_vgaplot.jpg" alt="" id="BLOGGER_PHOTO_ID_5277965119950748226" border="0" /&gt;&lt;/a&gt;The paying customers are taken care of for a while, so it's time to update the blog. I want to test some DSP on the FPGA (filters, RF signal modulation/demodulation, etc)., so I need A/D and D/A capability. I could buy a board, but it's more fun to build my own. So I settled on a quad, 8-bit, 100MHz board that interfaces to the Xilinx or Digilent board via the 100-pin FX/2 connector. The block diagram shows one of the 4 channels.  As a test, I'm capturing a signal and displaying it on the VGA output.  The signal is looking reasonable. More details on my website:&lt;br /&gt;&lt;a href="http://www.sensicomm.com/main/projects/fpga/quad_100mhz_a2d.shtml"&gt;http://www.sensicomm.com/main/projects/fpga/quad_100mhz_a2d.shtml&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/865007134733273439-3752646733534723987?l=blog.sensicomm.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.sensicomm.com/feeds/3752646733534723987/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=865007134733273439&amp;postID=3752646733534723987' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/865007134733273439/posts/default/3752646733534723987'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/865007134733273439/posts/default/3752646733534723987'/><link rel='alternate' type='text/html' href='http://blog.sensicomm.com/2008/12/quad-100-mhz-ad-pcb.html' title='Quad 100 MHz A/D PCB'/><author><name>Joe Rothweiler</name><uri>http://www.blogger.com/profile/07215509695497889602</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_H7xa_y64qyA/ST8U7Cw4NOI/AAAAAAAAAAc/P_lDjk9UAVc/s72-c/a2d_diag_crop.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-865007134733273439.post-747948791314189946</id><published>2008-07-21T16:56:00.003-04:00</published><updated>2008-07-21T17:16:16.968-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='AX8'/><category scheme='http://www.blogger.com/atom/ns#' term='Xilinx'/><category scheme='http://www.blogger.com/atom/ns#' term='FPGA'/><title type='text'>FPGA frequency counter code.</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_H7xa_y64qyA/SIT4NpTFDXI/AAAAAAAAAAU/DxeNzLM7tXY/s1600-h/counter_lcd_display.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://bp1.blogger.com/_H7xa_y64qyA/SIT4NpTFDXI/AAAAAAAAAAU/DxeNzLM7tXY/s200/counter_lcd_display.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5225574380964482418" /&gt;&lt;/a&gt;&lt;br /&gt;An FPGA project that does something useful: implements a frequency counter using the Xilinx Spartan 3AN development board. Basically consists of two counters and the AX8 uC core. The first counter generates a 1 Hz timing signal from the on-board 50 MHz crystal oscillator, and the second counter counts the signal under test. The AX8 core runs a simple program that reads the count value and formats it for display on the LCD.&lt;br /&gt;The attached image is counting the frequency of a VEX RC transmitter using a 75.97 MHz crystal. The measured count is 75.971459 MHz, which is within 0.002% of the expected value. The development board uses an xtal oscillator marked AGXO-751L 50.000 A. I found a datasheet at www.inysa.es indicating that A versions are 100ppm, or 0.01%, so the measured value is well inside the tolerances.&lt;br /&gt;I'll be posting the code when I get it ready.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/865007134733273439-747948791314189946?l=blog.sensicomm.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.sensicomm.com/feeds/747948791314189946/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=865007134733273439&amp;postID=747948791314189946' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/865007134733273439/posts/default/747948791314189946'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/865007134733273439/posts/default/747948791314189946'/><link rel='alternate' type='text/html' href='http://blog.sensicomm.com/2008/07/fpga-frequency-counter-code.html' title='FPGA frequency counter code.'/><author><name>Joe Rothweiler</name><uri>http://www.blogger.com/profile/07215509695497889602</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp1.blogger.com/_H7xa_y64qyA/SIT4NpTFDXI/AAAAAAAAAAU/DxeNzLM7tXY/s72-c/counter_lcd_display.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-865007134733273439.post-4535103662055581191</id><published>2008-07-14T10:05:00.003-04:00</published><updated>2008-07-14T10:37:57.531-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><title type='text'>Dying Disk.</title><content type='html'>My old Winbook laptop (100 MHz 486!) finally died. I was using it as a private webserver, mail collector, Christmas light controller, remote access when I'm away, etc. So it's been running 24/7 for about 5 years now. The battery died several years ago, and the hinge cracked, but the guts still worked fine and it doesn't suck too much power. So, if it ain't broke too bad, don't fix it.&lt;br /&gt;Finally, the disk started sticking: I have to pick up the PC and shake it to get the drive to start spinning so it can boot. Now the fun part: I decided to move the drive to a new PC and copy all the settings off before it died completely. Unfortunately the disk was too big for the BIOS in the 486, so it's formatted with an OnTrack DiskManager partition hack, and the new PC (running a Debian Linux 2.6 kernel) doesn't see the real partitions. Google found 2 couple of suggestions: Add the hda=remap or hda=remap63 kernel option in grub (didn't help), or use device-mapper (didn't find any instructions on how to actually do it). Apparently, DM support was deleted in 2.6. So, I rebooted with a 2.4 kernel, whacked the drive with my hand, and all my partitions were readable without changing any settings.&lt;br /&gt;The disk did die for good shortly after that. I suppose I could dig up an old 2.5 drive and get a few more years out of the 486, but I think I've gotten my money's worth.&lt;br /&gt;I think I'll get the backups on my main PC up to date, then go back to useful work.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/865007134733273439-4535103662055581191?l=blog.sensicomm.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.sensicomm.com/feeds/4535103662055581191/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=865007134733273439&amp;postID=4535103662055581191' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/865007134733273439/posts/default/4535103662055581191'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/865007134733273439/posts/default/4535103662055581191'/><link rel='alternate' type='text/html' href='http://blog.sensicomm.com/2008/07/dying-disk.html' title='Dying Disk.'/><author><name>Joe Rothweiler</name><uri>http://www.blogger.com/profile/07215509695497889602</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-865007134733273439.post-4570699470606972301</id><published>2008-06-17T13:26:00.003-04:00</published><updated>2008-06-17T13:34:12.896-04:00</updated><title type='text'>FPGA to VGA port</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_H7xa_y64qyA/SFf1SsmS8tI/AAAAAAAAAAM/fNiyC4cfFT8/s1600-h/colorbars.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_H7xa_y64qyA/SFf1SsmS8tI/AAAAAAAAAAM/fNiyC4cfFT8/s200/colorbars.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5212904795262874322" /&gt;&lt;/a&gt;&lt;br /&gt;I wrote a VHDL test module to display a set of color bars on the VGA port of the Spartan 3AN development kit. It's hard-coded for 640x480 and uses counters and gates to generate the bars, so it's mainly useful as a hardware sanity check. There's a link to the code on my main website, in case anybody wants to look at it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/865007134733273439-4570699470606972301?l=blog.sensicomm.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.sensicomm.com/feeds/4570699470606972301/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=865007134733273439&amp;postID=4570699470606972301' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/865007134733273439/posts/default/4570699470606972301'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/865007134733273439/posts/default/4570699470606972301'/><link rel='alternate' type='text/html' href='http://blog.sensicomm.com/2008/06/fpga-to-vga-port.html' title='FPGA to VGA port'/><author><name>Joe Rothweiler</name><uri>http://www.blogger.com/profile/07215509695497889602</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_H7xa_y64qyA/SFf1SsmS8tI/AAAAAAAAAAM/fNiyC4cfFT8/s72-c/colorbars.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-865007134733273439.post-3906521857357886621</id><published>2008-05-23T10:16:00.003-04:00</published><updated>2008-05-23T10:32:48.763-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Atmel'/><category scheme='http://www.blogger.com/atom/ns#' term='AX8'/><category scheme='http://www.blogger.com/atom/ns#' term='Xilinx'/><category scheme='http://www.blogger.com/atom/ns#' term='FPGA'/><category scheme='http://www.blogger.com/atom/ns#' term='AVR'/><title type='text'>AX8 core, UART, and uC programming</title><content type='html'>Progress! I got the AX8 core (a uC based on the Atmel AVR instruction set, available from opencores.org) running on the Xilinx Spartan-3an eval board. It writes to the UART core, and I can see the UART's output on my PC.&lt;br /&gt;Since it takes 7 minutes or more to recompile an FPGA design, I decided to set up data2mem. That's a Xilinx-supplied tool to update just the contents of internal RAM blocks without doing a full recompile. It took quite a bit of searching, but I figured out how to do it, and it works fast.&lt;br /&gt;Details are online at&lt;br /&gt;&lt;a href="http://www.sensicomm.com/main/projects/fpga/AX8_on_Xilinx.shtml"&lt;br /&gt;&gt; www.sensicomm.com/main/projects/fpga/AX8_on_Xilinx.shtml&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/865007134733273439-3906521857357886621?l=blog.sensicomm.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.sensicomm.com/feeds/3906521857357886621/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=865007134733273439&amp;postID=3906521857357886621' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/865007134733273439/posts/default/3906521857357886621'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/865007134733273439/posts/default/3906521857357886621'/><link rel='alternate' type='text/html' href='http://blog.sensicomm.com/2008/05/ax8-core-uart-and-uc-programming.html' title='AX8 core, UART, and uC programming'/><author><name>Joe Rothweiler</name><uri>http://www.blogger.com/profile/07215509695497889602</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-865007134733273439.post-1528922320457888082</id><published>2008-05-22T09:56:00.002-04:00</published><updated>2008-05-22T10:14:16.140-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='blog'/><category scheme='http://www.blogger.com/atom/ns#' term='html'/><title type='text'>Page Counter for this blog</title><content type='html'>I decided to add a page counter, to see if anybody's actually reading my blog. There are lots around, but I wanted something simple. I have a personal page with Verizon, so I decided to use one of their page counters. Turned out to be pretty easy:&lt;br /&gt;First, I created file counter_blog.html on my Verizon-hosted page which is just:&lt;br /&gt;&amp;lt;html&amp;gt;&amp;lt;head&amp;gt;&amp;lt;/head&amp;gt;&amp;lt;body&amp;gt;*** code to make a counter***&amp;lt;/body&amp;gt;&amp;lt;/html&amp;gt;&lt;br /&gt;Where the body is just an image tag. Details are from the service provider.&lt;br /&gt;Now, to put it on this blog, I just used the "add html" option under "layout" on the dashboard, and added an iframe like this:&lt;br /&gt;&amp;lt;iframe src="http://mysite.example.com/counter_blog.html" width=180 height=40&amp;gt;&amp;lt;/iframe&amp;gt;&lt;br /&gt;And that's it. Happy reading.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/865007134733273439-1528922320457888082?l=blog.sensicomm.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.sensicomm.com/feeds/1528922320457888082/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=865007134733273439&amp;postID=1528922320457888082' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/865007134733273439/posts/default/1528922320457888082'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/865007134733273439/posts/default/1528922320457888082'/><link rel='alternate' type='text/html' href='http://blog.sensicomm.com/2008/05/page-counter-for-this-blog.html' title='Page Counter for this blog'/><author><name>Joe Rothweiler</name><uri>http://www.blogger.com/profile/07215509695497889602</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-865007134733273439.post-3905002102752418184</id><published>2008-05-03T11:31:00.003-04:00</published><updated>2008-05-03T17:06:23.426-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Xilinx'/><category scheme='http://www.blogger.com/atom/ns#' term='FPGA'/><title type='text'>fpga uC core</title><content type='html'>For most things, I'll need a microcomputer core on the FPGA. Xilinx has the Microblaze and Picoblaze synthesizable cores, but I want something that's open-source. That way I can see how things are done and modify as desired.&lt;br /&gt;There are several open cores available. I settled on the AX8 from &lt;a href="http://www.opencores.org"&gt;opencores.org&lt;/a&gt;. It's fairly simple, but it implements most of the Atmel AVR instruction set (which I have a lot of experience with). A simple "Hello World" in this core turned out to be pretty straightforward.&lt;br /&gt;After downloading AX8 from opencores, I loaded A90S1200.vhd, AX8.vhd, AX_TC8.vhd, and AX_Port.vhd into ISE WEBPACK. Then I modified A90S1200.vhd to divide the clock down to a lower frequency and to invert the reset line (since the core is set up for an active-low reset and most of the buttons on the board are active-high). I then created a .ucf file to attach port D to the LED's.&lt;br /&gt;The test program just writes to port D to blink the LED's. I assemble the program with tavrasm, then convert the program to a rom vhdl file using the hex2rom program that's included with AX8.&lt;br /&gt;And that's it!. Build in ISE, download to the FPGA, and the LED's blink.&lt;br /&gt;I can post source if anybody's interested.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/865007134733273439-3905002102752418184?l=blog.sensicomm.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.sensicomm.com/feeds/3905002102752418184/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=865007134733273439&amp;postID=3905002102752418184' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/865007134733273439/posts/default/3905002102752418184'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/865007134733273439/posts/default/3905002102752418184'/><link rel='alternate' type='text/html' href='http://blog.sensicomm.com/2008/05/fpga-uc-core.html' title='fpga uC core'/><author><name>Joe Rothweiler</name><uri>http://www.blogger.com/profile/07215509695497889602</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-865007134733273439.post-4844825235211540250</id><published>2008-05-01T13:19:00.000-04:00</published><updated>2008-05-01T13:34:47.232-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Xilinx'/><category scheme='http://www.blogger.com/atom/ns#' term='FPGA'/><title type='text'>VHDL HelloWorld</title><content type='html'>First step is to write a "Hello World" program. This one just counts cycles of the input clock, and displays a binary count on the LED's. Sample code is included here. hello.vhd implements the counter and connects to the LED's. The ucf file defines the clock and LED connections on the board.These would need to be changed to use anything other than this specific Spartan 3AN development board.&lt;br /&gt;It loads and the lights blink, so now we can do some real work.&lt;br /&gt;&lt;hl&gt;&lt;br /&gt;&lt;code&gt;&lt;pre&gt;&lt;br /&gt;-- $Id: hello.vhd,v 1.1 2008/05/01 15:18:18 jrothwei Exp $&lt;br /&gt;-- Joseph Rothweiler, Sensicomm LLC Started 16Apr2008.&lt;br /&gt;-- "Hello world" program. Count down the clock, and display a binary&lt;br /&gt;-- count on the 8 LED's.&lt;br /&gt;------------------------------------------------------------------------&lt;br /&gt;library IEEE;&lt;br /&gt;use IEEE.STD_LOGIC_1164.ALL;      -- Common things.&lt;br /&gt;use IEEE.STD_LOGIC_ARITH.ALL;     -- Makes the "div+1" instruction work.&lt;br /&gt;use IEEE.STD_LOGIC_UNSIGNED.ALL;&lt;br /&gt;&lt;br /&gt;entity main is&lt;br /&gt; Port (&lt;br /&gt;   CLK_50M : in  STD_LOGIC;  -- Input: 50 MHz clock.&lt;br /&gt;   LED : out  STD_LOGIC_VECTOR (7 downto 0)&lt;br /&gt; );&lt;br /&gt;end main;&lt;br /&gt;&lt;br /&gt;architecture Behavioral of main is&lt;br /&gt; signal div: STD_LOGIC_VECTOR(29 downto 0);&lt;br /&gt;begin&lt;br /&gt; process(CLK_50M) begin&lt;br /&gt;   if rising_edge(CLK_50M) then&lt;br /&gt;     div &lt;= div+1;              -- Increment counter on every clock.&lt;br /&gt;     LED &lt;= div(29 downto 22);  -- Display the counter MSB's on the LED's.&lt;br /&gt;     end if;   end process; end Behavioral;&lt;br /&gt;&lt;/pre&gt;&lt;/code&gt;&lt;br /&gt;&lt;hl&gt;&lt;br /&gt;&lt;code&gt;&lt;pre&gt;&lt;br /&gt;# $Id: hello_3an.ucf,v 1.1 2008/05/01 15:23:01 jrothwei Exp $&lt;br /&gt;# Joseph Rothweiler Sensicomm LLC started 01may2008.&lt;br /&gt;# Settings for the Xilinx Spartan-3AN development board by Digilent.&lt;br /&gt;# This file just contains the parts I'm using.&lt;br /&gt;&lt;br /&gt;#################################################&lt;br /&gt;# Settings specific to this Board.&lt;br /&gt;CONFIG VCCAUX = "3.3" ;&lt;br /&gt;CONFIG ENABLE_SUSPEND = "FILTERED" ;&lt;br /&gt;CONFIG POST_CRC = "DISABLE" ;&lt;br /&gt;&lt;br /&gt;#################################################&lt;br /&gt;# The main onboard clock, with the recommended settings.&lt;br /&gt;&lt;br /&gt;NET "CLK_50M"       LOC = "E12"  | IOSTANDARD = LVCMOS33 | PERIOD = 20.000 ;&lt;br /&gt;OFFSET = IN  10.000 VALID 20.000 BEFORE "CLK_50M" ;&lt;br /&gt;OFFSET = OUT 20.000 AFTER "CLK_50M" ;&lt;br /&gt;&lt;br /&gt;#################################################&lt;br /&gt;# The row of 8 LED's above the switches.&lt;br /&gt;&lt;br /&gt;NET "LED&lt;0&gt;"        LOC = "R20"  | IOSTANDARD = LVCMOS33 | DRIVE = 8 | SLEW = SLOW ;&lt;br /&gt;NET "LED&lt;1&gt;"        LOC = "T19"  | IOSTANDARD = LVCMOS33 | DRIVE = 8 | SLEW = SLOW ;&lt;br /&gt;NET "LED&lt;2&gt;"        LOC = "U20"  | IOSTANDARD = LVCMOS33 | DRIVE = 8 | SLEW = SLOW ;&lt;br /&gt;NET "LED&lt;3&gt;"        LOC = "U19"  | IOSTANDARD = LVCMOS33 | DRIVE = 8 | SLEW = SLOW ;&lt;br /&gt;NET "LED&lt;4&gt;"        LOC = "V19"  | IOSTANDARD = LVCMOS33 | DRIVE = 8 | SLEW = SLOW ;&lt;br /&gt;NET "LED&lt;5&gt;"        LOC = "V20"  | IOSTANDARD = LVCMOS33 | DRIVE = 8 | SLEW = SLOW ;&lt;br /&gt;NET "LED&lt;6&gt;"        LOC = "Y22"  | IOSTANDARD = LVCMOS33 | DRIVE = 8 | SLEW = SLOW ;&lt;br /&gt;NET "LED&lt;7&gt;"        LOC = "W21"  | IOSTANDARD = LVCMOS33 | DRIVE = 8 | SLEW = SLOW ;&lt;br /&gt;&lt;/pre&gt;&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/865007134733273439-4844825235211540250?l=blog.sensicomm.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.sensicomm.com/feeds/4844825235211540250/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=865007134733273439&amp;postID=4844825235211540250' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/865007134733273439/posts/default/4844825235211540250'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/865007134733273439/posts/default/4844825235211540250'/><link rel='alternate' type='text/html' href='http://blog.sensicomm.com/2008/05/vhdl-helloworld.html' title='VHDL HelloWorld'/><author><name>Joe Rothweiler</name><uri>http://www.blogger.com/profile/07215509695497889602</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-865007134733273439.post-7078485460057326819</id><published>2008-04-23T15:19:00.000-04:00</published><updated>2008-05-01T10:59:26.027-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Xilinx'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='FPGA'/><title type='text'>Starting FPGA project</title><content type='html'>I've just started working with the Xilinx Spartan-3AN development board. First step was getting the USB interface to work with my Debian 32-bit Linux system. Fortunately, the latest (10.1) version of the Xilinx ISE WebPACK software supports a nice interface using the libusb package. Notes on the system are now on my website, at &lt;a href="http://www.sensicomm.com/main/projects/fpga/ieee_fpga.shtml"&gt;www.sensicomm.com/main/projects/fpga/ieee_fpga.shtml&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/865007134733273439-7078485460057326819?l=blog.sensicomm.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.sensicomm.com/feeds/7078485460057326819/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=865007134733273439&amp;postID=7078485460057326819' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/865007134733273439/posts/default/7078485460057326819'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/865007134733273439/posts/default/7078485460057326819'/><link rel='alternate' type='text/html' href='http://blog.sensicomm.com/2008/04/starting-fpga-project.html' title='Starting FPGA project'/><author><name>Joe Rothweiler</name><uri>http://www.blogger.com/profile/07215509695497889602</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
