cpu控制器的设计

合集下载

CPU设计实践教程6-Minisys-1单周期CPU控制器的设计

CPU设计实践教程6-Minisys-1单周期CPU控制器的设计

指令操作码 ori
addiu
lw
sw
beq jump
RegDst
0
0
0
000000 R-format
1
RegDST = R-format
wire R_format;
assign R_format = (Opcode==6'b000000)? 1'b1:1'b0; assign RegDST = R_format; //说明目标是rd,否则是rt
output Sftmd; output[1:0] ALUOp;
// 他I-类型指令 // 为1表明是移位指令 // 是R-类型或I_format=1时位1为1, beq、bne指令则 // 位0为1
2021/9/5 P.22
单周期控制器设计
RegDST的控制电路
op 001101 001001 100011 101011 000100 000010
output nBranch; // 为1表明是Bne指令
output Jmp;
// 为1表明是J指令
output Sftmd; // 为1表明是移位指令
2021/9/5 P.25
单周期控制器设计
练习2
请给出下列控制信号电路的Verilog描述
assign Sw = ????? assign ALUSrc = ????? assign Branch = ????? assign nBranch = ????? assign Jmp = ?????
2021/9/5 P.10
创建一个项目
在打开的Default Port对话框中选择的FPGA器件为 xc7a100tfgg484-1,如图所示,点击Next。

六章CPU设计

六章CPU设计

下地址控制编码方式
一般情况下后继微指令旳地址有下列几种给出方式:顺序递增法:将µPC设置成可实现自动加1旳功能,每当完毕目前指令旳执行,就以µPC +1后旳值为地址在控制存储器中取下一条微指令。直接给出法:下一条微指令旳地址直接取自微指令中旳下地址字段。分支转移法:在包括分支转移旳微指令中常设置一种条件选择子区域,用于指出哪些鉴定条件被测试,与此同步转移地址被存储在下地址字段。当转移条件满足时,将下地址字段旳内容读入到µPC中,取下一条微指令,实现微程序转移。若转移条件不满足,微程序则顺序执行。微程序入口地址旳形成:每条机器指令所相应旳微程序旳入口地址(首地址),一般由指令旳操作码所决定。在机器加电后,第一条微指令旳地址一般是由专门旳逻辑电路生成,也能够采用由外部直接输入旳形式取得。
操作控制编码方式
在操作控制字段一般涉及一种或多种操作控制域,每个控制域可控制一种或一组控制信号旳生成,根据控制信号是直接生成于控制域还是译码生成控制信号旳不同可分为下列几种形式。直接控制法:操作控制字段旳每一位都与一种独立控制信号相相应。若目前微指令旳某一位ki=1,则与之相应ci控制信号有效,不然ci控制信号无效。分段编码控制法:在微程序级别,许多微操作是能够并行执行。一般采用将微指令旳操作控制字段提成k个相互独立旳控制域,每一种控制域存储一组微操作,每一种编码相应一种微操作,每一种微操作都能够与其他控制域所存储旳任意一种微操作并行执行,但在组内旳微操作之间是互斥旳,不允许在同一时间段内发生或有效。分段间接编码控制法:在微指令格式里,假如一种字段旳含义不只决定本字段编码,还兼由其他字段决定,则可采用分段间接编码控制法。此时一种字段兼有两层或两层以上旳含义。其他方式:在实际微指令中操作控制编码并不是只单独采用上述三种编码方式中旳一种,而是将上述三种混合使用,以确保能综合考虑指令旳字长、灵活性和执行微程序旳速度等方面旳要求。

32位MIPS CPU设计

32位MIPS CPU设计

实验四32位MIPS CPU设计实验
1设计要求
使用Logisim 软件依次完成4 个子电路的设计,如下:
1. 指令译码器
2. 时序发生器状态机(定长指令周期)
3. 时序发生器输出函数(定长指令周期)
4. 硬布线控制器
在此基础上完成对“单总线CPU(3 级时序)”的联合调试,使之可以运行
简单的冒泡排序算法MIPS 汇编程序,实现排序功能。

2方案设计
2.1 指令译码器
原理:
根据MIPS指令格式表中各个指令的op字段,和IR送来的指令op字段比较,若相同则是该指令,注意SLT 指令还需要判断funct字段为101010,用异或门判断OtherInstr
电路:
图1指令译码器
2.2 时序发生器状态机(定长指令周期)
原理:
由于是定长指令周期,所以次态只和现态有关,Si->Si+1 (0<=i<=10),S11->S0
电路:
图2状态机
2.3 时序发生器输出函数(定长指令周期)
原理:
定长指令周期分为3个机器周期(取指,计算,执行)每个机器周期分为4个节拍S0~S3取指周期,S4~S7计算周期,S8~S11执行周期
每个机器周期内节拍递增
电路:
图3输出函数
2.4 硬布线控制器
原理:
状态暂存器输出到状态机计算出次态再返回状态寄存器,同时现态送到输出函数电路:
图4硬布线控制器
3实验步骤
按照设计连接电路,在电路图中“单总线CPU(3 级时序)”子电路中进行调试,测试CPU 是否可以正确执行冒泡排序程序
4测试与分析
发现数据6,5,4,3,2,1,-1按递减排序
实验结果符合预期。

PLC的双CPU冗余控制实现

PLC的双CPU冗余控制实现

PLC的双CPU冗余控制实现PLC(可编程逻辑控制器)的双CPU冗余控制是一种高可靠性的控制系统设计,它通过备用的CPU来实现系统的冗余保护,以提高系统的可用性和可靠性。

在双CPU冗余控制系统中,主CPU和备CPU同时运行,并且通过互相监控对方的状态和运行情况,实现故障检测、切换和恢复。

双CPU冗余控制的工作原理如下:1.主CPU和备CPU同时运行并执行相同的控制任务,输出信号也同时送至执行机构进行实际的控制操作。

2.主CPU和备CPU通过心跳信号相互监控对方的状态。

心跳信号由CPU定时产生,并发送至对方。

如果其中一方长时间未收到对方的心跳信号,则判断另一方发生了故障。

3.当主CPU发生故障时,备CPU会立即接管控制任务,并输出相同的控制信号。

这个切换的过程一般需要在几个周期内完成,以保证控制的连续性和稳定性。

4.当故障修复后,主CPU会重新与备CPU进行同步,并恢复正常的工作状态。

为了实现双CPU冗余控制,需要满足一些关键技术要求:1.心跳信号:主CPU和备CPU需要通过心跳信号相互监控。

心跳信号的产生和检测一般是基于硬件电路实现的,可以使用定时器和计数器控制心跳信号的周期和频率。

2.数据同步:主CPU和备CPU需要实时同步控制数据和状态信息,以保证在切换过程中不引入错误。

这一般需要通过专门的通信模块或总线进行数据传输和同步。

3.切换策略:在主CPU发生故障时,备CPU需要能够及时接管控制任务,并保证控制的连续性。

切换策略可以采用热备份、冷备份或温备份等不同的方案,具体选择需要根据实际应用需求和性能要求进行评估。

4.故障检测和恢复:在主CPU发生故障后,需要能够及时检测故障原因,并进行相应的故障处理和恢复。

这一般需要通过专门的故障检测算法和自动化处理程序来实现。

双CPU冗余控制的优点是可以提高系统的可用性和可靠性,降低因单点故障引起的停机时间和生产损失。

但也存在一些挑战和限制,如成本较高、对系统运行时的性能要求较高等。

基于多CPU的智能电动执行机构控制器设计

基于多CPU的智能电动执行机构控制器设计

上 、该控制 器设 计 方案 可提 高 系统 的 可靠性 和 可维护性 ,对进 一步设 计新 型智 能 电动执 行机
构具 有指 导意 义 . 关 键 词 :电动执 行机 构 ;多 C PU;控 制 器
中 图 分 类 号 :TM 7 51
文 献 标 识 码 :A
文 章 编 号 :1 7 —7 7 ( 0 7 0 —3 50 , 39 8 2 0 ) 30 1 —3 6
收 稿 日期 :2 0 — 30 0 70 — 1 基 金项 目:河 南 省 科 技 攻 关 项 目 ( 3 4 5 0 5 ;河南 理 工大 学 青 年 基 金 项 目 ( 4 1 8 0 2 20 0 ) 660 )
作 者 简 介 :王 莉 (9 6 ) 17 一 。女 ,河 南 温 县 人 ,讲 师 ,从 事 工 业 过 程 计 算 控 制 和 智 能 仪 器 仪 表 方 面 的研 究
V o . No. 126 3
J n. 0 7 u 20
基 于多 C U 的智 能 电动 执 行 机 构 控 制 器设 计 P
王 莉 ,苏 波
( 南 理 工 大 学 电气 学 院 ,河 南 焦 作 河 44 0 ) 50 3
摘 要 :在对 目前 电动执 行机 构存 在 的 问题进 行 分析 的基 础上 ,提 出了一 种新 型智 能 电动执 行
个特定 的任务分 割成 较小 的任 务 由 多个 处 理器 并 行 地 执行 ,因 而具 有 速 度优 势 .采 用 嵌 入 式 多 C U P 系统使 得信 息处 理模块 化 ,各 个 C U 采 集分 配 的数据 量并 独 立处理 信 息 ,从 而 可 以减 轻 单个 C U 的 P P
负担 ,提 高系统 的信 息处 理速 度 和 处 理能 力 [ .因此 ,为 了 克服 电动 执 行 机 构控 制 器 现 有 结 构 形 式 存在 的 弊端 ,可 以在控制 器设计 中采用 多 C U 系统结 构 . P

多合一控制器CPU模块组成及功能解析

多合一控制器CPU模块组成及功能解析

多合一控制器CPU模块组成及功能解析多合一控制器是一种集成了多种功能的电子控制设备。

它通过集成多个控制模块,在一个设备中提供了多种不同的功能。

本文将对多合一控制器的CPU模块的组成和功能进行解析。

一、多合一控制器CPU模块的组成多合一控制器的CPU模块是整个设备的核心部件,负责处理和控制各个功能模块之间的协调工作。

CPU模块通常由以下几个核心组成部分构成:1. 中央处理器(Central Processing Unit,CPU):CPU是多合一控制器的核心处理器,负责执行各种运算和控制指令。

它是多合一控制器的大脑,决定了整个设备的运行效率和性能。

2. 存储器(Memory):存储器是CPU模块中的重要组成部分,用于存储程序、数据和临时结果。

存储器通常包括高速缓存、内存和外部存储等。

3. 输入/输出接口(Input/Output Interface):输入/输出接口是CPU 模块与其他功能模块进行数据交换的纽带。

它负责管理和控制设备的输入和输出动作,以及进行数据的传输和转换。

4. 时钟发生器(Clock Generator):时钟发生器是CPU模块的一个重要组成部分,用于提供稳定的时钟信号。

时钟信号是整个设备的运行节奏,能够保证各个功能模块之间的同步性。

5. 总线(Bus):总线是CPU模块中的数据传输通道,用于连接各个功能模块。

总线通常包括地址总线、数据总线和控制总线,负责传输数据、地址和控制信号。

二、多合一控制器CPU模块的功能解析多合一控制器的CPU模块承担着多种重要功能,下面将对其功能进行解析:1. 运算功能:CPU模块通过内部的算术逻辑单元(Arithmetic Logic Unit,ALU)执行各种数学和逻辑运算,包括加法、减法、乘法、除法和比较等。

这些运算功能使得多合一控制器能够进行各种复杂的计算和处理任务。

2. 控制功能:CPU模块通过指令寄存器(Instruction Register)和程序计数器(Program Counter)等组成部分,解析和执行指令,控制各个功能模块的运行。

CPU设计

CPU设计

作业: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),使存贮器将此指令输出到它的输出引脚。

单总线CPU设计(定长指令周期3级时序)

单总线CPU设计(定长指令周期3级时序)

单总线CPU设计(定长指令周期3级时序)1. 引言本文档将介绍一种基于单总线的CPU设计,采用定长指令周期和3级时序。

单总线CPU是一种较为简单且常见的计算机处理器设计,其内部结构相对简单,适合于一些资源受限的嵌入式系统或低功耗应用。

定长指令周期意味着每条指令的执行时间是固定的,而3级时序则指的是CPU的时序由三个阶段组成。

2. 设计概述2.1 总体结构单总线CPU设计采用冯·诺依曼结构,主要包含以下几个核心组件:•控制器(Controller):负责控制指令的执行流程和时序控制。

•运算器(ALU):负责执行算术、逻辑和位操作指令。

•寄存器组(Register File):用于暂存数据和地址等信息。

•存储器(Memory):包括指令存储器和数据存储器。

•输入/输出接口(I/O Interface):负责与外部设备进行通信。

2.2 指令格式单总线CPU设计采用定长指令格式,每条指令由固定长度的几个字段组成。

常见的指令格式包括操作码(Opcode)、目标寄存器(Destination Register)、源操作数1(Source Operand 1)和源操作数2(Source Operand 2)等。

例如,对于一条简单的加法指令,其指令格式如下:| Opcode (6 bits) | Destination Register (4 bi ts) | Source Operand 1 (4 bits) | Source Operand 2 (4 bits) |2.3 时序控制单总线CPU设计采用3级时序,将指令执行过程划分为三个阶段:取指(Fetch)、译码(Decode)和执行(Execute)。

每个阶段占据一个时钟周期,遵循时序控制的规则。

取指阶段:从指令存储器中读取指令,存放到指令寄存器中。

译码阶段:解析当前指令的操作码和操作数,并从寄存器组中读取相关数据。

执行阶段:根据操作码和操作数执行相应的操作,将结果存储到寄存器组中。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

《计算机组成与结构》课程设计报告题目:CPU控制器设计院(系):信息科学与工程专业班级:学生姓名:学号:指导教师:顾兵20 15 年 06 月 15 日至20 15 年 06 月 26 日华中科技大学武昌分校制计算机组成与结构课程设计任务书目录目录 (i)1需求与总体设计 (1)1.1设计任务及功能要求 (1)1.1.1设计任务 (1)1.1.2功能要求 (1)1.2总体设计 (1)1.2.1总体设计原理 (1)1.2.2总体设计说明 (1)1.3总体框图 (2)2详细设计与实现 (3)2.1方案设计与实现 (3)2.1.1输入与输出逻辑图 (3)2.1.2指令与控制信号真值表 (3)2.1.3控制器设计思路流程图 (4)2.2指令分析及逻辑电路图 (4)2.2.1 R-type型指令 (4)2.2.2 Ori指令 (5)2.2.3 lw指令 (6)2.2.4 sw指令 (7)2.2.5 branch指令 (7)2.2.6 Jump指令 (8)2.2.7逻辑电路图 (9)2.3 VHDL代码分析及实现 (10)2.3.1代码分析 (10)2.3.2代码实现 (11)3电路仿真调试 (14)3.1代码仿真 (14)3.2功能仿真及调试 (14)总结 (17)参考文献 (18)1需求与总体设计1.1设计任务及功能要求1.1.1设计任务通过对CPU的工作原理和逻辑功能的理解,运用VHDL硬件描述语言实现能支持基本指令的单时钟控制器设计,采用QUARTUS II软件设计仿真和调试完成。

1.1.2功能要求1.运用VHDL实现能支持基本指令的单时钟控制器设计与调试。

1>实现能够执行R类型、ori、addiu、lw、sw、beg以及jump指令的单时钟控制器使其能够支持基本的指令。

2>实现cpu的控制。

2.采用QUARTUS II软件设计仿真和调试完成。

1.2总体设计1.2.1总体设计原理CPU每次从存储器读取一条指令后,PC指针指向正在取值的指令并存放到指令寄存器IR中,IR将指令送到控制器,控制器对指令进行译码,判断指令类型,从而生成相应指令对应的的数据通路控制信号,指挥整个CPU的运转。

控制单元主要包含一个指令译码器,输入的是指令操作码op(R-型指令还包括功能码func),输出的是控制信号。

所以,控制单元的设计过程如下。

1>根据每条指令的功能,分析控制信号的取值,并在表中列出。

2>根据列出的指令和控制信号的关系,写出每个控制信号的逻辑表达式。

1.2.2总体设计说明1)指令格式如下:MIPS指令分为三种指令:R_Type,I_Type,J_TypeR_Type 如:加法ADD 减法SUBSTRACT加法指令的汇编格式add rd, rs, rt加法指令的汇编格式sub rd, rs, rt图1.1 指令格式2)设计步骤:第一步:确定每个元件所需控制信号的取值。

