MIPS (originally an acronym for Microprocessor without Interlocked Pipeline Stages) is a RISC instruction set (ISA) developed by MIPS Technologies. The early MIPS architectures were 32-bit, with 64-bit versions added later. Multiple revisions of the MIPS instruction set exist, including MIPS I, MIPS II, MIPS III, MIPS IV, MIPS V, MIPS32, and MIPS64.
The R4000 is a microprocessor developed by MIPS Computer Systems that implemented the MIPS III instruction set architecture (ISA). Officially announced on 1 October 1991, it was one of the first 64-bit microprocessors and the first MIPS III implementation. In the early 1990s, when RISC microprocessors were expected to replace CISC microprocessors such as the Intel i486, the R4000 was selected to be the microprocessor of the Advanced Computing Environment (ACE), an industry standard that intended to define a common RISC platform. ACE ultimately failed for a number of reasons, but the R4000 found success in the workstation and server markets.
IDT Orion 79R4700-100G (100 MHz)
The R5000 is a microprocessor that implements the MIPS IV instruction set architecture (ISA) developed by QED. The project was funded by MIPS Technologies, Inc (MTI), also the licensor. MTI then licensed the design to Integrated Device Technology (IDT), NEC, NKK, and Toshiba. The R5000 succeeded the QED R4600 and R4700 as their flagship high-end embedded microprocessor. IDT marketed its version of the R5000 as the 79RV5000, NEC as VR5000, NKK as the NR5000, and Toshiba as the TX5000. The R5000 was sold to PMC-Sierra when the company acquired QED. Derivatives of the R5000 are still in production today for embedded systems.
NEC D30500RJ-180 (180 MHz)
Fun with MIPS Assembly: CORDIC Algorithm
I'm here to share my approach of implementing the CORDIC algorithm in the two-dimensional rotation mode using MIPS assembly language, utilizing floating point operations. The rotation mode of CORDIC yields capability of calculating sine, cosine and tan/cot. CORDIC in general is used in modern calculators and devices to acquire accurate values of transcendental functions (trigonometric functions such as sin, cos and exponential, as well as logarithm functions) efficiently.
The assembly code was written on the MARS MIPS simulator. I did not optimize the code for maximum performance yet. The assembled code never ran on a real world MIPS architecture based computer.
CORDIC: 2D Rotation Mode Function
CORDIC as function in rotation mode:
double cordic (double angle, int iterations, int type)
double $f0 (double $f12, int $a0, int $a1)
Requires 3 transfer parameters:
- double angle: Desired angle, floating point value in radiants between -π/2 to π/2
- int iterations: Integer value between 0 and 30. A higher value yields higher accuracy but requires more instructions
- int type: Desired function type. Integer value between 0 and 3. 0 = sine, 1 = cosine, 2 = tangent, 3 = cotangent
Returns 1 parameter:
- double: Function value return of cordic(angle)
The CORDIC Grapher
The CORDIC Grapher. Utilizes the built in bitmap display (512 x 256 pixels) of MARS to plot/draw trigonometric functions from -π/2 to π/2.
The main function calls the plot procedure to plot sine, cosine, tangent and cotangent subsequently.
The CORDIC Grapher as an Exercise on MIPS Assembly Language (German)
Removes the floating point register and instruction dependency of the plot procedure.
MIPS Assembler-Übung: Der CORDIC Algorithmus.
Der erste Teil dieser Übung trainiert den Umgang mit der Load-Store-Architektur (Adressierung) des MIPS-Mikroprozessors im Zusammenhang mit einem mehrdimensionalen Feld (Array). Fortgesetzt durch einen anspruchsvolleren Teil, in dem die Prozedur plot implementiert werden soll, wird es wichtig sein, den Überblick über verwendete Register zu behalten und richtig mit der Registerverwaltung (MIPS Calling Convention) umzugehen. Mögliche Herausforderungen entstehen durch zwingend erforderliche Unterprogrammaufrufe. Abgerundet wird die Übung durch zwei kleinere Teilaufgaben, die vor allem durch Verzweigungen und Sprünge zu lösen sind. Hierbei wird erneut und noch einmal durchdachte Strukturierung und Gliederung des Programmcodes essentiell für einen effizienten Programmfluss.
RETURN TO NON X86
RETURN TO THE MAIN MUSEUM PAGE