(Verilog+Quartus Ⅱ+Cyclone版)

Slides:



Advertisements
Similar presentations
指令系统 吴非 本章主要内容 指令系统 指令格式 寻址方式 典型指令系统 MIPS指令系统 RISC 与 CISC -2-
Advertisements

阻塞操作. 在 linux 里,一个等待队列由一个 wait_queue_head_t 类型的结构来描述 等待队列的初始化: static wait_queue_head_t testqueue; init_waitqueue_head(&testqueue);
(Verilog+Quartus Ⅱ+Cyclone版)
教员信息 姓 名:仲崇权 单 位:电子与信息工程学院 电 话: 办公室:创新院大厦720房间 :
嵌入式系统与单片机 北京科技大学电子信息系.
程序的执行 程序执行和指令执行概述 数据通路基本结构和工作原理 流水线方式下指令的执行
第 2 章 中央處理單元.
多核结构与程序设计 杨全胜 东南大学成贤学院计算机系.
第五章 中央处理器 5.1 CPU的组成和功能 5.2 指令周期 5.3 时序产生器和控制方式 5.4 微程序控制器 5.5 微程序设计技术
计算机硬件设备图片 go 珠海市第四中学 信息技术组.
2017年3月5日 单片机原理与应用 背景知识调查.
NEUSOFT Institute of information Technology .ChengDu
建構 Beta電腦 – Fall /29/0.
计算机组成原理 北京理工大学计算机科学工程系 赵清杰 北京理工大学计算机科学工程系.
计算机组成原理 东南大学计算机学院 任国林
最新計算機概論 第3章 計算機組織.
第二章 指令系统.
大连理工大学软件学院 软件工程系 赖晓晨 计算机组成与结构 大连理工大学软件学院 软件工程系 赖晓晨
Hardware Chen Ching-Jung
数字系统设计2 习题课 2012年11月29日 TA: 沈炳锋 沈炳锋 (683472)
CH.2 Introduction to Microprocessor-Based Control
Chapter 5 電腦元件 目標---- 研讀完本章後,你應該可以: 閱讀有關電腦的廣告以及了解它的專業用語(行話)。
第 2 章 中央處理單元.
第4章 处理器(CPU) 4.1 引言 4.2 逻辑设计的一般方法 4.3 建立数据通路 4.4 一个简单的实现机制 4.5 多周期实现机制.
Ch 6: CPU - Datapath and Control
微处理器设计1 刘鹏 College of ISEE Zhejiang University
周学海 , 中国科学技术大学 2018/11/15 计算机体系结构 周学海 , 中国科学技术大学 11/15/2018 中国科学技术大学.
CPU資料處理 醫務管理暨醫療資訊學系 陳以德 副教授: 濟世CS 轉
Lecture on High Performance Processor Architecture (CS05162)
第4章 处理器(CPU) 4.1 引言 4.2 逻辑设计的一般方法 4.3 建立数据通路 4.4 一个简单的实现机制 4.5 多周期实现机制.
Chapter 5 Verilog硬體描述語言
指令集架構 計算機也跟人類一樣,需要提供一套完整的語言讓人們跟它充分溝通,以完成正確的計算工作。
C H A P T E R 10 存储器层次.
1-1 微電腦系統單元 1-2 微電腦系統架構 1-3 微控制器(單晶片微電腦) 1-4 類比與數位訊號介面
1-1 微電腦系統單元 1-2 微電腦系統架構 1-3 微控制器(單晶片微電腦) 1-4 類比與數位訊號介面
5 Computer Organization (計算機組織).
The Processor: Datapath and Control
总 复 习.
微程序控制器 刘鹏 Dept. ISEE Zhejiang University
第2章 计算机指令集结构 曲冠南
嵌入式微处理器系统 第二章 处理器技术(1) 北京大学软件与微电子学院.
微处理器设计2 刘鹏 College of ISEE Zhejiang University
第14章 其它DSP设计库 14.1 总线控制库 14.2 复数信号库 14.3 Gates库 14.4 状态机函数库
電腦的硬體架構.
第一单元 初识C程序与C程序开发平台搭建 ---观其大略
第二章 電腦硬體知識 2-1 電腦的組成與架構 2-2 處理器 2-3 記憶體 2-4 輸入與輸出裝置 2-5 電腦的操作與保養.
陳慶瀚 機器智慧與自動化技術(MIAT)實驗室 國立中央大學資工系 2013年5月28日
逆向工程-汇编语言
CPU结构和功能.
精简指令集(RISC)CPU的构造原理和设计方法
中国科学技术大学计算机系 陈香兰(0551- ) Spring 2009
用event class 从input的root文件中,由DmpDataBuffer::ReadObject读取数据的问题
Instructions: Language of the Machine
移相正弦信号发生器设计 采用直接数字综合器DDS发生器的设计 原理:图1是此电路模型图
C语言程序设计 主讲教师:陆幼利.
The Processor: Datapath and Control (Multi-cycle implementation)
微机原理与接口技术 西安邮电大学计算机学院 王忠民.
第二章 電腦硬體知識 Chapter 2-電腦硬體知識.
计算机系统结构(2012年春) ----存储层次: Cache基本概念
微机原理与接口技术 微机原理与接口技术 朱华贵 2015年11月13日.
<编程达人入门课程> 本节内容 内存的使用 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群: ,
实验三 16位算术逻辑运算实验 不带进位控制的算术运算 置AR=1: 设置开关CN 1 不带进位 0 带进位运算;
College of Computer Science & Technology
第4章 指令级并行 授课教师:车喜龙
微机原理与接口技术 ——8086微处理器 西安邮电大学 计算机学院 范琳.
临界区问题的硬件指令解决方案 (Synchronization Hardware)
3. 逻辑运算指令 A、简单逻辑操作指令 CLR A. (不影响CY、AC、 OV标志) CPL A
微机原理与接口技术 西安邮电大学计算机学院 宁晓菊.
C++语言程序设计 C++语言程序设计 第一章 C++语言概述 第十一组 C++语言程序设计.
第三章 CPU子系统 西南石油大学计算机科学学院 主讲教师 杨 梅 联系电话:
Presentation transcript:

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

