John's FPGA Page
Page Last Updated 30/06/2009 04:35 AM
Contents:
1. VHDL - References and Tutorials:2. FPGA Board Vendors:3. FPGA Prototyping Boards I Use:3.1 B3-Spartan2+ Board4. FPGA Design Tools:
3.1.1 ICST525-01 PLL Clock divider
3.1.2 Notes on modifying the B3-SRAM module
3.1.2 Notes on adding a CF card
3.2 B5-X300-Spartan2e Board
3.3 Spartan 3 Starter Board
3.4 Spartan 3E Starter Board
3.5 XESS XSA-3S1000
3.5.1 IDE Compact Flash Interface.
3.6 Memec Design / Avnet V4FX12LC4.1 Xilinx Web Pack ISE:5. FPGA Projects
4.2 Altera Quartus:5.1 System16 - My Initial VHDL CPU Project6. VHDL & Verilog IP Resource Links:
5.2 Memio.zip Memory I/O Tool
5.3 Micro8 - A very simple microprocessor
5.4 Micro8a - Adding a Stack
5.5 Micro16 - Very Basic 16 bit machine
5.6 Micro16 - Processing Array
5.7 Motorola 8 bit CPUs
5.8 System01 - 6801 - Working (Incomplete I/O)
5.9 System68 - 6800 - Working
5.10 System05 - 6805 - Work in Progress
5.11 System11 - 68HC11 - Partly Working
5.12 System09 - 6809 SOC - Runs Flex9 with VDU and PS/2 Keyboard
5.13 System6801 - Wishbone Compliant 6801 for Altera by Michael Hasenfratz
1. VHDL - References and Tutorials:
The two most common languages used for FPGA design are VHDL and Verilog. I have chosen to use VHDL for my designs for no other reason than the reference books appeared to be a bit cheaper and more readily available. VHDL stands for Very high speed integrated circuit Hardware Description Language
Here are some of the VHDL online Tutorials thrown up by Google:VHDL-online - by Prof. Dr.-Ing. Wolfram H. Glauert, Universität Erlangen-Nürnberg
VHDL Introductory Tutorial - Green Mountain Computing Systems Inc.
Tutorial: Learn by Example - by Weijun Zhang, University of California Riversdale
VHDL Tutorial - Jan Van der Spiegel, University of Pennsylvania
VHDL Cookbook (pdf) - by Peter J. Ashenden - Dept. Computer Science, University of Adelaide South Australia.
A VHDL Tutorial - by Syed Yawar Ali Shah, Concordia University, Montreal.
VHDL Handbook - HARDI Electronics
http://www.diycalculator.com/ - Clive (Max) Maxfield's and Alvin Brown's DIY Calculator web site
This is Max & Alvin's web site for their book "How Computers Do Maths" which describes a basic 8 bit microprocessor and the assembler routines for performing maths functions. Max & Alvin provide an emulator for their virtual 8 bit microprocessor CPU which can be downloaded from the web site. They have also produced a data book for their CPU chip along the lines of the assembly instructions manuals for the early 8 bit chips. The data data book is also available for download. The book provides an excellent introduction to basic micro-computing.
Heaps of books can also be found on Amazon, by using the key words "FPGA", "VHDL", Verilog", "Xilinx" and "Altera".
FPGA Training Videos by Burch Electronic Design
My good friend Anthony Burch up in Sydney has developed a series of FPGA training videos especially designed for newcomers to FPGA design. They are suitable for hobbyists, university students, commercial organizations and engineers wishing to learn about FPGAs. Membership to the web site is only AU$19.95 and gives you access to 18 videos.Tony offers the first 6 videos free as an introduction to give you an idea of what to expect.
The topics include:
- What to look for in selecting an FPGA board
- Downloading and installing the Xilinx Web pack software,
- Designing a simple logic circuit for the Xilinx Spartan 3E starter board,
- Using schematic capture, and
- Downloading the code to the FPGA board.
Tony has had many years of experience in developing FPGA systems, having designed the B3-Spartan2+ and B5-X300 FPGA boards, and add on modules.
Tony's videos were featured in Max Maxfield's Programmable Logic Design Line newsletter on the 21st August 2008.
http://www.pldesignline.com/blogs/210101879
2. FPGA Board Vendors:
Here is a list of vendors of low price Xilinx (mostly Spartan) FPGA boards suitable for hobby use. This list is a little out of date, but I don't have time to update all the entries at the moment.
Xess (US)XSA-3S1000 - XC3S1000
XST-3.0 - Carrier Board
XSA50 - XC2S50
XSA100 - XC2S100
XSA200 - XC2S200
XSB300E - XC2S300e
XST2 Carrier board
Dr Dave Vanden Bout runs a Yahoo mailing list to support his boardshttp://tech.groups.yahoo.com/group/xsboard-users/
Digilent Inc (US)
Spartan3 Starter Board - XC3S200, XC3S1000
Spartan3E starter Board - XC3S500E, XC3S1600E
And many more, plus a range of CPLD and plug-in boards
Trenz Electronics (Germany)
TE-XC3S - Spartan3 MicroModules - XC3S200, XC3S400, XC3S1000
TE-??? - Altera Cyclone MicroModule - EP1C12Q240
TE-XC2SE - CPU Development - XC2S300e, XC2S300e
TE-XC2S - Starter Kit - XC2S50, XC2S200
Express IP (UK)
XIP_DEVY - Prototyping FPGA Board - XC2S200
Lots of free IP for their boards
NuHorizons Electronics (US)
Spartan3 Development Board - XC3S400
Spartan3 1500/2000 development board - XC3S1500, XC3S2000
Virtex II FPGA boards are also available.
Also distibutors for Digilent.
Avnet (US)
A wide range of Spartan 3, Virtex 2, Virtex 2 Pro, Virtex 4 and Virtex 5 boards
Too many to list. More intended for professional use.
http://www.fpga-faq.com/FPGA_Boards.shtml
The FPGA Frequently Asked Questions Web site has a more comprehensive list of FPGA Prototye Boards.
3. FPGA Prototyping Boards I Use:
3.1 B3-Spartan2+ Board
My projects were initially based on the B3-Spartan2+ FPGA board from Burch Electronic Design. The B3-Spartan2+ used a 200K gate Xilinx XC2S200. I also used the B3-SRAM 128K x 16bit SRAM module as well as the B3-FPGA-CPU-IO board for serial communications, keyboard, mouse and VGA video. The B3-Spartan2+ board was later superseded by the B5-X300 board which used the larger 300K gate XC2S300E. Neither the B3-Spartan2+ nor the B5-X300 are being sold now, although they were fairly popular boards a few years ago and I would imagine there are still a number of them being used today.
3.1.1 ICST525-01 PLL Clock divider
The B3-Spartan2+ and the B5-X300 boards both use the ICST525 programmable PLL clock chip for the master clock input with 20 MHz reference clock. By configuring jumpers on the pins of the chip you could select a large range of clock frequencies. There is one of these chips on the main B3 and B5-X300 boards, and one on the B3-FPGA-CPU-IO module. The B5-Peripheral-Interconnect module did not have an ICST525 on it.In some of the projects I have used clocks which are multiples of 4.915254 MHz as it is an exact binary multiple of 9600 Baud used by the MiniUart. More recent projects have been designed for a 50MHz system clock as this appears to be commonly used on other FPGA boards. On the designs using a 50 MHz clock, the baud rate clock is derived from a VHDL pre-scaler.
http://www.idt.com/?app=calculators&device=525_01 Frequency calculator web page
The following two pages have been pre-calculated:4.915254 MHz ICST525-01 for Memio and System68 at 9600 Baud
9.830508 MHz ICST525-01 for System68 at 19K2 Baud.
3.1.2 Notes on modifying the B3-SRAM module
On the original B3-SRAM module there was no separate output enable (OE*) and write (WR*) signals for upper and lower byte control. To perform byte writes, its was matter of reading the full 16 bits and modifying either the upper or lower byte and writing it back. This meant you had to have more complicated clock generators in 8 bit designs. Tony Burch fixed that problem on the B5-SRAM module. He permanently grounded the Output Enable (OE*) pin of the RAM chip and had a single Chip Select (CS*) and separate upper and lower byte write enables (WEU*, WEL*) which essentially become read/write lines.
I modified my B3-SRAM module by cutting the WE* track to U1 on the top of the board and the OE* to J2 pin 19 on the bottom of the board. I wired U1 pin 12 to J2 pin 19 which becomes WEL* (J2 pin 18 becomes WEU*) and I grounded the OE* signal on pin 28 of U1 & U2. The pin-outs in the ".ucf" file are for my modified B3-SRAM module and you will have to change them to suit the B5_SRAM. Note that Tony has resequenced the address and chip select lines on the B5_SRAM.
Some of my designs use the original B3-SRAM module configuration, and some the revised configuration. You will have to check the code to determine which is which.3.1.2 Notes on adding a CF card.
I added a CF card to the B3-Spartan2+ board by using a CF to IDE adapter from Darkwire (See section 3.5.1). You can see the CF IDE adapter and cable in the photo above. The CF card was used to run the Flex9 Disk operating system using System09 on the B3 board.I cut up a 40 pin IDE ribbon cable and split the cable so that the 16 data pins (IDE pins 3-18) and ground pin (IDE pin 19) on the 40 pin connector go to the bottom 17 pins of a 20 pin IDC connector for J4. Pin 1 of the 40 pin IDE connector (ide_reset_n) was split off the cable and soldered to pin 4 of the IDC connector of J3.
The control signals (IDE pins 1, 21, 23, 25, 27, 28, 29, 31-40) go to the bottom 16 pins of the 20 pin IDC connector for J3. Note that IDE pins 31-40 directly line up with J3 pins 11-20, however the ground pins between remaining control pins on J3 must be cut off and the remaining wires individually lined up on the connector, which can be a little bit fiddly.
I inserted 4 wires on pins 1-3 of the J3 connector. Pin 1, which is the +3.3V supply rail, was soldered to the power connector of the CF IDE adapter. Pins 2 & 3 of J3 were left disconnected and pin 4 of the J3 connector (ide_reset_n) was soldered to pin 1 of the 40 pin IDE cable as previously stated.
#
# B3 Connector J4
# IDE / CF Interface
# Note that this pin out is NOT consistent with the B5-IDE
# It's called the peripheral bus for consistence with the XESS board
#
#NET "+3.3V" #pin 1 (not used)
#NET "pb_gclk2" LOC = "p182"; #pin 2 (not used)
#NET "pb_spare2" LOC = "p160"; #pin 3 (not used)
NET "pb_data<7>" LOC = "p161"; #pin 4 - ide pin 3
NET "pb_data<8>" LOC = "p162"; #pin 5 - ide pin 4
NET "pb_data<6>" LOC = "p163"; #pin 6 - ide pin 5
NET "pb_data<9>" LOC = "p164"; #pin 7 - ide pin 6
NET "pb_data<5>" LOC = "p165"; #pin 8 - ide pin 7
NET "pb_data<10>" LOC = "p166"; #pin 9 - ide pin 8
NET "pb_data<4>" LOC = "p167"; #pin 10 - ide pin 9
NET "pb_data<11>" LOC = "p168"; #pin 11 - ide pin 10
NET "pb_data<3>" LOC = "p172"; #pin 12 - ide pin 11
NET "pb_data<12>" LOC = "p173"; #pin 13 - ide pin 12
NET "pb_data<2>" LOC = "p174"; #pin 14 - ide pin 13
NET "pb_data<13>" LOC = "p175"; #pin 15 - ide pin 14
NET "pb_data<1>" LOC = "p176"; #pin 16 - ide pin 15
NET "pb_data<14>" LOC = "p178"; #pin 17 - ide pin 16
NET "pb_data<0>" LOC = "p179"; #pin 18 - ide pin 17
NET "pb_data<15>" LOC = "p180"; #pin 19 - ide pin 18
#NET "ground" #pin 20 - ide pin 19
#
# B3 Connector J3
# IDE / CF Interface
# Note that this pin out is NOT consistent with the B5-IDE
#
#NET "+3.3V" #pin 1 (wired to the power connector)
#NET "ide_gclk1" LOC = "p185"; #pin 2 (not used)
#NET "ide_spare1" LOC = "p181"; #pin 3 (not used)
NET "ide_reset_n" LOC = "p187"; #pin 4 - ide pin 1
NET "ide_dmarq" LOC = "p188"; #pin 5 - ide pin 21
NET "pb_iowr_n" LOC = "p189"; #pin 6 - ide pin 23
NET "pb_iord_n" LOC = "p191"; #pin 7 - ide pin 25
NET "ide_iordy" LOC = "p192"; #pin 8 - ide pin 27
NET "ide_con_csel" LOC = "p193"; #pin 9 - ide pin 28
NET "ide_dmack_n" LOC = "p194"; #pin 10 - ide pin 29
NET "ide_intrq" LOC = "p195"; #pin 11 - ide pin 31
NET "ide_iocs16_n" LOC = "p199"; #pin 12 - ide pin 32
NET "pb_addr<1>" LOC = "p200"; #pin 13 - ide pin 33
NET "ide_pdiag_n" LOC = "p201"; #pin 14 - ide pin 34
NET "pb_addr<0>" LOC = "p202"; #pin 15 - ide pin 35
NET "pb_addr<2>" LOC = "p203"; #pin 16 - ide pin 36
NET "ide_cs0_n" LOC = "p204"; #pin 17 - ide pin 37
NET "ide_cs1_n" LOC = "p205"; #pin 18 - ide pin 38
NET "ide_dasp_n" LOC = "p206"; #pin 19 - ide pin 39
#NET "ground" #pin 20 - ide pin 40
3.2 B5-X300-Spartan2e Board
Burch Electronic Design superseded the B3 range of boards with the B5 range based around the 300K gate XC2S300E. Like the B3 board the B5-X300 had a number of add on boards such as the B5-SRAM, B5-Peripheral-Interconnect, B5-CF Compact Flash interface and so on. These boards and modules are no longer being sold by BurchED and Tony is now focusing on developing FPGA training material.
3.3 Spartan 3 Starter Board
The Xilinx Spartan 3 starter board, made by Digilent Inc uses a XC3S200 200K gate device. It has 1MByte of SRAM arranged as 256K x 32 bits. It features VGA connector, RS232 connector, PS/2 Keyboard Connector, Push Buttons, Switches, individual LEDs as well as 4 x 7 segment LED displays. It has 3 x 40 pin expansion connectors for adding on peripheral boards from Digilent. It also has serial flash for storing your FPGA configuration.
The only real draw back with this board is that there is no program flash memory for mass storage, and there are only 3 bits for the VGA output which means only 8 colours.
I have implemented System09 on this board and it only just fits. For US$99 it is not a bad buy. You can get a XC3S1000 version of the board from Digilent for US$149 if you need more logic.
3.4 Spartan 3E Starter Board
The Xilinx Spartan 3E starter board, also made by Digilent Inc uses a XC3S500E FPGA. It has a heap of features, such as Flash Memory, DDR SDRAM, LCD display, ADCs, DACs, RS232, VGA, Ethernet Phy and much more. It has a number of 6 pin headers for adding small 4 bit modules, as well as a Hirose 100 pin FX2 connector, which can be used for such things as the VDEC-1 Video digitizer.
The limitation of the Spartan 3E start board is that there is no SRAM, which means you need a DDR-SDRAM controller core to use it unless you are using EDK. There may be a DDR SDRAM controller in ISE somewhere, but I have not checked. Also, like the Spartan 3 starter board, the VGA connector only has 3 bits connected to it which means there are only 8 colours which limits it's use in displaying digitized images. There is a modification on Mike J's FPGA Arcade web site that uses some of the pins on the FX2 connector to extend the VGA colour range to 12 bits or 4096 colours by adding additional resistors. I can't say if this modification will still allow you to used the VDEC-1 or not.
This board was given to me as part of a project to validate my 6809 design. Rather than attempting to develop a DDR-SDRAM controller I simply used the internal Block RAM to implement 32KBytes of RAM and an 8KByte Program ROM. Getting DDR SDRAM board running on this board is in my list of things to do.
3.5 XESS XSA-3S1000 & XST-3.0
The XSA-3S1000 board from XESS, as the name implies, uses a XC3S1000, 1 million gate Spartan 3 chip. It has a 9 bit (512 colour) VGA output connector as well as a PS/2 keyboard or mouse connector. It has 32MBytes of SDRAM and 4MBits (?) of Flash. The Flash memory is bank selectable and doubles as a FPGA configuration and program code store.
XESS use a CPLD to act as a download controller which connects to the printer port of your computer. They have a rather clever method of downloading FPGA configuration, Flash Program Code, or SDRAM Code. You can also use the Xilinx Parallel IV pod too. Dave Vanden Bout now has a XSUSB module that allows the board to be programmed over USB. XESS offer SDRAM controller IP so that your applications can access the SDRAM.
The other good feature of this board is the large number of header pin outs. The board is actually designed to plug into the XST-3.0 carrier board, but can be used to interface to your own carrier if you so desire.
The XSA-3S1000 board was purchased so a group of internet friends could develop a PDP-8 project. The large number of uncommitted I/O pins made the board ideal to interface to switch banks and LED display panels as well as other PDP-8 bus devices.
3.5.1 IDE Compact Flash Interface.
The XST-3.0 board has an IDE interface for adding a Hard Disk drive. The 16 IDE data pins and IO read/write pins are also used for the ethernet controller and the two expansion slot connectors. I have used a Dual IDE to CF adapter card which I bought from Garth at Darkwire here in Australia. Garth sells a variety of CF, SATA and SD/MMC to IDE adapter cards, although I have only tried the CF card on the XST-3.0.
The IDE interface on the XST-3.0 and XSA-3S1000 does not have 5V protection so it is important that you power the IDE-CF card from 3.3V. I mounted terminals on the 3.3V supply of the XST-3.0 board and powered the CF card that way. The IDE-CF card uses a 3.5" floppy 4 pin power connector which I chopped off an old PC. The red lead is normally the +3.3V and black leads ground, but always check it yourself just to make sure. I bare not responsibility if you connect it the wrong way.
Garth's address at Darkwire is PO Box 477, Yarra Junction, Vic. 3797, Australia
3.6 Memec Design / Avnet V4FX12LC & P160 Analog
![]()
The Memec Design V4FX12LC board uses the Virtex 4 FX12 FPGA which includes a 200MHz Power PC 405 processor in addition to about 500K gates of programmable logic. This board was purchased for me by work with the idea of doing GPS receiver signal processing. It was bundled with EDK7.1 and BaseX ISE 7.1 as part of the XFest training course offered by Memec in Australia in 2005.
The board features 64MBytes of 16 bit DDR-SDRAM as well as flash memory, push buttons and an LCD display. The V4FX12LC board is really intended for use with EDK. Monta Vista provide a version of Linux for the ML302 (?) board which also runs on the V4FX12LC board. It is only a demo version, so you have to pay $s if you want to do any Linux development with it. Also Monta Vista Linux is designed to run with a soft-core Ethernet controller and does not use either of the two Ethernet controllers built into the V4FX12LC. I believe the Ethernet soft-cores are time limited unless you purchase them.
Memec were taken over by Avnet in 2005/6, but last time I saw, Avnet were still offering the P160 add on modules for this board. The Communications 3 module offers SRAM, VGA and PS/2 interfaces, ADCs and DACs as well as communications interfaces. The ADCs and DACs are only useful for audio frequencies however. There is also high speed data acquisition module for a few hundred dollars which work up into the 10s of Msps range.
You can buy a number of commercial cores such as Floating Point Units for the PPC405 for the Virtex 4 but they cost big bucks and are too expensive for non commercial use. There are FPUs on the open cores web site, but they are not designed to integrate with the APU of the PPC405 to the best of my knowledge. Webpack 8.1 and onwards does include Coregen that includes FPUs, FFTs and so on but I'm not sure however if these cores are designed to interface with the PPC405 on the Virtex 4.
It would like to use the V4FX12LC for a software radio:
http://members.optushome.com.au/vk3biz/gnuradio.html
4. FPGA Design Tools
4.1 Xilinx Web Pack ISE:
The Web Pack ISE design software is available free from Xilinx. It is in the order of 100 Megabytes or more so you need a fast cable or ADSL connection if you want to download it via the internet. Alternatively you might want to send off for a CD from Xilinx. Note that Web Pack 5.1i and onwards only works on Windows 2000 and Windows XP. You need to use the older 4.2 version if you are still using Windows 98. As of August 2004 Legacy versions of the Web Pack software where still available on the Xilinx web site.
I've zipped up the working directory produced by Web Pack ISE (Including the User Constraint File) and put them on the web for others to play with. The Xilinx WebPack ISE software is constantly being updated, so some of the project files on this web site may be out of date. WebPack ISE should update the project file, but if it is too old, then you may need to rebuild it for your version.
4.2 Altera Quartus:
Altera's Quartus software is another way to go. I don't have much experience with the Quartus tools although many internet friends have ported System09 to Altera Devices. The book "VHDL" By Douglas Perry which I bought as an introduction to VHDL was based on the Altera software. Altera were the first to make their software free I believe and Xilinx came to the party shortly after.
5. FPGA Projects:
5.1 System16 - My Initial VHDL CPU Project
System16 is only a paper design and is a combination of a 6809 design and a mini 68000, in terms of the number of registers, addressing mode terminology and bit operators. It was more an exercise in designing a 16 bit CPU for memory that did not have byte access. One of these days I might actually build it.
5.2 Memio.zip Memory I/O Tool
Memio is a state sequencer for examining and modifying RAM on the B3-Spartan2+ board. It was one of my first projects as you can probably tell. It was a matter of getting something up and running quickly that allowed me to check the functioning of the B3-SRAM. These days it is so easy to get a microprocessor running with a monitor program that this project is a bit redundant but I have kept the design here as a historic record of my work.
It was developed with the standard WebPackISE 4.2 VHDL tools so you should have no problems getting it to work on that system. It uses a highly hacked version of MiniUart by Ovidiu Lupas from www.opencores.org
Memio assumes you have the B3-FPGA-CPU-IO card connected to connector J3 and the B3-SRAM card connected to J6 and J9. The current clock divider for the UART assumes a 4.915254 MHz clock for 9600bps serial I/O, which gives a nice round division factor for the clock divider.
Commands for Memio are:
M <address> Examine memory location <space bar> <data> Write 16 bit hexadecimal value N Display Next memory location P Display Previous memory location For simplicity only the first 64Kwords of SRAM are used (128Kbytes). Address line A16 is grounded. Data words are 16 bits wide. Command keys and hexadecimal values must be all uppercase (although that could easily be changed). All input characters are echoed back out the UART. This is because I could not get Hyperterm to echo characters locally under windows98 SE.
5.3 Micro8 - A very simple microprocessor
Micro8 started off life as a minimal set 4 instruction computer by Tim Boscke designed to fit in a 32 Macrocell CPLD. Only the comments on the top of the listing and the file name remain the same :-) Tim's design is now available on the Opencores web site as the MCPU (Minimal CPU) project. http://www.opencores.org/projects.cgi/web/mcpu/overview The whole MCPU design fits in a single page. My design is not so compact.
I've added to Tim's design considerably and it runs on the B3-Spartan2+ board. Note that although I have included the B3-SRAM in the I/O pin-outs, it does not use the SRAM to print the message. The VHDL code should run quite happily without the B3-SRAM module. I put the I/O interface module on connector J3 of the B3-Spartan2+ board, but its probably better suited to J8.
Tim's computer had only ADD, NOR , STA and JCC instructions and could only address 64 bytes of memory. It had a single carry bit which was set by the JCC (Jump on Carry Clear) instruction. Most basic microprocessor instructions can be built up using these four basic instructions.
In my Micro8 design I have added an 8 bit index register and four addressing modes, Immediate, Absolute, Indexed and PC Relative and I've extended the addressing range from 64 bytes to 2K bytes. The top five bits of the opcode byte determine the operation and addressing mode. the bottom 3 bits of the opcode form the high bits of the address argument. I've also added a Zero (Z) Flag and a Negative (N) flag and corresponding conditional branches that do not change the condition codes.
5.4 Micro8a - Adding a Stack
In my Micro8A I have added a 7 bit stack pointer at $0FF that works down to $080. I've added subroutine calls, Push and Pull registers and interrupts as well as some inherent single byte instructions to operate on the accumulator and index register.5.5 Micro16 - Very Basic 16 bit machine
Micro16 has 8 instructions and two addressing modes: Direct and Indirect. Direct addressing can address 4K Words of Data or Program space while indirect addressing can address 64K Words of data space. The instruction word is 16 bits wide, with 3 bits used for the instruction, 1 bit used for the addressing mode and 12 bits used to form the Direct address. It has an 8 level hardware stack and one interrupt input. It was intended as a substitute for a compact flash state machine. So far I have not managed to get it to work with the Compact Flash, which is a bit unfortunate given how simple it is. I think the problem may have something to do with the speed at which it accesses Compact Flash.5.6 Micro16 - Processing Array
The idea is to implement an array of Micro16 computing elements with shared block RAM memory.
5.7 Motorola 8 bit CPUs
I have coded some of the Motorola CPUs, namely the MC6800 and MC6801, MC6805, MC6809 and MC68HC11. These are works in progress and I have kept a record of their development on their respective web pages.
I originally attempted to use the 6809 VHDL design by Flint Weller as a starting point to learn VHDL, but it was a bit too ambitious and for people starting out, I'd recommend something simpler like the Micro8. You can find Flint's VHDL core on the Flex User Group page under "File Exchange" however it needs a lot of work.
It was the ambition of one of the Flex User Group members to design a FPGA based Flex system. FLEX is an old disk operating system for the 6800 and 6809 from the days when computers only had a maximum of 64KBytes of memory. I took up the challenge and started off designing the Micro8, System05 (a 6805 which I still have not completed), System68 (a 6800), System11 (a 68HC11 which is still not finished) and eventually System09 which is a 6809 System On a Chip which emulates the SWTPc hardware.The "System" name was intended to indicate that these designs were complete Systems On a Chip and include peripherals such as ACIA, VDU, PS/2 Keyboard, Dynamic Address Translation, Timers, Parallel I/O etc. as well as the CPU cores.
A number of people are using System68 and System09 CPU cores as the basis of pinball and arcade games. See the resources links below for more details.
I have managed to get Flex9 running on System09. Flex2 is also available for the 6800, however I have not attempted to implement that yet. The Flex Users Group has collected most of the old FLEX Software and SWTPc documentation and have archived it. Much of the Flex software was obtained from that archive. If you have any old Flex software, I'm sure the Flex user Group would be interested to hear about it.
5.8 System01 - 6801 - Working (Incomplete I/O)
5.9 System68 - 6800 - Working
5.10 System05 - 6805 - Work in Progress
5.11 System11 - 68HC11 - Partly Working
5.12 System09 - 6809 SOC - Runs Flex9 with VDU and PS/2 keyboard
System09 has been ported to the following Xilinx FPGA development boards:
- Burch ED B3-Spartan2+
- Burch ED B5-X300
- Digilent Spartan 3 starter board
- Digilent Spartan 3E starter board
- XESS XSA-3S1000 and XST-3.0 carrier board
5.13 System6801 - Wishbone Compliant 6801 for Altera by Michael Hasenfratz
Michael Hasenfratz has taken my System01 core and has made it wishbone compliant. He is also looking to add the 6801 peripherals at location $0000 to $001F. The project is being hosted on the OpenCores web site. He has ported it to an Altera Device. Michael also has a number of relocating macro assemblers for the 68xx family. They are located at:
ftp://ftp.tothe.net/pubs/shareware/
6. VHDL & Verilog IP Resource Links:
http://www.opencores.org Open Cores Repository.
The Open Cores web site is the main web site for open source FPGA cores.
http://www.fpgacpu.org Jan Gray's Risc CPU Web Site
Jan Gray has a XR16 RISC CPU , GR000 RISC CPU and XSOC (System on a Chip). He also runs the FPGA CPU mailing list.
http://www.fpga-faq.com/ Philip Freidin's FPGA FAQ (Fliptronics).
The FPGA Frequently Asked Questions web site.
http://tech.groups.yahoo.com/group/FPGA_CV/ FPGA Computer Vision
A list I set up to discuss the use of FPGAs for Computer Vision applications
http://groups.yahoo.com/group/CoCo3FPGA/ Gary Becker's CoCo3 on a FPGA Yahoo Group
Gary Becker is using CPU09 in his CoCo3 (Tandy Colour Computer 3) on an FPGA.
http://www.edcheung.com/album/album07/Pinball/wpc_sound.htm Edward Cheung's Williams Pinball Controller page
Edward is using CPU09 core with a Digilent Spartan 3A board to implement a Williams Pinball Controller.
http://members.iinet.net.au/~msmcdoug/ Mark's Perpetually WIP Home page
Mark McDougall's Vic20, ZX81, TRS80 and Arcade game web page.
http://pacedev.net/ Programmable Arcade Circuit Emulation.
Forum for FPGA arcade game developers.
http://www.fpgaarcade.com Mike J's FPGA Arcade.
Mike Johnson's complete PACMAN, Space Invaders, and Galaxians in FPGA !
http://www.itee.uq.edu.au/~jwilliams/mblaze-uclinux/ John Williams MicroBlaze uCLinux Web Site.
John Williams is a Professor at the School of Information Technology and Electrical Engineering at the University of Queensland. He runs quite an active mailing list for implementing uCLinux on the Xilinx MicroBlaze soft-core processor.
http://www.c-to-verilog.com/ C to Verilog - Automating Circuit Design
C-to-Verilog is a free service for circuit designers.
http://www.birdcomputer.ca/ Robert Finch's Bird Computer - FPGA Cores
Robert has a variety of CPU, video, audio, timekeeping and keyboard projects for download on his web site.
http://www.ht-lab.com/freecores/cpu8086/cpu86.html
CPU86 8088 Free FPGA IP Core
HT-LAB FPGA / VHDL / SystemC / Embedded
Various FPGA projects for the hobbyist. Includes information for connecting devices such as LCD Displays and R/C Servos to FPGAs.
http://mirrow.com/FPGApple/ Interfacing Compact Flash to the Spartan 3 Starter Board
Alex has used a Spartan 3 starter board to implement an Apple II. He has used a Digilent Test Point Header board to connect an IDE CF adapter.
http://www.retromicro.com Doug Hodson's Web Page
Doug has implemented a few projects using the XESS XSA100 FPGA Board. Doug's project page has some examples of VGA video generators. The XSA is quite a nice little board with Flash memory and Dynamic RAM, although the XSA100 uses a smaller FPGA and access to static RAM conflicts with some of the I/O pins. The XSA100 uses a XC2S100 FPGA and can be purchased with the XStend prototyping motherboard. For more details check out http://www.xess.com . They have all the manuals on their web site. The XESS documentation is quite good.
http://www.madscientistroom.org/fpga/ Randy Thelen's Mad Scientist Room.
Randy Thelen has a good User Constraint File generator amongst his FPGA bits and pieces.
http://www.cs.ucr.edu/~dalton/i8051/
The Dalton Project at the University of California Computer Science Dept in Riversdale have an Intel 8051 core. There is a synopsis model as well as C++ simulator for the 8051.
http://www.dte.eis.uva.es/OpenProjects/OpenDSP/index.htm
The Department of Electronic Technology at the University of Valladolid in Spain have an Open DSP design which can be found on their web site.
http://tech-www.informatik.uni-hamburg.de/vhdl/vhdl.html
University of Hamburg VHDL Page. Assorted VHDL tools and microprocessor cores.
http://www.opencores.org/people.cgi/info/jesus
Daniel Wallner's Soft Cores Web site is now on Open Cores with five synthesizable microprocessor cores: PPX16 (PIC16C55, PIC16F84), T80 (Z80), T51 (8051), T65 (6502) and AX8 (90S1200, 90S2313).
K Ring Technologies Semiconductor Indi16 16n bit Forth CPU. Designed for Altera Quartus II software.
http://www.gmvhdl.com/downloads.html
Green Mountains Computing Systems have a MC68HC11 VHDL core as well as VHDL tools and simulators. I tried compiling this core under the Xilinx ISE 4.1 Webpack software and it used 200% of the XC2S200 resource, so it is not an efficient design. Later versions of Xilinx ISE Webpack may be more efficient.
http://www.mcmanis.com/chuck/robotics/fpga/index.html
Chuck McManis has put up a web site with a list of his projects for the B3-SPARTAN2+ board.
http://zxgate.sourceforge.net/
For some fun, projects on the net, using Z80 cpus implemented completely in the FPGA. Daniel Wallner's computers using FPGA T80 cores .
Home