16位CPU设计
组成原理课程设计(16位全加器电路的设计与实现)

16位全加器电路的设计与实现学生姓名:杨传福指导老师:王新摘要本课程设计主要利用门电路完成一个16位的全加器电路的设计与实现。
本设计采用逐步求解的方法,即先设计一位全加器,再利用一位全加器设计出四位全加器,最后在四位全加器的基础上设计出16位全加器,并使用VHDL语言编写程序,在MAX-PLUSⅡ仿真平台上进行仿真。
仿真结果表明,本课程设计中设计出的16位全加器能正确完成16位二进制数的加法运算。
关键词全加器;门电路;先行进位Abstract:This curriculum design primarily use the gate circuit to complete a 16-bit full-adder circuit.The design solve this problem with step-by-step approach, namely start designing one full-adder, and then use one full-adder design a four full-adder , the last design the 16-bit full-adder based on the four full-adder,and use VHDL language programming, at MAX-PLUS Ⅱsimulation on simulation platform. The simulation results show that the design of the curriculum design of the 16-bit full-adder to add a 16-bit binary number addition operations.Keywords:Full-adder; Gate circuit; First binary1引言1.1课程设计的背景随着计算机科学技术的发展,人们获得信息的途径更加多样,获取信息的速度更加快捷。
8086cpu

8086 CPU简介8086 是英特尔(Intel)公司于 1978 年推出的 16 位微处理器。
它是最早的 x86 微处理器之一,被广泛应用于个人电脑(PC)的起步阶段,对于计算机技术的发展和普及起到了重要的推动作用。
本文将介绍 8086 CPU 的基本特征、工作原理和应用领域。
8086 CPU 的特点1.16 位架构: 8086 CPU 是一种 16 位微处理器,相对于 8 位微处理器,它能够处理更多的数据,提高计算机的处理能力。
2.寻址能力强: 8086 CPU 支持 1MB 的物理内存寻址,这在当时是非常先进的。
它通过分段的方式来实现 1MB 内存的寻址,其中代码段和数据段的概念对于内存管理非常重要。
3.复杂指令集: 8086 CPU 拥有丰富的指令集,包括算术运算、逻辑运算、条件分支、循环等指令。
这使得编程人员能够更灵活地进行程序设计。
4.支持多种工作模式: 8086 CPU 支持实模式和保护模式两种工作模式,实模式是与早期的 8080 和 8085 微处理器兼容的模式,保护模式则是为了在用户程序和操作系统之间提供更高的安全性和稳定性。
8086 CPU 的工作原理8086 CPU 主要包括以下几个部分:1.总线接口单元(BIU):负责处理与外部器件之间的数据传输,例如内存读写、I/O 设备访问等。
2.执行单元(EU):负责指令的解码和执行,包括算术逻辑运算、数据传输等操作。
3.时钟发生器(CLK):生成 CPU 的时钟信号,控制CPU 的工作频率。
8086 CPU 的工作过程如下:1.取指令(Fetch): BIU 从指令队列(Instrution Queue)中读取指令,并将其送往指令寄存器(Instruction Register)中进行解码。
2.解码指令(Decode): EU 解码指令,并将执行所需的数据从寄存器堆或内存中读取出来。
3.执行指令(Execute): EU 执行指令中的操作,包括算术运算、逻辑运算、数据传输等。
微机原理16位32位CPU(8086)