主要内容 MiniSys 指令系统介绍 MiniSys CPU的设计 2018/11/9 P.2

第1章 MiniSys指令系统介绍 MiniSys寄存器组 Minisys指令的寻址方式 MiniSys指令目录 MiniSys指令格式 2018/11/9 P.3

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

MiniSys寄存器组 寄存器名 寄存器号 约定用途 $zero 常数0,该寄存器永远只返回0。 $at 1 用做汇编器的暂时变量。 常数0,该寄存器永远只返回0。 $at 1 用做汇编器的暂时变量。 $v0~$v1 2~3 用来存放一个子程序(函数)的非浮点运算的结果或返回值。 $a0~$a3 4~7 存放子程序(函数)调用时的非浮点参数。 $t0~$t7 8~15 暂时变量,子程序(函数)使用时不保存这些寄存器的值,因此调用后它们的值会被破坏。 $s0~$s7 16~23 8个子程序用寄存器。子程序(函数)必须在返回之前恢复这些寄存器的值以保证其没有变化。 2018/11/9 P.5

MiniSys寄存器组 寄存器名 寄存器号 约定用途 $t8~$t9 24~25 暂时变量,子程序(函数)使用时不保存这些寄存器的值,因此调用后它们的值会被破坏。 $i0~$i1 26~27 分别保存两个中断到来时程序的返回地址。(该两寄存器定义和MIPS中的有所不同) $s9 28 第10个子程序用寄存器。(该定义和MIPS中的不同) $sp 29 堆栈指针,对它的调整必须显式的通过指令来实现,硬件不支持堆栈指针的调整。 $s8 30 第9个子程序用寄存器。(该定义和MIPS中的不同) $ra 31 存放调用子程序(函数)时的返回地址。 2018/11/9 P.6

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

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 mfhi $1 $1=Hi nflo $1 $1=Lo lh 取半双字(一个字16位) 2018/11/9 P.8

MiniSys指令格式 (1)R-format add $1, $2, $3 # $1=$2+$3 6-bit 5-bit 5-bit 5-bit 5-bit 6-bit op rs rt rd shamt funct 2 3 1 32 000000 00010 00011 00001 00000 100000 2018/11/9 P.9

MiniSys指令格式 (2)I-format lw $1, 10($2) # $1=Memory[$2 +10] 6-bit 5-bit 5-bit 16-bit op rs rt Address/Immediate 35 2 1 10 100011 00010 00011 0000 0000 0000 1010 2018/11/9 P.10

MiniSys指令格式 (3)J-format j 10000 # go to 10000 6-bit 26-bit op Target/ Address 2 2500 000010 00000 00000 0000 1001 1100 0100 2018/11/9 P.11

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

