- 易迪拓培训,专注于微波、射频、天线设计工程师的培养
用CPLD创建具有弹性指令集的微控制器
从消费类产品到通信产品,微处理器都有着非常广泛的应用。目前流行的8位微处理器不仅能够完成高运算量的任务,而且成本很低,因此取得了巨大成功。微处理器非常擅长于有序处理和各种非实时的任务,典型的工作速度在20MHz左右,但有些微处理器内核需要将该时钟频率内部分频,每条指令用多个时钟周期。例如,CISC微处理器在执行一条乘法指令时最多要用到25条简化的指令。
当今市场上已经有非常多的RISC微控制器,它们不仅能够实现单个时钟指令周期,而且功率非常低。例如Atmel的AVR 微控制器在1MHz时钟条件下能够获得1MIP的性能。由于有着如此强大的性能,几乎没有什么任务是微控制器不能完成的。这些微控制器的尺寸都非常小,品种从单个ALU和带通用I/O的存储器到多功能模拟和总线接口不一而足。
可编程逻辑器件由于能够满足低功率可重配置逻辑解决方案的要求,在微处理器市场上也颇有斩获。象CPLD(复杂可编程逻辑器件)这些可编程逻辑器件基本上也用于非常接近微处理器的应用领域,两者的重要区别是顺序与并行处理过程。微处理器执行指令时在多数情况下有分支例程,而 CPLD是并行处理输入和输出的,因此能够获得更高的处理速度和可预测的时序结果。对于以中断驱动的器件,这种方法能够显著地提高其工作速度。
CPLD的速度非常快,能使系统速度能够轻易达到并超过300MHz。CPLD的时序特性一般用纳秒(ns)或MHz描述(100MHz等于10ns,200MHz等于5ns)。今天的CPLD器件其输入到输出延时可小至3.0ns,速度相当于令人吃惊的385MHz!
图1和图2给出了CPLD和微处理器的结构。所有CPLD器件都具有类似的这种结构,不同系列的器件只是在时钟特性、I/O标准和安全性等方面有所差别。虽然不同微处理器的结构也是相同的,但附加性能如时钟、ADC、DAC更能引人注意。
类似性
由于这些器件具有类似的功能,因此其性能也是类似的。它们都具有可编程性,通常都支持JTAG可测试性,能够用于类似的应用。表1详细给出了这样的类似性。一些公司为微控制器和嵌入式软核微控制器提供了在线的硬件调试器。
区别
但CPLD与微控制器还是有区别的。CPLD在系统上电时就能工作,没有启动过程。CPLD还具有非常精确的时序模型,由于能够进行并行的逻辑处理,因此可以提供更高的性能。但微控制器具有另外的特点,如A/D、专用的I/O总线端口和特殊引脚功能。微控制器与CPLD之间的主要区别如表2所示。
虽然微控制器能够提供更多的功能,但随之而来的是价格问题。有时微控制器上的功能也不一定能派上用场。如果设计要求是带50个GPIO的8通道 ADC,那么使用者还不得不支付那些不需要的功能的费用。这就需要认真地权衡功能与价格的矛盾。在某些情况下,仅使用设计要求的功能要比在更高器件成本上构筑成功的设计好得多,风险也比较小。
这二种器件在以安全为重的工业领域,如远程信息处理和工业设备中,还存在其它区别。质量认证依据的是测试故障机制,对于具有可预测性操作的逻辑器件来说是比较容易通过质量认证的,而微处理器则需要考虑复杂的状态。质量认证需根据一系列指令带来的可能输出数量来判定。由于分支指令在电压下跌或下降时通常会引起不可预知的操作,因此会使质量认证复杂化。而CPLD在电压恢复时可以再装载原始的逻辑配置,因此默认状态是可预测的,这种器件可以在预先定义的电压失效条件下工作。系统测试也比较方便,可以在CPLD中实现较难的中断处理仿真。
决策标准
比较两个具有相同功能却不同结构和产品类型的器件是相当有意思的。从某种角度看,为微处理器编写程序和为CPLD软核微处理器编写代码是相似的,二者都具有相同的操作流程。设计工程师可以向处理器或可再编程逻辑器件写汇编代码。对于可再编程逻辑器件来说,人们可以从各种系列、密度和功能的产品中作出选择。业界还为SPI、I2C和SMBus等可编程逻辑器件提供了许多参考设计。
值得注意的是,在复用和可移植性方面可编程逻辑器件具有更高的胜算把握。采用VHDL等高级语言的硬件分析通常要比来自不同厂商的不同处理器具有更好的可预测性。用VHDL可以将任意的可再编程逻辑器件作为目标,而微处理器中的一些特殊功能通常会随新的目标环境发生变化。而且芯片的更新或操作系统的修改都会迫使源代码的再次目标化。
两种都用?
某种程度上这两种器件具有互补性。对于与性能无关的任务,CPLD能够提供非常快速的引脚到引脚性能,并具有时序的可预测性,而微控制器能够提供诸如ADC、DAC和CAN、USB等专用总线接口性能。虽然这些性能会限制通用I/O的数量,但将CPLD用作微处理器端口扩展后就能解决这一问题。只具备必要功能的简化型微控制器的价格要比仅为满足I/O要求购买较大封装的器件便宜许多。CPLD能够提供的I/O数量少至32,多至250,并且能够在同一I/O封装中装配更多的逻辑。随着工艺尺寸的不断缩减,CPLD价格也在不断下降,因此设计工程师们在权衡性能与价格时会有更多的选择。
PicoBlaze介绍
PicoBlaze是8位的软核微控制器,支持8位数据总线和16位指令总线(如图3所示),是依据RSIC(精简指令集计算机)“哈佛结构”模型设计的,具有独立的数据和指令端口。可以用C语言编写的交叉编译器生成程序。PicoBlaze设计使用的是VHDL语言,并作了资料归档,因此随之的交叉汇编器能直接跟踪结构。
PicoBlaze在许多方面象是一台基于常数的机器。常数值可规定用于程序的以下方面:
1. ALU操作中使用的常数数值;
2. 常数端口地址,用于访问专门的某个信息或PicoBlaze方案之外的控制逻辑;
3. 控制程序执行顺序的常数地址值。
PicoBlaze指令集编码允许在任何指令字中定义常数。因此一个常数的使用不会给程序大小或程序的执行带来额外的开销,因此能有效地用全范围的 “虚执行”扩展简单指令集。所有指令的执行时间大约是2个时钟周期。当判断一个程序的执行时间时,特别是当嵌入到一个实时状态时,统一的执行速率是非常有益的。程序长度是256个指令,所有地址值定义为含在指令编码中的某个8位。固定的存储空间可以提升模块的一致性。必要时,可以扩展设计来支持更大的存储范围。
[p]
指令集
指令集也非常类似。但是对PicoBlaze等CPLD软核微控制器来说,指令集是可变化的。比如设计工程师可以根据规范要求增加或删除指令。表3是AVR RISC微控制器和CPLD PicoBlaze软核微控制器之间的比较。
目前交付的PicoBlaze支持49条指令,可以在任何几个CoolRunner-II CPLD中操作。希望支持的指令品种以及架构版本的选择都会影响PicoBlaze的运行速度。
例如,在全指令集和所有指令都保持在CPLD外的情况下所能达到的最高性能是30MHz,但通过流线型处理指令集或程序可以将性能提高3倍,即 90MHz。事实上,PicoBlaze微控制器架构充分利用了CoolRunner-II的2个关键特性,即高执行速度和低功耗。
增加或删除指令
PicoBlaze微处理器软核的优势在于具有增加或删除指令的能力。
例如,只需从VHDL中注释掉指令就可以完成指令集中指令的调整。如果需要的话,人们还能把它们从汇编器中去掉,但通常是不要求这样做的。如果某些应用能够利用目前提供的这些指令外的其它重要指令,那么还可以增加指令。因此删除和添加指令都是可行的。大多数编程人员在日常编程中用到的指令数大概是 20条。选择最常用的20条,把剩余的删掉,然后再进行编程。如果设计工程师发现了一个瓶颈型“内部环路”,并能从专门为该指定任务定制的单个指令中受益,那就能够编写出以硬件速度运行的VHDL程序。记住,PicoBlaze微控制器能够利用处理器内部的双边沿触发器在两个时钟边沿完成运算。
DSP例子
为了描述PicoBlaze架构的适应能力,让我们看一个DSP的例子。代码到“位-反转总线(bit-reverse a bus)”是快速傅里叶变换中的一项基本操作。作为基本算法中的一个关键步骤,数据一般从地址总线上驱动输出。用“标准”指令完成这一操作需要多条“屏蔽与翻转”命令,极易形成处理瓶颈。
表4给出了极象汇编类步骤的基本操作来显示寄存器内容。算法的起始是带A-H标签的一字节数据。该字节首先在内部完成交换 (4次翻转),然后再用布尔“与/或”将内部位转移到目标寄存器,从而生成结果,一次2个位。这样处理一遍后,会在最终寄存器中形成求反的原始内容。根据具体算法的不同,大概需要12到18条指令。在这种情况下,设计工程师不用增加指针和计数器等环路管理开销就可以完成这一任务。
如图4所示,在VHDL中增加了“翻转”指令,设计经过再编译,“重新布线”的处理器就增加了这条关键指令。该方法用合成工具再布线手段可以将许多指令“挤压”进某些门中。这些多位级操作可以归结为简单的CPU再布线,并且最为重要的是合成器正确工作了。
指令增强
前面讨论的是指令集优化,不过功能增强也是可以的。请记住,许多微控制器包含有板上功能模块,这些模块除了指令集外还另有用途。例如,许多8位微控制器包含内部的外围设备计数器或定时器、中断控制器和DMA电路。对PicoBlaze来说,只要在芯片内部增加合适的外围设备功能集就可以了,具体取决于所选择的CoolRunner-II CPLD的密度。表5针对不同的附加功能给出了宏单元运用的一些评估。
性能改进
提升设计性能的经典方法是进行适当的“调整”。观察处理器的性能行为,识别处理器耗费时间的地方,发现处理器在做什么,然后提出最佳的操作组合来改进性能。最后实现新版的架构和/或代码并进行再次评估。
实现架构或代码的方法之一是采用CoolRunner-II设计套件。许多目标设计都能适合驻留在板上的256-宏单元 XC2C256。板上还留有空闲的引脚位置,可以用来增加64-宏单元XC264,其信号已经与XC256连接在一起了。在64宏单元CPLD中简单构筑一个带计数器和定时器的小型硬件性能监示器就可以定时256宏单元CPLD中不同的代码部分,并报告执行时间。这样,通过检查地址空间和定时的行为,设计工程师就可以知道完成各种任务所需的时间。
PicoBlaze交叉汇编器
如前所述,PicoBlaze交叉汇编器具有完好的归档资料,因此PicoBlaze设计文件中早已存在汇编代码与VHDL 之间的直接对应关系。编译器是用ANSI-C编写的,并在微软的汇编器上汇编。该交叉汇编器具有高度的移植性,支持多种输出文件类型。例如,它能产生二进制输出文件,可以英特尔的hex格式装载进外部EPROM。它也能产生适合VHDL仿真器使用的主要建模文件。设计工程师可以用高速仿真功能立即分析汇编器产生的代码,从而了解代码的功能和效率。然后将代码下载到CoolRunner-II设计套件中,就可以看到它们正按期望的值正确工作。
射频工程师养成培训教程套装,助您快速成为一名优秀射频工程师...
天线设计工程师培训课程套装,资深专家授课,让天线设计不再难...
上一篇:JavaCard指令处理器的FPGA设计
下一篇:基于FPGA的NCO设计方案