第二步:汇总所有指令所涉及到的控制信号,生成一张反映指令与控制信号之间关系的表。

第三步:根据表得到每个控制信号的逻辑表达式,据此设计控制器电路。

1.3总体框图总体设计框图如图1.1:图1.2 控制器总体框图2详细设计与实现2.1方案设计与实现2.1.1输入与输出逻辑图由cpu控制器的功能原理得出输入与输出逻辑图如下:图2.1 输入与输出逻辑图2.1.2指令与控制信号真值表查阅得到指令与控制信号真值表如下:表2.1指令与控制信号真值表2.1.3控制器设计思路流程图根据各指令控制信号真值表可得主控制器设计思路流程图如图2.2所示。

图2.2 设计思路流程图2.2指令分析及逻辑电路图2.2.1 R-type型指令图2.3是R-型指令的执行过程示意图,其中粗线描述了R-型指令的数据在数据通中的执行路径:Register File(Rs,Rt)→busA,busB→ALU→Register File(Rd)。

图2.3 R-型指令执行过程控制信号的取值分析如下。

Branch=Jump=0:因为是非分支指令、非无条件跳转指令。

RegDst=1:因为R-型指令的目的寄存器为Rd。

ALUSrc=0:保证选择busB作为ALU的B口操作数。

MemtoReg=0:保证选择ALU结果送到目的寄存器。

