CPU设计示例
- 格式:ppt
- 大小:1.25 MB
- 文档页数:58
图5-1-1 基本CPU 构成原理图除了程序计数器(PC),其余部件在前面的实验中都已用到,在此不再讨论。
系统的程序计数器(PC)和地址寄存器(AR)集成在一片CPLD 芯片中 .CLR 连接至CON 单元的总清端CLR,按下CLR 按钮,将使PC 清零,LDPC 和T3 相与后作为计数器的计数时钟,当LOAD为低时,计数时钟到来后将CPU 内总线上的数据打入PC。
如图5-1—2所示。
图5-1—2 程序计数器(PC)原理图本模型机和前面微程序控制器实验相比,新增加一条跳转指令JMP,共有五条指令:IN (输入)、ADD(二进制加法)、OUT(输出)、JMP(无条件转移),HLT(停机),其指令格式如下(高4位为操作码):其中JMP 为双字节指令,其余均为单字节指令,********为addr 对应的二进制地址码。
微程序控制器实验的指令是通过手动给出的,现在要求CPU 自动从存储器读取指令并执行。
根据以上要求,设计数据通路图,如图5—1—3 所示。
本实验在前一个实验的基础上增加了三个部件,一是PC(程序计数器),另一个是AR(地址寄存器),还有就是MEM(主存)。
因而在微指令中应增加相应的控制位,其微指令格式如表5-1—1 所示.图5—1-3 数据通路图表5—1-1 微指令格式系统涉及到的微程序流程见图5-1—4 所示,当拟定“取指”微指令时,该微指令的判别测试字段为P<1〉测试。
指令译码原理见图3—2-3 所示,由于“取指"微指令是所有微程序都使用的公用微指令,因此P<1〉的测试结果出现多路分支。
本机用指令寄存器的高6 位(IR7—IR2)作为测试条件,出现5路分支,占用5个固定微地址单元,剩下的其它地方就可以一条微指令占用控存一个微地址单元随意填写,微程序流程图上的单元地址为16 进制。
图5-1-4 简单模型机微程序流程图当全部微程序设计完毕后,应将每条微指令代码化,表5-1-2 即为将图5-1—4 的微程序流程图按微指令格式转化而成的“二进制微代码表”。
左家垅职业技术学院岳麓山本文通过一个简单的CPU模型设计,阐述CPU设计过程中的一些原理和经验。
目录开始前的话 (3)总体组成 (3)运算器 (3)补码 (3)算术单元 (4)逻辑单元 (5)算术逻辑单元 (6)移位器 (7)运算器综合 (8)溢出判断 (9)运算器设计的总结和补充 (11)寄存器组 (11)注意事项 (11)使能端 (12)构建寄存器组 (12)控制器 (13)程序计数器 (14)指令寄存器 (14)数据通路设计 (14)控制字 (15)指令译码器 (16)状态寄存器 (18)控制器综合 (18)CPU综合 (19)封装 (19)指令周期和机器周期 (21)编译器开发 (23)结束语 (24)参考资料 (24)开始前的话本人大学党一个,计算机科学与技术专业,平时对电子技术、计算机科学和软件技术有所研究,在此只是分享一些自己平时学习、游戏中的电子和计算机科学方面的经验,希望能够给同样学习中的人带来启发,另外如果有任何意见、建议、批评,欢迎提出来。
由于对于大部分学电子和信息的同学来说,数电已能熟练掌握,所以在此略过数电的知识,如果对数电有些不明白的,可以参考其他数电教程。
本教程开始之前要求至少要掌握:基本逻辑门、组合逻辑电路分析设计方法、译码器、编码器、数据选择器、比较器、加法器、三态门、基本触发器、锁存器、寄存器、移位寄存器、计数器。
在这里采用的工具是Logisim,这是一个较为简易的仿真工具,不会涉及具体的芯片,而是纯粹从原理的角度来分析仿真,对于简单的CPU仿真最合适不过了。
此外,本人水平有限,文中难免出现纰漏和错误,欢迎指出!这里会从零开始,一步一步搭建电路,阐述原理,最终实现一个类似MIPS架构的CPU。
另外我会采用尽可能简洁的语言。
总体组成CPU一般包括寄存器组、运算器和控制器。
另外对于现代的CPU,大都配置了Cache。
首先,让我们来构造运算器运算器一般简单CPU实现的运算操作有算术运算、逻辑运算和移位。
计算机组成原理CPU设计实验报告课程设计题目:16位CPU设计学院: 信息学院班级:电子A班学号:1115102015姓名:方茹1目录1 实验方法 ..................................................................... . (4)2 总体说明 ..................................................................... ................................................. 5 2.1指令系统: .................................................................... .......................... 5 2.1.1指令格式分类(按指令字长和操作数不同): ...................................................... 5 2.1.2具体指令汇总表: .................................................................... .......................... 6 2.1.3相关指令流程图: .................................................................... .......................... 6 2.1.4指令数据通路的构建: .................................................................... ................... 8 2.1.5指令的分组及节拍: .................................................................... ..................... 12 2.1.6指令执行状态图:(见下页)..................................................................... ........... 13 2.1.7具体微指令: .................................................................... ............................... 13 2.2 系统整体介绍 ..................................................................... .................. 16 2.2.1系统基本模块划分 ..................................................................... ....................... 16 2.2.2总体结构图:(见下页)..................................................................... (17)3 CPU的控制逻辑与具体数据通道设计 ..................................................................... ......18 3.1取指令逻辑的设计 ..................................................................... .. (19)3.1.1指令地址的保存 ..................................................................... (19)3.1.2指令存储器 ..................................................................... .................................. 20 3.1.3下一条指令地址的计算 ..................................................................... ................ 20 3.2指令译码逻辑的设计...................................................................... ...................... 21 3.3指令执行逻辑的设计...................................................................... ...................... 22 3.4存储器访问逻辑的设计 ..................................................................... ................... 23 3.5结果写回逻辑的设计...................................................................... ...................... 24 3.6单周期CPU的总成...................................................................... (25)4各部分说明 ..................................................................... .............................................26 4.1ALU .................................................................................................................... 26 4.2数据选择器BUS_MUX ................................................................ ........................ 28 4.3器件T1 ..................................................................... .......................................... 30 4.4标志寄存器FLAG_REG ............................................................... ........................ 31 4.5T2: .................................................................... ................................................ 33 4.6程序计数器PC ..................................................................... ............................... 33 4.7地址寄存器AR和指令寄存器IR: .................................................................... .. 34 4.8寄存器、寄存器组和寄存器的选择.......................................................................36 4.9一位控制信号/WR .................................................................... ........................... 37 4.10 节拍发生器 ..................................................................... .................................. 37 4.11控制逻辑 ..................................................................... ...................................... 39 4.12T3...................................................................... ................................................ 42 4.13REG_OUT ......................................................................................................... 43 4.14存储器 ..................................................................... .......................................... 44 4.15总线选择器 ..................................................................... .. (45)24.16REG_TEST ............................................................... .. (46)5附录: .................................................................... .. (47)附录A:组员分工: .................................................................... .. (47)附录B:组员设计总结: .................................................................... . (47)31 实验方法实验要完成的工作主要包括:指令系统的设计,FPGA-CPU的整体结构设计及其细化,逻辑设计的具体实现(VHDL语言程序的编写),软件模拟,以及硬件调试。
手把手教你编写一个超级简单的CPUFPGA的处理能力固然强大,但在进行程序化的任务时,用状态机来实现有时就显得不如CPU写程序那么简洁。
在FPGA里面也可以用逻辑来搭出简单的CPU,并固化一小段代码去实现特定的功能。
考虑下最简单的CPU是什么样子呢?最少,需要有读取程序(指令),并执行指令的过程。
指令存放在一块内存当中,CPU每步取一条指令来执行,根据读出的指令内容,内部的状态发生转变——比如寄存器按指令要求进行运算,比如访问外部的端口(或总线)。
指令是一个编码,描述这一步需要做的事情;执行指令的过程就是状态转移的过程。
我实验的这个超简单CPU是这样:上图中,PC是Program Counter,就是程序计数器,选择ROM中程序执行的地址。
opr用来存放当前的指令,它的内容从ROM 中读到。
寄存器还有A寄存器和R0~R7寄存器,用来计算和存放结果,另外还有一个1-bit的“零'标志位zflag,是给条件转移指令用的。
当然,若只是里面的寄存器变来变去,这个CPU就没有实用价值了,所以还有一个输入端口,以及一个输出端口,用来和寄存器A交换数据。
设计指令字长为8-bit,寄存器宽度也为8-bit。
每条指令都是从ROM中读8-bit,可以最多有256种不同的指令,当然指令中能编码立即数,所以指令不会有那么多种。
我给这个CPU设计了14条指令:跳转指令有2条,无条件转移和Z条件转移,转移范围为5-bit相对地址,即-16~+15。
带立即数指令有4条,因为指令才8-bit,立即数只好分配4-bit了。
装入A寄存器的高4位或低4位,以及与A做加减法。
R0~R7寄存器只能与A 寄存器进行copy和比较操作。
影响zflag标志的指令有位测试指令TESTB, 比较指令COMP和加减法指令。
指令空间并没有用完,可以根据需要再补充指令。
用Verilog语言来写这个CPU的状态转移部分:module cpu0(clk, Iaddr, Ibus, PortI, PortO);input clk;output [9:0] Iaddr;input [7:0]Ibus;input [7:0] PortI;output reg [7:0] PortO;reg [9:0] pc;reg [7:0] RA;reg [7:0] Rn[0:7];reg zflag;assign Iaddr=pc;reg [7:0] opr;always @(posedge clk)opr wire [1:0]opc1=opr[7:6];wire [5:0] opx=opr[5:0];wire [1:0]opc2=opr[5:4];wire [3:0] imm4=opr[3:0];wire [2:0]sel=opr[2:0];reg branch;always @(posedge clk) beginpc branch if(~branch) beginif(opc1==2'd3)if(opr[5] | zflag) beginpc branch endendendalways @(posedge clk) beginif(~branch) beginif(opc1==2'd1 &&opc2==2'd0)Rn[sel] endendalways @(posedge clk) beginif(~branch) begincase(opc1)2'd0:beginif(opx==6'd0)RA end2'd1: beginif(opc2==2'd1)RA end2'd2: begincase(opc2)2'd0: RA[7:4] 2'd1: RA[3:0] 2'd2:RA 2'd3: RA endcaseendendcaseendendalways@(posedge clk) beginif(~branch) beginif(opc1==2'd0 && opx==6'd1)PortO endendalways @(posedge clk)beginif(~branch) beginif(opc1==2'd1) begincase(opc2)2'd3: zflag 2'd2: zflag endcaseendif(opc1==2'd2)beginif(opc2[1])zflag endendendendmodule除了指令所描述的寄存器的操作外,还多了一个branch寄存器和条件判断,这是做什么呢?请注意,PC寄存器所指的是下一条要执行的指令地址(默认总是pc 写测试程序了,没有编译器,汇编程序都得自己写呢。
作业:10、解:对非常简单CPU增加了一条CLEAR指令后的新的状态图如下:其RTL代码如下:FETCH1:AR PCFETCH2:DR M, PC PC+1FETCH3:IR DR[7..6], AR DR[5,0]ADD1:DR MADD2:AC AC+DRAND1:DR MAND2:AC AC^DRJMP :PC DR[5..0]R5 :DR[5] 1 或DR[5] 0INC :AC AC+1CLEAR:AC 011、解:一、确定CPU的用途以下设计的CPU是要用来执行取反运算、加法运算、逻辑或运算、减法运算这四条指令的,而且该CPU能够访问64个字的存储器,每个字为8位宽。
字长:8位D[7....0]寻址范围:64Btye ,2^6=64,A[5....0]二、确定ISA1、程序员可访问的寄存器在下表中,为了完成COM , JREL , OR 和SUB1这四条指令,显然我们只需用到一个通用寄存器AC——8位累加器就可以实现。
指令操作码操作COM 00XX XXXX AC AC' (取反)JRET 01AA AAAA PC PC+00AA AAAAOR 10AA AAAA AC AC^M[00AA AAAA]SUB1 11AA AAAA AC AC—M[00AA AAAA]—12、CPU还需要一些其他的寄存器以便完成取指令(或数据)、译码和执行指令所必须的内部操作,最基本的寄存器有:AR(地址寄存器)——6位,由A[5.....0]向存贮提供地址PC (程序计数器)——6位,指出下一条指令的地址DR(数据寄存器)——8位,通过D[7....0]从存贮器接受指令和数据IR(指令寄存器)——2位,存放从存贮器中取回的指令的操作码部分。
三、为CPU设计状态图为了确定CPU的状态图,需对每条指令作如下分析:1、从存贮器取出指令(所有指令都相同)2、指令译码3、指令执行从存贮器中取出指令:1、原理:根据冯. 诺依曼型机的原理(指令在存贮器中按顺序存放.......), 在CPU能执行指令之前,它必须将这条指令从存贮中取出,CPU通过执行如下的操作序列完成这个任务的:【1】选择存贮单元由A[5... 0]确定【2】对A[5... 0]译码、延迟、并向存贮器发一个信号(如READ或R/W'=1),使存贮器将此指令输出到它的输出引脚。
精简指令集(RISC)32位单周期cpu设计电气513摘要:该作品为一个精简指令集的32位单周期cpu,具有18条基本的指令,可以实现数据的存取、运算等基本功能。
测试程序执行过程中,CPU各部件的具体数据可以显示到FPGA的数码管上。
目录1.CPU的整体电路设计;2.CPU的指令格式;3.基本功能部件的设计;4.主要功能部件的设计;5.CPU的封装;6.FPGA测试。
1.CPU的整体电路设计CPU主要组成部分有:运算器(ALU)、控制器(Control Unit)、寄存器堆(Register Files)、取指电路及相关基础部件(如选择器)等构成。
下图为cpu的电路图。
CPU的电路包括数据路径(Data path)和控制部件(Control Unit)两大部分。
下面介绍路径的设计。
1.1 下一条指令地址的选择下一条指令的地址有3种情况:1.程序不转移时下一条指令的地址为PC+4;2.执行beq和bne指令发生转移时,下一条指令的地址是PC加4,再加上符号扩展的偏移量左移2位的和;3.执行j指令时转移的目标地址是指令中的低26位地址左移2位,再与PC+4的高4位拼接在一起。
下一条指令地址的产生和选择电路如图所示。
图中控制器(Control Unit)根据op、func和zero(对于beq和bne指令)信号产生相应的转移控制选择信号pcsource。
1.2 ALU的输入端ALU的输入端有2个:A输入端和B输入端。
A、B输入端分别有2种输入情况。
对于A输入端,有寄存器堆的A_data和移位数sa输入。
对于B输入端,有寄存器堆的B_data和符号扩展后的立即数imm输入。
其输入数据路径如图所示。
ALU的A、B端具体输入哪路数据由控制器(Control Unit)根据指令译码产生控制信号shift和aluimm 来选择。
1.3寄存器堆的输入端寄存器堆的A_addr和B_addr的输入来自指令,分别只有一种输入,W_addr有2种,而Data有4种输入。