部分MiniSys指令详解 加法指令( R-format) add $s1, $s2, $s3 # $s1=$s2+$s3 6-bit 5-bit 5-bit 5-bit 5-bit 6-bit op rs rt rd shamt funct 18 19 17 32 000000 10010 10011 10001 00000 100000 2018/11/9 P.13

部分MiniSys指令详解 减法指令(R-format) sub $s1, $s2, $s3 # $s1=$s2-$s3 6-bit 5-bit 5-bit 5-bit 5-bit 6-bit op rs rt rd shamt funct 18 19 17 34 000000 10010 10011 10001 00000 100010 2018/11/9 P.14

部分MiniSys指令详解 逻辑与指令(R-format) and $s1, $s2, $s3 # $s1=$s2 & $s3 6-bit 5-bit 5-bit 5-bit 5-bit 6-bit op rs rt rd shamt funct 18 19 17 36 000000 10010 10011 10001 00000 100100 2018/11/9 P.15

部分MiniSys指令详解 逻辑或操作(R-format) or $s1, $s2, $s3 # $s1=$s2 | $s3 6-bit 5-bit 5-bit 5-bit 5-bit 6-bit op rs rt rd shamt funct 18 19 17 37 000000 10010 10011 10001 00000 100101 2018/11/9 P.16

部分MiniSys指令详解 有符号立即数加(I-format) addi $s1, $s2, 100 # $s1=$s2 + 100 6-bit 5-bit 5-bit 16-bit op rs rt Immediate 8 18 17 100 001000 10010 10001 0000 0000 0110 0100 立即数做符号扩展 2018/11/9 P.17

部分MiniSys指令详解 立即数逻辑与指令(I-format) andi $s1, $s2, 100 # $s1=$s2 & 100 6-bit 5-bit 5-bit 16-bit op rs rt Immediate 12 18 17 100 001100 10010 10001 0000 0000 0110 0100 立即数做0扩展 2018/11/9 P.18

部分MiniSys指令详解 立即数逻辑或指令(I-format) ori $s1, $s2, 100 # $s1=$s2 | 100 6-bit 5-bit 5-bit 16-bit op rs rt Immediate 13 18 17 100 001101 10010 10001 0000 0000 0110 0100 立即数做0扩展 2018/11/9 P.19

部分MiniSys指令详解 逻辑左移指令(R-format) sll $s1, $s2, 10 # $s1= shift($s2)left logic 10 bits 6-bit 5-bit 5-bit 5-bit 5-bit 6-bit op rs rt rd shamt funct 18 17 10 000000 00000 10010 10001 01010 000000 2018/11/9 P.20

部分MiniSys指令详解 逻辑右移指令(R-format) srl $s1, $s2, 10 # $s1= shift($s2)right logic 10 bits 6-bit 5-bit 5-bit 5-bit 5-bit 6-bit op rs rt rd shamt funct 18 17 10 2 000000 00000 10010 10001 01010 000010 2018/11/9 P.21

部分MiniSys指令详解 算术右移指令(R-format) sra $s1, $s2, 10 # $s1= shift($s2)right arithmatic 10 bits 6-bit 5-bit 5-bit 5-bit 5-bit 6-bit op rs rt rd shamt funct 18 17 10 3 000000 00000 10010 10001 01010 000011 2018/11/9 P.22

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

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

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

部分MiniSys指令详解 不相等则转移转移指令(I-format) bne  $s1, $s2,100 # if $s1 ≠ $s2, goto PC+4+100 6-bit 5-bit 5-bit 16-bit op rs rt Offset = immediate/4 5 17 18 25 000101 10001 10010 0000 0000 0001 1001 立即数做符号扩展 2018/11/9 P.26

部分MiniSys指令详解 小于则设置指令(R-format) slt $s1, $s2, $s3 # if $s2<$s3, $s1=1; else $s1=0 6-bit 5-bit 5-bit 5-bit 5-bit 6-bit op rs rt rd shamt funct 18 19 17 42 000000 10010 10011 10001 00000 101010 2018/11/9 P.27

部分MiniSys指令详解 无条件转移指令(J-format) j 10000 # go to 10000 6-bit 26-bit op Target = Address/4 2 2500 000010 00000 00000 0000 1001 1100 0100 2018/11/9 P.28

部分MiniSys指令详解 过程调用指令(J-format) jal 10000 # $31=PC+4; go to 10000 6-bit 26-bit op Target = Address/4 3 2500 这里补充讲解一下,address、offset何时要除以4,什么时候不除,规律是访问代码的地址都要除以4(定长32位指令) 而访问RAM的变量时不要除,因为从可扩展角度,对变量的访问可以是字节型、半字型和字型等 000011 00000 00000 0000 1001 1100 0100 2018/11/9 P.29

