大师教你如何制作一个简单的16位CPU
16位CPU综合设计 计算机组成原理课程设计
16位CPU综合设计计算机组成原理课程设计西安科技大学高新学院计算机组成原理课程设计题目16位CPU综合设计专业及班级计算机科学与技术06级组长卢燕妮成员赵雯、徐静蕾、刘佳、王大伟、焦彤指导教师温乃宁日期 2009年1月目录1 教学目的、任务与实验设备 (1)1.1 学习目的 (1)1.2 学习任务 (1)2 CPU指令系统的设计 (1)2.1 指令格式 (1)2.2 寻址方式 (2)2.3 指令类型 (4)3 运算器的设计 (8)3.1 SN74181概述 (8)3.2 ALU的组成 (10)4 数据通路结构的建立 (11)4.1 部件设置 (12)4.2 总线与数据通路结构 (12)4.3 各类信息的传送路径 (12)4.4 微命令的设置 (14)5 组合逻辑控制器的设计 (15)5.1 功能描述和结构 (15)5.2 输入和输出端口定义 (15)5.3 指令译码器 (16)5.4 时序发生器 (20)5.5 编码器 (21)5.6 微操作信号发生器 (24)6 下载调试和验证 (24)6.1 实验接线 (24)6.2 连接实验线路,仔细查线无误后接通电源。
(25)6.3 写微程序和程序 (25)6.4 运行程序 (28)7 设计总结及体会 (29)8 参考文献 (29)1 教学目的、任务与实验设备1.1 学习目的从计算机的基本概念、基本组成及基本功能着手,对计算机的各个基本组成部件及控制单元的工作原理进行学习,掌握有关软、硬件的基本知识,尤其是各基本组成部件有机连接构成整机系统的方法,为培养自身对计算机系统的分析、设计、开发和使用能力打下基础。
通过本门课程的学习,能在自己的脑中建立计算机的整机概念。
1.2 学习任务掌握数字化信息编码及运算方法,运算器的逻辑构成;熟悉半导体存储器、磁表面存储器基本原理,掌握存储体系构成;掌握寻址和指令系统;熟悉中央处理器组成、时序控制方法,掌握控制器设计技术;熟悉系统总线和I/O系统。
计算机组成原理课程设计报告16位模型机的设计
石家庄经济学院华信学院计算机组成原理课程设计报告计算数据块中所有数据的累加和并存储到内存单元中题目16位模型机的设计姓名学号4114170801班号一班指导老师成绩2014年1月目录一、引言 (3)1.1设计目的 (3)1.2设计任务 (3)二、详细设计及实现 (4)2.1 拟定指令系统 (4)2.2指令格式 (5)2.3寻址方式 (5)三、16位CPU的模型 (7)3.1 各功能部件的VHDL设计 (9)3.2 16位模型机的设计与实现 (22)四、总结 (27)五、参考文献: (27)六、代码 (28)一、引言1.1设计目的为掌握并巩固本学期所学习的计算机组成原理知识,设计本次试验。
运用整合所学的相关知识,一步步设计构造一台基本的模型计算机,明确计算机的控制原理与控制过程,巩固和灵活应用所学的理论知识,掌握计算机组成的一般设计方法,提高学生设计能力和实践操作技能,为从事计算机研制与设计打下基础。
1.2设计任务本机功能:计算数据块中所有数据的累加和并存储到内存单元中。
汇编代码如下:START:MOV SI, OFFSET SRC1 ;源操作数地址送SIMOV DI,OFFSET DXT ;目的操作数地址送DIMOV BX,OFFSET SRC2 ;结束地址送BXMOV BL 0 ;设置BL中初值为0NEXT:MOV AL,[SI] ;取数ADD BL , AL ; 数据相加MOV [DI],AL ;存数CMP SI, BX ;JE START ;如果SI=BX,则转向STARTINC SI ;修改源地址JMP NEXT ;转向NEXT二、详细设计及实现2.1 拟定指令系统分析:1)依据汇编语言程序得出部件间的数据流的方向为●立即数→寄存器●寄存器↔内存内存操作数采用寄存器间址寻址方式●源与目的寄存器内容比较,如果源等于目的转移,转向地址在指令中提供●寄存器加1指令●无条件转移指令,转向地址在指令中提供。
一个16位RISC CPU设计
二.主要模块设计首先给出了系统的总体结构图如图1:图1. 16位RISC CPU结构简图图1中,与外围器件相连的线均为粗体表示。
同时按照要求,设计了MEM 用于存放数据和指令,按照便于程序执行的原则,外围设计及连接示意如图2所示:图2. CPU 外部电路及连接关系图在设计的部件中,针对不同功能的实现,采取了比较繁琐的射击方式。
在MEMORY之外存在几大设计部件。
主要部件设计如下:一.状态控制机:contr_enaclk1Inc_pc Data_enaaux1aux2rd Into_pc Load_pc Load_reg Load_irZero Counter_ena halt wr这是最关键的部件,而且,在选定8个状态为一个运行周期的格局以后,对所有指令包括HAL T 全部在用统一的指令周期。
这不可避免的导致了单元和面积的增加。
此处存在较大的改进余地。
指令分为五部分:取指,译码,执行,存储器访问,结果写回。
最后一部分很有可能进行第二次寄存器读写。
指令运行周期:(八个时钟周期) 第一周期:取指令 第二周期:指令译码 第三周期:空第四周期:地址线跳转,需要运算的数据送到数据线。
第五周期:ALU 时钟信号,ALU 运算。
第六周期:根据情况,对不同指令,分别进行数据的寄存器读写。
第七周期:对于需要再次读写寄存器的操作,如跳转指令中的地址写回寄存器,完成存储。
第八周期:FETCH信号,指令跳转到下面要运行得指令地址,包括正常PC+1和指令跳转地址,为下条指令取指做准备。
控制信号说明:输入信号:Op_code[4:0]:操作数,输入现在是什么指令。
Clk1:时钟信号,大多数的控制信号需要时钟信号的上跳沿触发。
Contro_ena:由控制机产生的信号,控制机复位。
Zero : 由ALU送来,用于条件转移指令(BZ,BNZ)的辅助信号。
输出信号:(十二个控制信号)Halt:为“1”停机信号。
Wr:为“1”写存储器。
组成原理课程设计(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课程设计的背景随着计算机科学技术的发展,人们获得信息的途径更加多样,获取信息的速度更加快捷。
CPU完整制造流程(带图)
作为计算机的核心组件,CPU(Central Processor Unit,中央处理器)在用户的心中一直是十分神秘的:在多数用户的心目中,它都只是一个名词缩写,他们甚至连它的全写都拚不出来;在一些硬件高手的眼里,CPU也至多是一块十余平方厘米,有很多脚的块块儿,而CPU的核心部分甚至只有不到一平方厘米大。
他们知道这块不到一平方厘米大的玩意儿是用多少微米工艺制成的,知道它集成了几亿几千万晶体管,但鲜有了解CPU的制造流程者。
今天,就让我们来详细的了解一下,CPU是怎样练成的。
基本材料多数人都知道,现代的CPU是使用硅材料制成的。
硅是一种非金属元素,从化学的角度来看,由于它处于元素周期表中金属元素区与非金属元素区的交界处,所以具有半导体的性质,适合于制造各种微小的晶体管,是目前最适宜于制造现代大规模集成电路的材料之一。
从某种意义上说,沙滩上的沙子的主要成分也是硅(二氧化硅),而生产CPU 所使用的硅材料,实际上就是从沙子里面提取出来的。
当然,CPU的制造过程中还要使用到一些其它的材料,这也就是为什么我们不会看到Intel或者AMD只是把成吨的沙子拉往他们的制造厂。
同时,制造CPU 对硅材料的纯度要求极高,虽然来源于廉价的沙子,但是由于材料提纯工艺的复杂,我们还是无法将一百克高纯硅和一吨沙子的价格相提并论。
制造CPU的另一种基本材料是金属。
金属被用于制造CPU内部连接各个元件的电路。
铝是常用的金属材料之一,因为它廉价,而且性能不差。
而现今主流的CPU大都使用了铜来代替铝,因为铝的电迁移性太大,已经无法满足当前飞速发展的CPU制造工艺的需要。
所谓电迁移,是指金属的个别原子在特定条件下(例如高电压)从原有的地方迁出。
很显然,如果不断有原子从连接元件的金属微电路上迁出,电路很快就会变得千疮百孔,直到断路。
这也就是为什么超频者尝试对Northwood Pentium 4的电压进行大幅度提升时,这块悲命的CPU 经常在“突发性Northwood死亡综合症(Sudden Northwood Death Syndrome,SNDS)”中休克甚至牺牲的原因。
EDA创新性实验项目——16位CPU设计
EDA创新性实验项目——16位CPU设计一、项目背景随着计算机科学和技术的不断发展,人们对计算机处理速度和性能的需求也在不断增加。
在这种背景下,为了满足人们对计算速度和性能的需求,研究者们开始将目光投向了新型的CPU设计。
传统的CPU设计多为32位或64位,但这种设计可能会带来一些不必要的复杂性和成本。
因此,设计一种16位CPU成为了当前研究的热点之一二、项目目标本实验项目旨在设计一款16位CPU,以满足轻量级计算需求,并保证其性能和效率。
通过设计一款16位CPU,可以降低处理器的成本和复杂度,提高计算性能,并且更好地满足轻量级计算需求。
三、项目内容1.CPU指令设计:设计新的16位CPU指令集,包括运算指令、数据传输指令、分支跳转指令等,以实现更加高效的计算功能。
2.CPU架构设计:设计16位CPU的整体架构,包括寄存器文件、数据通路、控制单元等,确保CPU的稳定性和高效性。
3.性能优化:对设计的CPU进行性能优化,提高其计算速度和响应速度,确保其在轻量级计算中的高效性。
4.性能评估:通过仿真和实验对设计的16位CPU进行性能评估,检验其计算速度和稳定性,以保证其满足设计需求。
四、项目实施步骤1.设计CPU指令集:根据实际需求设计新的16位CPU指令集,包括指令的格式、操作码和功能,保证其具有高效的计算能力。
2.设计CPU架构:设计16位CPU的整体架构,包括寄存器文件、数据通路和控制单元,确保其能够稳定运行和高效计算。
3.性能优化:对设计的CPU进行性能优化,优化数据通路和控制单元的设计,提高CPU的计算速度和响应速度。
4.实验仿真:通过基于EDA工具进行CPU的设计仿真,检验设计的CPU在不同场景下的计算性能和稳定性。
5.性能评估:对设计的CPU进行性能评估,比较其与传统32位CPU 的性能差异,确保16位CPU在轻量级计算中的优越性。
五、项目成果通过本实验项目的实施,设计一款16位CPU并进行性能评估1.设计一款高效、稳定的16位CPU,满足轻量级计算需求。
手把手教你编写一个超级简单的CPU
手把手教你编写一个超级简单的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 写测试程序了,没有编译器,汇编程序都得自己写呢。
16位实验CPU设计实例介绍
16位实验CPU设计实例开放式CPU指的是CPU在一片FPGA芯片中构成,它的指令系统和CPU内部结构可以由使用者根据需要设计,并且能够在TEC-CA上进行调试的CPU。
实验CPU是学生为掌握计算机的工作原理而设计的CPU,主要针对基本原理而不强调完备性。
这样的CPU可以复杂一些,也可以简单一些,视学生水平而定。
本章中介绍的实验CPU实例是针对第6章计算机组成原理实验而设计的,使用者可在此基础上根据自己的需要进行适当增减。
计算机组成原理实验除了进行计算机各部件的实验外,最重要的是使学生掌握计算机整机的工作原理。
我们力求通过这个实验CPU设计实例,使学生能够深入掌握计算机的整机工作原理。
2.1 指令系统设计CPU首先要设计指令系统。
由于实验CPU采用16位字长,指令系统只有15条指令,因此比8位CPU的指令系统设计容易得多。
2.1.1 指令系统ADD DR,SR指令编码:0000 DR SR 0000 0111功能:DR ← DR + SR, 影响C和Z标志。
PC ← PC + 1。
INC DR指令编码:0001 DR SR 0000 0111功能:DR ← DR + 1,影响C和Z标志。
PC ← PC + 1。
SUB DR,SR指令编码:0010 DR SR 0000 0111功能:DR ← DR – SR,影响C和Z标志。
PC ← PC + 1。
DEC DR指令编码:0011 DR SR 0000 0111功能:DR ← DR – 1,影响C和Z标志。
PC ← PC + 1。
AND DR,SR指令编码:0100 DR SR 0000 0011功能:DR ← DR and SR,影响Z标志。
PC ← PC + 1。
OR DR,SR指令编码:0101 DR SR 0000 0011功能:DR ← DR or SR,影响Z标志。
PC ← PC + 1。
NOT DR指令编码:0110 DR SR 0000 0011功能:DR ← not DR,影响Z标志。
基于FPGA的16位CPU设计
基于FPGA的16位CPU设计【摘要】本文研究了常见处理器的结构和功能,将CPU的核心功能集成到FPGA上,采用VHDL作为硬件描述语言完成了一种拥有双运算核心的4级流水线架构的16位RISC处理器设计。
采用FPGA技术设计的处理器精度高,速度快,为高性能的CPU设计提供了研究价值。
【关键词】CPU;FPGA;双运算核心0 引言随着我国信息化进程的不断推进,计算机技术还将对我国的生产力的发展产生日益深远的影响。
近年来我国在CPU设计领域取得了一些重大突破,相继研制出龙芯系列、方舟系列高性能CPU,此外位于台湾的威盛电子也是较大的处理器生产商。
然而我国的CPU设计及制造技术与国外相比还有很大差距,我国信息产业中与CPU相关的许多核心技术及产品仍然主要依赖进口,不仅经济上受制于人,而且信息系统的安全乃至国家安全也面临威胁。
FPGA技术自20世纪80年代中期出现至今,引起了电子设计技术的深刻变革,也成为现代电子设计技术的核心。
因此,基于FPGA技术的CPU设计具有较高的研究价值。
1 16位CPU的流水线结构设计流水线(pipelining)是提高CPU运行效率的关键技术。
和工业流水相似,流水线的核心思想是把多条指令的执行重叠起来。
在任何时候,CPU同时处理多条指令,这些指令分处于不同的运行周期,使用不同的物理器件。
在流水线CPU中,每条指令的指令执行过程被分成若干个执行阶段。
只有当每一个执行阶段都完成之后,一条指令才算执行完毕。
在每一个指令执行阶段中,当一条指令在该阶段中完成执行之后,下一条指令将立即进入到该执行阶段开始执行。
当流水线处于饱和状态时,CPU中将有与流水线级数相同数目的指令在同时执行,本设计将流水线分为4个阶段,每一个执行阶段的名称和功能如下:1)IF:取指令阶段;2)ID:指令译码阶段;3)EXE:指令执行阶段;4)PPR:后处理阶段。
2 16位CPU主要模块设计2.1 程序计数器模块的设计程序计数器的模块结构如图1所示,其中pc_addr为16位数据输出端口,os16为CPU与操作系统的接口,enable为其控制端,当enable为高电平时os16输入有效。
16位CPU
16位CPU1、申请题目:16位CPU我想完成的是基于FPGA的16位简化RISC_CPU,可以完成加、减、位操作、指令跳转、数据存储等较为简单的功能,可以正确的指示并处理数据溢出。
同时它具有现场保护功能,在非正常断电后可以恢复现场,以便继续工作。
希望能实现两条流水线。
2、课题背景:作为硬件语言Verilog HDL的初学者,编写一个基于FPGA的RISC_CPU是一个不错的选择,既可以充分熟悉CPU结构,又可以检验语言的掌握程度,学习使用系统任务语句。
现在CPU的发展越来越快,专用集成电路CPU不利于产品更新换代,而基于FPGA的CPU 只需要下载程序便可以方便的升级,节省了大量的人力物力。
本设计预计完成的CPU可以用来完成简单的运算和指令操作,存储少量信息。
3、项目规划:本CPU预计完成MOV(移动)、PUSH(堆栈)、POP(弹栈)、ADC(进位带符号加)、SBB(借位带符号减)、AND(位与)、OR(位或)、XOR(位异或)、INC(指令加1)、DEC (指令减1)、JMP(指令跳转)、STO(数据存储)、HLT(停机)等操作,对加减等操作希望能通过实验箱上键盘进行数据输入,并用LCD进行显示。
工作时有绿色LED灯指示,若溢出有红色LED灯频闪警报。
其他的指令功能演示可以通过系统语句进行跟踪显示。
同时希望实现两条流水线。
4、实现方案:本设计所面临的主要问题有以下几个:1、RISC_CPU较为复杂的Verilog 实现;2、对溢出情况的处理;3、现场保护功能在FPGA上的实现;4、对CPU简单功能的模拟与演示;5、扩展:希望实现两条流水线;解决办法:1、将整个RISC_CPU分块编程,分别调试,最终进行顶层组装和最后调试;2、建立标志字存储器,状态机根据标志字存储器的状态进行相应操作;3、使用两个FPGA板,一个作为外围存储设备始终供电,集成FLAGS和ROM,可以下载测试程序、存储数据和保存工作现场。
实验五、16位乘法器芯片设计
4
BJ-EPM240V2 学习板实验说明
else breg = bin; if(i==0) yout = 32'h00000000; if( (i<16) && areg[i]) yout[31:16] = yout[31:16]+breg; if(i==16)
begin
if(!rst_n)ຫໍສະໝຸດ beginareg <= 16'h0000;
breg <= 16'h0000;
done_r <= 1'b0;
yout_r <= 32'h00000000;
i <= 5'd0;
end else if(start)
//启动运算
begin
if(i < 5'd21) i <= i+1'b1; if(i == 5'd0) begin //锁存乘数、被乘数
//芯片输出标志信号。定义为 1 表示乘法运算完成.
reg[15:0] areg;//乘数 a 寄存器 reg[15:0] breg; //乘数 b 寄存器 reg[31:0] yout_r; //乘积寄存器
reg done_r;
reg[4:0] i;
//移位次数寄存器
always@(posedge clk)
信号无效。 start: 芯片使能信号。定义为 0 表示信号无效;定义为 1 表示芯片读入输
入管脚得乘数和被乘数,并将乘积复位清零。 ain:输入 a(被乘数),其数据位宽为 16bit. bin:输入 b(乘数),其数据位宽为 16bit.
现代计算机组成原理08 16位流水线CPU设计
现代计算机组成原理潘明潘松编著科学出版社第8 章16位流水线CPU设计8.1 流水线CPU的结构图8-1 流水线CPU的结构8.2 指令系统设计8.2 指令系统设计8.2 指令系统设计图8-2 R-型指令ADD R1,R2,R38.2.1寄存器型(R-型)8.2 指令系统设计图8-3 RI-型指令ADDI R1,R2,0FH8.2.2 寄存器立即数型(RI-型)8.2 指令系统设计8.2.3 立即数型(I-型)图8-4 I-型指令MVIL R1,FFH8.2 指令系统设计8.2.4 立即移位型(SI-型)图8-5 SI-型指令RORI R1,R2,2H8.3 数据通路设计图8-6 R-型ALU 指令的数据通路8.3.1 R-型数据通路8.3 数据通路设计8.3.2 RI-型数据通路图8-7 RI-型ALU 指令的数据通路8.3 数据通路设计图8-8 装入字数据通路8.3.3装入字数据通路8.3 数据通路设计图8-9 存储指令的数据通路8.3.4存储字数据通路8.3 数据通路设计8.3.5寄存器转移数据通路图8-10 转移指令数据通路8.4流水线各段设计和功能描述图8-11 IF Stage 1的结构8.4.1 Stage 1取指令段8.4流水线各段设计和功能描述8.4.1 Stage 1取指令段1.功能描述(1)取指令及锁存。
(2)地址计算。
(3)检验指令的合法性。
(4)同步控制。
2.模块划分和实现8.4流水线各段设计和功能描述8.4.1 Stage 1取指令段【例8-1】library ieee;use ieee.std_logic_arith.all;use ieee.std_logic_1164.all;use ieee.std_logic_signed.all;use ieee.std_logic_unsigned.all;ENTITY pcselector ISPORT(nextpc,branchpc,retpc,retipc : IN STD_LOGIC_VECTOR(15 DOWNTO 0);sel : IN STD_LOGIC_VECTOR(3 DOWNTO 0);newpc : OUT STD_LOGIC_VECTOR(15 DOWNTO 0));END ENTITY pcselector;ARCHITECTURE sel_behav OF pcselector IS name : PROCESS(sel) IS BEGINCASE sel ISWHEN "0000" =>newpc <=nextpc;WHEN "0001" =>newpc <=branchpc;WHEN "0010" =>newpc <=retpc;WHEN "0011" =>newpc <=retipc;WHEN "0100" =>newpc <= "1111111111111111";WHEN "0101" =>newpc <= "1111111111110000";WHEN "0110" =>newpc <= "0000000000001000";WHEN "0111" =>newpc <= "0000000000001100";WHEN "1000" =>newpc <= "0000000000001100";WHEN "1001" =>newpc <= "0000000000001110";WHEN "1010" =>newpc <= "0000000000010000";WHEN OTHERS =>newpc <= "0000000000010010";END CASE;END PROCESS name;END ARCHITECTURE sel_behav;BEGINpcselector8.4流水线各段设计和功能描述8.4.1 Stage 1取指令段2.模块划分和实现图8-14 pcselector的时序仿真波形图8.4流水线各段设计和功能描述【例8-2】library ieee;use ieee.std_logic_1164.all;ENTITY progc ISPORT(pcIn : IN STD_LOGIC_VECTOR(15 DOWNTO 0);clk,enable : IN STD_LOGIC;pcOut : OUT STD_LOGIC_VECTOR(15 DOWNTO 0));END ENTITY progc;ARCHITECTURE progc_behav OF progc ISBEGINname : PROCESS(clk) ISVARIABLE regValue : STD_LOGIC_VECTOR(15 DOWNTO 0);BEGINIF(clk='1') THENIF(enable='1') THEN regValue :=pcin; END IF;END IF;pcOut <=regValue;END PROCESS name;END ARCHITECTURE progc_behav;8.4流水线各段设计和功能描述8.4.1 Stage 1取指令段2.模块划分和实现图8-16 progc的时序仿真图8.4流水线各段设计和功能描述8.4.1 Stage 1取指令段2.模块划分和实现【例8-3】library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;ENTITY incpc ISPORT(pcIn : IN STD_LOGIC_VECTOR(15 DOWNTO 0);pcVal : OUT STD_LOGIC_VECTOR(15 DOWNTO 0));END ENTITY incpc;ARCHITECTURE pc_behav OF incpc ISBEGINname : PROCESS(pcIn) ISBEGINpcVal<=pcIn+1;END PROCESS name;END ARCHITECTURE pc_behav;8.4流水线各段设计和功能描述8.4.1 Stage 1取指令段2.模块划分和实现图8-18 程序计数器加1模块的仿真波形8.4流水线各段设计和功能描述8.4.1 Stage 1取指令段2.模块划分和实现【例8-4】LIBRARY ieee;USE ieee.std_logic_1164.all;LIBRARY altera_mf;USE altera_mf.altera_mf_components.all;ENTITY lpm_rom0 ISPORT (address : IN STD_LOGIC_VECTOR (5 DOWNTO 0);Inclock : IN STD_LOGIC ; q : OUT STD_LOGIC_VECTOR (15 DOWNTO 0) );END lpm_rom0;ARCHITECTURE SYN OFlpm_rom0 IS SIGNAL sub_wire0: STD_LOGIC_VECTOR (15 DOWNTO 0);COMPONENT altsyncramGENERIC ( address_aclr_a : STRING;init_file : STRING;intended_device_family : STRING;lpm_hint : STRING;lpm_type : STRING;numwords_a : NATURAL;operation_mode : STRING;outdata_aclr_a : STRING;outdata_reg_a : STRING;widthad_a : NATURAL;width_a : NATURAL;width_byteena_a : NATURAL );接下页8.4流水线各段设计和功能描述8.4.1 Stage 1取指令段2.模块划分和实现PORT ( clock0: IN STD_LOGIC ;address_a : IN STD_LOGIC_VECTOR (5 DOWNTO 0);q_a : OUT STD_LOGIC_VECTOR (15 DOWNTO 0) );END COMPONENT;BEGIN q <= sub_wire0(15 DOWNTO 0);altsyncram_component :altsyncramGENERIC MAP ( address_aclr_a => "NONE", init_file => "rom_2.mif",intended_device_family => "Cyclone",lpm_hint => "ENABLE_RUNTIME_MOD =YES,INSTANCE_NAME=rom3",lpm_type => "altsyncram",numwords_a => 64,operation_mode => "ROM",outdata_aclr_a => "NONE",outdata_reg_a => "UNREGISTERED",widthad_a => 6,width_a => 16, width_byteena_a => 1 )PORT MAP ( clock0 =>inclock,address_a => address,q_a => sub_wire0 );END SYN;【例8-5】 library ieee; use ieee.std_logic_1164.all; ENTITY ifid IS PORT(pcIn, insIn : IN STD_LOGIC_VECTOR(15 DOWNTO 0); clk,id_flush,ifid_enable : IN STD_LOGIC; pcOut, insOut : OUT STD_LOGIC_VECTOR(15 DOWNTO 0)); 8.4.1 Stage END ENTITY ifid; 1取指令段 ARCHITECTURE ifid_behav OF ifid IS 2.模块划分和实现 BEGIN name : PROCESS(clk) IS VARIABLE regValue : STD_LOGIC_VECTOR(31 DOWNTO 0); BEGIN IF(clk='1') THEN IF(ifid_enable='1') THEN IF(id_flush='1') THEN regValue(31 DOWNTO 0) := regValue(31 DOWNTO 16) & "0000000000000000"; ELSE regValue(31 DOWNTO 0) := pcIn(15 DOWNTO 0) & insIn(15 DOWNTO 0); END IF; END IF; END IF; pcOut <= regValue(31 DOWNTO 16); insOut <= regValue(15 DOWNTO 0); END PROCESS name; END ARCHITECTURE ifid_behav;8.4流水线各段设计和功能描述8.4流水线各段设计和功能描述8.4.1 Stage 1取指令段2.模块划分和实现if id pcIn[15..0] insIn[15..0] clk id_f lush if id_enable inst pcOut[15..0] insOut[15..0]图8-20 ifid的实体结构图8.4流水线各段设计和功能描述8.4.1 Stage 1取指令段2.模块划分和实现图8-21 ifid流水线寄存器的时序仿真波形图8.4流水线各段设计和功能描述8.4.2 Stage 2译码段ID2.模块划分和实现图 8-22 stage 2指令译码段ID的基本结构8.4流水线各段设计和功能描述8.4.2 Stage 2译码段ID1. stage2的功能描述 本段的主要功能如下: 访问寄存器文件。
16位乘法器芯片设计 3月9日
16位乘法器芯片设计1.方法乘法器的设计方法有两种:组合逻辑设计方法和时序逻辑设计方法。
采用组合逻辑设计方法,电路事先将所有的乘积项全部算出来,然后做加法运算。
采用时序逻辑设计方法,电路将部分已经得到的乘积结果右移,然后与乘积项相加并保存和值,反复迭代上述步骤直到计算出最终积。
2.组合逻辑的实现可以以16*3位的乘法器为例做出如下设想:A为16位二进制乘数,B为3位二进制乘数,C为A与B相乘的积。
则:C的结果实际上只能为如下值中的一个:0,A,2A,3A,4A,5A,6A,7A因为B为3位二进制,则B只能是000,001,010,011,100,101,110,111中的一个。
初步设想符合现实,由于要实现ASIC芯片的生产,所以对各端口定义如下:reset:芯片复位、清零信号。
值为0,芯片复位。
start:芯片使能信号。
值为1,芯片读入乘数和被乘数,并将乘积复位清零。
ain:被乘数,16bit。
bin:乘数,3bit。
yout:乘积输出,19bit。
done:芯片输出标志信号,值为1,乘法运算完成,yout端口的数据稳定,得到最终的乘积;值为0,乘法运算未完成,yout端口数据不稳定。
编写的Verilog程序如下:Module mult16(reset,start,ain,bin,done,yout);Parameter N=16;Input reset;Input start;Input [N-1:0] ain;Input [2:0]bin;Output [N+3:0] yout;Output done;Integer aa,ab,ac,temp;Integer su;Reg done;Always @(ain)BeginIf(start&&!reset)Beginaa=ain;ab=ain+ain;ac=ab+ab;temp=aa+ab;case(bin)3’b000: su=0;done=1’b1;3’b001: su<=aa;done=1’b1;3’b010: su<=ab;done=1’b1;3’b011: su<=aa+ab;done=1’b1;3’b100: su<=ac;done=1’b1;3’b101: su<=aa+ac;done=1’b1;3’b110: su<=ab+ac;done=1’b1;3’b111: su<=temp+ac;done=1’b1;default: su<=0;done=1’b0;else if (reset)beginsu=0;aa=0;ab=0;ac=0;done=1’b0;endelse if (!start)beginsu=0;done=1’b0;endendassign yout=su;endmodule基于组合逻辑的乘法器,在程序语言上通俗易懂,思路清晰,但是有致命缺点,当乘数和被乘数位数很多的时候,不可能一一列举各种乘积结果,用case语句就显得很繁琐,所以基于时序逻辑的乘法器的研制在所难免。
计算机组成原理课程设计--16位机微程序控制器指令系统的设计与实现
一、设计题目16位机微程序控制器指令系统的设计与实现二、设计目的通过看懂教学计算机组合逻辑控制器中已经设计好并正常运行的几条基本指令(例如ADD、MVRR、OUT、MVRD、JR、RET等指令)的功能、格式和执行流程,然后自己设计微程序控制器中的29条基本指令和19条扩展指令的功能、格式和执行流程,并在教学计算机上实现、调试正确,达到以下目的:1、深入理解计算机控制器的功能、组成知识和各类典型指令的执行过程;2、对指令格式、寻址方式、指令系统、指令分类等建立具体的总体概念;3、学习微程序控制器的设计过程和相关技术。
三、设计说明控制器设计是学习计算机总体组成和设计的重要的部分。
要在TEC—2000教学计算机上完成这项设计,必须清楚懂得:1、TEC—2000教学机的微程序控制器主要由作为选件的微程序控制器小板和教学机大板上的7片GAL20V8组成。
2、TEC—2000教学机微程序控制器上要实现的全部基本指令和扩展指令的控制信号都是由微程序小板上的7片控制存储器给出的。
3、应了解监控程序的A命令只支持基本指令,扩展指令应用E命令将指令代码写入到相应的存储单元中;不能用T、P命令单步调试扩展指令,只能用G命令执行扩展指令。
4、要明白TEC—2000教学机支持的指令格式及指令执行流程分组情况;理解TEC—2000教学机中已经设计好并正常运行的各类指令的功能、格式、执行流程和控制信号的组成。
5、明确自己要实现的指令格式、功能、执行流程设计中必须遵从的约束条件。
6、为了完成扩展指令的功能、格式和执行流程,并在教学计算机上实现、调试正确的实验内容,具体过程包括:1)确定指令格式和功能,要受教学机已有硬件的约束,应尽量与已实现指令的格式和分类办法保持一致;2)划分指令执行步骤并设计每一步的执行功能,设计节拍状态的取值,应参照已实现指令的处理办法来完成,特别要注意的是,读取指令的节拍只能用原来已实现的,其他节拍的节拍状态也应尽可能的与原用节拍的状态保持一致和相近;3)在指令微程序表中填写每一个控制信号的状态值,注意要特别仔细,并有意识地体会这些信号的控制作用;4)将设计好的微码,装入控制存储器的相应单元;5)写一个包含你设计的指令的程序,通过运行该程序检查执行结果的正确性,来初步判断你的设计是否正确;如果有问题,通过几种办法查出错误并改正,继续调试,直到完全正确。
16位精简CPU设计
计算机组成原理课程设计报告题目名称:16位精简CPU设计姓名:专业:计算机科学与技术班级:学号:同组人员:指导老师:南昌航空大学信息工程学院2012 年1月3日目录一、实验目的 (2)二、实验任务 (2)三、实验原理 (2)四、各模块设计分析和设计思路 (7)1、时钟发生器 (7)2、指令寄存器 (7)3、累加器 (8)4、算术运算器 (8)5、数据控制器 (8)6、地址多路器 (8)7、程序计算器 (8)8、状态控制器 (9)9、地址译码器 (13)10、ROM和RAM (13)五、各模块的设计与实现 (14)1、时钟控制器 (14)2、指令寄存器 (14)3、累加器 (16)六、各模块的仿真波形与分析 (17)1、时钟发生器仿真 (17)2、指令寄存器仿真 (17)3、累加器仿真 (18)4、整体仿真 (18)七、下载程序指导 (19)八、实验总结与心得 (21)九、参考文献 (21)一、实验目的1、熟悉16位CPU各模块的工作原理,从而熟悉CPU的工作机理,也加深对单片机以及嵌入式硬件的工作原理。
2、熟练的利用quartus ii 9.0做一些中等难度的课题,增加自己的一些实践经验,熟练VHDL的编程。
3、强化自身的系统设计能力,了解系统设计中的一般步骤,增加处理问题的经验。
4、作为对VHDL 课程的一种总结,考察对数字系统设计掌握的程度。
5、了解VHDL仿真和综合工具的潜力。
6、展示VHDL设计对软硬件联合设计和验证的意义。
二、实验任务1、定义五条机器指令,并编写相应的微程序作为模型计算机的控制器;2、使用电路框图设计模型计算机电路,并下载编程芯片为定制的简单模型CPU;3、在实验系统上连接输入按键和输出液晶显示屏为输出的模型计算机系统。
三、实验原理CPU 即中央处理单元的英文缩写,它是计算机的核心部件。
计算机进行信息处理可分为两个步骤:1)将数据和程序(即指令序列)输入到计算机的存储器中。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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进行减法。 【分页导航】
当然,实际的时钟信号可能远没有这么理想,可能上升沿是斜的,而且占空比也可能不是50%,有抖动,有偏移(相对于两个器件),可 能因为导线的寄生电容效应变得走形。 上面那段如果没听懂也没关系~~~反正就是告诉你,实际的时钟信号测出来肯定没这么标准。 而 cpu的工作频率,是外频与倍频的积(cpu究竟怎么算频率,其实这个我也不太清楚呵呵),因为cpu是通过外部的晶振产生一个时钟信 号,然后再通过内部 的电路(锁相环),倍频至需要的频率。当然,有人问,为什么要这么麻烦呢?直接在电路外边做个时钟晶振能产生 那么高的时钟信号就可以了嘛,这个是可以的, 在某些简单的系统上(例如51单片姬)就是这样的,但是计算姬的cpu比较复杂,因为一 些原因所以必须要做到cpu内。 下面简单说一下CPU的两种指令集:CISC和RISC。 说下我的看法(个人看法,如有错误还请高手指正): RISC是Reduced Instruction Set Computer,精简指令集计算机,典型例子是MIPS处理器。 CISC 是Complex Instruction Set Compute,复杂指令集计算机,典型例子是x86系列处理器(当然现在的x86指令还是当初cisc的指 令,但是实际处理器的结构都已经变成了 risc结构了,risc的结构实现流水线等特性比较容易,在计算机前的你如果用的是intel某系列的 处理器,则它使用的指令集看上去还是像cisc的 指令,但是实际上你的cpu的结构已经是risc的了)。 一般CISC的处理器需要用微指令配合运行,而RISC全部是通过硬连线实现的, 也就是说,当cisc的处理器在执行你的程序前,还得先从另 外一个rom里面读出一些数据来“指导”处理器怎么处理你的命令,所以cisc效率比较低,而 risc是完全通过部件和部件之间的连接实现 某种功能,极大的提高了工作效率,而且为流水线结构的出现提供了基础。cisc的寄存器数量较少,指令能够实 现一些比较特殊的功能, 例如8086的一些寄存器: ax,bx,cx,dx,si,di等;段寄存器有:cs,ds,es,ss等。相对的指令功能比较特殊,例如xlat将bx中的值作为基地址,al中的值作为偏移,在内存 中寻址到的数据送到al当中(以ds为段寄存器) 而risc的处理器则通用寄存器比较多,而指令的功能可以稍微弱一点,例如: 以nios嵌入式处理器来说明,nios处理器有32个通用寄存器(r0~r31),而指令功能相对x86的弱一些,而且x86进行内存访问是直接使 用mov指令,nios处理器读内存用的是load,写内存用的是store, 二 者响应中断的方式也不一样,举一个典型的例子,x86的处理器将中断向量表放在了内存的最低地址(0-1023,每个中断向量占四个字 节),能容纳256 个中断(以实模式的8086举例)响应中断时,将中断号对应的地址上的cs和ip的值装入到cs和ip寄存器而将原来的地址 保存,并且保存状态寄存器然后 进入中断处理,而risc则拥有一个共同的中断响应函数,这个函数会根据中断号找到程序向系统注册的函 数的地址,并且调用这个函数。一般来说而是用的 cisc指令的长度是不定的,例如x86的xor ax,bx对应机器码是0x31d8、而push ax是 0x50、pop cx是0x59。而risc的指令确是定长的,例如】
第1页:CPU是做什么的 第2页:什么是单周期CPU,什么是多周期CPU,什么是RISC,什么是CISC 第3页:一个CPU的基本结构以及必要组件 第4页:重头戏:我做的CPU模型
什么是单周期CPU,什么是多周期CPU,什么是RISC,什么是CISC 首 先大家得有时钟的概念:这个问题不好解释啊。。。。。。可以理解为家里面的机械钟,上上电池之后就会滴答滴答走,而它“滴答滴 答”的速度就是频率,滴答一 下用的时间就是周期,而人的工作,下班,吃饭和学习娱乐都是按照时钟的指示来进行的(熬夜的网瘾少年 不算),一般来说,时钟信号都是由晶体振荡器产生 的,0101交替的信号(低电平和高电平)。 数字电路都需要一个“时钟”来驱动,就像演奏交响乐的时候需要一个指挥家在前面指挥一样,所有的人都会跟着指挥的拍子来演奏,就 像数字电路中所有的部件都会跟着时钟节拍工作一样。 如下是一个理想的时钟信号:(注意是理想的)。
大师教你如何制作一个简单的16位CPU
大师教你如何制作一个简单的16位CPU 上网时间:2016年03月10日
如何制作一个简单的16位CPU,首先我们要明个CPU,首先得明白下计算机的组成结构(或者计算机的替代品,因为并不是只有计算机有CPU,现在的电子产品都很先 进,很多设备例如手机、洗 衣机甚至电视和你家的汽车上面都得装一个CPU),数字电路基础,还最好有点编程的基础(当然,没有也没 关系,这些知识都很容易获得,各种书上面都会提 到,并且在接下来的过程中我会提到这些知识) 我们要实现的是一个RISC指令集的CPU,并且我们最后要自己为这个CPU设计指令并且编码。 首先我们来听个故事,关于CPU的诞生的故事: 日 本客户希望英特尔帮助他们设计和生产八种专用集成电路芯片,用于实现桌面计算器。英特尔的工程师发现这样做有两个很大的问题。 第一,英特尔已经在全力开发 三种内存芯片了,没有人力再设计八种新的芯片。第二,用八种芯片实现计算器,将大大超出预算成本。英 特尔的一个名叫特德?霍夫(Ted Hoff)的工程师仔细分析了日本同行的设计,他发现了一个现象。这八块芯片各实现一种特定的功能。 当用户使用计算器时,这些功能并不是同时都需要的。比 如,如果用户需要计算100个数的和,他会重复地输入一个数,再做一次加法, 一共做100次,最后再打印出来。负责输入、加法和打印的电路并不同时工作。 这样,当一块芯片在工作时,其他芯片可能是空闲的。 霍夫有了一个想法:为什么不能用一块通用的芯片加上程序来实现几块芯片的功能呢?当需要某种功能时,只需要把实现该功能的一段程 序代码(称为子程序)加载到通用芯片上,其功能与专用芯片会完全一样。 经 过几天的思考后,霍夫画出了计算器的新的体系结构图,其中包含4块芯片:一块通用处理器芯片,实现所有的计算和控制功能;一块 可读写内存(RAM)芯片, 用来存放数据;一块只读内存(ROM)芯片,用来存放程序;一块输入输出芯片,实现键入数据和操作命 令、打印结果等等功能。 看完这个故事后,可以总结:CPU是一种用来代替专用集成电路的器件(这只是我的理解,不同人有不同理解,这个就智者见智了,我在 接下来的例子中也会说明我的想法)。 然后考虑如下这个例子: 例1-1: mov eax,0 repeat:inc eax jmp repeat 例1-2: int main() { unsigned int i = 0; while(1) i++; } 例1-3:
第1页:CPU是做什么的 第2页:什么是单周期CPU,什么是多周期CPU,什么是RISC,什么是CISC 第3页:一个CPU的基本结构以及必要组件 第4页:重头戏:我做的CPU模型
一个CPU的基本结构以及必要组件
这 个例子引用自DE2开发板套件带的光盘上的Lab Exercise 9,我们从图中可以看到,一个CPU包含了通用寄存器组R0~R7,一个 ALU(算术逻辑单元),指令寄存器IR,控制器(一般这部分是一个有限状态机或 者是用微指令实现),还有就是数据通路(图中的连 线)。当然真正的CPU不可能只包含这么一点点组件,这是一个模型CPU,也就是说只是说明CPU的原 理,真正复杂的CPU要涉及到很多 复杂的结构和时序,例如虚拟模式需要使用一些特殊的寄存器、为了支持分页需要使用页表寄存器等,为了加速内存的访问需要 使用 TLB,加速数据和指令的访问而使用data cache和instruction cache等等。。。。。当然,那都是后面该考虑的,所以我们先从这个简单 的部分开始讲起。 例子中能实现如下指令: