|
Plasma - most MIPS I(TM) opcodes: Overview
Description
The Plasma CPU is a small synthesizable 32-bit RISC microprocessor. It is currently running a live web server with an interrupt controller, UART, SRAM or DDR SDRAM controller, and Ethernet controller. The Plasma CPU executes all MIPS I(TM) user mode instructions except unaligned load and store operations (see "Avoiding Limitations" below). This "clean room" CPU core is implemented in VHDL with either a two or three-stage pipeline. It is running at 25 MHz on a Xilinx FPGA and also verified on an Altera FPGA.
Disclaimer
MIPS(R) is a registered trademark and MIPS I(TM) is a trademark of MIPS Technologies, Inc. in the United States and other countries. MIPS Technologies, Inc. does not endorse and is not associated with this project. OpenCores and Steve Rhoads are not affiliated in any way with MIPS Technologies, Inc.
Success Stories
The Plasma CPU along with the Plasma RTOS and TCP/IP protocol stack are now running a live Web Server on a Xilinx FPGA.
The Plasma RISC CPU was also successfully used to control four communication robots using Xilinx Virtex FPGAs.

Block diagram

Example Instruction
The CPU is implemented with a two or three stage pipeline with an additional optional stage for memory read and writes. (Using the three stage pipeline enables "pipeline.vhd" which delays some control signals into the next stage.) An ADD instruction would take the following steps:
Stage #0:
1. The "pc_next" entity passes the program counter (PC) to the "mem_ctrl" entity which fetches the opcode from memory.
Stage #1:
2. The memory returns the opcode.
Stage #2:
3. "Mem_ctrl" passes the opcode to the "control" entity.
4. "Control" converts the 32-bit opcode to a 60-bit VLWI opcode and sends control signals to the other entities.
5. Based on the rs_index and rt_index control signals, "reg_bank" sends the 32-bit reg_source and reg_target to "bus_mux".
6. Based on the a_source and b_source control signals, "bus_mux" multiplexes reg_source onto a_bus and reg_target onto b_bus.
Stage #3 (part of stage #2 if using two stage pipeline):
7. Based on the alu_func control signals, "alu" adds the values from a_bus and b_bus and places the result on c_bus.
8. Based on the c_source control signals, "bus_mux" multiplexes c_bus onto reg_dest.
9. Based on the rd_index control signal, "reg_bank" saves reg_dest into the correct register.
Stage #4 (part of stage #3 if using two stage pipeline):
10. Read or write memory if needed.
Plasma Version 3 Features
The Plasma Version 3 core now contains a bidirectional serial port, interrupt controller, and hardware timer. Version 3.5 added a DDR SDRAM controller, Ethernet MAC, and Flash interface. There is C and assembly code for the Plasma Real-Time Operating System -- a fully preemptive RTOS supporting threads, semaphores, mutexes, message queues, timers, heaps, an interrupt manager, ANSI C library, single precision floating point library, TCP/IP protocol stack, and Web server.
Synthesis
The CPU core was synthesized for several different FPGAs:
- Xilinx Spartan-3E Starter Kit Board with a XC3S500 used 2021 of 4656 slices (43 percent). Image includes DDR and Ethernet controllers.
- Removing the multiplication unit reduces the size by 558 slices.
- Xilinx Spartan-3 Starter Kit Board with an Xilinx XC3S200 Spartan-3 FPGA.
- Altera EP20K200EFC484-2X FPGA.
Supporting Documentation
Build Instructions:
The implementation is based on information found in: - "MIPS RISC Architecture" by Gerry Kane and Joe Heinrich
- "The Designer's Guide to VHDL" by Peter J. Ashenden
The MIPS I(TM) instruction set can be found by:- Go to the MIPS Technologies, Inc. Web site http://www.mips.com/.
- Under the Products menu, click on Resource Library.
- Click on Product Materials in the submenu on the left.
- Click on MIPS Architecture from the next menu on the left.
- Finally, click on the link for "MIPS32® Architecture for Programmers Volume II: The MIPS32® Instruction Set (.pdf)".
Tools
The MIPS(tm) GCC ELF compiler for Windows (2.4MB) gccmips_elf.zip. If you use Windows and don't have a Microsoft C compiler for Windows, you will need pre-compiled versions of the tools which should be placed in the tools directory. You may also need a Windows version of gmake.
List of Files
Downloads
The Opencores CVSGet web page can create the 125KB mlite.tar.gz file containing all the latest code. It will ask for your name and contact information. Be sure to save the file as "mlite.tar.gz". The latest version of code can also be acquired from the CVS server cvs.opencores.org from the mlite directory.
Big/Little Endian
The CPU core operates in Big Endian mode by default. To operate in Little Endian mode, change "little_endian" from "00" to "11" in the file mem_ctrl.vhd.
Bus Interface
All signals are active high. Here are the signals for writing a character to address 0xffff when using a two stage pipeline:
entity mlite_cpu is port(clk : in std_logic; reset_in : in std_logic; intr_in : in std_logic;
address_next : out std_logic_vector(31 downto 2); --for synch ram byte_we_next : out std_logic_vector(3 downto 0);
address : out std_logic_vector(31 downto 2); byte_we : out std_logic_vector(3 downto 0); data_w : out std_logic_vector(31 downto 0); data_r : in std_logic_vector(31 downto 0); mem_pause : in std_logic); end; --entity mlite_cpu
Program: addr value opcode ============================= 3c: 00000000 nop 40: 34040041 li $a0,0x41 44: 3405ffff li $a1,0xffff 48: a0a40000 sb $a0,0($a1) 4c: 00000000 nop 50: 00000000 nop
intr_in mem_pause reset_in byte_we Stages ns address data_w data_r 40 44 48 4c 50 3600 0 0 00000040 00000000 34040041 0 0 1 3700 0 0 00000044 00000000 3405FFFF 0 0 2 1 3800 0 0 00000048 00000000 A0A40000 0 0 2 1 3900 0 0 0000004C 41414141 00000000 0 0 2 1 4000 0 0 0000FFFC 41414141 XXXXXX41 1 0 3 2 4100 0 0 00000050 00000000 00000000 0 0 1
Avoiding Limitations
This section describes how to avoid the two main limitations of the Plasma CPU core. The first limitation is that unaligned load and store operations are not supported since they were patented. This means that when loading or storing 32-bit values the memory address must be on a 32-bit aligned address. [The patent for the unaligned memory access instructions expired Dec 23, 2006.] Most RISC CPUs have limited support for unaligned memory accesses. The GCC MIPS compiler does not normally generate unaligned memory accesses. Try compiling a C program and then look in the listing file if any of these MIPS instructions are used: LWL, LWR, SWL, or SWR. The second main limitation of the Plasma CPU is that exceptions (BREAK and SYSCALL opcodes) must not be placed immediately after a branch instruction (in the branch delay slot). The main uses for exceptions are software interrupts for debugger support and calling operating system calls.
Question and Answer
Q&A
Status
- All MIPS I(TM) instructions are implemented and tested (except the unsupported previously patented unaligned load and store opcodes).
- Currently running on an Altera EP20K200EFC484-2X FPGA and a Xilinx XC3S200 FPGA.
- Also running on a Xilinx Spartan-3E starter kit with DDR SDRAM, Ethernet MAC, and Flash Controller.
- See "opcodes.asm" for regression test.
- Supports Interrupts.
- Includes several C test programs: Calculating PI; Prime Numbers; Showing Numbers Using Words; the Plasma RTOS; and single precision floating point library.
Legal Notice
MIPS(R) is a registered trademark and MIPS I(TM) is a trademark of MIPS Technologies, Inc. in the United States and other countries. MIPS Technologies, Inc. does not endorse and is not associated with this project. OpenCores and Steve Rhoads are not affiliated in any way with MIPS Technologies, Inc. Free for commercial and non-commercial use as long as the author and warning notices are maintained. This software is provided by Steve Rhoads "as is" and any express or implied warranties, including, but not limited to, the implied warranties of merchantability and fitness for a particular purpose are disclaimed. In no event shall the author or contributors be liable for any direct, indirect, incidental, special, exemplary, or consequential damages (including, but not limited to, procurement of substitute goods or services; loss of use, data, or profits; or business interruption) however caused and on any theory of liability, whether in contract, strict liability, or tort (including negligence or otherwise) arising in any way out of the use of this software, even if advised of the possibility of such damage.
|