MIPS CPU Design Using Verilog and Instruction Set Architecture Overview
Explore the world of MIPS CPU design using Verilog with a deep dive into Instruction Set Architecture (ISA), SPIM instruction formats, addressing modes, and more. Learn about the key components such as Program Counter (PC), Instruction Memory (IM), Register Files (RF), Arithmetic Logic Unit (ALU), Data Memory (DM), and the 5-stage pipeline design. Delve into the famous microprocessors in the CISC and RISC categories, understand the MIPS register files and instruction formats, and get insights into pseudo instructions in assemblers. Discover the MIPS instruction set with examples of add, subtract, multiply, divide, and more.
Download Presentation
![](/assets/img/so-down.gif)
Please find below an Image/Link to download the presentation.
The content on the website is provided AS IS for your information and personal use only. It may not be sold, licensed, or shared on other websites without obtaining consent from the author. Download presentation by click this link. If you encounter any issues during the download, it is possible that the publisher has removed the file from their server.
E N D
Presentation Transcript
MIPS CPU Design using Verilog Tsung-Chu Huang Dept. of Electronics Eng., National Changhua University of Education, Taiwan 2023/1/5
Outline Introduction to MIPS32: ISA & SPIM Instruction Formats Addressing Modes Instruction Set Architecture and Assembly Language Compiled by SPIM Single-Stage MIPS Design Program Counter (PC) Instruction Memory (IM) Register Files (RF) Arithmetic Logic Unit (ALU) Data Memory (DM) 5-Stage Pipeline MIPS Design Basic Pipeline Design by Spatial Gate-Level Design Explanation for Term Project 2
Introduction to MIPS Famous Microprocessors CISC: 4004: 71 Intel. First CPU 8008 8080 80x86 (applied in PC) 6502 (#T) : Motorola (applied in Apple II) 68000 68030 (applied in Sun Workstations) RISC: MIPS (Mega Inst. per Sec): 81, Prof. Hennessy, Stanford U. 92 MIPS Co. 18 Wave Comp. ARM (Advanced RISC Machine): 83 Acorn Co. 90 ARM Co. 16 SoftBank RISC-V: 10 UCB Open Project 15 Foundation MIPS MIPS Co. converted to develop RISC-V, but MIPS is still popular in CPU Design course/lecture due to its concise pipeline stages. 32 32-bit Registers: argument: $a0~$a7 = $0~$7 save: $s0~$s7 = $8~$15 temp: $t0~$t9 = $16~$23 value: $v0~$v7 = $24~$31 (returned value) $28=$gp (global pointer), $29=$sp (stack pointer), $30=$fp (frame pointer), $31=$ra (return address) 4GB Mem, 32-bit Word, 30-bit absolute address (therefore, only 2-bit J), State Control 3
Instruction Formats Shift Amount Destination Source Target 4
MIPS Register Files (RF) 32 Registers Description Register Number Register Name $zero $v0 - $v1 $a0 - $a3 $t0 - $t9 $s0 - $s7 $ra 0 The value 0 (values) from expression evaluation and function results (arguments) First four parameters for subroutine Temporary variables Saved values representing final computed results Return address 2-3 4-7 8-15, 24-25 16-23 31 Pseudo Instructions in Assemblers Directive .word .half .byte .ascii str Result Store n 32-bit values in successive memory words Store n 16-bit values in successive memory words Store n 8-bit values in successive memory words Store the ASCII string str in memory. Strings are in double-quotes, i.e. "Computer Science" Store the ASCII string str in memory and null-terminate it Strings are in double-quotes, i.e. "Computer Science" Leave an empty n-byte region of memory for later use Align the next datum on a 2^n byte boundary. For example, .align 2 aligns the next value on a word boundary w1, h1, b1, ..., ..., ..., wn hn bn .asciiz str .space n .align n 5
MIPS Instruction Set Instruction add subtract add immediate add unsigned subtract unsigned add immediate unsigned Multiply (without overflow) Multiply Divide Example add $1,$2,$3 sub $1,$2,$3 addi $1,$2,100 addu $1,$2,$3 subu $1,$2,$3 addiu $1,$2,100 mul $1,$2,$3 mult $2,$3 div $2,$3 Meaning $1=$2+$3 $1=$2-$3 $1=$2+100 $1=$2+$3 $1=$2-$3 $1=$2+100 $1=$2*$3 $hi,$low=$2*$3 $hi,$low=$2/$3 Arithmetic Logical Instruction and or and immediate or immediate shift left logical shift right logical Example and $1,$2,$3 or $1,$2,$3 andi $1,$2,100 or $1,$2,100 sll $1,$2,10 srl $1,$2,10 Meaning $1=$2&$3 $1=$2|$3 $1=$2&100 $1=$2|100 $1=$2<<10 $1=$2>>10 6
MIPS Instruction Set Data Transfer Instruction load word Example lw $1,100($2) sw $1,100($2) lui $1,100 la $1,label li $1,100 mfhi $2 mflo $2 move $1, $2 Meaning $1=Memory[$2+100] Memory[$2+100]=$1 $1=100x2^16 $1=Address of label $1=100 $2=hi $2=lo $1=$2 store word load upper immediate load address load immediate move from hi move from lo move Conditional Branch Instruction branch on equal branch on not equal branch on greater than branch on greater than or equal branch on less than branch on less than or equal Example beq $1,$2,100 bne $1,$2,100 bgt $1,$2,100 bge $1,$2,100 blt $1,$2,100 ble $1,$2,100 Meaning if($1==$2) go to PC+4+100 if($1!=$2) go to PC+4+100 if($1>$2) go to PC+4+100 if($1>=$2) go to PC+4+100 if($1<$2) go to PC+4+100 if($1<=$2) go to PC+4+100 7
MIPS Instruction Set Comparison Instruction set on less than set on less than immediate Example slt $1,$2,$3 slti $1,$2,100 Meaning if($2<$3)$1=1; else $1=0 if($2<100)$1=1; else $1=0 Jump Instruction jump jump register jump and link Example j 1000 jr $1 jal 1000 Meaning go to address 1000 go to address stored in $1 $ra=PC+4; go to address 1000 8
System Calls in SPIM Code (in $v0) Service Operation Arguments Results Print integer number (32 bit) Print floating-point number (32 bit) Print floating-point number (64 bit) 1 2 3 None None None print_int print_float print_double $a0 = integer to be printed $f12 = float to be printed $f12 = double to be printed Print null-terminated character string 4 None print_string $a0 = address of string in memory None Read integer number from user 5 read_int Integer returned in $v0 Float returned in $f0 Double returned in $f0 None Read floating-point number from user 6 None read_float 7 None read_double Read double floating-point number from user 8 read_string Works the same as Standard C Library fgets() function. $a0 = memory address of string input buffer $a1 = length of string buffer (n) $a0 = amount 9 address in $v0 sbrk Returns the address to a block of memory containing n additional bytes. (Useful for dynamic memory allocation) Stop program from running Print character Read character from user Stops program from running and returns an integer 10 11 12 17 None $a0 = character to be printed None $a0 = result (integer number) None None Char returned in $v0 None exit print_char read_char exit2 9
SPIM Assembler of MIPS Install QtSPIM from Cloud/Lab16, or + glibc for MIPS > File > Load > Hello.asm 10
Modular (Gate-Level) Design Program Counter (PC) Instruction Memory (IM) Register Files (RF) Sign Extension Unit (SE) Arithmetic Logical Unit (ALU) Data Memory (DM) 11
Program Counter 1 0 + + branch <<< 2 4 PC 12
Instruction Memory (IM) 32 32 IM Address Instruction 13
Register Files (RF) 32 5 Read Data1 Read Reg1 5 32 Read Reg2 Read Data2 RF 5 Write Reg 32 Write Data 14
Sign Extension ? 0 0 16-bit branch x 4 = 32-bit offset address 15
ALU ALUop shamt 4 5 32 scr1 Zero 32 ALU ALU_result 32 scr2 16
Data Memory (DM) 32 Address 32 32 DM Write Data Read Data R/W 17
Controller CU 18
Single-Stage Generic MIPS32 1 0 + ? + 4 ALU DM RF IM PC Write Clk CU 19
5-Stages Pipeline MIPS IF (Instr. Fetch) ID (Instr. Decoder) EX (Execution) MEM (Memory) WB (Write Back) 1 0 + + ? 4 ALU 1 DM RF IM PC 0 M_WB ID_EX EX_M IF_ID 20
R-type Instructions with no confliction with others IF (Instr. Fetch) ID (Instr. Decoder) EX (Execution) MEM (Memory) WB (Write Back) 1 0 + + ? 4 ALU 1 DM RF IM PC 0 M_WB ID_EX EX_M IF_ID 21
lw (Load Word) IF (Instr. Fetch) ID (Instr. Decoder) EX (Execution) MEM (Memory) WB (Write Back) 1 0 + + ? 4 ALU 1 DM RF IM PC 0 M_WB ID_EX EX_M IF_ID 22
sw (Store Word) IF (Instr. Fetch) ID (Instr. Decoder) EX (Execution) MEM (Memory) WB (Write Back) 1 0 + + ? 4 ALU 1 DM RF IM PC 0 M_WB ID_EX EX_M IF_ID 23
Branch Instructions IF (Instr. Fetch) ID (Instr. Decoder) EX (Execution) MEM (Memory) WB (Write Back) 1 0 + + ? 4 ALU 1 DM RF IM PC 0 M_WB ID_EX EX_M IF_ID 24
Time-Space Diagram Time 0 1 0 1 0 1 0 1 0 1 C P C P C P C P C P i1 i2 i5 i3 i4 +4 +4 +4 +4 +4 M M M M M I I I I I i1 i3 2 2 2 2 2 i2 i4 RF RF RF RF RF i2 i1 ALU ALU ALU ALU ALU i3 + + + + + i2 i1 M M M M M D D D D D 0 1 0 1 0 1 0 1 0 1 i1 Space (Simple MIPS without consideration of hazards stall forwarding) 25
RR-WR Read-Write (Forward) Dependency OK Time 0 1 0 1 0 1 0 1 0 1 C P C P C P C P C P RR WR i5 i3 i4 +4 +4 +4 +4 +4 M M M M M I I I I I RR i3 2 2 2 2 2 WR i4 RF RF RF RF RF WR RR ALU ALU ALU ALU ALU i3 + + + + + WR RR M M M M M D D D D D 0 1 0 1 0 1 0 1 0 1 RR Space (Simple MIPS without consideration of hazards stall forwarding) 26
WR-RR Write-Read (Backward) Dependency STALL Time Read an old value 0 1 0 1 0 1 0 1 0 1 C P C P C P C P C P WR RR i5 i3 i4 +4 +4 +4 +4 +4 M M M M M I I I I I WR i3 2 2 2 2 2 RR i4 RF RF RF RF RF RR WR ALU ALU ALU ALU ALU i3 + + + + + RR M M M M M D D D D D 0 1 0 1 0 1 0 1 0 1 WR Space (Simple MIPS without consideration of hazards stall forwarding) 27
Exercise & Lab16 1. (Install gcc with MIPS library march=mips2) 2. (Write a program using C and compile to MIPS Assembly) 3. Install SPIM 4. Write an Assembly program (eg. Fibonacci.s ) using SPIM 5. Simulation in SPIM and prepare source codes and golden data. 6. Design a partial MIPS CPU using Verilog 7. Write a testbench (testfixture) for Golden Test 8. Simulation using ModelSim 9. (Modified several instructions for I/O in DE0/Cyclone III) 10.(Demo reduced MIPS using DE0/Cyclone III FPGA) 28
Term Project Based on Lab16, demo and explain your MIPS by any of the following efforts: 1. Adding one or two instructions from a full MIPS and execute an assembly program with the additional instructions. 2. Install glibc/gcc and compile a C program to MIPS assembly code and then simulate them and explain. Hints: 1. Windows > cmd DOS > powershell PS > SWL --install PS > SWL SWL > sudo apt install gcc-mips-linux-gnu g++-mips-linux-gnu SWL > gcc-mips-linux-gnu -O3 -S -mfp32 -march=R2000 hello.c 2. Using Compiler Explorer at https://godbolt.org/ 3. Adding I/O and demo on the DE0/Cyclone III. 4. EDA scripts for connecting the SPIM to MIPS Simulations 5. Any improvement that you deserve a bonus. 29