1 / 78

计算机系统综合课程设计

计算机系统综合课程设计. 基于 MIPS32 的 SOC 设计实践 ( 上 ) (Verilog+Quartus Ⅱ+Cyclone 版 ) 主讲 杨全胜 东南大学计算机科学与工程学院. 主要内容. MiniSys 指令系统介绍 MiniSys CPU 的设计. 第 1 章 MiniSys 指令系统介绍. MiniSys 寄存器组 Minisys 指令的寻址方式 MiniSys 指令目录 MiniSys 指令格式 部分 MiniSys 指令详解. MiniSys 指令系统简介.

mikel
Download Presentation

计算机系统综合课程设计

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 计算机系统综合课程设计 基于MIPS32的SOC设计实践(上) (Verilog+Quartus Ⅱ+Cyclone版) 主讲 杨全胜 东南大学计算机科学与工程学院

  2. 主要内容 • MiniSys 指令系统介绍 • MiniSys CPU的设计

  3. 第1章 MiniSys指令系统介绍 • MiniSys寄存器组 • Minisys指令的寻址方式 • MiniSys指令目录 • MiniSys指令格式 • 部分MiniSys指令详解

  4. MiniSys指令系统简介 • MiniSys采用32位MIPS指令中最常用的31条指令,其寄存器组织,指令格式等均采用MIPS指令系统相同的格式。 • 共有32个32位寄存器 • 32位定长格式指令 • 4种寻址方式

  5. MiniSys寄存器组

  6. MiniSys寄存器组

  7. Minisys指令的寻址方式 • 立即数寻址 • 指令中第3操作数可使用16位二进制立即数 • 相对寻址 • 操作数是下一条指令的PC值(PC+4)加上一个32位偏移量 • 寄存器寻址 • 操作数存放在寄存器中,指令里放的是寄存器号 • 寄存器相对寻址 • 操作数存放在数据存储器中,其有效地址由两部分组成,基地址放在一个寄存器中,偏移部分为一个16位的立即数

  8. MiniSys指令目录 • 算术指令-add, addu, addi, addiu, sub, subu • 逻辑指令-and, andi, or, ori, xor, xori, nor, sll, srl, sra, sllv, srlv, srav • 数据传送指令-lw, sw, lui • 比较、条件转移指令-beq, bne, slt, slti, sltu, sltiu • 无条件转移指令-j, jr, jal

  9. MiniSys指令格式 • (1)R-format add $1, $2, $3# $1=$2+$3 6-bit 5-bit 5-bit 5-bit 5-bit 6-bit 000000 00010 00011 00001 00000 100000

  10. MiniSys指令格式 • (2)I-format lw $1, 10($2) # $1=Memory[$2 +10] 6-bit 5-bit 5-bit 16-bit 100011 00010 00011 0000 0000 0000 1010

  11. MiniSys指令格式 • (3)J-format j  10000 # go to  10000 6-bit 26-bit 000010 00000 00000 0000 1001 1100 0100

  12. 部分MiniSys指令详解 • 这里只介绍几个典型的指令格式,比较完整的指令格式请参看教材。

  13. 部分MiniSys指令详解 add $s1, $s2, $s3# $s1=$s2+$s3 6-bit 5-bit 5-bit 5-bit 5-bit 6-bit 000000 10010 10011 10001 00000 100000 加法指令( R-format)

  14. 部分MiniSys指令详解 sub $s1, $s2, $s3# $s1=$s2-$s3 6-bit 5-bit 5-bit 5-bit 5-bit 6-bit 000000 10010 10011 10001 00000 100010 减法指令(R-format)

  15. 部分MiniSys指令详解 and $s1, $s2, $s3# $s1=$s2 & $s3 6-bit 5-bit 5-bit 5-bit 5-bit 6-bit 000000 10010 10011 10001 00000 100100 逻辑与指令(R-format)

  16. 部分MiniSys指令详解 or $s1, $s2, $s3# $s1=$s2 | $s3 6-bit 5-bit 5-bit 5-bit 5-bit 6-bit 000000 10010 10011 10001 00000 100101 逻辑或操作(R-format)

  17. 部分MiniSys指令详解 addi $s1, $s2, 100 # $s1=$s2 + 100 6-bit 5-bit 5-bit 16-bit 001000 10010 10001 0000 0000 0110 0100 立即数做符号扩展 有符号立即数加(I-format)

  18. 部分MiniSys指令详解 andi $s1, $s2, 100 # $s1=$s2 & 100 6-bit 5-bit 5-bit 16-bit 001100 10010 10001 0000 0000 0110 0100 立即数做0扩展 立即数逻辑与指令(I-format)

  19. 部分MiniSys指令详解 ori $s1, $s2, 100 # $s1=$s2 | 100 6-bit 5-bit 5-bit 16-bit 001101 10010 10001 0000 0000 0110 0100 立即数做0扩展 立即数逻辑或指令(I-format)

  20. 部分MiniSys指令详解 sll $s1, $s2, 10# $s1= shift($s2)left logic 10 bits 6-bit 5-bit 5-bit 5-bit 5-bit 6-bit 000000 00000 10010 10001 01010 000000 逻辑左移指令(R-format)

  21. 部分MiniSys指令详解 srl $s1, $s2, 10# $s1= shift($s2)right logic 10 bits 6-bit 5-bit 5-bit 5-bit 5-bit 6-bit 000000 00000 10010 10001 01010 000010 逻辑右移指令(R-format)

  22. 部分MiniSys指令详解 sra $s1, $s2, 10# $s1= shift($s2)right arithmatic 10 bits 6-bit 5-bit 5-bit 5-bit 5-bit 6-bit 000000 00000 10010 10001 01010 000011 算术右移指令(R-format)

  23. 部分MiniSys指令详解 lw $s1, 100($s2) # $s1=Memory[$s2 +100] 6-bit 5-bit 5-bit 16-bit 100011 10010 10001 0000 0000 0110 0100 立即数做符号扩展 存储器读(I-format)

  24. 部分MiniSys指令详解 sw  $s1, 100($s2) # Memory[$s2 +100] = $s1 6-bit 5-bit 5-bit 16-bit 101011 10010 10001 0000 0000 0110 0100 立即数做符号扩展 存储器写(I-format)

  25. 部分MiniSys指令详解 beq  $s1, $s2,100 # if $s1=$s2, goto PC+4+100 6-bit 5-bit 5-bit 16-bit 000100 10001 10010 0000 0000 0001 1001 立即数做符号扩展 相等则转移指令(I-format)

  26. 部分MiniSys指令详解 bne  $s1, $s2,100 # if $s1 ≠ $s2, goto PC+4+100 6-bit 5-bit 5-bit 16-bit 000101 10001 10010 0000 0000 0001 1001 立即数做符号扩展 不相等则转移转移指令(I-format)

  27. 部分MiniSys指令详解 slt $s1, $s2, $s3# if $s2<$s3, $s1=1; else $s1=0 6-bit 5-bit 5-bit 5-bit 5-bit 6-bit 000000 10010 10011 10001 00000 101010 小于则设置指令(R-format)

  28. 部分MiniSys指令详解 j  10000 # go to  10000 6-bit 26-bit 000010 00000 00000 0000 1001 1100 0100 无条件转移指令(J-format)

  29. 部分MiniSys指令详解 jal  10000 # $31=PC+4; go to  10000 6-bit 26-bit 000011 00000 00000 0000 1001 1100 0100 过程调用指令(J-format)

  30. 部分MiniSys指令详解 jr $ra# jump register $ra 6-bit 5-bit 5-bit 5-bit 5-bit 6-bit 000000 11111 00000 00000 00000 001000 按寄存器内容转移指令(R-format)

  31. 部分MiniSys指令详解 lui  $s1,100 # $s1=100 << 16 6-bit 5-bit 5-bit 16-bit 001111 00000 10001 0000 0000 0110 0100 立即数赋值指令(I-format)

  32. 第2章 MiniSys的设计 • MiniSys CPU设计架构 • MiniSys CPU中各个单元 • 指令执行的分析 • 设计流水线处理器的考虑 • 设计多核处理器的考虑

  33. MiniSys CPU设计架构(1) • 指令执行的步骤 Control idecode ifetch Execute Write Dmemory

  34. PC MemtoReg MIPS instruction format MemWrite R-format op op rs rt rd func Sftmd/sftm/I_format I-format Alusrc 控制单元 op rs rt immediate func jmp | jal J-format jrn address op nBranch jal Branch 1 Regdst Regwrite 0 4 PC+4 0 address 0 + 1 左移2位 左移2位 WE 1 rs readR1 程序ROM A readD1 Zero rt 读地址 readR2 WE Alu result readD2 Address 0 0 指令 [31-0] B writeR Mem data 寄存器 1 rd 1 1 ALU writeD 数据RAM 0 Write Data Clock Clock immediate 1 0 符号扩展

  35. MiniSys CPU中各单元(1) • Fetch(取指单元) • 定义指令ROM存储器 • 到程序ROM中取指令 • 对PC值进行+4处理 • 完成各种跳转指令的PC修改功能 • 在有中断的情况下处理中断到来时的PC修改

  36. 取指单元的设计 Memtoreg Memwrite op Aluctl/slt/sftmd/sftm/I_format Alusrc 控制单元 func jmp | jal jrn nBranch jal Branch 1 Regdst Regwrite 0 4 PC+4 + 0 addresst 0 + 1 左移2位 左移2位 WE 1 rs readR1 程序ROM A readD1 Zero PC rt 读地址 readR2 WE Alu result readD2 Address 0 0 指令 [31-0] B writeR Mem data 寄存器 1 rd 1 1 ALU writeD 数据RAM 0 Write Data Clock Clock immediate 1 0 符号扩展

  37. 指令ROM的例化 lpm_rom prgrom(.address(PC[11:2]),.inclock(clock),.q(Jpadr)); // 实际上给出的地址是PC除4的结果,因为MIF文件按0、1、2、 // 3排列的 defparam prgrom.lpm_width = 32; //数据(指令)宽度32位 defparam prgrom.lpm_widthad = 10; //地址线宽度10位 defparam prgrom.lpm_file = "prgmip32.mif"; defparam prgrom.lpm_outdata = "UNREGISTERED"; defparam prgrom.lpm_address_control = "REGISTERED";

  38. 指令ROM的初始化文件 • prgmip32.mif文件(自行创建) DEPTH = 1024; -- 10位地址线 210=1024 WIDTH = 32; -- 数据宽度32位 ADDRESS_RADIX = HEX; --地址采用16进制描述 DATA_RADIX = HEX; -- 数据采用16进制描述 CONTENT BEGIN 0 : 8c020000; --lw $2 0($0) 1 : 8c030002; --lw $3 2($0) [19..3FD] : 00000000; 3FE: 03400008; -- jr $1A 中断0返回 3FF: 03600008; -- jr $1B 中断1返回 END;

  39. MiniSys CPU中各单元(2) • Decode(译码单元) • 定义寄存器组 • 对寄存器组进行读写操作 • 根据指令译码结果,决定向其他部件(如运算器)送1路或两路数据

  40. 译码单元的设计 Memtoreg Memwrite op Aluctl/slt/sftmd/sftm/I_format Alusrc 控制单元 func jmp | jal jrn nBranch jal Branch 1 Regdst Regwrite 0 4 PC+4 + 0 addresst 0 + 1 左移2位 左移2位 WE 1 rs readR1 程序ROM A readD1 Zero PC rt 读地址 readR2 WE Alu result readD2 Address 0 0 指令 [31-0] B writeR Mem data 寄存器 1 rd 1 1 ALU writeD 数据RAM 0 Write Data Clock Clock immediate 1 0 符号扩展

  41. MiniSys CPU中各单元(3) • Control(控制单元) • 根据指令中的指令码(op)和功能码(funct)的不同组合输出相应的控制信号。

  42. 控制单元的设计 Memtoreg Memwrite op Aluctl/slt/sftmd/sftm/I_format Alusrc 控制单元 func jmp | jal jrn nBranch jal Branch 1 Regdst Regwrite 0 4 PC+4 + 0 addresst 0 + 1 左移2位 左移2位 WE 1 rs readR1 程序ROM A readD1 Zero PC rt 读地址 readR2 WE Alu result readD2 Address 0 0 指令 [31-0] B writeR Mem data 寄存器 1 rd 1 1 ALU writeD 数据RAM 0 Write Data Clock Clock immediate 1 0 符号扩展

  43. MiniSys CPU中各单元(4) • Exe(执行单元) • 完成逻辑运算 • 完成算术运算 • 完成移位运算 • 完成比较转移的PC值计算 • 完成比较后赋值

  44. 执行单元的设计 Memtoreg Memwrite op Aluctl/slt/sftmd/sftm/I_format Alusrc 控制单元 func jmp | jal jrn nBranch jal Branch 1 Regdst Regwrite 0 4 PC+4 + 0 addresst 0 + 1 左移2位 左移2位 WE 1 rs readR1 程序ROM A readD1 Zero PC rt 读地址 readR2 WE Alu result readD2 Address 0 0 指令 [31-0] B writeR Mem data 寄存器 1 rd 1 1 ALU writeD 数据RAM 0 Write Data Clock Clock immediate 1 0 符号扩展

  45. MiniSys CPU中各单元(5) • Dmemory(存储单元) • 定义数据存储单元RAM • 实际完成对数据存储器的读写操作

  46. 存储单元的设计 Memtoreg Memwrite op Aluctl/slt/sftmd/sftm/I_format Alusrc 控制单元 func jmp | jal jrn nBranch jal Branch 1 Regdst Regwrite 0 4 PC+4 + 0 addresst 0 + 1 左移2位 左移2位 WE 1 rs readR1 程序ROM A readD1 Zero PC rt 读地址 readR2 WE Alu result readD2 Address 0 0 指令 [31-0] B writeR Mem data 寄存器 1 rd 1 1 ALU writeD 数据RAM 0 Write Data Clock Clock immediate 1 0 符号扩展

  47. 时序关系 • 器件固有延迟维持的流水

  48. 数据RAM的例化 • 数据存储器的实现 lpm_ram_dq ram(.data(write_data) , .address(address[11:2]), .we(Memwrite ), .inclock(clk),.q(read_data)); //在 // Verilog中使用Altera的RAM单元, 注意地址要除2 defparam ram.lpm_width =32; //数据宽32位 defparam ram.lpm_widthad = 10; //地址线宽10位 defparam ram.lpm_outdata = "UNREGISTERED"; defparam ram.lpm_indata = "REGISTERED"; defparam ram.lpm_address_control = "REGISTERED"; defparam ram.lpm_file = “dmem32.mif”; //存储体初始化文件 // 以双字为单位,所以地址都是4的倍数 教材中,P56页程序的12行 assign lpw_write(Memwrite && clk 删除 13行中的lpm_write 改成 Memwrite

  49. 数据RAM初始化文件 • dmem32.mif文件(自行创建) DEPTH = 1024; --10 位地址线 WIDTH = 32; -- 数据宽度32位 ADDRESS_RADIX = HEX; --地址采用16进制描述 DATA_RADIX = HEX; -- 数据采用16进制描述 CONTENT BEGIN 0 : 00000055; -- 行号是地址除以4的结果 1 : 000000AA; [2..3FF] : 00000000; END;

  50. MiniSys CPU中各单元(6) • MiniSys (顶层设计) • 顶层整合模块 • 前面已经给出了MiniSys cpu 的5大部件的设计,最后需要将这5大部件组合成一个完整的CPU,可以用GDT图,也可以用Verilog的元件例化的方法来完成。 • 在元件例化的时候特别注意字母大小写一定要一致。

More Related