RegWr=1:保证在下个时钟到来时,在不发生溢出的情况下结果被写到目的寄存器。

MemWr=0:保证下一个时钟到来时,不会有信息写到数据存储器。

ExtOp=x:因为ALUSrc=0,所以扩展器Extender的值不会影响执行结果,故ExtOp 取0或1都无所谓。

2.2.2 Ori指令指令完成的功能:R[rt] ←R[rs] op ZeroExt[imm16]]图2.4 Ori的控制信号控制信号的取值分析如下。

分支指令和跳转指令都为零Branch=jump=0因为是非分之指令,非跳转指令。

RegDst=1:因为Ori指令的目的寄存器为Rt。

ALUSrc=1:保证选择busB作为ALU的A口操作数。

ALUctr=or。

MemtoReg=0:保证选择ALU结果送到目的寄存器。

RegWr=1:保证在下个时钟到来时,在不发生溢出的情况下结果被写到目的寄存器。

MemWr=0:保证在下个时钟到来时,不会有信息写到数据存储器。

ExpOp=x:因为ALUSrc=0,所以扩展器Extender的值不会影响执行结果,故ExtOP 取0或1都无所谓。

2.2.3 lw指令指令完成的功能:R[rt] ←M[ R[rs] + SignExt[imm16] ]图2.5 lw的控制信号控制信号的取值分析如下。