部分MiniSys指令详解 按寄存器内容转移指令(R-format) jr $ra # jump register $ra 6-bit 5-bit 5-bit 5-bit 5-bit 6-bit op rs rt rd shamt funct 31 8 000000 11111 00000 00000 00000 001000 2018/11/9 P.30

部分MiniSys指令详解 立即数赋值指令(I-format) lui $s1,100 # $s1 = 100 << 16 6-bit 5-bit 5-bit 16-bit op rs rt immediate 15 17 100 001111 00000 10001 0000 0000 0110 0100 2018/11/9 P.31

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

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

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

MiniSys CPU中各单元(1) Fetch(取指单元) 定义指令ROM存储器 到程序ROM中取指令 对PC值进行+4处理

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

指令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"; 2018/11/9 P.37

指令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; 2018/11/9 P.38

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

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

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

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

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

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

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

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

时序关系 器件固有延迟维持的流水 2018/11/9 P.47

数据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 2018/11/9 P.48

数据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; 2018/11/9 P.49

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

顶层的设计(2) 模块的定义 module minisys(reset, clock, pc, alu_result_out, read_data_1_out, read_data_2_out, write_data_out, instruction_out, branch_out, zero_out, memwrite_out, regwrite_out, i_format_out); input reset,clock; output[15:0] pc, alu_result_out, read_data_1_out; output[15:0] read_data_2_out, write_data_out; output[31:0] instruction_out; output branch_out, zero_out, memwrite_out, regwrite_out; output i_format_out; 2018/11/9 P.51

顶层的设计(3) 内部信号定义 wire[15:0] pc_plus_4; wire[15:0] read_data_1; wire[15:0] sign_extend; wire[15:0] add_result; wire[15:0] alu_result; wire[15:0] read_data; wire[15:0] pc_next,opcplus4; wire alusrc ,jrn,i_format,regwrite, zero, memwrite; wire branch, memtoreg, memread, memreg; wire nbranch,jmp,jal,regdst; wire[1:0] aluop; wire[31:0] instruction; 2018/11/9 P.52

顶层的设计(4) 内部信号赋值 assign instruction_out = instruction ; assign alu_result_out = alu_result ; assign read_data_1_out = read_data_1 ; assign read_data_2_out = read_data_2 ; assign write_data_out = (memtoreg == 1) ? read_data : alu_result ; assign branch_out = branch ; assign zero_out = zero ; assign regwrite_out = regwrite ; assign memwrite_out = memwrite ; assign i_format_out = i_format ; 2018/11/9 P.53

顶层的设计(5) 元件例化 其他元件例化大家参看教材。 Ifetc32 ifetch(.Instruction(instruction), .PC_plus_4_out(pc_plus_4) , .Add_result(add_result), .Branch(branch), .nBranch(nbranch), .Jmp(jmp), .Jal(jal), .Jrn(jrn), .Read_data_1(read_data_1), .PC_next(pc_next), .Zero(zero), .PC_out(pc), .clock(clock), .reset(reset) .opcplus4(opcplus4)); 其他元件例化大家参看教材。 2018/11/9 P.54

指令执行的分析 各类指令执行的分析 2018/11/9 P.55

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

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

Aluctl/slt/sftmd/sftm/I_format Alusrc 控制单元 func jmp | jal jrn nBranch Memtoreg MIPS instruction format R-format Memwrite op rs rt rd func op Aluctl/slt/sftmd/sftm/I_format I-format Alusrc 控制单元 op rs rt immediate func jmp | jal J-format jrn op address nBranch jal addi, addiu,andi, ori, xori,lui,slti,sltiu Branch 1 + Regdst 4 Regwrite PC+4 addresst + 1 左移2位 左移2位 WE rs 1 readR1 程序ROM A PC readD1 rt Zero 读地址 readR2 WE Alu result readD2 Address 指令 [31-0] B writeR Mem data rd 寄存器 1 1 1 ALU writeD 数据RAM Clock Write Data Clock immediate 1 0 符号扩展

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

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

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

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

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

设计流水线处理器的考虑 选择合适的流水级数 尽量保持流水线各级延迟相等 流水线中的相关性 2018/11/9 P.64