中 断 允 许
半 进 借 位 标 志
奇 偶 标 志
进 借 位 标 志
1-有进、借位 0-无进、借位
1-低4位向高4位有进、借位 0-低4位向高4位无进、借位
④标志寄存器
根据功能,标志可以分为两类:状态标志和控制标志
状态标志:表示前面的操作执行后,ALU所处的状态,这种状态像某 种先决条件一样影响后面的操作。 控制标志:表示对某一种特定的功能起控制作用。指令系统中有专门 的指令用于控制标志的设置和清除。 状态标志有6个,即SF、ZF、AF、PF、CF和OF ①符号标志SF(Sign Flag) 和运算结果的最高位相同。表示前面运
若TF=0 正常执行程序
返回
④标志寄存器
举例:
+ 0101 0100 0011 1001 0100 0111 0110 1010
3.8086的总线周期的概念
为了取得指令或传送数据,就需要CPU的总线接口部件执行一个 总线周期。 总线周期(机器周期):CPU通过总线与存储器或I/O接口进行一 次数据传输所需的时间。 在8086/8088中,一个最基本的总线周期由4个时钟周期组成,将4
80386
80486 Pentium Pentium IV
32
32 32 32
27.5万
120万 310万 4200万
12.5M,后提高到 20M,25M,33M
25MHz逐步提高到 33MHz、50MHz 60MHZ和66MHZ, 后提高到200MHZ 2.4G
0.1us
2.1 16位微处理器8086
式下各位引脚功能,如出现功能不同的引脚再具体讲解 。
DIP双列直插式封装
QFP塑料方型扁平式封装
Pentium4 3.2GHz LGA775 栅格阵列封装
大师教你如何制作一个简单的16位CPU

mv指令将Ry的数据转移到Rx中,mvi将立即数D转移到Rx当中,add将Rx和Ry的和放到Rx中,sub同上,不过执行的是减法。 首 先来说明mv指令是如何执行的:mv指令将Ry的值移入Rx寄存器当中,这两个寄存器都是由一组D触发器构成,而D触发器的个数取决 于寄存器的宽度,就像 32位机、64位机这样,那他们的寄存器使用的D触发器的个数就是不一样的。当执行mv rx,ry时,中间的多路器(图 中最大的那个multiplexer)选通Ry,让Ry寄存器驱动总线,这个时候Bus上的信号就是Ry的值;然后再看到 R0~R7上分别有R0in~R7in信 号,这个信号是使能信号,当这个信号有效时,在上升沿此触发器会将din的数据输入,所以说到这里大家一定想到 了,这个时候Rx触发 器上的Din信号就会变为有效,这样过了一个时钟周期后Ry的值就被送到了Rx当中。 与mv指令类似,mvi指令也将一个数据送入Rx当中,只不过这次的数据存在指令当中,是立即数,所以Rx的Din信号会变为有效,而多路 器会选择IR中的数据,因为mvi指令的立即数存在指令当中。并且进行一定处理,例如扩展等。 add 指令会让多路器先选择Rx,然后Ain信号有效,这样一个时钟周期后,Rx数据被送入Alu的A寄存器当中,这时多路器选择 Ry,addsub信号为 add以指示ALU进行加法操作,Gin有效让G寄存器存放运算结果,然后再过一个时钟周期G当中的数据就是Rx与Ry的 和,这时多路器再选择 Gin,Rx的Din有效,过了一个时钟周期后数据就被存放到Rx当中了。 sub的过程与add差不多,不过addsub信号是sub指示ALU进行减法。 【分页导航】
计算机组成原理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语言程序的编写),软件模拟,以及硬件调试。
16位cpu原理

16位cpu原理
16位CPU原理主要是指CPU内部的数据总线宽度为16位,一次最多可以处理16位的数据。
CPU中的运算器、寄存器和地址加法器等都与16位数据总线相关联。
在8086CPU中,外部地址总线宽度是20位,通过在CPU 内部使用两个16位地址合成的方法来形成一个20位的物理地址,从而实现CPU内外物理地址位数相等。
CPU访问内存时,由段寄存器提供内存单元的段地址,IP寄存器存放偏移地址,然后将段地址和偏移地址发送至地址加法器,将两个16位地址合成为一个20位的物理地址,并发送给输入输出控制电路,再通过CPU外部地址总线将这个20位的物理地址传递至指定的存储器。
《简化CPU设计》-

