毕业设计(论文)-基于VHDL语言的8位RISC-CPU的设计.doc_第1页
毕业设计(论文)-基于VHDL语言的8位RISC-CPU的设计.doc_第2页
毕业设计(论文)-基于VHDL语言的8位RISC-CPU的设计.doc_第3页
毕业设计(论文)-基于VHDL语言的8位RISC-CPU的设计.doc_第4页
毕业设计(论文)-基于VHDL语言的8位RISC-CPU的设计.doc_第5页
已阅读5页,还剩31页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

中 文 摘 要 摘 要 RISC 即精简指令集计算机(Reduced Instruction Set Computer)的缩写。 RISC-CPU 与一般的 CPU 相比,通过简化指令系统使计算机的结构更加简单合 理,从而提高了运算速度。本文对 RISC-CPU 的架构进行了分析,并使用 VHDL 语言设计了 8 位 RISC-CPU IP 软核。 RISC-CPU 由八大基本模块构成:时钟发生器、指令寄存器、累加器、算 术逻辑单元、数据输出控制器、地址多路器、程序计数器、状态控制器。本设 计中借助 MAX+PLUS软件平台对各模块进行时序仿真,并最终给出了指令执 行的仿真波形,验证了 CPU 的功能。 设计仿真结果表明,该 8 位 RISC-CPU 能够完成既定的任务指标,而且在 运行效率上有一定程度改善。 关键词:RISC-CPU、VHDL、MAX+PLUS、IP 软核、时序仿真 Abstract Abstract RISC reduced instruction set computer that (Reduced Instruction Set Computer) acronym. RISC-CPU and CPU in general compared to instruction by simplifying the structure of the computer is more simple and reasonable, thereby increasing processing speed. In this paper, RISC-CPU architecture is analyzed, and by using the VHDL language, I designed an 8-bit RISC-CPU IP soft core. RISC-CPU is based on 8 modules: clock generator, instruction register, accumulator, arithmetic logic unit, data output controller, address multiplexer, program counter, state controller. In the design, each module are timing simulated on MAX+PLUS software platform, and finally the simulated waveform of instruction execution that verifies the CPU features is given. Design and simulation results show that the 8-bit RISC-CPU can complete the tasks, and also has a certain degree of improvement on operational efficiency. Keywords: RISC-CPU, VHDL, MAX+PLUS, IP soft core, Timing Simulation 目 录 目 录 摘 要.I ABSTRACT(英文摘要).II 目 录.III 第一章 引言.1 1.1 课题背景与发展现状.1 1.1.1 课题背景.1 1.1.2 RISC-CPU 的发展现状.1 1.2 RISC-CPU 优势与现实意义.1 1.2.1 RISC-CPU 具备的优势.1 1.2.2 本课题的现实意义.2 1.3 本设计的主要内容.2 第二章 RISC-CPU 的架构设计.3 2.1 RISC-CPU 基本架构.3 2.2 RISC-CPU 模块的划分.4 第三章 八位 RISC-CPU 各模块设计与仿真.6 3.1 时钟发生器.6 3.2 指令寄存器.7 3.3 累加器.10 3.4 算术逻辑单元.11 3.5 数据输出控制器.13 3.6 地址多路器.14 3.7 程序计数器.15 3.8 状态控制器.17 第四章 RISC-CPU 的综合及操作时序.25 4.1 RISC-CPU 各模块综合.25 4.2 CPU 复位启动操作时序.29 结论.30 目 录 参考文献.31 致谢.32 第一章 引 言 - 1 - 第一章引 言 1.1 题背景与发展现状 1.1.1 课题背景 CPU 是 Central Processing Unit中央处理器的缩写,它是计算机中最重 要的一个部分。CPU 由运算器和控制器组成,其内部结构归纳起来可以分为控 制单元、逻辑单元和存储单元三大部分,这三个部分相互协调,便可以进行分 析,判断、运算并控制计算机各部分协调工作。CPU 从最初发展至今已经有几 十年的历史了,这期间,按照其处理信息的字长,CPU 可以分为:四位微处理 器、八位微处理器、十六位微处理器、三十二位微处理器以及六十四位微处理 器。而 RISC 处理器的出现标志着计算机体系结构中的一个根本性变革。 RISC 即精简指令集计算机(Reduced Instruction Set Computer)的缩写。从实 现的途径看,RISC-CPU 与一般的 CPU 的不同处在于:它的时序控制信号形成 部件是用硬布线逻辑实现的而不是采用微程序控制的方式。所谓硬布线逻辑也 就是用触发器和逻辑门直接连线所构成的状态机和组合逻辑,故产生控制序列 的速度比用微程序控制方式快得多,因为这样做省去了读取微指令的时间。 1.1.2 RISC-CPU的发展现状 IBM 公司在 1975 年成功开发出第一款 RISC 处理器,从此 RISC 架构开始 走进超级计算机中。由于指令高度简约,RISC 处理器的晶体管规模普遍都很小 而性能强大,深受超级计算机厂商所青睐。很快,许多厂商都开发出了自己的 RISC 指令系统,除了 IBM 的 Power 和 PowerPC 外,还有 DEC 的 Alpha、SUN 的 SPARC、HP 的 PA-RISC、MIPS 技术公司的 MIPS、ARM 公司的 ARM 等。 它的应用范围也远比 X86 来得广泛,大到各种超级计算机、工作站、高阶服务 器,小到各类嵌入式设备、家用游戏机、消费电子产品、工业控制计算机,都 可以看到 RISC 的身影。 1.2 RISC-CPU 优势与现实意义 1.2.1 RISC-CPU具备的优势 RISC 有一套优化过的指令架构,它是根据著名的 80/20 法则所订立。早在 上个世纪 60 年代,计算机科学家们发现,计算机中 80%的任务只是动用了大约 20%的指令,而剩下 20%的任务才有机会使用到其他 80%的指令。如果对指令 系统作相应的优化,就可以从根本上快速提高处理器的执行效率。 第一章 引 言 - 2 - RISC 与 CISC(一般指普通的 X86CPU)比较,有以下优势: 指令简单而且少;指令系统选用那些使用频度高的简单指令和一些实用的 但不十分复杂的指令,一般指令不超过 100 条;指令字长固定,寻址方式一般 不超过四种,指令格式也不超过四种;所有指令(几乎所有指令)均在单指令周 期完成;指令系统中只允许存(STORE)和取(LOAD)指令访问主存,其它指令均 在寄存器之间进行;CPU 中设置大量的寄存器,称作寄存器堆;指令的运行采 用高效的流水线方式;以硬布线控制逻辑为主,不用或少用微码;优化的编译 程序,简单有效地支持高级语言;超低功耗。 1.2.2 本课题的现实意义 本课题的设计具有重要的意义: (1) 从 IP 设计技术层面看,本课题按照自顶向下(Top-Down)的设计方法, 从系统级结构和模块划分到硬件描述、综合、仿真灯,研究了 Altera 公司的 MAX+plusII 工具的使用,掌握了 IP 正向设计的基本方法,积累了宝贵经验。 (2) 从 RISC-CPU 设计技术层面看,通过本课题的设计过程,了解掌握了 MIPS 指令系统 CPU 体系结构设计的关键技术。 (3) 从嵌入式系统设计技术层面看,集成电路发展已进入 IP core 复用的 SoC 时代,8 位嵌入式微处理器发展的一个重要特点是片上系统 SoC 化。本课 题也为基于 IP 核的嵌入式系统设计积累了宝贵经验。 (4) 从市场应用层面看,8 位 RISC-CPU 是目前市场上同类产品占市场份额 最大的一块,符合我国集成电路当前的设计水平,以它作为参与市场竞争的突 破口,来提高企业的市场竞争能力和技术创新能力,是一个切实可行的方案。 1.3 本设计的主要内容 本文对 RISC-CPU 的架构进行了探讨,介绍了如何设计 RISC-CPU,并且 立足于八位的 RISC-CPU 设计实例,应用硬件描述语言 VHDL 语言实现 8 位简 化 RISC-CPU IP 软核的设计,通过对 RISC-CPU 结构和指令执行的分析将整个 系统划分为各个功能模块,并阐明各模块间的接口信号,给出了每个模块内部 设计实现的详细叙述,最后介绍对设计的综合和验证工作,给出了仿真验证数 据以及时序图。设计需要实现的这个简化的 8 位 RISC-CPU 采用 MIPS 的部分 指令集,同时对 MIPS CPU 的结构进行一定的修改。 第二章 RISC-CPU的架构设计 - 3 - 第二章RISC-CPU的架构设计 2.1 RISC-CPU 基本架构 一个基本的 CPU 要包括三部分功能:数据的存储、数据的运算和控制部分。 与之相对应的硬件结构也分为三部分:存储器、数据通路和控制器。存储器存 放指令和数据;数据通路包括 ALU、程序计数器等,主要功能是对操作数进行 运算,得到结果,并产生程序计数器的值,作为要执行的下一条指令的地址; 控制器内有指令寄存器,它对指令进行译码,产生相应的控制信号,完成对存 储器和数据通路部分的控制。 存储器、数据通路和控制器这三部分的基本关系下图所示: 图 2-1 CPU 基本结构 存储器中存放了要执行的指令和相应数据。存储器的读写信号由控制器给 出。存储器的地址来源有两个:程序计数器和指令寄存器。在取新指令时,用 程序计数器的值作为存储器地址;在执行指令时,用指令中的地址部分作为存 储器地址。 数据通路主要包括累加器、程序计数器和算术逻辑单元。 累加器用于保存参加运算的数据以及运算的中间结果。实际上,累加器也 是寄存器,不过,它有特殊性,即许多指令执行过程以累加器为中心。往往在 运算指令前,累加器中存放一个操作数,指令执行后,由累加器保存运算结果。 另外输入输出指令一般也通过累加器来完成。 程序计数器指向下一条要执行的指令。由于程序一般存放在内存的一个连 续区域,所以,顺序执行程序时,每取一个指令字节,程序计数器便加一。 算术逻辑单元是专门用来处理各种运算的数据信息的,它可以进行加、减、 乘、除算术运算和与、或、非、异或等逻辑运算。 控制器产生相应的控制信号送到时序和控制逻辑电路,从而,组合成外部 第二章 RISC-CPU的架构设计 - 4 - 电路所需要的时序和控制信号。这些信号送往其他部件,以控制这些部件协调 工作。 对图 2-1 中的结构进行细化,可以得到一个简单的架构,如下图所示。该 CPU 采用总线结构,即控制器所需的指令和数据通路所需的数据都是从总线上 得到的。 图 2-2 CPU 的简单架构 2.2 RISC-CPU 模块的划分 计算机进行信息处理可分为两个步骤: 一、将数据和程序(即指令序列)输入到计算机的存储器中。 二、从第一条指令的地址起开始执行该程序,得到所需结果,结束运行。 CPU 的作用是协调并控制计算机的各个部件执行程序的指令序列,使其有 条不紊地进行。因此它必须具有以下基本功能: (1) 取指令:当程序已在存储器中时,首先根据程序入口地址取出一条程序, 为此要发出指令地址及控制信号。 (2) 分析指令:即指令译码。是对当前取得的指令进行分析,指出它要求什 么操作,并产生相应的操作控制命令。 (3) 执行指令:根据分析指令时产生的“操作命令”形成相应的操作控制信号 序列,通过运算器,存储器及输入/输出设备的执行,实现每条指令的功能,其 中包括对运算结果的处理以及下条指令地址的形成。 由功能分析,RISC-CPU 应至少包含八个基本组成部件,即:时钟发生器、 指令寄存器、累加器、算术逻辑单元、数据输出控制器、地址多路器、程序计 数器、状态控制器,各个模块之间的互连关系如下图: 第二章 RISC-CPU的架构设计 - 5 - 图 2-3 RISC-CPU 结构图 1时钟发生器(clkgen):产生一系列的时钟信号送往 CPU 其他部件; 2指令寄存器(register):存储指令; 3累加器(accum):存放算术逻辑单元当前的结果,它也是算术逻辑单元 双目运算中的一个数据来源; 4算术逻辑单元(alu):根据输入的 8 种不同操作码分别实现相应的加、 与、读、写、异或,跳转等指令; 5数据输出控制器(datactl):控制累加器的数据输出; 6状态控制器(control):CPU 的控制核心,用于产生一系列的控制信号, 启动或停止某些部件; 7程序计数器(counter):提供指令地址,以便读取指令; 8地址多路器(adr):选择输出的地址是 PC(程序计数)地址还是跳转的 目标地址。 第三章 八位RISC-CPU各模块设计与仿真 - 6 - 第三章八位RISC-CPU各模块设计与仿真 3.1 时钟发生器 图 3-1 时钟发生器 时钟发生器 Clock Generator 如上图所示,利用外来时钟信号 CLK 来生成 一系列时钟信号 CLK1、FETCH、ALU_CLK 送往 CPU 的其他部件,各分频时 钟信号功能如下: CLK1 信号经 CLK 反相后用作指令寄存器、累加器、状态控制器的时钟信 号。 FETCH 是外来时钟 CKL 的 8 分频信号,其上升沿触发 CPU 控制器开始执 行一条指令,该信号同时还控制地址多路器输出指令地址和数据地址。 ALU 电路的时钟信号 ALU_CLK,由 CLK 的 2 分频信号、4 分频信号和 FETCH 的反相信号相与得到,用于触发算术逻辑单元。 时钟发生器源程序如下: library ieee; use ieee.std_logic_1164.all; entity clkgen is port(clk: in std_logic; clk1: buffer std_logic; fetch: buffer std_logic:=0; alu_clk: out std_logic); end clkgen; architecture behave of clkgen is signal clk2: std_logic:=0; signal clk4: std_logic:=1; begin alu_clk=clk2 and clk4 and (not fetch); process(clk1) begin 第三章 八位RISC-CPU各模块设计与仿真 - 7 - clk1=not clk; if clk1event and clk1=1then clk2=not clk2; end if; end process; process(clk2) begin if clk2event and clk2=0 then clk4=not clk4; end if; end process; process(clk4) begin if clk4event and clk4=1 then fetchopc_iraddrs(15 downto 8)opc_iraddrs(7 downto 0)null; end case; else state:=0; end if; end if; end process; opcode=opc_iraddrs(15 downto 13); ir_addr=opc_iraddrs(12 downto 0); end behave; 仿真波形如下图: (续) 图 3-4 指令寄存器仿真波形 第三章 八位RISC-CPU各模块设计与仿真 - 10 - 在此仿真波形图中,clk1 为时钟输入信号,ena 为使能输入端口,rst 为置 位端口,这里假设在 ena=1 之前 data=00000000,ena=1 后传输了 10011001、01100110、11001100、00110011 四个数据,则当 state 为 0 时,传输 高八位,当 state 为 1 时,传输低八位。其中第 15 至第 13 位存入 opcode 中并 替换旧数据,第 12 至第 0 位存入 str_addr 中并替换旧数据。 3.3 累加器 图 3-5 累加器 累加器 Accumulator 用于存放当前的结果,它也是双目运算其中的一个数 据来源,同时累加器还用来存放算术运算指令的结果,如图 3-5 所示。累加器 采用同步复位方式,即当 RST 信号为高电平时,累加器的值为零。当累加器通 过 ENA 口收到来自 CPU 状态控制器 ACC_ENA 信号时,即 ENA=1 时,在 CLK1 时钟正跳沿时就收到来自于数据总线的数据,由 DATA7.0输入;而当 ENA=0 时,累加器保持不变。 累加器源程序如下: library ieee; use ieee.std_logic_1164.all; entity acc is port(clk1,rst,ena:in std_logic; data:in std_logic_vector(7 downto 0); accum:out std_logic_vector(7 downto 0); end acc; architecture art of acc is begin process(clk1, ena) begin if clk1event and clk1=1then if rst=1then accum=00000000; 第三章 八位RISC-CPU各模块设计与仿真 - 11 - elsif ena=1then accum=data; end if; end if; end process; end art; 在仿真时,设定 6 个周期假设中,data 端每周期输入不同的 8 位二进制数, 观察 accum 端输出数据与 rst 和 ena 值的对应关系,仿真波形如下: 图 3-6 累加器仿真波形 如图所示,当复位信号 rst=0、使能信号 ena=1时,在每个 clk1 上升沿到 来后,accum 接收来自于数据总线的数据;当第 4 周期 ena=0时,accum 保持 01010101 不变,故该数据占两个周期;当 ena 又变为有效信号,因同时 rst 由 0 变为 1,累加器复位,accum 输出清零。 3.4 算术逻辑单元 算术逻辑单元 ALU 的全称是 Arithmetic Logic Unit,该模块用来执行诸如 加减乘除以及寄存器中的值之间的逻辑运算,通常在一般的处理器上被设成一 个周期上升沿运行一次,这主要是由附属于 ALU 的输入输出寄存器以及在 ALU 输入处插入旁路乘法器来决定的。算术逻辑单元根据输入的 8 种不同操作 码分别实现相应的加、与、异或、跳转等 8 种基本操作运算,利用这几种基本 运算可以实现很多种其它运算以及逻辑判断等操作。 图 3-7 算术逻辑单元 算术逻辑单元如上图所示,其各端口功能如下: 第三章 八位RISC-CPU各模块设计与仿真 - 12 - ALU_CLOCK 为 ALU 的时钟信号,由时钟发生器输出; OPCODE 取自指令寄存器的高 3 位,ALU 根据输入 OPCODE 的 8 种不同 操作码分别实现相应的加、与、异或、跳转等基本操作运算; DATA 输入来自数据总线上的数据; ACCUM 输入来自累加器的一个操作数; ALU_OUT 用来保存或输出操作后的值; ZERO 用于标志 ACCUM 是否为 0,其值为 0 时标 ZERO=1,否则 ZERO=0。 算术逻辑单元源程序如下: library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity alu is port(alu_clk: in std_logic; opcode: in std_logic_vector(2 downto 0); data,accum: in std_logic_vector(7 downto 0); zero: out std_logic; alu_out: out std_logic_vector(7 downto 0); end alu; architecture behave of alu is signal alu_out_latch: std_logic_vector(7 downto 0); constant HLT: std_logic_vector(2 downto 0):=000; constant SKZ: std_logic_vector(2 downto 0):=001; constant ADD: std_logic_vector(2 downto 0):=010; constant AN_D: std_logic_vector(2 downto 0):=011; constant XO_R: std_logic_vector(2 downto 0):=100; constant LDA: std_logic_vector(2 downto 0):=101; constant STO: std_logic_vector(2 downto 0):=110; constant JMP: std_logic_vector(2 downto 0):=111; begin zeroalu_out_latchalu_out_latchalu_out_latchalu_out_latchalu_out_latchalu_out_latchalu_out_latchalu_out_latchalu_out_latch=XXXXXXXX; end case; end if; end process; alu_out=alu_out_latch; end behave; 在仿真过程中,假设操作码依次为上述 8 种操作码。数据值为 5,累加器 值为由 3 变 0,以此来验证 zero 作用。仿真波形下图所示: 图 3-8 算术逻辑运算单元仿真波形 alu_clk 为时钟信号输入端口,zero 为判 accum 是否为零的输出端口。 opcode 为操作码输入端,data 为数据输入端,accum 为累加器输入端口。 opcode 不同的值代表不同的操作。alu_out 中的 06 代表 5(转化为二进制=101)异 或 3(转化为二进制=011)得 6(二进制=110),而其他数值均正确反映不同操作码 第三章 八位RISC-CPU各模块设计与仿真 - 14 - 下的运算结果。 3.5 数据输出控制器 数据输出控制器 Data Control 的作用是控制累加器数据输出,如图 3-9 由于 数据总线是各种操作时传送数据的公共通道,不同的情况下传送不同的内容。 有时要传输指令,有时要传送 RAM 区或接口的数据。累加器的数据只有在需 要往 RAM 区或端口写时才允许输出,否则应呈现高阻态,以允许其它部件使 用数据总线。所以任何部件往总线上输出数据时,都需要控制信号。而此控制 信号的启、停,则由 CPU 状态控制器输出的各信号控制决定。数据控制器何时 输出累加器的数据则由状态控制器输出的控制信号 DATACTL_ENA 决定。 图 3-9 数据输出控制器 数据控制电路源程序如下: library ieee; use ieee.std_logic_1164.all; entity datactrl is port(data_ena: in std_logic; alu_out: in std_logic_vector(7 downto 0); data: out std_logic_vector(7 downto 0); end datactrl; architecture behave of datactrl is begin data=alu_out when data_ena=1 else ZZZZZZZZ; end behave; 在此波形图 3-10 中,假设累加器输出值由 00000000 递增,验证当 data_ena 为 0 时,data 输出 alu_out 的值,当 data_ena 为 1 时,data 输出 ZZZZZZZZ。 第三章 八位RISC-CPU各模块设计与仿真 - 15 - 图 3-10 数据输出控制器仿真波形 3.6 地址多路器 地址多路器 ADDR 用于选择输出的地址是 PC(程序计数)地址还是数据/ 端口地址,如图 3-11 所示。每个指令周期的前 4 个时钟周期用于从 ROM 中读 取指令,输出 PC 地址。后 4 个时钟周期用于对 RAM 或端口的读写,输出数据 或端口地址。地址的选择输出信号由时钟信号的 8 分频信号 FETCH 提供,其 上升沿到来时输出 PC 地址,其他时候输出数据或端口地址。 图 3-11 地址多路器 地址多路器源程序如下: library ieee; use ieee.std_logic_1164.all; entity addr_mux is port(fetch:in std_logic; pc_addr, ir_addr: in std_logic_vector(12 downto 0); addr: out std_logic_vector(12 downto 0); end addr_mux; architecture behave of addr_mux is begin addr=pc_addr when fetch=1 else ir_addr; end behave; 图 3-12 地址多路器仿真波形 当 fetch=0 时 addr 输出 ir_addr 的值,当 fetch=1 时 addr 输出 pc_addr 的值。 第三章 八位RISC-CPU各模块设计与仿真 - 16 - 3.7 程序计数器 程序计数器 Program Counter 用于提供指令地址,如图 3-13,以便读取指令, 指令按地址顺序存放在存储器中。有两种途径可形成指令地址:其一是顺序执 行的情况,其二是遇到要改变顺序执行程序的情况,例如执行 JMP 指令后,需 要形成新的指令地址。 复位后,指令指针为零,即每次 CPU 重新启动将从 ROM 的零地址开始读 取指令并执行。指令为双字节,每条指令执行完需 2 个时钟,这时 PC_ADDR 已被增 2,指向下一条指令。如果正执行的指令是跳转语句,这时 CPU 状态控 制器将会输出 PC_ENA 信号,通过 LOAD 口进入程序计数器。程序计数器 PC_ADDR 将装入目标地址 IR_ADDR,而不是增 2。 图 3-13 程序计数器 程序计数器源程序如下: library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity pc is port(clk, rst, ena: in std_logic; ir_addr: in std_logic_vector(12 downto 0); pc_addr: out std_logic_vector(12 downto 0); end pc; architecture behave of pc is signal pc_addr_latch: std_logic_vector(12 downto 0); begin process(clk) begin if clkevent and clk=1then if rst=1then 第三章 八位RISC-CPU各模块设计与仿真 - 17 - pc_addr_latch0); elsif ena=1 then pc_addr_latch=ir_addr; elsif ena=0 then pc_addr_latch=pc_addr_latch+1; end if; end if; end process; pc_addr=pc_addr_latch; end behave; 假设指令地址为 0、1、2、3,为便于显示,设置地址指令和程序计数器 输出为数制十进制,仿真波形如下图: 图 3-14 程序计数电路仿真波形 clk 的上升沿启动电路,当 rst 为低电平, ena 为低电平时,pc_addr 自身加 1;ena 为高电平则 pc_addr 输出 ir_addr 的值。rst 为高电平时输出清 0。 3.8 状态控制器 图 3-15 状态控制器 状态控制器 State Control 是 CPU 的控制核心,用于产生一系列的控制信号, 启动或停止某些部件,由状态机(STATE_MACHINE)和状态机控制器 第三章 八位RISC-CPU各模块设计与仿真 - 18 - (MACH_CTR)组成,如上图。状态机控制器接受复位信号 RST,当 RST 有效时 通过信号 ENA 使其为 0,输入到状态机中停止状态机的工作。状态机的当前状 态,由变量 STATE 记录,STATE 的值就是当前这个指令周期中已经过的时钟 数。 指令周期是由 8 个时钟周期组成,每个时钟周期都要完成固定的操作。 状态转换如下图: 图 3-16 状态控制器状态转换图 (1) 第 1 个时钟 S0,CPU 状态控制器的输出:RD 和 IR_ENA 为高电平, 其余均为低电平。指令寄存器寄存由 ROM 送来的高 8 位指令代码。 第三章 八位RISC-CPU各模块设计与仿真 - 19 - (2) 第 2 个时钟 S1,与上一时钟相比只是 PC_CLK 从 0 变为 1,故 PC 增 1;同时 ROM 送来低 8 位指令代码,指令寄存器寄存该 8 位代码。 (3) 第 3 个时钟 S2,空操作。 (4) 第 4 个时钟 S3,PC 增 1,指向下一条指令。若操作符为 HLT,则输出 信号 HLT 为高。如果操作符不为 HLT,除了 PC 增 1 外(指向下一条指令), 其它各控制线输出为零。 (5)第 5 个时钟 S4,若操作符为 AND、ADD、XOR 或 LDA,读相应地址 的数据;若为 JMP,将目的地址送给程序计数器;若为 STO,输出累加器数据。 (6) 第 6 个时钟 S5,若操作符为 AND、ADD 或 XOR,算术逻辑单元就进 行相应的运算;若为 LDA,就把数据通过算术逻辑单元送给累加器;若为 SKZ,先判断累加器的值是否为 0,如果为 0,PC 就增 1,否则保持原值;若 为 JMP,锁存目的地址;若为 STO,将数据写入地址处。 (7) 第 7 个时钟 S6,空操作。 (8) 第 8 个时钟 S7,若操作符为 SKZ 且累加器值为 0,则 PC 值再增 1,跳 过一条指令,否则 PC 无变化。 在实体编写过程中,首先定义 8 个状态为 S0S7,然后定义 8 个指令代码 为常量。由于只有 8 条指令,所以采用 3 位二进制数编码。因 AND 和 XOR 指 令为 VHDL 关键字,故用 AN_D 和 XO_R 代替。 指令HLTSKZADDAN_DXO_RLDASTOJMP 代码000001010011100101110111 状态机控制器源程序如下: library ieee; use ieee.std_logic_1164.all; entity mach_ctr is port(fetch,rst: in std_logic; ena: out std_logic); end mach_ctr; architecture behave of mach_ctr is begin process(fetch) begin 第三章 八位RISC-CPU各模块设

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论