《软核处理器原理与应用.ppt》由会员分享,可在线阅读,更多相关《软核处理器原理与应用.ppt(110页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、软核处理器软核处理器PicoBlaze原理及应用原理及应用何宾2011.09软核处理器PicoBlaze原理及应用-本章概述 随着现场可编程门阵列功能不断增强,其应用范围扩随着现场可编程门阵列功能不断增强,其应用范围扩展到了片上可编程系统领域(展到了片上可编程系统领域(System-On-a-Programmable-System-On-a-Programmable-Chip,SOPCChip,SOPC),),XilinxXilinx公司的嵌入式解决方案以四类公司的嵌入式解决方案以四类RISCRISC结构的微处理器为核心,涵盖了系统硬件设计和软件调试结构的微处理器为核心,涵盖了系统硬件设计和软
2、件调试的各个方面。的各个方面。四类嵌入式内核分别为:四类嵌入式内核分别为:PicoBlazePicoBlaze、MicroBlazeMicroBlaze、PowerPCPowerPC、ARMARM,其中,其中PicoBlazePicoBlaze和和MicroBlazeMicroBlaze是可裁剪的是可裁剪的软核处理器,软核处理器,PowerPCPowerPC和和ARMARM为硬核处理器。为硬核处理器。软核处理器PicoBlaze原理及应用-本章概述 本章以本章以XilinxXilinx公司公司8 8位微控制器位微控制器PicoBlazePicoBlaze软核处理软核处理器为核心,介绍了基于器为
3、核心,介绍了基于FPGAFPGA的片上可编程系统的原理的片上可编程系统的原理及实现方法。及实现方法。通过本章内容的学习,重点掌握片上可编程系统通过本章内容的学习,重点掌握片上可编程系统的本质,理解软件和硬件的协同设计的思想以及以软的本质,理解软件和硬件的协同设计的思想以及以软件为中心的系统设计方法。件为中心的系统设计方法。PicoBlaze的的8位微控制器概述位微控制器概述-Xilinx片上可编程系统解决方案 XilinxXilinx提供了基于以下嵌入式处理器的片上可编程提供了基于以下嵌入式处理器的片上可编程系统解决方案。系统解决方案。PicoBlaze8PicoBlaze8位嵌入式软核微控制
4、器位嵌入式软核微控制器PowerPC405/PowerPC440PowerPC405/PowerPC440嵌入式硬核处理器嵌入式硬核处理器MicroBlaze32MicroBlaze32位嵌入式软核处理器位嵌入式软核处理器ARMARM嵌入式硬核处理器(未来,预计今年底)嵌入式硬核处理器(未来,预计今年底)片上可编程系统概论-片上MCU和专用MCU的比较 这儿有很多这儿有很多8 8位的微控制器结构和指令集。现在的位的微控制器结构和指令集。现在的FPGAFPGA能高效的实现任何能高效的实现任何8 8位的微控制器,并且可以使用位的微控制器,并且可以使用FPGAFPGA软核支持流行的指令集,比如软核支
5、持流行的指令集,比如PICPIC,80518051,AVRAVR,65026502,80808080和和Z80Z80微控制器。为什么使用微控制器。为什么使用PicoBlazePicoBlaze微控制微控制器,而不使用更流行的指令集。器,而不使用更流行的指令集。PicoBlazePicoBlaze微控制器是专门为微控制器是专门为Sparan-3Sparan-3,VirtexVirtex-II-II和和VirtexVirtex-II Pro FPGA-II Pro FPGA结构设计和优化。它紧凑而强大的结结构设计和优化。它紧凑而强大的结构,比可比较的流行的构,比可比较的流行的8 8位微控制器消耗更
6、少的位微控制器消耗更少的FPGAFPGA资资源。而且,源。而且,PicoBlazePicoBlaze微控制器提供了在微控制器提供了在FPGAFPGA内可用的免内可用的免费,源码级的费,源码级的VHDLVHDL文件。文件。片上可编程系统概论-片上MCU和专用MCU的比较 一些独立的微控制器变种由于一些独立的微控制器变种由于“过时过时”而导致而导致“不不好的好的名声名声”。由于。由于PicoBlazePicoBlaze提供提供VHDLVHDL源码,这样源码,这样PicoBlazePicoBlaze微微控制器可以能未来的控制器可以能未来的XilinxXilinx FPGA FPGA芯片上,使得该控制
7、器芯片上,使得该控制器对对“过时过时”有更好的有更好的“免疫力免疫力”,并且可以进一步的降低,并且可以进一步的降低成本成本和扩展特性。和扩展特性。在在PicoBlazePicoBlaze和和MicoBlazeMicoBlaze处理器出现前,微控制器存处理器出现前,微控制器存在于在于FPGAFPGA外部,和其它外部,和其它FPGAFPGA的功能进行连接,这样就限的功能进行连接,这样就限制了接口的整体性能。相比较之下,制了接口的整体性能。相比较之下,PicoBlazePicoBlaze微控制器充微控制器充分的嵌入在分的嵌入在FPGAFPGA内,可以灵活的,片上连接其它的内,可以灵活的,片上连接其它
8、的FPGAFPGA资源。在资源。在FPGAFPGA内保留的信号提高了整体的性能。由于使内保留的信号提高了整体的性能。由于使用了集成在用了集成在FPGAFPGA内的单片解决方案,内的单片解决方案,PicoBlazePicoBlaze降低了系降低了系统的成本。统的成本。片上可编程系统概论-片上MCU和专用MCU的比较 PicoBlazePicoBlaze微控制有高效的资源,因此,复杂的应微控制有高效的资源,因此,复杂的应用有时可以用有时可以“分配分配”到多个到多个PicoBlazePicoBlaze微控制器,其中微控制器,其中的的每个微控制器实现一个特定的功能,比如,键盘和显每个微控制器实现一个特
9、定的功能,比如,键盘和显示控制,或者系统的管理。示控制,或者系统的管理。片上可编程系统概论-片上MCU和片上逻辑的比较 在实际中,微控制器和在实际中,微控制器和FPGAFPGA成功的实现了任何数成功的实现了任何数字逻辑功能。然而,在成本,性能和易用方面,它们字逻辑功能。然而,在成本,性能和易用方面,它们有自己独特的优势。微控制器很好的适用于控制应有自己独特的优势。微控制器很好的适用于控制应用,特别是在较宽的变化要求方面。要求使用用,特别是在较宽的变化要求方面。要求使用FPGAFPGA实实现微控制器是相对固定的。相同的现微控制器是相对固定的。相同的FPGAFPGA逻辑可以被各逻辑可以被各种微控制
10、器指令种微控制器指令“重用重用”。对程序存储器的要求随着。对程序存储器的要求随着复杂复杂度的增加而增加。度的增加而增加。使用汇编代码对控制序列或者状态机编程比在使用汇编代码对控制序列或者状态机编程比在FPGAFPGA逻辑内创建相同的结构要容易的很多。逻辑内创建相同的结构要容易的很多。片上可编程系统概论-片上MCU和片上逻辑的比较 微控制器在性能方面受到限制。每个指令按顺序执微控制器在性能方面受到限制。每个指令按顺序执行。当一个应用的复杂度增加后,要求实现应用的指令行。当一个应用的复杂度增加后,要求实现应用的指令也会随着增加,系统性能就会相应的降低。相比较下,也会随着增加,系统性能就会相应的降低
11、。相比较下,在一个在一个FPGAFPGA内的性能是更加灵活的。内的性能是更加灵活的。比如,根据性能的要求一个算法可以顺序或者完全比如,根据性能的要求一个算法可以顺序或者完全并行的实现。并行的实现速度会更快,但是会占用更多并行的实现。并行的实现速度会更快,但是会占用更多的逻辑资源。的逻辑资源。片上可编程系统概论-片上MCU和片上逻辑的比较 嵌入在嵌入在FPGAFPGA内的微控制器提供了最好的解决方案。内的微控制器提供了最好的解决方案。在在FPGAFPGA内的微控制器实现非内的微控制器实现非“苛刻苛刻”时序要求的复杂控时序要求的复杂控制制功能,可以用其它功能,可以用其它FPGAFPGA逻辑更好的实
12、现逻辑更好的实现“苛刻苛刻”时序或时序或数数据通道功能。比如,一个微控制器不能响应据通道功能。比如,一个微控制器不能响应msms级内的事级内的事件,而件,而FPGAFPGA逻辑在几十个逻辑在几十个nsns时间内,能响应多个同步事时间内,能响应多个同步事件。反过来,一个微控制器在执行格式或者协议转换方面件。反过来,一个微控制器在执行格式或者协议转换方面成本较低,并且比较简单。成本较低,并且比较简单。表表10.110.1给出了给出了PicoBlazePicoBlaze微控制器和微控制器和FPGAFPGA逻辑在各方逻辑在各方面进行比较的优势和缺点。面进行比较的优势和缺点。片上可编程系统概论-片上MC
13、U和片上逻辑的比较PicoBlaze的的8位微控制器概述位微控制器概述-主要特点 XilinxXilinx的的 PicoBlazePicoBlaze是一个是一个8 8位位RISCRISC(精简指令集计精简指令集计算机算机 )的微控制器,)的微控制器,已经被专门设计和优化,用于已经被专门设计和优化,用于XilinxXilinx的的VirtexVirtex和和SpartanSpartan系列的系列的FPGAFPGA和和CoolRunnerCoolRunner-II-II CPLDCPLD器件。器件。PicoBlazePicoBlaze比现有的比现有的8 8位的微控制器消耗的资源更少,位的微控制器消
14、耗的资源更少,并且提供了免费的、源码级的并且提供了免费的、源码级的VHDLVHDL代码。代码。PicoBlaze的简单处理解决方案的简单处理解决方案-主要优点 1.1.免费的免费的PicroBlazePicroBlaze核核 所得到的所得到的PicoBlazePicoBlaze微控制器是一个可综合的微控制器是一个可综合的VHDLVHDL源代码。所以,该核可以移植到源代码。所以,该核可以移植到XilinxXilinx的未来的产品的未来的产品上。上。2.2.容易使用的汇编器容易使用的汇编器 PicoBlazePicoBlaze的汇编器是一个简单的的汇编器是一个简单的DOSDOS程序,该汇编器程序,
15、该汇编器编译程序时间小于编译程序时间小于3 3秒,产生秒,产生VHDLVHDL,VerilogVerilog和和MM(用于(用于System GeneratorSystem Generator)文件。其它的开发工具包括图形化的集)文件。其它的开发工具包括图形化的集成开发环境成开发环境IDE,IDE,图形化的指令集仿真器图形化的指令集仿真器ISSISS,VHDLVHDL源代码源代码和仿真模型。和仿真模型。PicoBlaze的简单处理解决方案的简单处理解决方案-主要优点 3.3.高性能高性能 PicoBlazePicoBlaze每秒传递每秒传递44-100 million44-100 millio
16、n指令(取决于指令(取决于FPGAFPGA的类型和速度等级)的类型和速度等级),比商业上可用的微控制器快比商业上可用的微控制器快好几倍。好几倍。4.4.较小的逻辑消耗较小的逻辑消耗 PicoBlazePicoBlaze消耗消耗192192个逻辑单元,比如大约消耗个逻辑单元,比如大约消耗Spartan-3 XC3S200Spartan-3 XC3S200器件器件5%5%的逻辑单元。由于只占用很小的逻辑单元。由于只占用很小部分的部分的FPGAFPGA和和CPLDCPLD资源,工程师可以使用多个资源,工程师可以使用多个PicoBlazePicoBlaze用于处理更长的任务或者保持任务的隔离和可预测。
17、用于处理更长的任务或者保持任务的隔离和可预测。PicoBlaze的简单处理解决方案的简单处理解决方案-主要优点 5.100%5.100%嵌入式能力嵌入式能力 PicoBlazePicoBlaze核嵌在核嵌在FPGAFPGA或或CPLDCPLD内部,不需要外部的资内部,不需要外部的资源。通过将额外的逻辑和微控制器的输入和输入端口连源。通过将额外的逻辑和微控制器的输入和输入端口连接后,可扩展其基本功能。接后,可扩展其基本功能。PicoBlaze的一个实例的一个实例-KCPSM3结构原理图(可编程的状态机)PicoBlaze的一个实例的一个实例-KCPSM3内部详细结构程序空间程序空间程序空间程序空
18、间 KCPSM3KCPSM3支持程序的指令可以到支持程序的指令可以到10241024(使用一个(使用一个BRAMBRAM),多个),多个KCPSM3KCPSM3处理器可以用于处理不同的任处理器可以用于处理不同的任务。务。1616个通用寄存器个通用寄存器个通用寄存器个通用寄存器 1616个个8 8位的通用寄存器,标号位的通用寄存器,标号s0-sFs0-sF(在汇编器中可能(在汇编器中可能被重新命名)。所有的操作所使用的寄存器是非常灵活被重新命名)。所有的操作所使用的寄存器是非常灵活的(没有专用的或优先级)。在的(没有专用的或优先级)。在KCPSM3KCPSM3中没有累加器中没有累加器,任何一个寄
19、存器都可作累加器。任何一个寄存器都可作累加器。PicoBlaze的一个实例的一个实例-KCPSM3内部详细结构ALUALU 提供很多简单的操作,所有操作使用一个来自提供很多简单的操作,所有操作使用一个来自sXsX的的操作数。结果返回到该寄存器。对需要两个操作数的操操作数。结果返回到该寄存器。对需要两个操作数的操 作,第二个操作数来自作,第二个操作数来自sYsY寄存器或寄存器或8 8位常数位常数kkkk。ADDADD和和SUBSUB操作可以包含进位标志作为一个输入操作可以包含进位标志作为一个输入 (ADDCY (ADDCY和和SUBCY)SUBCY),用于支持宽度大于,用于支持宽度大于8 8的算
20、术的算术 操作;操作;LOAD,AND,OR,XORLOAD,AND,OR,XOR提供了位操作和测试功能提供了位操作和测试功能,支支 持持SHIFTSHIFT和和ROTATEROTATE操作;操作;COMPARECOMPARE和和TESTTEST指令可以测试寄存器的内容指令可以测试寄存器的内容(不不 改变其内容),确定奇偶性改变其内容),确定奇偶性PARITYPARITY;PicoBlaze的一个实例的一个实例-KCPSM3内部详细结构标志和程序流控制标志和程序流控制标志和程序流控制标志和程序流控制 ALUALU的运算结果影响的运算结果影响ZEROZERO和和CARRYCARRY标志位。标志位
21、。CARRYCARRY也可以用于捕获在移位和旋转指令操作时,位移出寄存也可以用于捕获在移位和旋转指令操作时,位移出寄存器的操作。在器的操作。在TESTTEST指令,指令,CARRYCARRY标志也用来标识,是标志也用来标识,是否否8 8位的暂时结果是位的暂时结果是ODD PARITY(ODD PARITY(奇校验奇校验)。这个标志也用来确定程序的执行序列。这个标志也用来确定程序的执行序列。JUMPJUMP跳转到跳转到程序空间的绝对地址,程序空间的绝对地址,CALLCALL和和RETURNRETURN提供了自程序提供了自程序功能(代码段)。堆栈支持功能(代码段)。堆栈支持3131个嵌套的子程序级
22、。个嵌套的子程序级。PicoBlaze的一个实例的一个实例-KCPSM3内部详细结构复位复位复位复位 处理器返回到初始状态。程序从处理器返回到初始状态。程序从000000开始,禁止中断,开始,禁止中断,状态标志和状态标志和CALL/RETURNCALL/RETURN栈复位。不影响寄存器内容。栈复位。不影响寄存器内容。输入输入输入输入/输出输出输出输出 支持最多支持最多256256个输入和个输入和256256个输出端口。使用个输出端口。使用PORT_IDPORT_ID访问访问8 8位的地址端口。端口值可以在程序中用用绝对值位的地址端口。端口值可以在程序中用用绝对值pppp来指定,或者用来指定,或
23、者用1616寄存器的任何一个寄存器的任何一个(sYsY)来指定。来指定。PicoBlaze的一个实例的一个实例-KCPSM3内部详细结构 INPUTINPUT操作,将端口值送到任何一个寄存器中,输操作,将端口值送到任何一个寄存器中,输入操作用一个入操作用一个READ_STROBEREAD_STROBE脉冲标识脉冲标识(不总是需的)不总是需的),但可以指示数据被处理器接收到。但可以指示数据被处理器接收到。OUTPUTOUTPUT操作,将任何一个寄存器送到端口值中,输操作,将任何一个寄存器送到端口值中,输出操作用一个出操作用一个WRITE_STROBEWRITE_STROBE脉冲标识,该信号被接口
24、脉冲标识,该信号被接口逻辑用来保证有效的数据被送到外部的系统。典型的,逻辑用来保证有效的数据被送到外部的系统。典型的,WRITE_STROBEWRITE_STROBE用于时钟的使能或写使能。用于时钟的使能或写使能。PicoBlaze的一个实例的一个实例-KCPSM3内部详细结构内嵌存储器内嵌存储器内嵌存储器内嵌存储器 有一个内部的有一个内部的6464字节的通用存储器,可以使用字节的通用存储器,可以使用STORESTORE指令将指令将1616个寄存器中的任意一个寄存器的内容写入个寄存器中的任意一个寄存器的内容写入6464个地个地址位置中,址位置中,FETCHFETCH指令将存储器中任一个位置的内
25、容写入指令将存储器中任一个位置的内容写入到到1616个寄存器中的任意一个寄存器中。这允许在处理器边个寄存器中的任意一个寄存器中。这允许在处理器边界内可以保持有更多的变量,也用于保留所有的界内可以保持有更多的变量,也用于保留所有的I/OI/O空间空间用于输入和输出信号。用于输入和输出信号。PicoBlaze的一个实例的一个实例-KCPSM3内部详细结构 处理器提供单独的处理器提供单独的INTERRUPTINTERRUPT信号,如果需要,可以信号,如果需要,可以使用一个简单的逻辑连接多个信号。默认禁止中断,在程使用一个简单的逻辑连接多个信号。默认禁止中断,在程序中可以使能序中可以使能/禁止中断。活
26、动的中断,使禁止中断。活动的中断,使KCPSM3KCPSM3初始初始化化“CALL 3FF”(CALL 3FF”(一个子程序调用最后的存储器位置一个子程序调用最后的存储器位置),这里,这里定义了用户定义的跳转向量到中断服务程序定义了用户定义的跳转向量到中断服务程序ISRISR。INTERRUPT_ACKINTERRUPT_ACK输出产生脉冲。输出产生脉冲。ZEROZERO和和CARRYCARRY自自动的被保护,禁止其它中断。动的被保护,禁止其它中断。“RETURNI”RETURNI”指令保证指令保证ISRISR的的结束,回复状态标志,并说明使能结束,回复状态标志,并说明使能/禁止未来的中断。禁
27、止未来的中断。中断中断 PicoBlaze的一个实例的一个实例-KCPSM3结构连接符号PicoBlaze的一个实例的一个实例-KCPSM3结构连接符号VHDL描述 PicoBlaze的一个实例的一个实例-KCPSM3与程序ROM连接VHDL描述 注:程序ROM的名字取决于用户程序的名字,比如如果程序文件叫“phone.psm”,汇编器将产生程序ROM的定义文件叫“phone.vhd”。PicoBlaze指令集(需要指令集(需要2个周期)个周期)-程序控制组RETURNRETURN ZRETURN NZRETURN CRETURN NCJUMP aaaJUMP Z,aaaJUMP NZ,aaa
28、JUMP C,aaaJUMP NC,aaaCALL aaaCALL Z,aaaCALL NZ,aaaCALL C,aaaCALL NC,aaaPicoBlaze指令集(需要指令集(需要2个周期)个周期)-逻辑组 -算术运算组 LOAD sX,kkAND sX,kkOR sX,kkXOR sX,kkTEST sX,kkLOAD sX,sYAND sX,sYOR sX,sYXOR sX,sYTEST sX,sYADD sX,kkADDCY sX,kkSUB sX,kkSUBCY sX,kkCOMPARE sX,kkADD sX,sYADDCY sX,sYSUB sX,sYSUBCY sX,SyCO
29、MPARE sX,sYPicoBlaze指令集(需要指令集(需要2个周期)个周期)-中断组 -存储组 RETURNI ENABLE RETURNI ENABLE RETURNI DISABLE RETURNI DISABLE ENABLE INTERRUPT ENABLE INTERRUPT DISABLE INTERRUPT DISABLE INTERRUPTSTORE sX,ssSTORE sX,(sY)FETCH sX,ssFETCH sX,(sY)PicoBlaze指令集(需要指令集(需要2个周期)个周期)-移位和旋转组 -输入/输出组SR0 SR0 sXsXSR1 SR1 sXsXS
30、RX SRX sXsXSRA SRA sXsXRR RR sXsXSL0 SL0 sXsXSL1 SL1 sXsXSLX SLX sXsXSLA SLA sXsXRL RL sXsXINPUT sX,ppINPUT sX,(sY)OUTPUT sX,ppOUTPUT sX,(sY)PicoBlaze指令集详解指令集详解-JUMPPicoBlaze指令集详解指令集详解-CALLPicoBlaze指令集详解指令集详解-RETURNPicoBlaze指令集详解指令集详解-RETURNIPicoBlaze指令集详解指令集详解-LOADPicoBlaze指令集详解指令集详解-ANDPicoBlaze指令
31、集详解指令集详解-TESTPicoBlaze指令集详解指令集详解-ADDCYPicoBlaze指令集详解指令集详解-COMPAREPicoBlaze指令集详解指令集详解-SR0,SR1,SRX,SRA,RRPicoBlaze指令集详解指令集详解-SL0,SL1,SLX,SLA,RLPicoBlaze指令集详解指令集详解-INPUT/OUTPUTPicoBlaze指令集详解指令集详解-INPUT/OUTPUT时序PicoBlaze指令集详解指令集详解-RESETPicoBlaze指令集详解指令集详解-STOREPicoBlaze指令集详解指令集详解-FETCHKCPSM3 汇编器汇编器-原理及操
32、作 KCPSM3汇编器提供一个简单的DOS可执行文件和三个模版文件,将KCPSM3.EXE,ROM_form.vhd,ROM_form.v和ROM_form.coe文件复制到工作目录下。程序可用标准的Notepad和Wordpad工具编写,文件扩展名为.psm(8字符名字限制)。打开一个DOS对话框,并定位到当前的工作路径下。然后运行汇编器“kcpsm3.psm”来汇编所编写的程序(运行速度很快)。KCPSM3 汇编器汇编器-原理及操作KCPSM3 汇编器汇编器-错误处理 当遇到错误时,汇编器将停下来。将显示一个短消当遇到错误时,汇编器将停下来。将显示一个短消息来帮助判断引起错误的原因。汇编器
33、将显示遇到问题息来帮助判断引起错误的原因。汇编器将显示遇到问题的行。设计者然后修改错误重新运行汇编器程序。的行。设计者然后修改错误重新运行汇编器程序。KCPSM3 汇编器汇编器-文件组成 KCPSM3KCPSM3汇编器使用汇编器使用4 4个输入文件,产生个输入文件,产生1515个输出文个输出文件。下面给出详细的说明。件。下面给出详细的说明。KCPSM3 汇编器汇编器-ROM_form.vhd 该文件提供模版,该模版用于汇编器产生的该文件提供模版,该模版用于汇编器产生的VHDLVHDL文文件,和汇编器一起提供,在工作路径下。件,和汇编器一起提供,在工作路径下。该文件为该文件为Spartan-3,
34、Virtex-II,Virtex-II ProSpartan-3,Virtex-II,Virtex-II Pro的单端口的单端口BRAMBRAM配置为配置为ROM.ROM.下面给出该文件的模版。下面给出该文件的模版。KCPSM3 汇编器汇编器-ROM_form.vhd 汇编器读取汇编器读取ROM_form.vhdROM_form.vhd模版,将其信息复制到输模版,将其信息复制到输出文件出文件.vhdvhd。不进行其语法的检查。不进行其语法的检查。该文件包含一些特殊的文本串该文件包含一些特殊的文本串,包含包含。Attribute Attribute AttributeNameAttributeN
35、ame of of ObjectListObjectList:ObjectTypeObjectType is is AttributeValueAttributeValue;汇编器使用汇编器使用begin templatebegin template来标识来标识VHDLVHDL定义开始定义开始的地方的地方,然后理解和使用合适的信息来替换所有其它特殊然后理解和使用合适的信息来替换所有其它特殊的串。的串。namename被输入程序被输入程序“.psmpsm”的名字替换。的名字替换。KCPSM3 汇编器汇编器-ROM_form.coe 该文件为汇编器生成的系数文件的提供模版,该文该文件为汇编器生成的
36、系数文件的提供模版,该文件和汇编程序一起提供,并且同在一个工作目录下。件和汇编程序一起提供,并且同在一个工作目录下。ROM_form.coeROM_form.coe模版文件为模版文件为Spartan-3Spartan-3,VirtexVirtex-II-II和其它和其它FPGAFPGA定义了一个双端口存储器。定义了一个双端口存储器。汇编器读取汇编器读取ROM_form.coeROM_form.coe模版,将其信息复制到输模版,将其信息复制到输出文件出文件.vhdvhd。不进行其语法的检查。不进行其语法的检查。namename被输入程序被输入程序“.psmpsm”的名字替换。的名字替换。文件的最
37、后一行关键字文件的最后一行关键字 memory_initialization_vectormemory_initialization_vector=将要被核生成器标识后面的数据值。汇编器将添加将要被核生成器标识后面的数据值。汇编器将添加10241024个所要求的值。个所要求的值。KCPSM3 汇编器汇编器-ROM_form.coeKCPSM3 汇编器汇编器-.fmt文件 该文件是对该文件是对原始的原始的.psmpsm文件文件的格式化,使源的格式化,使源文件看上去更好文件看上去更好看。下面给出该看。下面给出该文件。文件。KCPSM3 汇编器汇编器-.log文件 该文件提供了汇编器执行过程中的详细
38、信息。该文件提供了汇编器执行过程中的详细信息。KCPSM3 汇编器汇编器-constant.txt文件和labels.txt文件 这两个文件提供了行标号的列表和它相关的地址,这两个文件提供了行标号的列表和它相关的地址,以及常数的列表和值。以及常数的列表和值。KCPSM3 汇编器汇编器-pass.dat文件 pass.datpass.dat文件文件是汇编器的内是汇编器的内部文件,用来表示汇编过程中部文件,用来表示汇编过程中的中间步骤。这些文件可不去的中间步骤。这些文件可不去理会,但能帮助识别汇编器如理会,但能帮助识别汇编器如何理解(翻译)程序的。当开何理解(翻译)程序的。当开始汇编时,这些文件自
39、动删始汇编时,这些文件自动删除。除。KCPSM3编程语法编程语法-简单的规则 1 1)没有空行)没有空行-空行将被汇编器自动去除,如果保持空行将被汇编器自动去除,如果保持一行用一个空的注释(用分号一行用一个空的注释(用分号“;”;”)2 2)注释)注释-用分号用分号“;”;”开始,汇编器忽略注释。开始,汇编器忽略注释。3 3)寄存器)寄存器-所有寄存器必须用所有寄存器必须用“s”s”定义定义,后面跟后面跟1616进进制制数数0-F0-F。汇编器接受大小写的混合输入,但是将其转换为。汇编器接受大小写的混合输入,但是将其转换为“sXsX”格式。格式。4 4)常数)常数-常数用两个常数用两个1616
40、进制数表示,范围进制数表示,范围“00”-00”-“FF”,“FF”,汇编器接受大小写的混合输入,但是将其转换为大写。汇编器接受大小写的混合输入,但是将其转换为大写。5 5)标号)标号-标号是用户定义的字符串,区分大小写。标号是用户定义的字符串,区分大小写。中间不能有空格,支持下划线中间不能有空格,支持下划线“_”_”。KCPSM3编程语法编程语法-简单的规则 6 6)行标号)行标号-用来标识一个程序行,用于用来标识一个程序行,用于JUMPJUMP和和CALLCALL指令的参考,行标号后面跟一个冒号指令的参考,行标号后面跟一个冒号“:”。KCPSM3编程语法编程语法-简单的规则 7 7)汇编器
41、允许使用空格和)汇编器允许使用空格和字符,但是指令字符,但是指令和第一个操作数之间必须至少有一个空格。带有两个操和第一个操作数之间必须至少有一个空格。带有两个操作数的指令,其两个操作数之间必须用作数的指令,其两个操作数之间必须用“,”,”分割符。分割符。8 8)汇编器接受大小写混合编程,但是自动的将其)汇编器接受大小写混合编程,但是自动的将其转化为大写。转化为大写。KCPSM3编程语法编程语法-简单的规则KCPSM3编程语法编程语法-常数指令 常数是全局的,即使常数在程序的末尾定义,它也常数是全局的,即使常数在程序的末尾定义,它也能在程序的任何地方被使用。能在程序的任何地方被使用。KCPSM3
42、编程语法编程语法-NAMEREG 指令KCPSM3编程语法编程语法-ADDRESS指令 LOG LOG文件给出的描述。文件给出的描述。ADDRESS强迫指令在给定地址执行。KCPSM3中断处理中断处理-中断使能 使用使用ENABLE INTERRUPTENABLE INTERRUPT指令来使能中断。当不指令来使能中断。当不允许中断时,使用允许中断时,使用DISABLE INTERRUPTDISABLE INTERRUPT来禁止中断。来禁止中断。使用使用RETURNI ENABLE/DISABLERETURNI ENABLE/DISABLE指令来从中断返回主指令来从中断返回主程序。程序。当中断产
43、生时,进行下面的步骤:当中断产生时,进行下面的步骤:1 1)将程序计数器入栈,保护)将程序计数器入栈,保护CARRYCARRY和和ZEROZERO标志;标志;2 2)禁止中断输入;)禁止中断输入;3 3)程序计数器的值为)程序计数器的值为“3FF”3FF”。KCPSM3中断处理中断处理-中断处理过程KCPSM3中断处理中断处理-中断处理基本方法 当中断时,当中断时,PCPC跳到跳到“3FF”3FF”,所以必须保证在此位置,所以必须保证在此位置有有一个跳转到正确的中断服务程序的跳转向量。没有一个跳转到正确的中断服务程序的跳转向量。没有JUMPJUMP指令,程序将转向指令,程序将转向“00”00”
44、。中断服务程序可以放在程序的任何位置。中断服务程序可以放在程序的任何位置。ISRISR执行所执行所要求的任务,用要求的任务,用RETURNIRETURNI结束。结束。KCPSM3中断处理中断处理-中断处理基本方法 下面给出一个简单的中断的处理例程下面给出一个简单的中断的处理例程 通过向端口写通过向端口写5555和和AAAA到到waveform_portwaveform_port端口来产生波端口来产生波形。通过对形。通过对S0S0寄存器递减来以固定的间隔来写数值。寄存器递减来以固定的间隔来写数值。响应中断后,响应中断后,PicoBlazePicoBlaze停止产生波形,然后对停止产生波形,然后对
45、sAsA寄寄存器递增,将计数器的值写到存器递增,将计数器的值写到counter_portcounter_port。KCPSM3中断处理中断处理-VHDL设计例子KCPSM3中断处理中断处理-中断服务程序 ;Interrupt example;Interrupt example ;CONSTANT CONSTANT waveform_portwaveform_port,02 ;bit0 will be data,02 ;bit0 will be data CONSTANT CONSTANT counter_portcounter_port,04,04 CONSTANT pattern_10101
46、010,AA CONSTANT pattern_10101010,AA NAMEREG NAMEREG sAsA,interrupt_counterinterrupt_counter ;start:LOAD start:LOAD interrupt_counterinterrupt_counter,00 ;reset interrupt counter,00 ;reset interrupt counter LOAD s2,pattern_10101010 ;initial output condition LOAD s2,pattern_10101010 ;initial output co
47、ndition ENABLE INTERRUPT ENABLE INTERRUPT ;drive_wavedrive_wave:OUTPUT s2,:OUTPUT s2,waveform_portwaveform_port LOAD s0,07 ;delay size LOAD s0,07 ;delay size loop:SUB s0,01 ;delay loop loop:SUB s0,01 ;delay loop JUMP NZ,loop JUMP NZ,loop XOR s2,FF ;toggle waveform XOR s2,FF ;toggle waveform JUMP JUM
48、P drive_wavedrive_wave ;ADDRESS 2B0 ADDRESS 2B0int_routineint_routine:ADD:ADD interrupt_counterinterrupt_counter,01 ;increment counter,01 ;increment counter OUTPUT OUTPUT interrupt_counterinterrupt_counter,counter_portcounter_port RETURNI ENABLE RETURNI ENABLE ;ADDRESS 3FF ;set interrupt vector ADDR
49、ESS 3FF ;set interrupt vector JUMP JUMP int_routineint_routineKCPSM3中断处理中断处理-ISR中断服务程序KCPSM3中断处理中断处理-中断所执行的操作KCPSM3中断处理中断处理-中断脉冲的时序 建议中断信号保持至少2个KCPSM上升沿时钟周期KCPSM3 CALL/RETURN栈栈-调用和返回处理过程 PicoBlazePicoBlaze包含一个自动的嵌入式的堆栈,用来当包含一个自动的嵌入式的堆栈,用来当遇到遇到CALLCALL指令时保存指令时保存PCPC的值,在遇到的值,在遇到RETURN(I)RETURN(I)是恢是恢复
50、复PCPC的值。堆栈不需要初始化(或者用户的控制)。的值。堆栈不需要初始化(或者用户的控制)。然而堆栈只支持到最多然而堆栈只支持到最多3131级的嵌套的子程序。级的嵌套的子程序。下面给出一个例子来说明这个问题。下面给出一个例子来说明这个问题。KCPSM3 CALL/RETURN栈栈-调用和返回处理过程KCPSM3共享程序空间共享程序空间-一个奇妙的想法 为了设计容易和满足系统的性能要求,经常需要在为了设计容易和满足系统的性能要求,经常需要在一个可编程芯片内使用多个一个可编程芯片内使用多个KCPSM3KCPSM3宏。在宏。在SPARTAN-3SPARTAN-3或者或者VirtexVirtex-I