Final project design Simple CPU
NCKU EE CAD ASIC Lab 2 Jou, Jer Min, NCKU Instr. Memory i_datai_addr 32 PC operation Data Memory Register The basic flow for CPU 做資料的存取
NCKU EE CAD ASIC Lab 3 Jou, Jer Min, NCKU Instr. Memory i_datai_addr clk Data Memory d_dataout d_datain d_addr clk d_rw 32 When d_rw = 0 : read : d_dataout <= Mem[d_addr] When d_rw = 1 : write : Mem[d_addr]<=d_datain Always i_data <= Mem[i_addr] The Memory modules
NCKU EE CAD ASIC Lab 4 Jou, Jer Min, NCKU The hierarchy of our design i_addri_data Instruction Memory d_rwd_addr Data Memory d_dataind_dataout pcinstdmem_rw d_addr d_dataind_dataout FINAL 32 1 Design this block
NCKU EE CAD ASIC Lab 5 Jou, Jer Min, NCKU MIPS 指令格式
NCKU EE CAD ASIC Lab 6 Jou, Jer Min, NCKU Instruction Set Architecture (1/3)
NCKU EE CAD ASIC Lab 7 Jou, Jer Min, NCKU Instruction Set Architecture (2/3)
NCKU EE CAD ASIC Lab 8 Jou, Jer Min, NCKU Instruction Set Architecture (3/3) 類別指令例子意義說明 JJJ 25go to 25 無條件跳躍:跳到目的位址 JJALJAL 25go to 25 $ra = PC+1 無條件跳躍:用在程序呼叫 ,儲存返回位址 PC :: addr Instr. Memory 32 bits Instr. 0 Instr. 1 Instr. 2 Instr. 3 PC = PC + 1 $ra = return address 這裡我們令 $R31 當 $ra 來使用
NCKU EE CAD ASIC Lab 9 Jou, Jer Min, NCKU MIPS 運算碼 格式指令 OpcodeFunction code RSLL6’b RSRL6’b ’b RSRA6’b ’b RJR6’b ’b RADD6’b ’b RSUB6’b ’b RAND6’b ’b ROR6’b ’b RXOR6’b ’b RSLT6’b ’b 格式指令 Opcode IBEQ6’b IBNE6’b IADDI6’b ISUBI6’b ISLTI6’b IANDI6’b IORI6’b ILW6’b ISW6’b JJ6’b JJAL6’b000011
NCKU EE CAD ASIC Lab 10 Jou, Jer Min, NCKU 繳交資料 繳交日期: 6/30 p.m. 12:00 以前 繳交資料: 一份書面報告 (word 檔 ) 簡易說明程式內容及執行結果。 組員工作分配。 程式檔案 Verilog 檔 檔名請命名成 ”groupXX.v”, XX 是組別號碼。 Top module 請命名成 FINAL 。 繳交方式: 與繳交 lab 作業方式相同,上傳至 ftp 其他: 若有 CPU 規格或上傳作業之問題,可寄信或到實驗室找助教
NCKU EE CAD ASIC Lab 11 Jou, Jer Min, NCKU 1 addi $r1,$r0,32---r1=r0+32 2 subi $r2,$r1,5----r2=r1-5 3 slti $r3,$r0,32---()r3=1 4 lw $r4,1($r0)-----r4=DMEM[1+0] 5 sw $r1,0($r0)-----DMEM[0+0]=r1 6 add $r5,$r1,$r2---r5=r1+r2 7 slt $r6,$r0,$r1---r6=1 8 sll $r7,$r1,1-----r7=r1<<1 9 j pc=52 10 beq $r7,$r7,1-----pc=48 11 jr $r pc=60 12 bne $r1,$r0,-2----pc=44 13 addi $r8,$r0,8----r8=r0+8 14 jal pc=40,r31=15*4 15 srl $r9,$r1,2-----r9=r1>>2 16 sra $r10,$r1,2----r10=r1>>2 17 sub $r11,$r1,$r2--r11=r1-r2 18 and $r12,$r2,$r4--r12=r2&r4 19 or $r13,$r2,$r4---r13=r2 | r4 20 xor $r14,$r2,$r4--r14=r2 ^ r4 21 andi $r15,$r2,22--r15=r2 & 22 22 ori $r16,$r2,22---r16=r2 | 22 Addr.dataAddr.data DATA MEMORY ADDRdata
NCKU EE CAD ASIC Lab 12 Jou, Jer Min, NCKU _00000_00001_00000_00000_ //addi $r1,$r0,32---r1=32 _00001_00010_00000_00000_ //subi $r2,$r1,5----r2=27 _00000_00011_00000_00000_ //slti $r3,$r0,32---r3=1 _00000_00100_00000_00000_ //lw $r4,1($r0)-----r4=DMEM[1] _00000_00001_00000_00000_ //sw $r1,0($r0)-----DMEM[0]=r1 _00001_00010_00101_00000_ //add $r5,$r1,$r2---r5=r1+r2
NCKU EE CAD ASIC Lab 13 Jou, Jer Min, NCKU _00000_00001_00110_00000_ //slt $r6,$r0,$r1---r6=1 _00001_00000_00111_00001_ //sll $r7,$r1,1-----r7=64 _00000_00000_00000_00000_ //j pc=52 _01001_01001_00000_00000_ //beq $r7,$r7,1-----pc=48 _00000_00000_00000_00000_ //jr $r pc=60 _00000_00001_11111_11111_ //bne $r1,$r0,-2----pc=44
NCKU EE CAD ASIC Lab 14 Jou, Jer Min, NCKU _00000_01000_00000_00000_ //addi $r8,$r0,8----r8=8 _00000_00000_00000_00000_ //jal pc=40,r31=60 _00001_00000_01001_00010_ //srl $r9,$r1,2-----r9=8 _00001_00000_01010_00010_ //sra $r10,$r1,2----r10=8 _00001_00010_01011_00010_ //sub $r11,$r1,$r2--r11=5 _00010_00100_01100_00000_ //and $r12,$r2,$r4--r12=3
NCKU EE CAD ASIC Lab 15 Jou, Jer Min, NCKU _00010_00100_01101_00000_ //or $r13,$r2,$r4---r13=63 _00010_00100_01110_00000_ //xor $r14,$r2,$r4--r14=60 _00010_01111_00000_00000_ //andi $r15,$r2,22--r15=18 _00010_10000_00000_00000_ //ori $r16,$r2,22---r16=31