1 引 言
跟着数字通信和工业操控范畴的高速开展,要求专用集成电路(ASIC)的功用越来越强,功耗越来越低,出产周期越来越短,这些都对芯片规划提出了巨大的应战,传统的芯片规划办法现已不能适应杂乱的运用需求了。SoC(System on a Chip)以其高集成度,低功耗等长处越来越受欢迎。开发人员不用从单个逻辑门开端去规划ASIC,而是运用己有IC芯片的功用模块,称为核(core),或知识产权(IP)宏单元进行快速规划,功率大为进步。CPU 的IP核是SoC技能的中心,开发出具有自主知识产权的CPU IP核对我国在电子技能方面跟上国际先进的脚步,进步信息产业在国际上的中心竟争力有重大意义。
精简指令集计算机RISC(Reduced Instruction Set Computer)是针对杂乱指令集计算机CISC(Complex InstrucTIon Set Computer)提出的,具有如下特征1)一个有限的简略的指令集; 2)着重寄存器的运用或CPU装备很多的能用的寄存器;3)着重对指令流水线的运用。
2 CPU IP核的组成
虽然各种CPU的功用指标和结构细节不同,但所要完结的根本功用相同,从全体上可分为八个根本的部件:时钟发生器、指令寄存器、累加器、RISC CPU算术逻辑运算单元、数据操控器、状况操控器、程序操控器、程序计数器、地址多路器。状况操控器担任操控每一个部件之间的彼此操作联系,详细的结构和逻辑联系如图1所示。
时钟发生器运用外部时钟信号,通过分频生成一系列时钟信号给CPU中的各个部件运用。为了确保分频后信号的跳变功用,在规划中采用了同步状况机的办法。
指令寄存器在触发时钟clk1的正跳变触发下,将数据总线送来的指令存入寄存器中。数据总线分时复用传递数据和指令,由状况操控器的load_ir信号担任判别。load_ir信号通过使能信号ena口线输入到指令寄存器。复位后,指令寄存器被清为零。每条指令为两个字节16位,高3位是操作码,低13位是地址线。CPU的地址总线为是13位,位寻址空间为8K 字节。本规划的数据总线是8位,每条指令取两次,每次由变量state操控。
累加器用于寄存当时的运算成果,是双目运算中的一个数据来历。复位后,累加器的值为零。当累加器通过使能信号ena 口线收到来自CPU状况操控器load_acc 信号后,在clk1时钟正跳沿时就接纳来自数据总线的数据。
算术逻辑运算单元依据输入的不同的操作码别离完结相应的加、与、异或、跳转等根本运算。
数据操控器其作用是操控累加器的数据输出,由于数据总线是各种操作传送数据的公共通道,分时复用,有时传输指令,有时要传送数据。其他时分,数据总线应呈高阻态,以答应其他部件运用。所以,任何部件向总线上输出数据时,都需求一个操控信号的,而此操控信号的启、停则由CPU状况操控器输出的各信号操控决议。操控信号datactl_ena决议何时输出累加器中的数据。
地址多路器用于输出的地址是PC(程序计数器)地址仍是数据/端口地址。每个指令周期的前4个时钟周期用于从ROM中读取指令,输出的应是PC地址,后4个时钟周期用于对RAM或端口的读写,该地址由指令给出,地址的挑选输出信号由时钟信号的8分频信号fecth供给。
程序计数器用于供给指令地址,以便读取指令,指令按地址次序寄存在存储器中,有两种途径可构成指令地址,一是次序履行程序的状况,二是履行JMP指令后,取得新的指令地址。
状况机操控器承受复位信号RST,当RST有用时,能通过信号ena使其为0 ,输入到状况机中以中止状况机的作业。状况机是CPU 的操控中心,用于发生一系列的操控信号,发动或中止某些部件,CPU何时进行读指令来读写I/O端口及RAM区等操作,都是由状况机来操控的。状况机的当时状况,由变量state记载,state的值便是当时这个指令周期中现已过的时钟数。指令周期是由8 个时钟组成,每个时钟都要完结固定的操作。
3 体系时序
RISC CPU的复位和发动操作是通过rst引脚的信号触发履行的,当rst信号一进入高电平,RISC CPU就会结束现行操作,而且只需rst停留在高电平状况,CPU就维持在复位状况,CPU各状况寄存器都设为无效状况。当信号rst回到低电平,接着到来的第一个fetch 上升沿将发动RISC CPU开端作业,从ROM的000处的开端读取指令并履行相应的操作。
读指令时序,每个指令的前3个时钟周期用于读指令,4~6周期读信号rd有用,第7 个周期读信号无效,第8个周期地址总线输出PC地址,为下一个指令作预备。
写指令时序,每个指令的第3.5个时钟周期树立写地址,第四个周期输出数据,第5个时钟周期输出写信号,第6个时钟结束,第7.5个时钟周期输出为PC地址,为下个指令做预备。
如图2 所示,这是ModelSim SE6.0进行波形仿真的成果。
4 微处理器指令
数据处理指令:数据处理指令完结寄存器中数据的算术和逻辑操作,其他指令仅仅传送数据和操控程序履行的次序.因而,数据处理指令是仅有能够修正数据值的指令,数据处理指令一般需两个源操作数,发生单个成果.一切的操作数都是8位宽,或许来自寄存器,或许来自指令中界说的当即数.每一个源操作数寄存器和成果寄存器都在指令中独立的指定。
数据传送和操控搬运类指令:共有17条,不包括按布尔变量操控程序搬运的指令。其中有全存储空间的长调用、长搬运和按2KB分块的程序空间内的肯定调用和肯定搬运;全空间的长度相对搬运及一页范围内的短相对搬运;还有条件搬运指令。这类指令用到的助记符有ACALL, AJMP, LCALL, LJMP, SJMP, M, JZ, JNZ, ONE,DJNZ。操控搬运类指令首要用来修正1x指针然后到达对程序流的操控,所用到的寄存器首要有sp, pc, ir等寄存器。
指令由操作码和操作数组成,取指令电路的意图便是把指令码和操作数分隔。组成电路由如图3所示。取指令电路由程序指针,程序指针解析模块、ROM, IR(指令寄存器),操控器状况寄存器组成。取指令指令的进程如下:PC指针的值通过pc_mux模块赋值,把ROM中的指令取出来,送到指令寄存器的数据输进口。指令寄存器受状况寄存器的操控,当取指令信号有用时,ROM中的指令码被保存在指令寄存器中,然后经操控器译码,发生操控信号,对PC指针的增量加以操控取出下一条指令。
5 汇编
汇编程序是为了调试软核而开发的,手艺编写机器码很简略犯错而且作业量很大。在调试进程中修正指令集时,汇编程序也要作相应的修正。所以要求编译器的结构简略功用牢靠,在程序中必要的当地能够用堆叠代码办法完结,不用考虑编程技巧和汇编器功率问题。汇编程序用于测验RISC CPU的根本指令集,假如CPU的各条指令履行正确,中止在HLT指令处。假如程序在其它地址暂停运转,则有一个指令犯错。程序中,@符号后的十六进制表明存储器的地址,每行的//后表明注释。下面是一小段程序代码,编译好的汇编机器代码装入虚拟ROM,要参与运算的数据装入虚拟RAM就能够开端进行仿真。
机器码 地址 汇编助记符 注释
@00 //地址声明
101_11000 //00 BEGIN: LDA DATA_2
0000_0001
011_11000 //02 AND DATA_3
0000_0010
100_11000 //04 XOR DATA_2
0000_0001
001_00000 //06 SKZ
0000_0000
000_00000 //08 HLT //AND does‘t work
6 调试
最根本的调试手法是依据FPGA 厂商供给的开发和仿真环境,用硬件描绘言语编写TESTBENCH,构成一个最小运转环境。TESTBENCH发生对方针软核的鼓励,一起记载软核的输出,和预期值进行比对,能够确认核的规划过错。这种办法的优点是完结简略,成果精确,但硬件描绘言语编码量较大。为了仿真成果的精确性,不管功用仿真仍是时序仿真,仿真的步长都不能太小,成果导致整个体系仿真时刻太长。本规划中先对RISC CPU的各个子模块进行了别离归纳,查看正确性,假如发现过错能够在较小的范围内来查看并验证。子模块归纳结束后,把要归纳的RISC CPU的模块与外围器材以及测验模块分离出来组成一个大模块,归纳后的的RISC CPU模块如图4所示,这是Xilinx ISE7.1 所归纳生成的技能原理图。
归纳的成果仅仅通用的门级网表,仅仅一些与、或、非门的逻辑联系,和芯片实践的装备状况还有距离。此刻应该运用FPGA/CPLD厂商供给的完结与布局布线东西,依据所选芯片的类型,进行芯片内部功用单元的实践衔接与映射。这种完结与布局布线东西一般要选用所选器材的出产商开发的东西,由于只要出产者最了解器材内部的结构,如在ISE的集成环境中完结完结与布局布线的东西是Flow Engine。
STA(StaTIc TIming Analysis)静态时序剖析,完结FPGA设计时有必要的一个进程。在FPGA加束缚、归纳、布局布线后,在ISE中能够运转TIming Analyzer生成详细的时序陈述,本规划中Minimum period: 12.032ns (Maximum Frequency: 83.112MHz),Minimum input arrival time before clock: 6.479ns,Maximum output required time after clock: 9.767ns。然后,规划人员查看时序陈述,依据东西的提示找出不满足Setup/Hold time的途径,以及不符合束缚的途径,进行修正确保数据能被正确的采样。在后仿真中将布局布线的时延反标到规划中去,使仿真既包括门延时,又包括线延时信息。这种后仿真是最精确的仿真,能真实地反映芯片的实践作业状况。
7 结 论
杂乱的RISC CPU规划是一个从笼统到详细的进程,本文依据FPGA的结构特色,围绕在FPGA上规划完结八位微处理器软核规划办法进行讨论,研讨了片上体系的规划办法和规划复用技能,并给出了指令集和其调试办法,提出了一种依据FPGA的微处理器的IP的规划办法。
本文作者立异点是:依据Spartan II 的内部结构,在编码阶段完结了地址和数据的优化,完结阶段对内部布局布线进行重新装备,规划完结的微处理器仅占用78个slices,1个Block RAM,在10万门的芯片完结,占用6%的资源。