Saturday, May 3, 2008

fpga uC core

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.
There are several open cores available. I settled on the AX8 from opencores.org. 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.
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.
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.
And that's it!. Build in ISE, download to the FPGA, and the LED's blink.
I can post source if anybody's interested.

4 comments:

Adel said...

nice post!
having a uController based processor ( such as AtmelAVR ) on FPGA is not a common option. mostly because it lack's many of it's analogous part ( like A/D ) and it has a very low clock (8).

the opencores.org provides some excelent IP cores for processor such as OpenRISC 1200 with their own gnu-toolchain. try that out! they fit on Spartan3 ( I think, on altera it req. around 7K LE ).

Joe Rothweiler said...

Thanks. I agree that this core isn't too useful if you need a real processor. I was thinking of the AX8 just to do simple I/O (UART or keyboard), while the FPGA does the real work.
The OpenRISC one looks interesting, I'll look at that when I need to do some more serious crunching.

Unknown said...

it seems that your project is interested..can you post me the files...

Unknown said...

currently i'm doing an implementation of a soft-core processor a.k.a zpu processor from opencores.org..since i found that your project is interesting, i'll be glad if you can share your project with the blinking led to me..