分支指令和跳转指令都为零Branch=jump=0因为是非分之指令,非跳转指令。

RegDst=1:因为lw指令的目的寄存器为Rt。

ALUSrc=1:保证选择busA作为ALU的A口操作数。

ALUctr=add。

MemtoReg=1:保证选择存储器结果送到目的寄存器。

RegWr=1:保证在下个时钟到来时,在不发生溢出的情况下结果被写到目的寄存器。

MemWr=0:保证在下个时钟到来时,不会有信息写到数据存储器。

ExpOp=1:因为要利用扩展器Extender进行扩展。

2.2.4 sw指令指令完成的功能:rt, rs, imm16图2.6 sw的控制信号控制信号的取值分析如下。

分支指令和跳转指令都为零Branch=jump=0因为是非分之指令,非跳转指令。

RegDst=x:因为不会写到寄存器。

ALUSrc=1:保证选择busA作为ALU的A口操作数。

ALUctr=add。

MemtoReg=x:有没有结果送到目的寄存器无所谓。

RegWr=0:不会有结果被写到目的寄存器。

MemWr=1:保证在下个时钟到来时,会有信息写到数据存储器。

ExpOp=1:因为要利用扩展器Extender进行扩展。

2.2.5 branch指令指令完成的功能:rs, rt, imm16图2.7 branch的控制信号控制信号的取值分析如下。

