Blogs

Making the Spartan 3E Start Kit Work with Vista 64bit

So, i've had this Spartan 3E kit for a few months now, and really haven't managed to do much with it.
I got it and ran smack into a problem that seems to plague people that run Vista 64bit with the Xilinx ISE WebPack (11.1).
The USB cable isn't recognized by Impact, and so the device can't be programmed in the most direct manner.

I had already tried updating the USB driver for the device from the full ISE installation, but that wasn't enough.

I finally stumbled across this thread, which had the answer:
http://forums.xilinx.com/xlnx/board/message?board.id=XLNXBRD&thread.id=693

The fix was:
- Installed the ISE WebPack
- Installed Cable Drivers from the full ISE installation (/bin/nt64 directory) - these can be downloaded separately as well
- Downloaded and install the full Impact Tools - this is referred to as "Stand Alone Programming Tools" on the Xilinx site

The poster notes that he reinstalled the cable drivers. I did not have to do that.

It should also be noted that you then have to use the separate install of Impact to program the device. I haven't figured out how to point the web pack to the stand alone installation.

All of the downloads can be found here:
http://www.xilinx.com/support/download/index.htm

Click on the "Login to start Downloading link, and get through the screens till you see the download selection screen. Again, note that the full version of Impact is the "Stand Alone Programming Tools" download.

The 64bit USB drivers can be found in either the full ISE download (6GB), or downloaded separately.
USB Cable installation is documented here:
http://www.xilinx.com/support/documentation/configuration_hardware.htm

A little ways down the page you should see the USB Cable Installation Guide, which points to this PDF:
http://www.xilinx.com/support/documentation/user_guides/ug344.pdf

And right below that is the driver download in the zip file ug344_windows.zip:
https://secure.xilinx.com/webreg/clickthrough.do?cid=100840&license=RefD...