设计流水线处理器的考虑 结构相关 ? 所谓结构相关是指指令在重叠执行的时候由于硬件资源不能满足重叠执行的要求,而产生的一种结构上的相关 MiniSys系统采用指令ROM和数据RAM分开的设计,取指和数据读写分别在两个存储体内进行,因此不会产生取指和数据访问的冲突。另外,由于MiniSys系统采用的是Load/Store型指令结构,除了LW和SW两条指令外,其他指令都不会操作数据RAM。LW与SW指令也仅仅在存储阶段才访问数据存储器,因此不可能出现两条指令同时读写数据RAM的情况。 另外,关于寄存器堆的读写问题,可以采用时钟上升沿读,下降沿写的方法避免读写冲突。 因此MiniSys CPU的设计中避免了结构相关问题。 2018/11/9 P.65

设计流水线处理器的考虑 数据相关 写后读相关(RAW) 阻塞 乱序 定向转发法 2018/11/9 P.66

设计流水线处理器的考虑 数据相关 读后写相关(WAR) ? 2018/11/9 P.67 从我们设计的流水来看,读寄存器是在译码阶段,而写寄存器要等到回写阶段,因此,处于后面的程序不可能在前面程序读寄存器前写相同的寄存器。 考察存储器的读写,因为都只能在存储阶段进行读或写,所以不会出现后续指令比前面指令先操作存储器的情况。 因此,MiniSys CPU不存在WAR相关。 2018/11/9 P.67

设计流水线处理器的考虑 数据相关 写后写相关(WAW) ? 2018/11/9 P.68 在MiniSys系统中,无论是对寄存器写还是对存储器写,都是在唯一的阶段内操作的,比如写存储器是在存储阶段,而写寄存器在回写阶段。因此,不可能出现后续指令先与前面的指令写数据的情况,因此MiniSys中也不存在WAW相关。 2018/11/9 P.68

设计流水线处理器的考虑 控制相关 阻塞 分支预测 分支地址计算尽量前移 延迟槽法 静态预测 动态预测 其他指令Ia~Im 转移指令In 所谓控制相关是当程序执行到条件分支指令的时候,会出现与控制相关的问题。控制相关可以看作是对指令指针寄存器PC的RAW相关问题。 延迟槽法:编译程序编译时,将转移指令前与转移指令无关的n条指令或空指令放入延迟槽;,延迟槽在紧跟在转移指令后 静态预测根据指令的情况,通常转移地址小于当前指令地址,预测为转移命中,如果转移地址比当前指令地址大,则预测转移不被命中 动态预测根据程序历史行为和分支历史行为来协助判断分支是否命中,这是在运行时的判断。 其他指令Ia~Im 转移指令In 延迟槽中指令(空指令) 其他指令Io~Iz 延迟转移法的目标代码 其他指令Ia~If、Ig~Im中与In有关的指令 延迟槽中指令(Ig~Im中与In无关的指令或空指令) 优化延迟转移法的目标代码 2018/11/9 P.69

设计多核处理器的考虑 简单核还是复杂核? 同构核还是异构核? 几个核之间怎么配合?中断怎么处理? 数据一致性上的问题 软件上的同步与互斥 核间互联问题 2018/11/9 P.70

几个多核的例子 INTEL CORE DUO Each with its own execution resources Each with its own L1 cache 32K instruction and 32K data Both cores share the L2 cache 2MB 8-way set associative; 64-byte line size 10 clock cycles latency; Write Back update policy 2018/11/9 P.71

几个多核的例子 AMD Opteron Separate 1Mbyte L2 caches CPU0 and CPU1 communicate through the SRQ and Crossbar 2018/11/9 P.72

几个多核的例子 2018/11/9 P.73

几个多核的例子 UltraSPARC T1 from SUN 8 CPU core Each core can run 4 thread simultaneity All cores connected through high bandwidth (134.4GB/s) crossbar switch 2018/11/9 P.74

几个多核的例子 Cell from IBM, Toshiba and Sony 1 PPE (Power Processor Element) 8 SPE (Synergistic Processor Element) All cores connected through EIB 我们可以看到Cell内部有一条 768bit位宽的“EIB单元互联总线环(Element Interconnect BUS Ring,EIB Ring)”, 2018/11/9 P.75

几个多核的例子 Tile64 from Tilera Co. 64 Cores RISC 19.2W All cores connected through MESH 500Gb/s for one core, 32Tb/s for all. Every core can run OS 2018/11/9 P.76

几个多核的例子 Larrabee from Intel Multiple in-order x86 CPU cores that are augmented by a wide vector processor unit A coherent on-die 2nd level cache All cores connected through Interprocessor Ring Network 2018/11/9 P.77

Sandy Bridge 2018/11/9 P.78