分支指令置位,跳转指令清零Branch=1,jump=0因为是分之指令,非跳转指令。

寄存器写信号RegDst=x:因为不会写到寄存器。

算术逻辑单元选择信号ALUSrc=0:保证选择busB作为ALU的B口操作数。

算术逻辑单元控制信号ALUctr=sub。

存储器写寄存器信号MemtoReg=x:有没有结果送到目的寄存器无所谓。

寄存器写信号RegWr=0:不会有结果被写到目的寄存器。

存储器写信号MemWr=0:保证在下个时钟到来时,不会有信息写到数据存储器。

符号扩展信号ExpOp=x:因为不需要利用扩展器Extender进行扩展。

2.2.6 Jump指令指令完成的功能:j target图2.8 jump指令的控制信号控制信号的取值分析如下。

分支指令清零,跳转指令置位Branch=0,jump=1因为是非分之指令,跳转指令。

目的寄存器RegDst=x:因为不会写到寄存器。

算术逻辑单元ALUSrc=x:保证选择busB作为ALU的A口操作数。

算术逻辑单元控制信号ALUctr=x。

存储器到寄存器信号MemtoReg=x:有没有结果送到目的寄存器无所谓。

寄存器写信号RegWr=0:不会有结果被写到目的寄存器,避免寄存器在指令执行过程时被写入任何结果。

