韩跃强
摘要:本文对MCU与FPGA组成系统的结构进行了分析,并以ALTERAFPGA的结构为基础,进行了总线互连的设计。
关键词:可编程逻辑器件三态总线FPGA
引言
近年来,随着可编程逻辑器件的迅速发展,越来越多的系统设计开始采用这种半定制的ASIC(专用集成电路)。PLD(可编程逻辑器件)及整套EDA(电子设计自动化)工具的使用,为开发人员提供了自上而下设计系统的途径。这种系统可以简化系统设计、优化系统结构与电气特性、便于系统的调试与维护、缩短设计周期以及降低成本。尤其是在数字系统的研制阶段或中小批量生产中,上述优点更为明显。
1、FPGA可重构系统结构分析
在高速系统中实现人机界面以及参数设置等非高速操作,往往使用具有良好接口功能的通用MCU(微控制器)来实现。因此,这种由MCU和FPGA(FieldProgrammableGateArray)构成的系统使用更为广泛。按照MCU与FPGA之间的相互关系以及在系统中所起的作用,主要可以分为两类:MCU控制FPGA工作的系统和MCU协同FPGA工作的系统。
1.1MCU控制FPGA工作的系统
这类系统采用MCU作为系统的主要控制器件,在FPGA中实现控制器的外设电路功能。实质上,这是传统MCU控制系统的继承发展,它把各个分立的外部设备与接口,根据系统需要,在FPGA中定制实现。比如在FPGA中实现SRAM(静态随机存储器)、键盘与显示接口以及总线的扩展等应用。
由于主要控制任务在MCU上实现,系统逻辑实现的重点在编制MCU程序上,而FPGA则更多的使用IP(IntellectualProperty)核实现基本功能模块。因此,在整个系统设计过程中,软件开发所占比重较大。
1.2MCU协同FPGA工作的系统
这类系统通常以可编程逻辑器件为核心,在其内部实现面向应用的逻辑功能,而MCU则占据次要地位。应该说,这类系统充分利用了可编程逻辑器件和MCU的特点,实现了优势互补。它主要应用在面向应用、并行处理以及高速等环境中。例如,使用高密度的FPGA进行高速的多路A/D采样,经内部处理模块处理后,并行输出结果,整个过程的时序控制在FPGA内部实现;而MCU只负责对FPGA各功能模块的参数装载,发送启动命令以及监控FPGA工作状态等任务。这类系统的开发重点主要在FPGA逻辑功能的硬件实现上,而MCU的控制软件就比较简單了。
在实际应用中,系统的特点并不像以上两种类型这么明显,普遍存在的是兼具以上特点的系统,只是所占比重不同而已。
2、MCU结合可编程逻辑器件系统的互连接口
MCU与可编程逻辑器件互连,有直接连接和总线连接两种方式。直接连接只需把MCU与FPGA的I/O引脚相连即可。而总线连接可分为单向总线和双向总线两种类型。对于单向总线,实质上是一组以直接方式互连的I/O。而实现双向总线,就需要使用可编程逻辑器件的双向口构造三态总线了。
三态总线的实现,需要使用三态缓冲器,实现高、低电平和高阻三个状态。在FPGA上可有内部和外部两种三态总线的实现方式。
内部三态总线是在器件内部的各逻辑部分之间互连的总线。由于不同厂商采用不同的技术,因此内部三态主要有两种方法实现。一种是使用三态门实现真实的三态总线,这需要器件内部具有三态逻辑支持。比如XILINX公司的FPGA产品,在其内部CLB(可编程逻辑块)中,有三态缓冲器。另一种是把三态逻辑转化为MUX(多路选择器)实现,这样内部逻辑不需要三态门的支持。这种器件以ALTERA公司的FPGA为代表。虽然这一方法是模拟三态逻辑,但是具有降低成本和消除信号竞争的特点。
外部三态总线是器件在端口上实现的,用来与其它芯片互连,这对于大量的系统设计是必须的。因此,所有的可编程逻辑器件都在I/O端口上实现了真实的三态缓冲。同时,由于大量双向总线的存在,所以三态总线往往与双向端口联系在一起,形成双向的三态总线。
在含FPGA的MCU系统中,FPGA通过外部三态总线与MCU的总线端口互连。而且,一片FPGA通常实现多个功能模块,所以内部三态总线是外部系统总线在FPGA器件内部的延伸。因此,外部和内部的三态总线共同构成了连接MCU与FPGA的系统总线。本文以ALTERA公司的CYCLONE系列器件为例,来阐述双向三态总线的设计方法。
ALTERA公司的ACEX1K系列器件是2003年推出的面向低成本、高容量以及低功耗等网络通信及控制应用的中密度可编程器件。它依然采用了ALTERA传统的LUT(查找表)结合EAB(嵌入式阵列块)结构,因此内部没有三态缓冲器,而是采用MUX模拟三态逻辑。这一转换过程,由QuartusII软件在编译时自动完成。
在器件的I/O端口,每个IOE(输入输出元件)都包含一个I/O缓冲,以及一个既可做输入又可做输出的寄存器。由图1可见,在I/O引脚上实现了三态缓冲结构。当引脚作双向口使用时,IOE中的寄存器作为输出数据寄存器连接到三态门的输入端。输入数据和输出允许寄存器分别使用相邻LE(逻辑单元,是LAB的组成元素)中的寄存器,即双向三态的实现既使用了IOE,有使用了内部逻辑资源。
3、基于ALTERA可编程逻辑器件实现三态总线的方法
3.1内部三态总线的实现
内部三态总线是外部三态总线在FPGA器件内部的延伸,用来连接可编程逻辑器件片内的各功能模块。
ALTERACYCLONE器件使用MUX代替内部三态总线。使用ALTERA公司的集成编译环境QuartusII,在图形输入和AHDL语言输入方式下,可以自动进行这种转换。例如,下面是采用图形方式输入的内部三态逻辑(如图2),(a)、(b)两种情况为三态门驱动输出引脚和三态门驱动内部逻辑。
QuartusII将自动进行MUX转换(如图3),分别对应有无输出引脚。并且一个三态门只能驱动一个引脚,这是由器件的硬件结构决定的。可见三态门只能在I/O引脚上实现。
3.2外部三態总线的实现
3.2.1与其它芯片相连的外部三态总线
MCU与FPGA采用总线方式互连,在MCU端有现成的总线接口,而在FPGA端,需要自行设计总线端口,即外部总线的实现就是总线端口的设计。此外,总线通常连接多个设备,因此需要实现双向三态总线。在ALTERA的FPGA中实现双向三态端口,QuartusII既支持语言方式输入,又支持图形方式输入,分别讨论如下。
(1)双向三态总线的VHDL语言描述。
下面一段VHDL代码描述了一个双向三态总线的端口。
这段程序可以作为FPGA器件的对外端口逻辑模块。ext_data作为器件对外部的双向口,它的输出实现了三态,而它的输入,只要按正确时序读取外部信号,是不需要实现三态的。输入口in_data和输出口out_data是对FPGA内部的接口,这是由于内部逻辑不必实现双向,所以是输入和输出分开的。这一点在后面的图形表示中将更加直观。
(2)双向三态总线的图形描述。
依然以上述模块为例,采用QuartusII的图形方式输入,利用参数化模块库(LPM)实现(如图4)。这种方法尤为清晰简便。
图中out_data为模块输出,实际对应FPGA的输入功能,所以与其相连的三态门保持常通状态以实现内部连接。这也是由于三态门不能直接驱动内部逻辑决定的。
3.2.2用外部双向三态总线实现内部逻辑块的互连
虽然ALTERA器件不支持内部三态,但是通过上面的图形描述,启发我们通过引脚上的三态门实现器件内部逻辑块之间的双向三态总线互连,当然,也可以使用MUX技术实现。
图5为需要实现的内部逻辑互连,但是这种情况在ALTERA的FPGA上无法实现,需要转换成MUX。而通过使用两组双向引脚,利用I/O口上的三态门转化为外部总线,就可以实现了(如图6)。需要注意的是,图6中引脚间的互连需在PCB(PrintedCircuitBoard)板上实现,这里所用的BIDIRC端口只是对连接进行了表示,在FPGA器件内部不能实现。
这种使用I/O端口实现的内部总线可以连接内部各个模块实现双向三态连接,但是是以占用I/O端口资源为代价的,所以如无特别要求,对内部三态总线应采用MUX逻辑实现。而对于如与MCU连接的外部双向三态端口,可直接使用图4所示方法实现,FPGA对外的输出实现三态控制,而输入不需三态控制,由内部逻辑保证输入正确性。
4、结束语
MCU与FPGA相结合的系统,由于其可重构、灵活的优点,十分适合工控系统的应用。而总线式系统结构是这一系统的主要特点之一,是实现系统逻辑功能的基础结构。
参考文献:
[1]AlteraCorp.ACEXCYCLONEProgrammableLogicDeviceFamilyDataSheet.Ver.1.1,2003.
[2]曾凡泰,陈美金.VHDL程序设计.北京:人民邮电出版社,2000.
[3]蒋璇.数字系统设计与PLD应用技术.北京:电子工业出版社,2001.