




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、基于VHDL语言的8位RISC-CPU的设计 毕业设计说明书基于VHDL语言的8位RISC-CPU的设计 学 院: 专 业: 学生姓名: 学 号: 指导教师: 201 年 月摘 要 RISC即精简指令集计算机(Reduced Instruction Set Computer)的缩写。RISC-CPU与一般的CPU相比,通过简化指令系统使计算机的结构更加简单合理,从而提高了运算速度。本文对RISC-CPU的架构进行了分析,并使用VHDL语言设计了8位RISC-CPU IP软核。 RISC-CPU由八大根本模块构成:时钟发生器、指令存放器、累加器、算术逻辑单元、数据输出控制器、地址多路器、程序计数
2、器、状态控制器。本设计中借助+PLUS软件平台对各模块进行时序仿真,并最终给出了指令执行的仿真波形,验证了CPU的功能。 设计仿真结果说明,该8位RISC-CPU能够完成既定的任务指标,而且在运行效率上有一定程度改善。关键词:RISC-CPU、VHDL、+PLUS、IP软核、时序仿真AbstractRISC reduced instruction set computer that Reduced Instruction Set Computer acronym. RISC-CPU and CPU in general compared to instruction by simplifyin
3、g 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, accum
4、ulator, arithmetic logic unit, data output controller, address multiplexer, program counter, state controller. In the design, each module are timing simulated on +PLUS software platform, and finally the simulated waveform of instruction execution that verifies the CPU features is given.Design and si
5、mulation 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, +PLUS, IP soft core, Timing Simulation目 录摘 要IAbstract(英文摘要)II目 录III第一章引言11.1 课题背景与开展现状11.1.1 课题背景11.1.2 RISC-CPU的开展现状11.2 RISC-CPU优势与
6、现实意义11.2.1 RISC-CPU具备的优势11.2.2 本课题的现实意义21.3 本设计的主要内容2第二章RISC-CPU的架构设计32.1 RISC-CPU根本架构32.2 RISC-CPU模块的划分4第三章八位RISC-CPU各模块设计与仿真63.1 时钟发生器63.2 指令存放器73.3 累加器103.4 算术逻辑单元113.5 数据输出控制器133.6 地址多路器143.7 程序计数器153.8 状态控制器17第四章RISC-CPU的综合及操作时序254.1 RISC-CPU各模块综合254.2 CPU复位启动操作时序29结论30参考文献31致谢32引 言1.1 题背景与开展现状
7、1.1.1 课题背景 CPU是Central Processing Unit?中央处理器的缩写,它是计算机中最重要的一个局部。CPU由运算器和控制器组成,其内部结构归纳起来可以分为控制单元、逻辑单元和存储单元三大局部,这三个局部相互协调,便可以进行分析,判断、运算并控制计算机各局部协调工作。CPU从最初开展至今已经有几十年的历史了,这期间,按照其处理信息的字长,CPU可以分为:四位微处理器、八位微处理器、十六位微处理器、三十二位微处理器以及六十四位微处理器。而RISC处理器的出现标志着计算机体系结构中的一个根本性变革。 RISC即精简指令集计算机Reduced Instruction Set
8、Computer的缩写。从实现的途径看,RISC-CPU与一般的CPU的不同处在于:它的时序控制信号形成部件是用硬布线逻辑实现的而不是采用微程序控制的方式。所谓硬布线逻辑也就是用触发器和逻辑门直接连线所构成的状态机和组合逻辑,故产生控制序列的速度比用微程序控制方式快得多,因为这样做省去了读取微指令的时间。1.1.2 RISC-CPU的开展现状 IBM公司在1975年成功开发出第一款RISC处理器,从此RISC架构开始走进超级计算机中。由于指令高度简约,RISC处理器的晶体管规模普遍都很小而性能强大,深受超级计算机厂商所青睐。很快,许多厂商都开发出了自己的RISC指令系统,除了IBM的Power
9、和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%的指令。如果对指令系统
10、作相应的优化,就可以从根本上快速提高处理器的执行效率。 RISC与CISC(一般指普通的X86CPU)比拟,有以下优势: 指令简单而且少;指令系统选用那些使用频度高的简单指令和一些实用的但不十分复杂的指令,一般指令不超过100条;指令字长固定,寻址方式一般不超过四种,指令格式也不超过四种;所有指令几乎所有指令均在单指令周期完成;指令系统中只允许存STORE和取LOAD指令访问主存,其它指令均在存放器之间进行;CPU中设置大量的存放器,称作存放器堆;指令的运行采用高效的流水线方式;以硬布线控制逻辑为主,不用或少用微码;优化的编译程序,简单有效地支持高级语言;超低功耗。1.2.2 本课题的现实意义
11、 本课题的设计具有重要的意义: 从IP设计技术层面看,本课题按照自顶向下Top-Down的设计方法,从系统级结构和模块划分到硬件描述、综合、仿真灯,研究了Altera公司的+plusII工具的使用,掌握了IP正向设计的根本方法,积累了珍贵经验。 从RISC-CPU设计技术层面看,通过本课题的设计过程,了解掌握了MIPS指令系统CPU体系结构设计的关键技术。 从嵌入式系统设计技术层面看,集成电路开展已进入IP core复用的SoC时代,8位嵌入式微处理器开展的一个重要特点是片上系统SoC化。本课题也为基于IP核的嵌入式系统设计积累了珍贵经验。 从市场应用层面看,8位RISC-CPU是目前市场上同
12、类产品占市场份额最大的一块,符合我国集成电路当前的设计水平,以它作为参与市场竞争的突破口,来提高企业的市场竞争能力和技术创新能力,是一个切实可行的方案。1.3 本设计的主要内容 本文对RISC-CPU的架构进行了探讨,介绍了如何设计RISC-CPU,并且立足于八位的 RISC-CPU设计实例,应用硬件描述语言VHDL语言实现8位简化RISC-CPU IP软核的设计,通过对RISC-CPU结构和指令执行的分析将整个系统划分为各个功能模块,并说明各模块间的接口信号,给出了每个模块内部设计实现的详细表达,最后介绍对设计的综合和验证工作,给出了仿真验证数据以及时序图。设计需要实现的这个简化的8位 RI
13、SC-CPU采用MIPS的局部指令集,同时对MIPS CPU的结构进行一定的修改。RISC-CPU的架构设计2.1 RISC-CPU根本架构 一个根本的CPU要包括三局部功能:数据的存储、数据的运算和控制局部。与之相对应的硬件结构也分为三局部:存储器、数据通路和控制器。存储器存放指令和数据;数据通路包括ALU、程序计数器等,主要功能是对操作数进行运算,得到结果,并产生程序计数器的值,作为要执行的下一条指令的地址;控制器内有指令存放器,它对指令进行译码,产生相应的控制信号,完成对存储器和数据通路局部的控制。 存储器、数据通路和控制器这三局部的根本关系下列图所示: 存储器中存放了要执行的指令和相应
14、数据。存储器的读写信号由控制器给出。存储器的地址来源有两个:程序计数器和指令存放器。在取新指令时,用程序计数器的值作为存储器地址;在执行指令时,用指令中的地址局部作为存储器地址。 数据通路主要包括累加器、程序计数器和算术逻辑单元。 累加器用于保存参加运算的数据以及运算的中间结果。实际上,累加器也是存放器,不过,它有特殊性,即许多指令执行过程以累加器为中心。往往在运算指令前,累加器中存放一个操作数,指令执行后,由累加器保存运算结果。另外输入输出指令一般也通过累加器来完成。 程序计数器指向下一条要执行的指令。由于程序一般存放在内存的一个连续区域,所以,顺序执行程序时,每取一个指令字节,程序计数器便
15、加一。 算术逻辑单元是专门用来处理各种运算的数据信息的,它可以进行加、减、乘、除算术运算和与、或、非、异或等逻辑运算。 控制器产生相应的控制信号送到时序和控制逻辑电路,从而,组合成外部电路所需要的时序和控制信号。这些信号送往其他部件,以控制这些部件协调工作。 对图2-1中的结构进行细化,可以得到一个简单的架构,如下列图所示。该CPU采用总线结构,即控制器所需的指令和数据通路所需的数据都是从总线上得到的。2.2 RISC-CPU模块的划分 计算机进行信息处理可分为两个步骤: 一、将数据和程序(即指令序列)输入到计算机的存储器中。 二、从第一条指令的地址起开始执行该程序,得到所需结果,结束运行。
16、CPU的作用是协调并控制计算机的各个部件执行程序的指令序列,使其有条不紊地进行。因此它必须具有以下根本功能: 取指令:当程序已在存储器中时,首先根据程序入口地址取出一条程序,为此要发出指令地址及控制信号。 分析指令:即指令译码。是对当前取得的指令进行分析,指出它要求什么操作,并产生相应的操作控制命令。 执行指令:根据分析指令时产生的“操作命令形成相应的操作控制信号序列,通过运算器,存储器及输入/输出设备的执行,实现每条指令的功能,其中包括对运算结果的处理以及下条指令地址的形成。 由功能分析,RISC-CPU应至少包含八个根本组成部件,即:时钟发生器、指令存放器、累加器、算术逻辑单元、数据输出控
17、制器、地址多路器、程序计数器、状态控制器,各个模块之间的互连关系如下列图: 1.时钟发生器clkgen:产生一系列的时钟信号送往 CPU 其他部件; 2.指令存放器register:存储指令; 3.累加器accum:存放算术逻辑单元当前的结果,它也是算术逻辑单元双目运算中的一个数据来源; 4.算术逻辑单元alu:根据输入的 8 种不同操作码分别实现相应的加、与、读、写、异或,跳转等指令; 5.数据输出控制器datactl:控制累加器的数据输出; 6.状态控制器control:CPU 的控制核心,用于产生一系列的控制信号,启动或停止某些部件; 7.程序计数器counter:提供指令地址,以便读取
18、指令; 8.地址多路器adr:选择输出的地址是 PC(程序计数)地址还是跳转的目标地址。八位RISC-CPU各模块设计与仿真3.1 时钟发生器 时钟发生器Clock Generator如上图所示,利用外来时钟信号CLK来生成一系列时钟信号CLK1、FETCH、ALU_CLK送往CPU的其他部件,各分频时钟信号功能如下:CLK1信号经CLK反相后用作指令存放器、累加器、状态控制器的时钟信号。FETCH是外来时钟CKL的8分频信号,其上升沿触发CPU控制器开始执行一条指令,该信号同时还控制地址多路器输出指令地址和数据地址。ALU电路的时钟信号ALU_CLK,由CLK的2分频信号、4分频信号和FET
19、CH的反相信号相与得到,用于触发算术逻辑单元。 时钟发生器源程序如下: library ieee; use ieee.std_logic_1164.all; entity clkgen is portclk: 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
20、_clkclk2 and clk4 and not fetch; processclk1 begin clk1not clk; if clk1event and clk11then clk2not clk2; end if; end process; processclk2 begin if clk2event and clk20 then clk4not clk4; end if; end process; processclk4 begin if clk4event and clk41 then fetchnot fetch; end if; end process; end behave
21、; 外来时钟为12MHz,周期T0.083us,取每格41.6ns。仿真波形如下:3.2 指令存放器 指令存放器Instruction Register用于存放指令。如图3-3,指令存放器的触发时钟是CLK1,在CLK1的上升沿触发下,存放器将数据总线送来的指令存入高8位或低8位存放器中。但并不是每个CLK1的上升沿都存放数据总线的数据,因为数据总线上有时传输指令,有时传输数据。存放与否,由CPU状态控制器的IR_ENA信号控制。IR_ENA信号通过ENA口输入到指令存放器。当数据总线传输的是指令时,ENA置1,指令存放;当数据总线传输的是数据时,ENA置0,指令存放器不工作。 每条指令为2个
22、字节,即16位。高3位是操作码,低13位是地址(CPU的地址总线为13位,寻址空间为8K字节)。本设计的数据总线为8位,所以每条指令需取两次。先取高8位,后取低8位。而当前取的是高8位还是低8位,由变量STATE记录。STATE为零表示取的高8位,存入高8位存放器,同时将变量STATE置为1。再次存放时,因STATE为1,取低8位并存入低8位存放器中,同时将STATE置为0,如此往复。指令存放时,将高3位和低13位分别存放到操作码存放器OPCODE和地址存放器IR_ADDR。 复位后,指令存放器被清为零。 指令存放器源程序如下: library ieee; use ieee.std_logic
23、_1164.all; entity ir is portclk1, rst, ena: in std_logic; data: in std_logic_vector7 downto 0; opcode: out std_logic_vector2 downto 0; ir_addr: out std_logic_vector12 downto 0; end ir; architecture behave of ir is signal opc_iraddrs: std_logic_vector15 downto 0; begin processclk1 variable state: std
24、_logic:0; begin ifclk1event and clk11then if rst1then opc_iraddrsothers0; elsif ena1 then case state is when 0 opc_iraddrs15 downto 8data; state:1; when 1opc_iraddrs7 downto 0data; state:0; when othersnull; end case; else state:0; end if; end if; end process; opcodeopc_iraddrs15 downto 13; ir_addrop
25、c_iraddrs12 downto 0; end behave; 仿真波形如下列图:续 在此仿真波形图中,clk1为时钟输入信号,ena为使能输入端口,rst为置位端口,这里假设在ena1之前data00000000,ena1后传输了10011001、01100110、11001100、00110011四个数据,那么当state为0时,传输高八位,当state为1时,传输低八位。其中第15至第13位存入opcode中并替换旧数据,第12至第0位存入str_addr中并替换旧数据。3.3 累加器 累加器Accumulator用于存放当前的结果,它也是双目运算其中的一个数据来源,同时累加器还用来
26、存放算术运算指令的结果,如图3-5所示。累加器采用同步复位方式,即当RST信号为高电平时,累加器的值为零。当累加器通过ENA口收到来自CPU状态控制器ACC_ENA信号时,即ENA1时,在CLK1时钟正跳沿时就收到来自于数据总线的数据,由DATA7.0输入;而当ENA0时,累加器保持不变。 累加器源程序如下: library ieee; use ieee.std_logic_1164.all; entity acc is portclk1,rst,ena:in std_logic; data:in std_logic_vector7 downto 0; accum:out std_logic_
27、vector7 downto 0; end acc; architecture art of acc is begin processclk1, ena begin if clk1event and clk11then if rst1then accum00000000; elsif ena1then accumdata; end if; end if; end process; end art; 在仿真时,设定6个周期假设中,data端每周期输入不同的8位二进制数,观察accum端输出数据与rst和ena值的对应关系,仿真波形如下: 如下图,当复位信号rst0、使能信号ena1时,在每个cl
28、k1上升沿到来后,accum接收来自于数据总线的数据;当第4周期ena0时,accum保持01010101不变,故该数据占两个周期;当ena又变为有效信号,因同时rst由0变为1,累加器复位,accum输出清零。3.4 算术逻辑单元 算术逻辑单元ALU的全称是Arithmetic Logic Unit,该模块用来执行诸如加减乘除以及存放器中的值之间的逻辑运算,通常在一般的处理器上被设成一个周期上升沿运行一次,这主要是由附属于ALU的输入输出存放器以及在ALU输入处插入旁路乘法器来决定的。算术逻辑单元根据输入的8种不同操作码分别实现相应的加、与、异或、跳转等8种根本操作运算,利用这几种根本运算可
29、以实现很多种其它运算以及逻辑判断等操作。 算术逻辑单元如上图所示,其各端口功能如下:ALU_CLOCK为ALU的时钟信号,由时钟发生器输出;OPCODE取自指令存放器的高3位,ALU根据输入OPCODE的8种不同操作码分别实现相应的加、与、异或、跳转等根本操作运算;DATA输入来自数据总线上的数据;ACCUM输入来自累加器的一个操作数;ALU_OUT用来保存或输出操作后的值;ZERO用于标志ACCUM是否为0,其值为0时标ZERO1,否那么ZERO0。 算术逻辑单元源程序如下: library ieee; use ieee.std_logic_1164.all; use ieee.std_lo
30、gic_unsigned.all; entity alu is portalu_clk: in std_logic; opcode: in std_logic_vector2 downto 0; data,accum: in std_logic_vector7 downto 0; zero: out std_logic; alu_out: out std_logic_vector7 downto 0; end alu; architecture behave of alu is signal alu_out_latch: std_logic_vector7 downto 0; constant
31、 HLT: std_logic_vector2 downto 0:000; constant SKZ: std_logic_vector2 downto 0:001; constant ADD: std_logic_vector2 downto 0:010; constant AN_D: std_logic_vector2 downto 0:011; constant XO_R: std_logic_vector2 downto 0:100; constant LDA: std_logic_vector2 downto 0:101; constant STO: std_logic_vector
32、2 downto 0:110; constant JMP: std_logic_vector2 downto 0:111; begin zero1when accum00000000 else 0; processalu_clk variable temp:std_logic_vector2 downto 0; begin temp:opcode; if alu_clkevent and alu_clk1then case temp is when HLTalu_out_latchaccum; when SKZalu_out_latchaccum; when ADDalu_out_latchd
33、ata+accum; when AN_Dalu_out_latchdata and accum; when XO_Ralu_out_latchdata xor accum; when LDAalu_out_latchdata; when STOalu_out_latchaccum; when JMPalu_out_latchaccum; when othersalu_out_latchXXXXXXXX; end case; end if; end process; alu_outalu_out_latch; end behave; 在仿真过程中,假设操作码依次为上述8种操作码。数据值为5,累加
34、器值为由3变0,以此来验证zero作用。仿真波形下列图所示: alu_clk为时钟信号输入端口,zero为判accum是否为零的输出端口。opcode为操作码输入端,data为数据输入端,accum为累加器输入端口。opcode不同的值代表不同的操作。alu_out中的06代表5转化为二进制101异或3转化为二进制011得6二进制110,而其他数值均正确反映不同操作码下的运算结果。3.5 数据输出控制器 数据输出控制器Data Control的作用是控制累加器数据输出,如图3-9由于数据总线是各种操作时传送数据的公共通道,不同的情况下传送不同的内容。有时要传输指令,有时要传送RAM区或接口的数
35、据。累加器的数据只有在需要往RAM区或端口写时才允许输出,否那么应呈现高阻态,以允许其它部件使用数据总线。所以任何部件往总线上输出数据时,都需要控制信号。而此控制信号的启、停,那么由CPU状态控制器输出的各信号控制决定。数据控制器何时输出累加器的数据那么由状态控制器输出的控制信号DATACTL_ENA决定。 数据控制电路源程序如下: library ieee; use ieee.std_logic_1164.all; entity datactrl is portdata_ena: in std_logic; alu_out: in std_logic_vector7 downto 0; da
36、ta: out std_logic_vector7 downto 0; end datactrl; architecture behave of datactrl is begin dataalu_out when data_ena1 else ZZZZZZZZ; end behave; 在此波形图3-10中,假设累加器输出值由00000000递增,验证当data_ena为0时,data输出alu_out的值,当data_ena为1时,data输出ZZZZZZZZ。3.6 地址多路器 地址多路器ADDR用于选择输出的地址是PC(程序计数)地址还是数据/端口地址,如图3-11所示。每个指令周期的
37、前4个时钟周期用于从ROM中读取指令,输出PC地址。后4个时钟周期用于对RAM或端口的读写,输出数据或端口地址。地址的选择输出信号由时钟信号的8分频信号FETCH提供,其上升沿到来时输出PC地址,其他时候输出数据或端口地址。 地址多路器源程序如下: library ieee; use ieee.std_logic_1164.all; entity addr_mux is portfetch:in std_logic; pc_addr, ir_addr: in std_logic_vector12 downto 0; addr: out std_logic_vector12 downto 0;
38、end addr_mux; architecture behave of addr_mux is begin addrpc_addr when fetch1 else ir_addr; end behave; 当fetch0时addr输出ir_addr的值,当fetch1时addr输出pc_addr的值。3.7 程序计数器 程序计数器Program Counter用于提供指令地址,如图3-13,以便读取指令,指令按地址顺序存放在存储器中。有两种途径可形成指令地址:其一是顺序执行的情况,其二是遇到要改变顺序执行程序的情况,例如执行JMP指令后,需要形成新的指令地址。 复位后,指令指针为零,即每次
39、CPU重新启动将从ROM的零地址开始读取指令并执行。指令为双字节,每条指令执行完需2个时钟,这时PC_ADDR已被增2,指向下一条指令。如果正执行的指令是跳转语句,这时CPU状态控制器将会输出PC_ENA信号,通过LOAD口进入程序计数器。程序计数器PC_ADDR将装入目标地址IR_ADDR,而不是增2。 程序计数器源程序如下: library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity pc is portclk, rst, ena: in std_logic; ir_addr: in
40、std_logic_vector12 downto 0; pc_addr: out std_logic_vector12 downto 0; end pc; architecture behave of pc is signal pc_addr_latch: std_logic_vector12 downto 0; begin processclk begin if clkevent and clk1then if rst1then pc_addr_latchothers0; elsif ena1 then pc_addr_latchir_addr; elsif ena0 then pc_ad
41、dr_latchpc_addr_latch+1; end if; end if; end process; pc_addrpc_addr_latch; end behave; 假设指令地址为0、1、2、3,为便于显示,设置地址指令和程序计数器输出为数制十进制,仿真波形如下列图: clk的上升沿启动电路,当rst为低电平, ena为低电平时,pc_addr自身加1;ena为高电平那么pc_addr输出ir_addr的值。rst为高电平时输出清0。3.8 状态控制器 状态控制器State Control是CPU的控制核心,用于产生一系列的控制信号,启动或停止某些部件,由状态机STATE_MACHI
42、NE和状态机控制器MACH_CTR组成,如上图。状态机控制器接受复位信号RST,当RST有效时通过信号ENA使其为0,输入到状态机中停止状态机的工作。状态机的当前状态,由变量STATE记录,STATE的值就是当前这个指令周期中已经过的时钟数。 指令周期是由8个时钟周期组成,每个时钟周期都要完成固定的操作。 状态转换如下列图: 1 第1个时钟S0,CPU状态控制器的输出:RD和IR_ENA为高电平,其余均为低电平。指令存放器存放由ROM送来的高8位指令代码。 2 第2个时钟S1,与上一时钟相比只是PC_CLK从0变为1,故PC增1;同时ROM送来低8位指令代码,指令存放器存放该8位代码。 3 第
43、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
44、,将数据写入地址处。 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
45、 portfetch,rst: in std_logic; ena: out std_logic; end mach_ctr; architecture behave of mach_ctr is begin processfetch begin if fetchevent and fetch1 then if rst1then ena0; else ena1; end if; end if; end process; end behave; 状态机源程序如下: library ieee; use ieee.std_logic_1164.all; entity state_machine is
46、 portclk1, ena, zero: in std_logic; opcode: in std_logic_vector2 downto 0; pc_clk, acc_ena, pc_ena, rd, wr, ir_ena, halt, datactl_ena: out std_logic; end state_machine; architecture behave of state_machine is type state_type is s0, s1,s2, s3, s4, s5, s6, s7; signal state: state_type; constant HLT: s
47、td_logic_vector2 downto 0:000; constant SKZ: std_logic_vector2 downto 0:001; constant ADD: std_logic_vector2 downto 0:010; constant AN_D: std_logic_vector2 downto 0:011; constant XO_R: std_logic_vector2 downto 0:100; constant LDA: std_logic_vector2 downto 0:101; constant STO: std_logic_vector2 downt
48、o 0:110; constant JMP: std_logic_vector2 downto 0:111; begin processclk1 begin if clk1event and clk11then if ena0 then states0; pc_clk0; acc_ena0; pc_ena0; rd0; wr0; ir_ena0; halt0; datactl_ena0; elsif ena1then case state is when s0pc_clk0; acc_ena0; pc_ena0; rd1; wr0; ir_ena1; datactl_ena0; halt0; states1; when s1pc_clk1; acc_ena0; pc_ena0; rd1; wr0; ir_ena1; datactl_ena0; halt0; states2; when s2pc_clk0; acc_ena
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 手绘金鱼国画与西瓜主题艺术课件
- 数学高段课标及教学培训
- 地震逃生和基本救护知识
- 护理查房病历汇报
- 电工电子技术 课件 7. 三相交流异步电动机电路的连接与测试
- 办公室智慧管理方案
- 统编版2024~2025学年度六年级语文第二学期期中模拟卷(有答案)
- 教育功能唐智松
- 第一单元评估检测题( A 卷)单元测试(无答案)三年级下册数学西师大版
- 建筑工程风险管理案例分析
- 电缆绝缘电阻测试记录簿表格
- 体外冲击波疗法课件
- 天津某污水处理厂厂区建设创“海河杯”精品工程QC成果发布
- 药房消防安全应急预案(通用10篇)
- 机器人辅助腹腔镜腹膜外根治性膀胱全切除课件
- 销售管理(第三版)-熊银解
- 概率论与数理统计公式整理(超全免费版)
- 钢箱梁施工方案1(完整版)
- 情景剧《皇帝选妃》
- 罐内升降机防腐施工方案
- 昆虫的内部解剖和生理
评论
0/150
提交评论