存储器写信号MemWr=0:保证在下个时钟到来时,不会有信息写到数据存储器。

符号扩展信号ExpOp=x:因为要利用扩展器Extender进行扩展。

2.2.7逻辑电路图图2.9控制器逻辑电路图2.3 VHDL代码分析及实现2.3.1代码分析1)实体一个VHDL实体指定了实体的名称,实体的端口和实体所关联的信息。

所有的设计都是用一个或多个实体创建起来的。

实体是设计的最基本模块。

设计的最高层次是顶层设计。

如果设计是分等级的,那么顶层的描述将包含较低层次的描述。

这些较低层次的描述将是被包含在顶层实体描述中的较低层次的实体。

关键字ENTITY表示这是一个实体语句的开始。

它指定了端口数量,端口方向和端口类型。

实体是描述VHDL模型的接口。

entity main_controller isport(op: in std_logic_vector(5 downto 0);RegWr,ALUSrc,RegDst,MemtoReg,MemWr,Branch,Jump,ExtOp,ALUOP0,ALUOP1,ALUOP2,RType: out std_logic);end main_controller;2)结构结构体描述实体的基本功能,并有对实体的行为进行建模的语句。

所有的能被仿真的实体都有一个结构体描述,这个结构体描述了实体的行为。

一个单一的实体可以有多个结构体,一个结构体可能是一种行为,而令一个结构体可能是一个设计的结构描述。

一个结构体总是与一个实体和描述这个实体的行为相关联。

关键字ARCHITECTURE表示这条语句描述了一个实体的结构体。

这个结构体的名称是behav,所描述的实体称为main_controller。