电子科技大学通信学院简化CPU设计2013年9月一、课程设计要求1.设计16位精简指令集CPU指令系统;2.完成精简指令集CPU的结构设计和所有模块的代码编写,并仿真验证;3.编写能够完成加法器﹑流水灯等功能的汇编程序,并翻译成二进制机器码;4.设计CPU外围模块如分频器,存储器和IO接口,并在软件平台上仿真CPU执行程序的完整过程;5.下载工程到FPGA芯片,在硬件资源上实现。
二、设计思路1、CPU指令集系统设计本课程设计所设计的RISC_CPU指令长度为16位,能够处理16位数据,指令中需要操作符,寄存器地址和立即数等字段。
完成立即数数据载入操作需要如下指令:mil:将立即数放在低8位mih:将立即数放在高8位因为一条指令无法载入完整16比特立即数数据,设计指令格式中用于存放立即数的字段为8bits,将16bits数据传递到通用寄存器需要2条指令,“mil R1,I(低8位)”将立即数I 的低8位传递给通用寄存器R1,“mih R1,I(高8位)”将立即数I的高8位传递给通用寄存器R1。
完成存储器或I/O数据载入与存储的操作需要如下指令:lda:载入指定地址数据sta:储存数据到指定地址inp:从端口输入oup:输出到端口因为存储器中有些地址的数据可能是有工程意义的,对这些地址上的数据的处理是必不可少的。
“lda Rd Rs”将通用寄存器Rs的数据作为指定地址,将存储器中该地址上的数据载入到通用寄存器Rd中,“sta Rd Rs”将通用寄存器Rd的数据作为指定地址,将通用寄存器Rs的数据储存到存储器该地址上。
完成通用寄存器阵列内数据运算操作需要如下指令:and:寄存器数据与操作orr:寄存器数据或操作not:寄存器数据非操作shl:左移shr:右移add:寄存器数据相加sub:寄存器数据相减mul:寄存器数据相乘cmp:寄存器数据相比较这些是本CPU设计能够完成的数据处理操作,有3点需要注意:1、所有操作的数据必须储存于通用寄存器中2、乘法运算只能进行8比特数据相乘,溢出则取其低8位数据相乘3、cmp指令的结果会影响标志位,该标志位可作为分支操作的条件,但执行cmp指令之前建议先清除相关标志位。
8086-16位微处理器介绍

