版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 毕业设计说明书基于VHDL语言的8位RISC-CPU的设计学 院: 专 业: 学生姓名: 学 号: 指导教师: 201 年 月摘 要RISC即精简指令集计算机(Reduced Instruction Set Computer)的缩写。RISC-CPU与一般的CPU相比,通过简化指令系统使计算机的结构更加简单合理,从而提高了运算速度。本文对RISC-CPU的架构进行了分析,并使用VHDL语言设计了8位RISC-CPU IP软核。RISC-CPU由八大基本模块构成:时钟发生器、指令寄存器、累加器、算术逻辑单元、数据输出控制器、地址多路器、程序计数器、状态控制器。本设计中借助MAX+PLUS软件平
2、台对各模块进行时序仿真,并最终给出了指令执行的仿真波形,验证了CPU的功能。设计仿真结果表明,该8位RISC-CPU能够完成既定的任务指标,而且在运行效率上有一定程度改善。关键词:RISC-CPU、VHDL、MAX+PLUS、IP软核、时序仿真AbstractRISC reduced instruction set computer that (Reduced Instruction Set Computer) acronym. RISC-CPU and CPU in general compared to instruction by simplifying the structure of
3、 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
4、 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 result
5、s 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目 录摘 要IABSTRACT(英文摘要)II目 录III第一章引言11.1 课题背景与发展现状11.1.1 课题背景11.1.2 RISC-CPU的发展现状11.2 RISC-CPU优势与现实意义11.2.1 R
6、ISC-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 题背景与发展现状 课题背景CPU
7、是Central Processing Unit中央处理器的缩写,它是计算机中最重要的一个部分。CPU由运算器和控制器组成,其内部结构归纳起来可以分为控制单元、逻辑单元和存储单元三大部分,这三个部分相互协调,便可以进行分析,判断、运算并控制计算机各部分协调工作。CPU从最初发展至今已经有几十年的历史了,这期间,按照其处理信息的字长,CPU可以分为:四位微处理器、八位微处理器、十六位微处理器、三十二位微处理器以及六十四位微处理器。而RISC处理器的出现标志着计算机体系结构中的一个根本性变革。RISC即精简指令集计算机(Reduced Instruction Set Computer)的缩写。从实
8、现的途径看,RISC-CPU与一般的CPU的不同处在于:它的时序控制信号形成部件是用硬布线逻辑实现的而不是采用微程序控制的方式。所谓硬布线逻辑也就是用触发器和逻辑门直接连线所构成的状态机和组合逻辑,故产生控制序列的速度比用微程序控制方式快得多,因为这样做省去了读取微指令的时间。 RISC-CPU的发展现状IBM公司在1975年成功开发出第一款RISC处理器,从此RISC架构开始走进超级计算机中。由于指令高度简约,RISC处理器的晶体管规模普遍都很小而性能强大,深受超级计算机厂商所青睐。很快,许多厂商都开发出了自己的RISC指令系统,除了IBM的Power和PowerPC外,还有DEC的Alph
9、a、SUN的SPARC、HP的PA-RISC、MIPS技术公司的MIPS、ARM公司的ARM等。它的应用范围也远比X86来得广泛,大到各种超级计算机、工作站、高阶服务器,小到各类嵌入式设备、家用游戏机、消费电子产品、工业控制计算机,都可以看到RISC的身影。1.2 RISC-CPU优势与现实意义 RISC-CPU具备的优势RISC有一套优化过的指令架构,它是根据著名的80/20法则所订立。早在上个世纪60年代,计算机科学家们发现,计算机中80%的任务只是动用了大约20%的指令,而剩下20%的任务才有机会使用到其他80%的指令。如果对指令系统作相应的优化,就可以从根本上快速提高处理器的执行效率。
10、RISC与CISC(一般指普通的X86CPU)比较,有以下优势:指令简单而且少;指令系统选用那些使用频度高的简单指令和一些实用的但不十分复杂的指令,一般指令不超过100条;指令字长固定,寻址方式一般不超过四种,指令格式也不超过四种;所有指令(几乎所有指令)均在单指令周期完成;指令系统中只允许存(STORE)和取(LOAD)指令访问主存,其它指令均在寄存器之间进行;CPU中设置大量的寄存器,称作寄存器堆;指令的运行采用高效的流水线方式;以硬布线控制逻辑为主,不用或少用微码;优化的编译程序,简单有效地支持高级语言;超低功耗。 本课题的现实意义本课题的设计具有重要的意义:(1) 从IP设计技术层面看
11、,本课题按照自顶向下(Top-Down)的设计方法,从系统级结构和模块划分到硬件描述、综合、仿真灯,研究了Altera公司的MAX+plusII工具的使用,掌握了IP正向设计的基本方法,积累了宝贵经验。(2) 从RISC-CPU设计技术层面看,通过本课题的设计过程,了解掌握了MIPS指令系统CPU体系结构设计的关键技术。(3) 从嵌入式系统设计技术层面看,集成电路发展已进入IP core复用的SoC时代,8位嵌入式微处理器发展的一个重要特点是片上系统SoC化。本课题也为基于IP核的嵌入式系统设计积累了宝贵经验。(4) 从市场应用层面看,8位RISC-CPU是目前市场上同类产品占市场份额最大的一
12、块,符合我国集成电路当前的设计水平,以它作为参与市场竞争的突破口,来提高企业的市场竞争能力和技术创新能力,是一个切实可行的方案。1.3 本设计的主要内容本文对RISC-CPU的架构进行了探讨,介绍了如何设计RISC-CPU,并且立足于八位的 RISC-CPU设计实例,应用硬件描述语言VHDL语言实现8位简化RISC-CPU IP软核的设计,通过对RISC-CPU结构和指令执行的分析将整个系统划分为各个功能模块,并阐明各模块间的接口信号,给出了每个模块内部设计实现的详细叙述,最后介绍对设计的综合和验证工作,给出了仿真验证数据以及时序图。设计需要实现的这个简化的8位 RISC-CPU采用MIPS的
13、部分指令集,同时对MIPS CPU的结构进行一定的修改。第二章 RISC-CPU的架构设计2.1 RISC-CPU基本架构一个基本的CPU要包括三部分功能:数据的存储、数据的运算和控制部分。与之相对应的硬件结构也分为三部分:存储器、数据通路和控制器。存储器存放指令和数据;数据通路包括ALU、程序计数器等,主要功能是对操作数进行运算,得到结果,并产生程序计数器的值,作为要执行的下一条指令的地址;控制器内有指令寄存器,它对指令进行译码,产生相应的控制信号,完成对存储器和数据通路部分的控制。存储器、数据通路和控制器这三部分的基本关系下图所示:图2-1 CPU基本结构存储器中存放了要执行的指令和相应数
14、据。存储器的读写信号由控制器给出。存储器的地址来源有两个:程序计数器和指令寄存器。在取新指令时,用程序计数器的值作为存储器地址;在执行指令时,用指令中的地址部分作为存储器地址。数据通路主要包括累加器、程序计数器和算术逻辑单元。累加器用于保存参加运算的数据以及运算的中间结果。实际上,累加器也是寄存器,不过,它有特殊性,即许多指令执行过程以累加器为中心。往往在运算指令前,累加器中存放一个操作数,指令执行后,由累加器保存运算结果。另外输入输出指令一般也通过累加器来完成。程序计数器指向下一条要执行的指令。由于程序一般存放在内存的一个连续区域,所以,顺序执行程序时,每取一个指令字节,程序计数器便加一。算
15、术逻辑单元是专门用来处理各种运算的数据信息的,它可以进行加、减、乘、除算术运算和与、或、非、异或等逻辑运算。控制器产生相应的控制信号送到时序和控制逻辑电路,从而,组合成外部电路所需要的时序和控制信号。这些信号送往其他部件,以控制这些部件协调工作。对图2-1中的结构进行细化,可以得到一个简单的架构,如下图所示。该CPU采用总线结构,即控制器所需的指令和数据通路所需的数据都是从总线上得到的。图2-2 CPU的简单架构2.2 RISC-CPU模块的划分计算机进行信息处理可分为两个步骤:一、将数据和程序(即指令序列)输入到计算机的存储器中。二、从第一条指令的地址起开始执行该程序,得到所需结果,结束运行
16、。CPU的作用是协调并控制计算机的各个部件执行程序的指令序列,使其有条不紊地进行。因此它必须具有以下基本功能:(1) 取指令:当程序已在存储器中时,首先根据程序入口地址取出一条程序,为此要发出指令地址及控制信号。(2) 分析指令:即指令译码。是对当前取得的指令进行分析,指出它要求什么操作,并产生相应的操作控制命令。(3) 执行指令:根据分析指令时产生的“操作命令”形成相应的操作控制信号序列,通过运算器,存储器及输入/输出设备的执行,实现每条指令的功能,其中包括对运算结果的处理以及下条指令地址的形成。由功能分析,RISC-CPU应至少包含八个基本组成部件,即:时钟发生器、指令寄存器、累加器、算术
17、逻辑单元、数据输出控制器、地址多路器、程序计数器、状态控制器,各个模块之间的互连关系如下图:图2-3 RISC-CPU结构图1时钟发生器(clkgen):产生一系列的时钟信号送往 CPU 其他部件;2指令寄存器(register):存储指令;3累加器(accum):存放算术逻辑单元当前的结果,它也是算术逻辑单元双目运算中的一个数据来源;4算术逻辑单元(alu):根据输入的 8 种不同操作码分别实现相应的加、与、读、写、异或,跳转等指令;5数据输出控制器(datactl):控制累加器的数据输出;6状态控制器(control):CPU 的控制核心,用于产生一系列的控制信号,启动或停止某些部件;7程
18、序计数器(counter):提供指令地址,以便读取指令;8地址多路器(adr):选择输出的地址是 PC(程序计数)地址还是跳转的目标地址。第三章 八位RISC-CPU各模块设计与仿真3.1 时钟发生器图3-1 时钟发生器时钟发生器Clock Generator如上图所示,利用外来时钟信号CLK来生成一系列时钟信号CLK1、FETCH、ALU_CLK送往CPU的其他部件,各分频时钟信号功能如下: CLK1信号经CLK反相后用作指令寄存器、累加器、状态控制器的时钟信号。 FETCH是外来时钟CKL的8分频信号,其上升沿触发CPU控制器开始执行一条指令,该信号同时还控制地址多路器输出指令地址和数据地
19、址。 ALU电路的时钟信号ALU_CLK,由CLK的2分频信号、4分频信号和FETCH的反相信号相与得到,用于触发算术逻辑单元。时钟发生器源程序如下:library ieee;use ieee.std_logic_1164.all;entity clkgen isport(clk: in std_logic; clk1: buffer std_logic; fetch: buffer std_logic:=0; alu_clk: out std_logic);end clkgen;architecture behave of clkgen issignal clk2: std_logic:=0
20、;signal clk4: std_logic:=1;begin alu_clk=clk2 and clk4 and (not fetch);process(clk1)beginclk1=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 fetch
21、=not fetch; end if;end process;end behave;外来时钟为12MHz,周期T=0.083us,取每格41.6ns。仿真波形如下:图3-2 时钟发生器仿真波形3.2 指令寄存器指令寄存器Instruction Register用于寄存指令。如图3-3,指令寄存器的触发时钟是CLK1,在CLK1的上升沿触发下,寄存器将数据总线送来的指令存入高8位或低8位寄存器中。但并不是每个CLK1的上升沿都寄存数据总线的数据,因为数据总线上有时传输指令,有时传输数据。寄存与否,由CPU状态控制器的IR_ENA信号控制。IR_ENA信号通过ENA口输入到指令寄存器。当数据总线传
22、输的是指令时,ENA置1,指令寄存;当数据总线传输的是数据时,ENA置0,指令寄存器不工作。每条指令为2个字节,即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。复位后,指令寄
23、存器被清为零。图3-3指令寄存器指令寄存器源程序如下:library ieee;use ieee.std_logic_1164.all;entity ir isport(clk1, rst, ena: in std_logic; data: in std_logic_vector(7 downto 0); opcode: out std_logic_vector(2 downto 0); ir_addr: out std_logic_vector(12 downto 0);end ir;architecture behave of ir issignal opc_iraddrs: std_lo
24、gic_vector(15 downto 0);beginprocess(clk1)variable state: std_logic:=0;begin if(clk1event and clk1=1)then if rst=1then opc_iraddrs0); elsif ena=1 then case state is when 0 =opc_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
25、downto 13); ir_addr=opc_iraddrs(12 downto 0);end behave;仿真波形如下图:(续)图3-4 指令寄存器仿真波形在此仿真波形图中,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 累加器累加器A
26、ccumulator用于存放当前的结果,它也是双目运算其中的一个数据来源,同时累加器还用来存放算术运算指令的结果,如图3-5所示。累加器采用同步复位方式,即当RST信号为高电平时,累加器的值为零。当累加器通过ENA口收到来自CPU状态控制器ACC_ENA信号时,即ENA=1时,在CLK1时钟正跳沿时就收到来自于数据总线的数据,由DATA7.0输入;而当ENA=0时,累加器保持不变。累加器源程序如下:library ieee;use ieee.std_logic_1164.all;entity acc isport(clk1,rst,ena:in std_logic; data:in std_l
27、ogic_vector(7 downto 0); accum:out std_logic_vector(7 downto 0);end acc;architecture art of acc isbeginprocess(clk1, ena)beginif clk1event and clk1=1then if rst=1then accum=00000000; elsif ena=1then accum=data; end if;end if;end process;end art;在仿真时,设定6个周期假设中,data端每周期输入不同的8位二进制数,观察accum端输出数据与rst和ena
28、值的对应关系,仿真波形如下:图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输入处插入旁路乘法器来
29、决定的。算术逻辑单元根据输入的8种不同操作码分别实现相应的加、与、异或、跳转等8种基本操作运算,利用这几种基本运算可以实现很多种其它运算以及逻辑判断等操作。图3-7 算术逻辑单元算术逻辑单元如上图所示,其各端口功能如下: ALU_CLOCK为ALU的时钟信号,由时钟发生器输出; OPCODE取自指令寄存器的高3位,ALU根据输入OPCODE的8种不同操作码分别实现相应的加、与、异或、跳转等基本操作运算; DATA输入来自数据总线上的数据; ACCUM输入来自累加器的一个操作数; ALU_OUT用来保存或输出操作后的值; ZERO用于标志ACCUM是否为0,其值为0时标ZERO=1,否则ZERO
30、=0。算术逻辑单元源程序如下:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity alu isport(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 b
31、ehave of alu issignal 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
32、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;e
33、nd 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),而其他数值均正确反映不同操作码下的运算结果。3
34、.5 数据输出控制器数据输出控制器Data Control的作用是控制累加器数据输出,如图3-9由于数据总线是各种操作时传送数据的公共通道,不同的情况下传送不同的内容。有时要传输指令,有时要传送RAM区或接口的数据。累加器的数据只有在需要往RAM区或端口写时才允许输出,否则应呈现高阻态,以允许其它部件使用数据总线。所以任何部件往总线上输出数据时,都需要控制信号。而此控制信号的启、停,则由CPU状态控制器输出的各信号控制决定。数据控制器何时输出累加器的数据则由状态控制器输出的控制信号DATACTL_ENA决定。图3-9 数据输出控制器数据控制电路源程序如下:library ieee;use ie
35、ee.std_logic_1164.all;entity datactrl isport(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 isbegin data=alu_out when data_ena=1 else ZZZZZZZZ;end behave;在此波形图3-10中,假设累加器输出值由00000000递增,验证当data_ena为
36、0时,data输出alu_out的值,当data_ena为1时,data输出ZZZZZZZZ。图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.a
37、ll;entity addr_mux isport(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 isbegin addr=pc_addr when fetch=1 else ir_addr;end behave;图3-12 地址多路器仿真波形当fetch=0时addr输出ir_addr的值,当fetch=1时addr输出pc_a
38、ddr的值。3.7 程序计数器程序计数器Program Counter用于提供指令地址,如图3-13,以便读取指令,指令按地址顺序存放在存储器中。有两种途径可形成指令地址:其一是顺序执行的情况,其二是遇到要改变顺序执行程序的情况,例如执行JMP指令后,需要形成新的指令地址。复位后,指令指针为零,即每次CPU重新启动将从ROM的零地址开始读取指令并执行。指令为双字节,每条指令执行完需2个时钟,这时PC_ADDR已被增2,指向下一条指令。如果正执行的指令是跳转语句,这时CPU状态控制器将会输出PC_ENA信号,通过LOAD口进入程序计数器。程序计数器PC_ADDR将装入目标地址IR_ADDR,而不
39、是增2。图3-13 程序计数器程序计数器源程序如下:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity pc isport(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 issignal pc_addr_latch: std_logic_ve
40、ctor(12 downto 0);beginprocess(clk)begin if clkevent and clk=1then if rst=1then 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-1
41、4 程序计数电路仿真波形clk的上升沿启动电路,当rst为低电平, ena为低电平时,pc_addr自身加1;ena为高电平则pc_addr输出ir_addr的值。rst为高电平时输出清0。3.8 状态控制器图3-15 状态控制器状态控制器State Control是CPU的控制核心,用于产生一系列的控制信号,启动或停止某些部件,由状态机(STATE_MACHINE)和状态机控制器(MACH_CTR)组成,如上图。状态机控制器接受复位信号RST,当RST有效时通过信号ENA使其为0,输入到状态机中停止状态机的工作。状态机的当前状态,由变量STATE记录,STATE的值就是当前这个指令周期中已经
42、过的时钟数。指令周期是由8个时钟周期组成,每个时钟周期都要完成固定的操作。状态转换如下图:图3-16 状态控制器状态转换图 (1) 第1个时钟S0,CPU状态控制器的输出:RD和IR_ENA为高电平,其余均为低电平。指令寄存器寄存由ROM送来的高8位指令代码。(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)
43、第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个
44、指令代码为常量。由于只有8条指令,所以采用3位二进制数编码。因AND和XOR指令为VHDL关键字,故用AN_D和XO_R代替。指令HLTSKZADDAN_DXO_RLDASTOJMP代码000001010011100101110111状态机控制器源程序如下:library ieee;use ieee.std_logic_1164.all;entity mach_ctr isport(fetch,rst: in std_logic; ena: out std_logic);end mach_ctr;architecture behave of mach_ctr isbeginprocess(fe
45、tch)begin if fetchevent and fetch=1 then if rst=1then ena=0; else ena=1; end if; end if;end process;end behave;状态机源程序如下:library ieee;use ieee.std_logic_1164.all;entity state_machine isport(clk1, ena, zero: in std_logic; opcode: in std_logic_vector(2 downto 0); pc_clk, acc_ena, pc_ena, rd, wr, ir_ena
46、, halt, datactl_ena: out std_logic);end state_machine;architecture behave of state_machine istype state_type is (s0, s1,s2, s3, s4, s5, s6, s7);signal state: state_type;constant HLT: std_logic_vector(2 downto 0):=000;constant SKZ: std_logic_vector(2 downto 0):=001;constant ADD: std_logic_vector(2 do
47、wnto 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;beginprocess(clk1)begin if clk1event and clk1
48、=1then if ena=0 then state=s0;pc_clk=0; acc_ena=0; pc_ena=0; rd=0; wr=0; ir_ena=0; halt=0; datactl_enapc_clk=0; acc_ena=0; pc_ena=0; rd=1; wr=0; ir_ena=1; datactl_ena=0; halt=0; statepc_clk=1; acc_ena=0; pc_ena=0; rd=1; wr=0; ir_ena=1; datactl_ena=0; halt=0; statepc_clk=0; acc_ena=0; pc_ena=0; rd=0;
49、 wr=0; ir_ena=0; datactl_ena=0; halt=0; stateif (opcode=HLT) then pc_clk=1; acc_ena=0; pc_ena=0; rd=0; wr=0; ir_ena=0; datactl_ena=0; halt=1; else pc_clk=1; acc_ena=0; pc_ena=0; rd=0; wr=0; ir_ena=0; datactl_ena=0; halt=0; end if; stateif (opcode=JMP) then pc_clk=1; acc_ena=0; pc_ena=1; rd=0; wr=0;
50、ir_ena=0; datactl_ena=0; halt=0; elsif (opcode=ADD or opcode=AN_D or opcode=XO_R or opcode=LDA) then pc_clk=0; acc_ena=0; pc_ena=0; rd=1; wr=0; ir_ena=0; datactl_ena=0; halt=0; elsif opcode=STO then pc_clk=0; acc_ena=0; pc_ena=0; rd=0; wr=0; ir_ena=0; datactl_ena=1;halt=0; else pc_clk=0; acc_ena=0; pc_ena=0; rd=0; wr=0; ir_ena=0; datactl_ena=0; halt=0; end if; stateif (opcode=ADD or opcode=AN_D or opcode=XO_R or opcode=LDA) then pc_clk=0; acc_ena=1;pc_ena=0; rd=1; wr=0; ir_ena=0; datactl_ena=0; halt=
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 餐饮供应链管理与优化指南(标准版)
- 基于深度学习的循环肿瘤细胞细粒度分类方法研究
- 命题积木游戏中大班幼儿数学学习行为的观察研究
- 城市规划与管理规范与实施指南(标准版)
- 某化工印染厂轧车操作规范
- 某电池厂环保监测制度
- 护理领导力培训系列研讨会
- 2026年臭氧自体血疗临床法操作指南
- 夜色教学反思优点不足改进措施
- 新生儿日常护理中的配方奶喂养技巧
- 房屋装修质量保证书样式
- 人才测评:理论、方法、实务
- 无损检测超声波二级考试题库汇编
- 掘进机行走机构的结构设计
- 2024年江苏省中学生生物学奥林匹克初赛理论试题
- 泥石流灾害与防治工程
- 高分子材料工程专业英语翻译(DOC)
- 【高中数学】充要条件+课件+高一上学期数学人教A版(2019)必修第一册
- Soul《心灵奇旅(2020)》完整中英文对照剧本
- 理学ERP沙盘模拟人机对抗创业版
- 高校思想政治工作中青年骨干队伍建设项目申报表
评论
0/150
提交评论