architecture behav of main_controller issignal iRtype, ori,addiu,lw,sw,beq,jump1: std_logic;beginprocess(op)beginend process;process(iRtype, ori,addiu,lw,sw,beq,jump1)end process;end behav;2.3.2代码实现library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity main_controller isport(op: in std_logic_vector(5 downto 0);RegWr,ALUSrc,RegDst,MemtoReg,MemWr,Branch,Jump,ExtOp,ALUOP0,ALUOP1,ALUOP2,RType: out std_logic);end main_controller;architecture behav of main_controller issignal iRtype, ori,addiu,lw,sw,beq,jump1: std_logic;beginprocess(op)begincase op iswhen "000000" =>iRtype <= '1';ori<='0' ; addiu <= '0'; lw <= '0'; sw <= '0'; beq <= '0'; jump1 <= '0';when "001101" =>iRtype <= '0';ori<='1' ; addiu <= '0'; lw <= '0'; sw <= '0'; beq <= '0'; jump1 <= '0';when "001001" =>iRtype <= '0';ori<='0' ; addiu <= '1'; lw <= '0'; sw <= '0'; beq <= '0'; jump1 <= '0';when "100011" =>iRtype <= '0';ori<='0' ; addiu <= '0'; lw <= '1'; sw <= '0'; beq <= '0'; jump1 <= '0';when "101011" =>iRtype <= '0';ori<='0' ; addiu <= '0'; lw <= '0'; sw <= '1'; beq <='0'; jump1 <= '0';when "000100" =>iRtype <= '0';ori<='0' ; addiu <= '0'; lw <= '0'; sw <= '0'; beq <= '1'; jump1 <= '0';when "000010" =>iRtype <= '0';ori<='0' ; addiu <= '0'; lw <= '0'; sw <= '0'; beq <= '0'; jump1 <= '1';when others=>end case;end process;process(iRtype, ori,addiu,lw,sw,beq,jump1)beginif(iRtype = '1' )thenRegDst<= '1' ; ALUOP0<= '1' ; ALUOP2<= '0'; RType<= '1' ;RegWr <= '1';ALUSrc <= '0';MemtoReg<= '0';MemWr<= '0';Jump<= '0';Branch<= '0';ExtOp<= '0';ALUOP1<= '0';elsif(ori='1')thenALUOP1<= '1';RegWr <= '1';ALUSrc <= '1';RegDst<= '0' ; ALUOP0<= '0' ; ALUOP2<= '0'; RType<= '0' ;MemtoReg<= '0';MemWr<= '0';Jump<= '0';Branch<= '0';ExtOp<= '0';elsif(addiu ='1')thenRegWr <= '1';ALUSrc <= '1';ExtOp<= '1';ALUOP1<= '0';RegDst<= '0' ; ALUOP0<= '0' ; ALUOP2<= '0'; RType<= '0' ;MemtoReg<= '0';MemWr<= '0';Jump<= '0';Branch<= '0';elsif( lw ='1' )thenRegWr <= '1';ALUSrc <= '1';MemtoReg<= '1';ExtOp<= '1';ALUOP1<= '0';RegDst<= '0' ; ALUOP0<= '0' ; ALUOP2<= '0'; RType<= '0' ;MemWr<= '0';Jump<= '0';Branch<= '0';elsif(sw ='1')thenMemWr<= '1';ALUSrc <= '1';ExtOp<= '1';ALUOP1<= '0';RegWr <= '0';RegDst<= '0' ; ALUOP0<= '0' ; ALUOP2<= '0'; RType<= '0' ;MemtoReg<= '0';Jump<= '0';Branch<= '0';elsif(beq ='1')thenBranch<= '1'; ALUOP2<= '1';ALUOP1<= '0';RegWr <= '0';ALUSrc <= '0';RegDst<= '0' ; ALUOP0<= '0' ; RType<= '0' ;MemtoReg<= '0';MemWr<= '0';Jump<= '0';ExtOp<= '0';elsif(jump1='1')thenJump<= '1';ALUOP1<= '0';RegWr <= '0';ALUSrc <= '0';RegDst<= '0' ; ALUOP0<= '0' ;ALUOP2<= '0'; RType<= '0' ;MemtoReg<= '0';MemWr<= '0';Branch<= '0';ExtOp<= '0';end if;end process;end behav;3电路仿真调试3.1代码仿真将VHDL语言编写的代码在quartus5.0上进行仿真,如图3.1所示。

相关文档
最新文档