8086-16位微处理器介绍第⼆章 8086/8088(16位)微处理器第⼀节、16位微处理器第⼀代微处理器 1971年Intel 公司推出4004和8008,是4和8位微处理器,采⽤PMOS ⼯艺。
第⼆代微处理器 1974年推出的8080、M6800、Z-80等,是8位微处理器,采⽤NMOS ⼯艺。
第三代微处理器 70年代后期Intel 公司推出8086/8088、Motorola 公司M68000、Zilog 公司的Z8000,是16位微处理器,采⽤HMOS ⼯艺。
80年代以来,Intel 公司推出80186⽤80286,与8086/8088兼容。
第四代微处理器 1985年,推出的80386及M68020是32位微处理器。
1989年推出80486。
1993年推出Pentium 及80586等更⾼性能的32位和64位微处理器。
第⼆节8086/8088CPU 结构微处理器 8086, 8088结构类似,内部都是16位总线,但外部性能是有区别。
8086CPU 功能结构分为两部分:总线接⼝部件BIU ,执⾏部件EU 。
两部分各⾃执⾏⾃⼰的功能并⾏⼯作,这种⼯作⽅式与传统的计算机在执⾏指令时的串⾏⼯作相⽐极⼤的提⾼了⼯作效率。
计算机执⾏程序时,CPU 的⼯作顺序是:取指令执⾏指令再取指令再执⾏指令...特点:CPU 串⾏⼯作。
8086CPU ⼯作顺序是:取指令,执⾏指令同时进⾏。
特点:CPU 并⾏⼯作。
⼀、执⾏部件数据4个通⽤寄存器 : A X , B X , C X , D X4个专⽤寄存器 S P , B P , S I , D I算术逻辑部件:ALU8086/8088的EU 的特点1个标志寄存器: F R ;分成两类:状态标志、控制标志F R 的格式:⼆、总线接⼝部件BIU功能:负责与存储器、I/O 端⼝传送数据BIU 的组成:4个段地址寄存器(16位):CS 、DS 、ES 、SS16位指令指针寄存器IP20位地址加法器6字节的指令队列⼀条指令20地址的形成:由代码段CS 左移4位后与指令指针寄存器IP 内容相加得到注意:指令执⾏单元(EU )的功能:⼀般情况下,指令按照它存放的顺序先后执⾏,EU 源源不断地从指令队列中取得指令代码,达到满负荷地连续执⾏指令⽽省去“取指令”的时间。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
设计一个非常简单的16位CPUI hear and I forget. I see and I remember. I do and I understand.-- 孔子Easy Right 计算机研究小组 August 2003第一章简介1.目的本项目的目的是设计一个十分简单的基于冯·诺依曼架构的16位CPU。
我们将这颗CPU命名为ERVS16-CPU(EasyRight Very Simple 16-bit CPU )。
ERVS16有它自己的指令集。
并且,为了测试ERVS16,我们将在项目的最后用它的指令集编写一个十分简单的操作系统。
简单的说,我们在这个项目中只考虑CPU,寄存器,内存和指令集之间的关系。
这就是说我们只需要实现:(1)读/写寄存器(2)读/写内存(3)执行指令集中的所有指令图1.1是ERVS16的抽象图图 1.1 ERVS16抽象图假设系统时钟频率是1MHz,我们将在设计中使用正缘触发时钟频率(Positive Edge Triggered Clocking)技术。
复位信号首先输入一个高电平初始化 CPU ,接着当复位信号变为低电平时开始运行位于0地址的指令。
内存读/写循环时,要确保可读/可写信号是在低电平。
如图1.2和1.3,所有内存读写操作都需要一个信号周期来完成。
时钟技术(Clocking Methodology)定义了信号可以被读写的时间。
读写操作不能同时进行。
边缘触发时钟频率技术(Edge-triggered Clocking Methodology)正是被用来防止这样的情况发生。
边缘触发时钟频率技术是指机器存储的所有值都只能在时钟边缘被更新。
图1.2 内存读取循环时间图图1.3 内存写入循环时间图2.测试环境我们使用XILINX development board来测试对ERVS16的设计。
XILINX development board包括如下部件:一系列I/O设备(包括一系列开关(Switch)和7 Segment DisplaysRAM: 1k x 16ROM: 1k x 16:它被用于存储测试程序。
在模拟开始的时候,ROM镜像从一个测试文件(Test File)中加载。
这个文件的每一行都包括由空格隔开的两个值:一个十进制的地址和一个二进制的值。
比如:1 10101000101010102 01010110011001104 01010111101010007 00101010110101015 0111000101010000系统:包括内存和I/O设备的界面图1.4显示了development board的主要组成部分。
我们只需要实现红色的部分图 1.4 设计结构下表显示了development board上所有设备的技术细节。
设备地址范围访问模式ROM (1KW) 0x0000 – 0x03FF read onlyRAM (1KW) 0x0400 – 0x07FF read and writeonly 开关 0x8000read7 Segment Displays 0x8001 – 0x8002 read and write第一个串口0xC000 – 0xC001 read and write第二个串口0xC002 – 0xC003 read and write2.计划整个计划将在四个月内完成(从2003年7月27日到2003年11月27日)。
在项目完成之后,我们将会有设计真正CPU的经验。
这样的经验在我们今后设计复杂的CPU时会有帮助。
下面是时间表:27/7/2003 – 2/8/2003(1)确定支持的指令集及其格式(2)CPU的寄存器级元件图,包括程序计数器(Program counter),存储指令的内存(Instruction memory),存储数据的内存(Data memory),寄存器(Registers),算术和逻辑单元(ALU),以及如何连接它们;(3)用有限状态机(Finite State Machine,FSM)列出所有信号和状态的组合3/8/2003 – 9/8/2003(1)Multicycle diagram;(2)ALU支持所有指令集10/8/2003 – 16/8/2003(1)用VHDL实现图4.1的大多数部分第二章指令集1.限制和假设限制(1)字长16位(2)固定指令长度(3)支持子程序(4)位移语句的位移量是2的倍数假设(1)基于字(word)的寻址方式(2)寄存器到寄存器(3)8个16位寄存器(4)8个1位寄存器(5)3个操作数格式(6)当获取指令时PC自动增加2.指令及其格式ERVS16拥有它自己的指令集,每条指令都与一个硬件操作精确对应。
这些指令可以分为四类:算术指令机器码 ASM格式作用0001 ddds ssii i000 srl Rd, Rs , Iamt Rd <= Rs >> Iamt (unsigned)0001 ddds ssii i001 sra Rd, Rs, Iamt Rd <= Rs >> Iamt (signed)0001 ddds sstt t010 sla Rd, Rs, Iamt Rd <= Rs << Iamt0001 ddds sstt t011 add Rd, Rs, Rt Rd <= Rs + Rt0001 ddds sstt t100 sub Rd, Rs, Rt Rd <= Rs – Rt0110 ddds sstt teee mult Re, Rd, Rs, Rt Rd <= (Rs * Rt)15:0, Re <= (Rs * Rt)31:16 0111 ddds sstt teee div Re, Rd, Rs, Rt Rd <= Rs / Rt, Re <= Rs % Rt0001 ddds ss00 0101 not Rd, Rs Rd <= not Rs0001 ddds sstt t110 and Rd, Rs, Rt Rd <= Rs AND Rt0001 ddds sstt t111 or Rd, Rs, Rt Rd <= Rs OR Rt测试指令:格式作用机器码 ASM0000 ddds ssii i100 tstlt Bd, Rs, Rt Bd <= '1' if Rs < Rt else '0'0000 ddds ssii i001 tstgt Bd, Rs, Rt Bd <= '1' if Rs > Rt else '0'0000 ddds ssii i110 tstle Bd, Rs, Rt Bd <= '1' if Rs <= Rt else '0'0000 ddds ssii i011 tstge Bd, Rs, Rt Bd <= '1' if Rs >= Rt else '0'0000 ddds ssii i010 tsteq Bd, Rs, Rt Bd <= '1' if Rs = Rt else '0'0000 ddds ssii i101 tstne Bd, Rs, Rt Bd <= '1' if Rs != Rt else '0'内存指令:格式作用机器码 ASM0100 ddd0 iiii iiii li Rd, immed (Rd)15:8 <= 0; (Rd)7:0 <= immed0101 ddd0 iiii iiii lui Rd, immed (Rd)15:8 <= immed; (Rd)7:0 <= (Rd)7:0 1100 ddds ssii iiii lw Rd, immed(Rs) Rd <= mem[immed + Rs] (signed +) 1101 ddds ssii iiii sw Rd, immed(Rs) mem[immed + Rs] <= Rd (signed +)跳转和分支指令:格式作用机器码 ASM1011 ddd0 0000 0000 jr Rd PC <= Rd1010 ddd0 0000 0000 jalr Rd R7 <= PC; PC <= Rd1000 dddi iiii iiii beqz Bd, offset PC <= PC + offset if Bd = '0' else PC + 1 (signed) 关于上面图标的命名规则:Rd:存储目标操作数的寄存器,它保存操作结果Rs:第一个源操作数寄存器Rt:第二个源操作数寄存器Bd:存储布尔值的寄存器;Re:为乘法和除法指令准备的额外寄存器I:整数第三章数据路径(Datapath)和控制器(Control)1.介绍ERVS16基于MIPS,因此,它有下列特征[1]:ERVS16有两个主要部分:数据路径和控制。
数据路径负责处理算术操作,而控制器按照程序指令的指示来控制数据路径,内存和I/O设备的行为。
在ERVS16钟,对于任何一个指令,头两步都是相同的:(1)将程序计数器(program counter,PC)送到包含有代码的内存中,并获取后面的指令。
(2)读取一个或者两个寄存器,用指令空间来选择读取的寄存器。
ERVS16的功能单元执行包括两种逻辑元素:操作数值的元素和包含状态的元素。
(1)操作数值的元素(Combinational elements):它们的输出只取决于当前的输入(2)包含状态的元素(Sequential/State elements):有一些临时存储。
一个包含状态的元素至少有两个输入(被写入到元素的数值和时钟)以及一个输出(在前面某个时钟周期写入的值)。
包含状态的元素只有在可写(write_enable)信号被声明并且在时钟边缘才能被改写。
2.构建数据路径对于不同的指令,我们将构建不同的数据路径。
在本节中只实现一部分指令,其他指令将会在后面的章节实现。
(1)获取指令(Fetching instructions)和增加程序计数器值(incrementing PC)数据路径包括:(a)存放指令的内存(Instruction memory):它用来存储一个程序中的指令,是一个包含状态的元素(state element);(b)程序计数器:用于保存下一条指令的地址。