To do the installation, you're supposed to run the install_xusb.bat file.
Mine didn't work.. in hindsite i think i ran it from the zip file instead of extracting it first.
I ended up issuing the two key commands from inside the batch file manually to do the installation - cd to the NT64 folder first.
(all the batch file does is detect whether it's 32bit or 64bit OS and register the right inf file).

wdreg -inf uninstall.inf -silent -log uninstall.log uninstall
wdreg -inf xusbdrvr.inf -log install_xusb.log install

Once i got the webpack, the USB drivers, and the stand alone Impact tools installed, I fired up ISE, and created the programming file.
Then I powered on the board, launched the stand alone Impact tools, created a project, and did the Cable Auto-Configure under the . It correctly detected the three devices, and i was able to right click the first, select program, and send the bit file ISE created down to it.

What a pain...... but it works!

Digital Design Fun the Spartan Way

The last six months have been extremely busy and distracting. Changing accounts at work and a trip to South Africa among other things have definitely kept me hopping. On a side note, Cape Town and the surrounding area is gorgeous! I could move there in a heartbeat!
In any event, the time has come to get back to work on machines..

I've picked up a Xilinx Spartan 3E starter kit so that I can get some hands on work with chip design and hardware interaction. Getting an FPGA starter kit has been on my todo list for a couple years now, so I'm very excited to finally have it in my possession.
Of course, now the hard part begins.. learning to use it.

Learning to use it seems to have two broad areas of focus.
1. Learning digital design
2. Learning the description languages (Verilog, VHDL...)

A quick search on topics such as learning FPGA will show that most people focus on learning Verilog or VHDL and the usual religious wars that go with language decisions.
This is interesting because it's certainly not the language that is as important as the design it's supposed to describe.
But search on learning digital design and the advice is much sparser.

Most posts seem to suggest reading The Art of Electronics by Paul Horowitz and Winfield Hill.
However, the reviews of the book seem to make it clear that the book is really not a text book designed to guide a person through the topic. So I elected not to pick that up.

Instead I decided to pick up Foundations of Analog and Digital Electronic Circuits by Anant Agarwal and Jeffrey H. Lang. This book was written as a textbook for MIT courses, and I think will fit the bill nicely.
This also reminded me of MIT's open courseware, which I will have to search out.

I also ordered The Circuit Designer's Companion by Tim Williams, as it seemed to be a good companion resource from the reviews.

Win32 Reparse Points

One of the common challenges that we server admins face at work is, of course, disk space.
Windows and NFTS have some very powerful features built in, but I sometimes get the impression that Microsoft didn't always think how a customer of theirs would actually be able to use those features.

Win32 reparse points fall into this category. They are currently my favorite MS "feature" to rant about at work...

What is a reparse point you ask? Well, the simplest explanation is that it's a file system object that causes the OS to do a bit of extra processing when it runs across one to go somewhere else to get the desired data - insetad of just reading that object directly like a normal file/folder. It parses the file system object a second time, hence the name.

A reparse point works by sending the contents of the reparse point to a file system filter driver, that does the actual processing and spits the results back.
That file system filter can be a MS driver, or a third party driver.

The most common examples of reparse points are junctions and volume mount points.
Other common uses of reparse points are for archival of files. The archival program moves the file off to archival storage location and creates a reparse point where it was. The OS calls the archival program when it encounters the reparse point to go and fetch the actual data. The OS can do that because the archival program registers a GUID with MS for their reparse point type (tag type), and the OS knows to call their filter based on that GUID.

Fun stuff.. the above was a bit of a simplification, but it should be accurate enough.

Junctions and volume mount points concern the average server admin.
A "junction" is a not-so-technical term that means a reparse point for which the target is another folder.
A "volume mount point" means a reparse point for which the target is a volume.
Interestingly, as far as the reparse point goes, there's no difference between a junction and a volume mount point.

The frustrating thing, is that Microsoft built these powerful features into the OS and then didn't bother to include tools to adequately manage them.

This is really bad, because if you're using these features a lot to get around drive letter limitations, drive space limitations, or to make the file system more intelligently laid out, you can end up having more problems from trying to get the security right, not have loops in the backups, etc...

I should point out there are some programs out there for doing some work with reparse points, but they aren't comprehensive to say the least, and most server admins will quickly realize that they can't do things they'd expect to easily be able to do.. such as, oh.. list all the volumes on a server and where they're mounted to.

So what do we do.. well, we learn the API calls and write the tools ourselves!

Look for some entries in the Win32 and Tools section soon about this...

Activities and Math

My original intent for this site was to document my efforts to build a very basic chip, compiler, and operating system. I plan to implement them first in software and then in an FPGA. My goal is to do this as an exercise to help me really understand what's going on in a computer and virtual machines and not necessarily to produce a commercially viable product. Should be fun.. definitely educational, and no doubt more work than I really want to think about.

I've done quite a bit of reading towards that end, but have recently been side tracked by two topics: math, and Win32 reparse points.

I'm contemplating how to go back to college and actually get a degree, and one of the areas I know I never went far enough in is math. I was always good at math, but didn't get very far in calculus and statistics, both of which are of course critical for a CS/Eng degree.

So, I've been reading a couple of books by a guy named Morris Kline. I started with his book "Calculus - An intuitive and Physical Approach". While I really liked his writing style and was enjoying the book, I realized a few chapters in that I really needed to brush up on some of the more fundamental topics in math in order to really grasp the concepts. While browsing at a book store a few weeks ago, I ran across another book by him called "Mathematics for the Nonmathematician", which I readily picked up since i liked his writing style in the calculus book.

I'm about 80% of the way through the "Mathematics for the Nonmathematician" book, and have found it to be a fascinating read. He approaches the subjects from a historical perspective and gives insight into when the different techniques came about and why the culture and understanding of the times led to the various discoveries that were made. He really gives the reader a context to fit the learning into that, I think, makes the ideas more memorable. Morris also does a good job of making the reader appreciate the achievements that were made, and it's just very enjoyable purely from a historical context.

About Morris Kline

So, that's where my spare tech time at home has been going.. into math.

Work has lately had a focus on Win32 reparse points, but I'll save that for the next post...

Syndicate content