1、2018/10/14 P.1,基于MIPS32的SOC设计实践(上) (Verilog+Quartus +Cyclone版)主讲 杨全胜东南大学计算机科学与工程学院,计算机系统综合课程设计(3),2018/10/14 P.2,主要内容,SoC设计概述 MiniSys 指令系统介绍 MiniSys 的设计 外围电路及控制系统设计 软件的设计,2018/10/14 P.3,第1章 SOC概述(1),什么是SOC(System-on-Chip) SoC(片上系统)中包含了微处理器/微控制器、存储器以及其他专用功能逻辑。 实现复杂系统功能的VLSI; 采用超深亚微米工艺技术; 使用一个以上嵌入式CPU
2、/数字信号处理器(DSP); 外部可以对芯片进行编程; 可利用第三方IP Core进行设计。,2018/10/14 P.4,SOC概述(2),SOC的三种形态 以微处理器为核心,外围集成各种存储器、控制电路、输入输出、A/D、D/A等功能于一个芯片上 以数字信号处理器(DSP)为核心,多个A/D、D/A,大容量存储器等集成 上述两种类型的混合,或者把系统算法和芯片结构有机地集成在一起,2018/10/14 P.5,SOC概述(3),设计中的关键技术 设计描述技术 Verilog HDL/VHDL/AHDL System C、C-VHDL混合描述 软硬件协同设计 电路的设计、综合、布局布线 软件
3、与硬件的划分、协同设计、协同仿真 嵌入式操作系统、嵌入式系统程序和应用程序的开发 IP集成复用技术及设计环境,2018/10/14 P.6,IP 核及在SOC中的地位(1),IP资源复用的理念 IP资源复用(IP Reuse)是指在集成电路设计过程中,通过继承、共享或购买所需的部分或全部知识产权内核(IP Core),进行设计、综合和验证,从而加速流片设计过程的设计方法 IP Core是一种商品,SOPC的技术核心:是可编程逻辑器件设计工程师价值体现的主要途径,2018/10/14 P.7,IP 核及在SOC中的地位(2),IP核的表现形式 HDL语言(VHDL 或 Verilog HDL)
4、原理图(可移植性差) 网表 符合某种EDA工具的特定格式 如:Xilinx的IP Capture和Core Generator等,2018/10/14 P.8,IP 核及在SOC中的地位(3),IP核的分类 微处理器IP核 8/16/32/64位,如MicroBlaze、Nois、8051 处理器外设IP Core SDRAM 控制器、LCD 控制器、总线控制器等 DSP算法IP Core FIR滤波器、DES加密、音视频编码和解码等 通信控制器IP Core MAC、Gbit收发器、CAM、协议转换等 其它类型IP Core,2018/10/14 P.9,IP 核及在SOC中的地位(4),I
5、P Core设计:编码风格 编码风格(Coding Style)是基于HDL的IP Core源码编写的指导性文档,关系到IP Core的可读性、易于集成性及其质量 编码风格一般包含几个方面的约定:文件头和版本说明、联机注释、命名规则、可综合编码(UCF)等 http:/www.opencores.org http:/www.IP,2018/10/14 P.10,第2章 MiniSys指令系统介绍,MiniSys寄存器组 MiniSys指令目录 MiniSys指令格式 部分MiniSys指令格式详解 注:MiniSys采用32位MIPS指令中最常用的31条指令,其寄存器组织,指令格式等均采用MI
6、PS指令系统相同的格式。,2018/10/14 P.11,MiniSys寄存器组,共有32个32位寄存器,2018/10/14 P.12,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,2018/10/14 P.13,MiniSys指令格式(1),
7、(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,2018/10/14 P.14,MiniSys指令格式(2),(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,2018/10/14 P.15,MiniSys指令格式(3),(3)J-format,j 1000
8、0 # go to 10000,6-bit 26-bit,000010 00010 00011 0000 0000 0000 1010,2018/10/14 P.16,MiniSys指令格式详解,这里只介绍几个典型的指令格式,比较完整的指令格式请参看教材。,2018/10/14 P.17,MiniSys指令格式详解,2018/10/14 P.18,MiniSys指令格式详解,2018/10/14 P.19,MiniSys指令格式详解,2018/10/14 P.20,MiniSys指令格式详解,2018/10/14 P.21,MiniSys指令格式详解,2018/10/14 P.22,MiniS
9、ys指令格式详解,2018/10/14 P.23,MiniSys指令格式详解,100,100,100,100,2018/10/14 P.24,MiniSys指令格式详解,2018/10/14 P.25,MiniSys指令格式详解,2018/10/14 P.26,MiniSys指令格式详解,2018/10/14 P.27,第3章 MiniSys的设计,MiniSys CPU设计架构 MiniSys CPU中各个单元 指令执行的分析 设计流水线处理器的考虑 设计多核处理器的考虑,2018/10/14 P.28,MiniSys CPU设计架构(1),指令执行的步骤,ifetch,idecode,Co
10、ntrol,Execute,Write,Dmemory,Clock,程序ROM,读地址,指令 31-0,4,控制单元,op,寄存器,0,1,func,rs,rt,rd,readR1,readR2,writeR,writeD,Clock,readD1,readD2,Regdst,WE,Alusrc,符号扩展,immediate,0,1,A,B,Zero,Alu result,ALU,Address,Write Data,Mem data,数据RAM,1,0,WE,1 0,jal,Regwrite,MemtoReg,MemWrite,Sftmd/sftm/I_format,左移2位,nBranch
11、,Branch,0,1,0,1,jmp | jal,左移2位,address,PC+4,1,0,jrn,MIPS instruction format,op,I-format,J-format,R-format,rs,rt,rd,func,op,rs,rt,immediate,op,address,2018/10/14 P.30,MiniSys CPU中各单元(1),Fetch(取指单元) 定义指令ROM存储器 到程序ROM中取指令 对PC值进行4处理 完成各种跳转指令的PC修改功能 在有中断的情况下处理中断到来时的PC修改,immediate,rd,PC,Clock,程序ROM,读地址,指令
12、 31-0,4,控制单元,op,寄存器,0,1,func,rs,rt,readR1,readR2,writeR,writeD,Clock,readD1,readD2,Regdst,WE,Alusrc,符号扩展,0,1,A,B,Zero,Alu result,ALU,Address,Write Data,Mem data,数据RAM,1,0,WE,1 0,jal,Regwrite,Memtoreg,Memwrite,Aluctl/slt/sftmd/sftm/I_format,左移2位,nBranch,Branch,0,1,0,1,jmp | jal,左移2位,addresst,PC+4,1,0
13、,jrn,取指单元的设计,2018/10/14 P.32,指令ROM的初始化文件,prgmip32.mif文件(自行创建),DEPTH = 1024; - 10位地址线 2101024 WIDTH = 32; - 数据宽度32位 ADDRESS_RADIX = HEX; -地址采用16进制描述 DATA_RADIX = HEX; - 数据采用16进制描述 CONTENT BEGIN0 : 8c020000; -lw $2 0($0)1 : 8c030002; -lw $3 2($0)193FD : 00000000;3FE: 03400008; - jr $1A 中断0返回3FF: 03600
14、008; - jr $1B 中断1返回 END;,2018/10/14 P.33,指令ROM的例化,lpm_rom prgrom(.address(PC11:2),.inclock(clock),.q(Jpadr); / 实际上给出的地址是PC除4的结果,因为MIF文件按0、1、2、/ 3排列的defparam prgrom.lpm_width = 32; /数据(指令)宽度32位defparam prgrom.lpm_widthad = 10; /地址线宽度9位defparam prgrom.lpm_file = “prgmip32.mif“;defparam prgrom.lpm_outd
15、ata = “UNREGISTERED“;defparam prgrom.lpm_address_control = “REGISTERED“;,2018/10/14 P.34,MiniSys CPU中各单元(2),Decode(译码单元) 定义寄存器组 对寄存器组进行读写操作 根据指令译码结果,决定向其他部件(如运算器)送1路或两路数据,rd,PC,Clock,程序ROM,读地址,指令 31-0,4,控制单元,op,寄存器,0,1,func,rs,rt,readR1,readR2,writeR,writeD,Clock,readD1,readD2,Regdst,WE,Alusrc,符号扩展,
16、immediate,0,1,A,B,Zero,Alu result,ALU,Address,Write Data,Mem data,数据RAM,1,0,WE,1 0,jal,Regwrite,Memtoreg,Memwrite,Aluctl/slt/sftmd/sftm/I_format,左移2位,nBranch,Branch,0,1,0,1,jmp | jal,左移2位,addresst,PC+4,1,0,jrn,译码单元的设计,2018/10/14 P.36,MiniSys CPU中各单元(3),Control(控制单元) 根据指令中的指令码(op)和功能码(funct)的不同组合输出相应
17、的控制信号。,rd,PC,Clock,程序ROM,读地址,指令 31-0,4,控制单元,op,寄存器,0,1,func,rs,rt,readR1,readR2,writeR,writeD,Clock,readD1,readD2,Regdst,WE,Alusrc,符号扩展,immediate,0,1,A,B,Zero,Alu result,ALU,Address,Write Data,Mem data,数据RAM,1,0,WE,1 0,jal,Regwrite,Memtoreg,Memwrite,Aluctl/slt/sftmd/sftm/I_format,左移2位,nBranch,Branch
18、,0,1,0,1,jmp | jal,左移2位,addresst,PC+4,1,0,jrn,控制单元的设计,2018/10/14 P.38,MiniSys CPU中各单元(4),Exe(执行单元) 完成逻辑运算 完成算术运算 完成移位运算 完成比较转移的PC值计算 完成比较后赋值,rd,PC,Clock,程序ROM,读地址,指令 31-0,4,控制单元,op,寄存器,0,1,func,rs,rt,readR1,readR2,writeR,writeD,Clock,readD1,readD2,Regdst,WE,Alusrc,符号扩展,immediate,0,1,A,B,Zero,Alu res
19、ult,ALU,Address,Write Data,Mem data,数据RAM,1,0,WE,1 0,jal,Regwrite,Memtoreg,Memwrite,Aluctl/slt/sftmd/sftm/I_format,左移2位,nBranch,Branch,0,1,0,1,jmp | jal,左移2位,addresst,PC+4,1,0,jrn,执行单元的设计,2018/10/14 P.40,MiniSys CPU中各单元(5),Dmemory(存储单元) 定义数据存储单元RAM 实际完成对数据存储器的读写操作,rd,PC,Clock,程序ROM,读地址,指令 31-0,4,控制单
20、元,op,寄存器,0,1,func,rs,rt,readR1,readR2,writeR,writeD,Clock,readD1,readD2,Regdst,WE,Alusrc,符号扩展,immediate,0,1,A,B,Zero,Alu result,ALU,Address,Write Data,Mem data,数据RAM,1,0,WE,1 0,jal,Regwrite,Memtoreg,Memwrite,Aluctl/slt/sftmd/sftm/I_format,左移2位,nBranch,Branch,0,1,0,1,jmp | jal,左移2位,addresst,PC+4,1,0,
21、jrn,存储单元的设计,2018/10/14 P.42,时序关系,器件固有延迟维持的流水,2018/10/14 P.43,数据RAM初始化文件,dmem16.mif文件(自行创建),DEPTH = 1024; -10 位地址线 WIDTH = 32; - 数据宽度32位ADDRESS_RADIX = HEX; -地址采用16进制描述 DATA_RADIX = HEX; - 数据采用16进制描述CONTENT BEGIN0 : 00000055; - 行号是地址除以4的结果1 : 000000AA;23FF : 00000000; END;,2018/10/14 P.44,数据RAM的例化,数据
22、存储器的实现,lpm_ram_dq ram(.data(write_data) , .address(address11: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
23、“; defparam ram.lpm_address_control = “REGISTERED“; defparam ram.lpm_file = “dmem16.mif”; /存储体初始化文件 / 以字为单位,所以地址都是偶数地址,2018/10/14 P.45,MiniSys CPU中各单元(6),MiniSys (顶层设计) 顶层整合模块 前面已经给出了MiniSys cpu 的5大部件的设计,最后需要将这5大部件组合成一个完整的CPU,可以用GDT图,也可以用Verilog的元件例化的方法来完成。 在元件例化的时候特别注意字母大小写一定要一致。,2018/10/14 P.46,顶层
24、的设计(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; output15:0 pc, alu_result_out, read_data_1_out; output15:0 read_data_2_out, write_data_o
25、ut; output31:0 instruction_out; output branch_out, zero_out, memwrite_out, regwrite_out; output i_format_out;,2018/10/14 P.47,顶层的设计(3),内部信号定义,wire15:0 pc_plus_4;wire15:0 read_data_1;wire15:0 read_data_2;wire15:0 sign_extend; wire15:0 add_result; wire15:0 alu_result; wire15:0 read_data;wire15:0 pc_ne
26、xt,opcplus4; wire alusrc ,jrn,i_format,regwrite, zero, memwrite; wire branch, memtoreg, memread, memreg; wire nbranch,jmp,jal,regdst;wire1:0 aluop; wire31:0 instruction;,2018/10/14 P.48,顶层的设计(4),内部信号赋值,assign instruction_out = instruction ; assign alu_result_out = alu_result ; assign read_data_1_out
27、 = 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/10/14 P.49,顶层的设计(5),
28、元件例化,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/10/
29、14 P.50,指令执行的分析,各类指令执行的分析,Clock,程序ROM,读地址,指令 31-0,4,控制单元,op,寄存器,0,1,func,rs,rt,rd,readR1,readR2,writeR,writeD,Clock,readD1,readD2,Regdst,WE,Alusrc,符号扩展,immediate,0,1,A,B,Zero,Alu result,ALU,Address,Write Data,Mem data,数据RAM,1,0,WE,1 0,jal,Regwrite,Memtoreg,Memwrite,Aluctl/slt/sftmd/sftm/I_format,左移2
30、位,nBranch,Branch,0,1,0,1,jmp | jal,左移2位,addresst,PC+4,1,0,jrn,MIPS instruction format,op,I-format,J-format,R-format,rs,rt,rd,func,op,rs,rt,immediate,op,address,除jr指令之外的其他16条R-format指令,Clock,程序ROM,读地址,指令 31-0,4,控制单元,op,寄存器,0,1,func,rs,rt,rd,readR1,readR2,writeR,writeD,Clock,readD1,readD2,Regdst,WE,Al
31、usrc,符号扩展,immediate,0,1,A,B,Zero,Alu result,ALU,Address,Write Data,Mem data,数据RAM,1,0,WE,1 0,jal,Regwrite,Memtoreg,Memwrite,Aluctl/slt/sftmd/sftm/I_format,左移2位,nBranch,Branch,0,1,0,1,jmp | jal,左移2位,addresst,PC+4,1,0,jrn,MIPS instruction format,op,I-format,J-format,R-format,rs,0,0,func,op,rs,rt,immed
32、iate,op,address,jr,0,Clock,程序ROM,读地址,指令 31-0,4,控制单元,op,寄存器,0,1,func,rs,rt,rd,readR1,readR2,writeR,writeD,Clock,readD1,readD2,Regdst,WE,Alusrc,符号扩展,immediate,0,1,A,B,Zero,Alu result,ALU,Address,Write Data,Mem data,数据RAM,1,0,WE,1 0,jal,Regwrite,Memtoreg,Memwrite,Aluctl/slt/sftmd/sftm/I_format,左移2位,nBr
33、anch,Branch,0,1,0,1,jmp | jal,左移2位,addresst,PC+4,1,0,jrn,MIPS instruction format,op,I-format,J-format,R-format,rs,rt,rd,func,op,rs,rt,immediate,op,address,addi, addiu,andi, ori, xori,lui,slti,sltiu,Clock,程序ROM,读地址,指令 31-0,4,控制单元,op,寄存器,0,1,func,rs,rt,rd,readR1,readR2,writeR,writeD,Clock,readD1,readD
34、2,Regdst,WE,Alusrc,符号扩展,immediate,0,1,A,B,Zero,Alu result,ALU,Address,Write Data,Mem data,数据RAM,1,0,WE,1 0,jal,Regwrite,Memtoreg,Memwrite,Aluctl/slt/sftmd/sftm/I_format,左移2位,nBranch,Branch,0,1,0,1,jmp | jal,左移2位,addresst,PC+4,1,0,jrn,MIPS instruction format,op,I-format,J-format,R-format,rs,rt,rd,fun
35、c,op,rs,rt,immediate,op,address,lw,Clock,程序ROM,读地址,指令 31-0,4,控制单元,op,寄存器,0,1,func,rs,rt,rd,readR1,readR2,writeR,writeD,Clock,readD1,readD2,Regdst,WE,Alusrc,符号扩展,immediate,0,1,A,B,Zero,Alu result,ALU,Address,Write Data,Mem data,数据RAM,1,0,WE,1 0,jal,Regwrite,Memtoreg,Memwrite,Aluctl/slt/sftmd/sftm/I_f
36、ormat,左移2位,nBranch,Branch,0,1,0,1,jmp | jal,左移2位,addresst,PC+4,1,0,jrn,MIPS instruction format,op,I-format,J-format,R-format,rs,rt,rd,func,op,rs,rt,immediate,op,address,sw,Clock,程序ROM,读地址,指令 31-0,4,控制单元,op,寄存器,0,1,func,rs,rt,rd,readR1,readR2,writeR,writeD,Clock,readD1,readD2,Regdst,WE,Alusrc,符号扩展,im
37、mediate,0,1,A,B,Zero,Alu result,ALU,Address,Write Data,Mem data,数据RAM,1,0,WE,1 0,jal,Regwrite,Memtoreg,Memwrite,Aluctl/slt/sftmd/sftm/I_format,左移2位,nBranch,Branch,0,1,0,1,jmp | jal,左移2位,addresst,PC+4,1,0,jrn,MIPS instruction format,op,I-format,J-format,R-format,rs,rt,rd,func,op,rs,rt,immediate,op,ad
38、dress,beq, bne,Clock,程序ROM,读地址,指令 31-0,4,控制单元,op,寄存器,0,1,func,rs,rt,rd,readR1,readR2,writeR,writeD,Clock,readD1,readD2,Regdst,WE,Alusrc,符号扩展,immediate,0,1,A,B,Zero,Alu result,ALU,Address,Write Data,Mem data,数据RAM,1,0,WE,1 0,jal,Regwrite,Memtoreg,Memwrite,Aluctl/slt/sftmd/sftm/I_format,左移2位,nBranch,B
39、ranch,0,1,0,1,jmp | jal,左移2位,addresst,PC+4,1,0,jrn,MIPS instruction format,op,I-format,J-format,R-format,rs,rt,rd,func,op,rs,rt,immediate,op,address,j,Clock,程序ROM,读地址,指令 31-0,4,控制单元,op,寄存器,0,1,func,rs,rt,rd,readR1,readR2,writeR,writeD,Clock,readD1,readD2,Regdst,WE,Alusrc,符号扩展,immediate,0,1,A,B,Zero,
40、Alu result,ALU,Address,Write Data,Mem data,数据RAM,1,0,WE,1 0,jal,Regwrite,Memtoreg,Memwrite,Aluctl/slt/sftmd/sftm/I_format,左移2位,nBranch,Branch,0,1,0,1,jmp | jal,左移2位,addresst,PC+4,1,0,jrn,MIPS instruction format,op,I-format,J-format,R-format,rs,rt,rd,func,op,rs,rt,immediate,op,address,jal,31,2018/10/
41、14 P.59,设计流水线处理器的考虑,选择合适的流水级数 尽量保持流水线各级延迟相等 流水线中的相关性,2018/10/14 P.60,设计流水线处理器的考虑,结构相关,2018/10/14 P.61,设计流水线处理器的考虑,数据相关 写后读相关(RAW) 阻塞 乱序 定向转发法,2018/10/14 P.62,设计流水线处理器的考虑,数据相关 读后写相关(WAR) ?,2018/10/14 P.63,设计流水线处理器的考虑,数据相关 写后写相关(WAW) ?,2018/10/14 P.64,设计流水线处理器的考虑,控制相关 尽早判断分支条件是否满足 尽早算出分支条件满足时的转移地址(PC的新值),2018/10/14 P.65,设计多核处理器的考虑,简单核还是复杂核? 同构核还是异构核? 几个核之间怎么配合?中断怎么处理? 数据一致性上的问题 软件上的同步与互斥 核间互联问题,