现场可编程门阵列FPGA(Field Programmable Gate Array)是美国Xilinx公司于1984年首先开发的一种通用型用户可编程器件。FPGA内部由可绾程逻辑单元阵列、布线资源和可编程的I/O单元阵列构成,包含丰富的逻辑门、寄存器和I/O资源。目前,面向大规模可编程器件附的广泛应用,正在不断地加速电子设计技术从硬件电路设计向“软”设计的过渡。Altium Designer是传统电路设计软件Protel的高端设计版本,除了具备基本的电路原理图设计和PCB设计功能外,它的特色主要在于增强了FPGA开发功能,将电子产品的板级设计、可缩程逻辑设计和嵌入式设计开发融合在一起。
传统的FPGA系统设计多是基于硬件描述语言VHDL或者Verilog来完成的,需要开发者具备一定的硬件描述语言知识,而且这种方式的设计就可读性而言具有一定的复杂度。Altium Designer提出了一种系统级的设计概念——OpenBus系统,这是一种全新的系统级的FPGA设计方法。这种设计方法避开了传统的FPGA设计中用硬件描述语言来编程、仿真和验证等步骤,以更加抽象的方式表示了处理器与外围设备间的互联,降低了FPGA设计的复杂度,简化了FPGA设计。
Altium Designer的创新电子设计平台NanoBoard 3000提供了将嵌入式智能作为设计核心的设计环境,在这个平台上可以调试、下载FPGA嵌入式设计,实现电路硬件设计和基于“软核”处理器的嵌入式软件设计。
1 基于OpenBus系统的设计要素
1.1 OpenBus瞄系统
“OpenBus系统”是一个描述一种使用普通总线实现整个系统内逻辑功能性“模块”连接的术语。通过这种方法,用户能够很快地装配一个包含满足应用需求的各种功能在内的系统。具体来说,OpenBus系统是Altium Designer软件自带的高端IP模块,包含Connectors(连接器)、Processors(处理器)、Memories(存储器)、Peripherals(外围设备)等,如图1的OpenBus Palette面板所示。设计时可以根据设计需求,直接在OpenBus Palette面板调用相关的IP模块,即OpenBus器件,连接构成设计系统。但要注意的是,这些IP模块在调用后,还需要进行相应的参数配置才能使用。这种OpenBus系统的设计方法与传统的将处理器和外围电路作为元件放置在电路板上不同,它移除了所有低级别的走线和互连细节,能够快速地构建系统。
1.2 FPGA设计元件库与软件平台搭建器
除了OpenBus Palette面板中的OpenBus器件,要完成FPGA嵌入式设计,还需要使用Altium Designer软件中的FPGA设计元件库。这些元件库提供了FPGA设计中所需的外围器件。Altium Designer软件提供的常用的FPGA设计元件库有:FPGA NB3000 Port-Plugin.IntLib、FPGA Peripherial.IntLib、FPGA Generic.IntLib、FPGA Configumble Generic.IntLib、FPGA Instruments.IntLib等。
与OpenBus系统配合进行FPGA嵌入式设计的,还有软件平台搭建器SwPlatform。因为进行FPGA嵌入式设计时,FPGA器件的外围引脚常需要驱动如LED、触摸屏、扬声器等硬件设备。而要使这些硬件设备能正常工作,就要在设计中包含相应的驱动代码。这些硬件的驱动代码无需自行编写,Altium Designer的软件平台搭建器SwPlatform可以把所有连接外设所需的低阶驱动代码整合一起。软件平台搭建器SwPlatform采用图形化方式连接用户的应用程序与底层硬件。在进行FPGA设计时,软件平台搭建器SwPlatform可以自动地由FPGA设计的硬件部分获取底层硬件的信息。如图2所示,软件平台搭建器SwPlatform自动根据底层信息(Wrapper,栈层中的HARDWARE部分)提供对于硬件的驱动(Driver,栈层中的SOFTWARE PLATFORM部分)以及服务程序(Context,栈层中的APPLICATION CODE部分)。设计时只需关注构建设计本身的应用程序代码,不需要考虑过多的底层驱动代码。
1.3 创新电子设计平台NanoBoard 3000
Altium Designer的创新电子设计平台NanoBoard 3000,板载Xilinx公司的FPGA芯片Spartam XC3S 1400AN。通过USB接口,将装有Altium Designer软件的PC机与NanoBoard3000连接,Altium Designer软件就可以与NanoBoard 3000直接通信,下载并交互地开发和调试程序。设计过程中无需仿真环境,加快了开发流程。
NanoBoard 3000板上资源丰富,含高级的I2S立体声系统,有板载放大器、混音器及立体声扬声器。全面的视频输出,包括S-Video、混合视频的输入输出及VGA输出。标准的存储器接口,包括IDE、Compact flash及SD内存卡。各种标准通信接口,包括USB、Ethemet、RS-232串口、CAN、pS/2 miniDIN。另外,还有各种通用开关和LED。FPGA设计下载前需要配置管脚约束文件,目的是让设计输入输出端口与目标FPGA器件的管脚对应起来。在Altium Designer软件中进行FPGA嵌入式设计,下载程序时,选择自动配置约束文件功能,就可为FPGA设计自动添加管脚约束文件。
2 基于OpenBus系统的设计与实现
文中基于OpenBus系统设计实现了一个32位处理器TSK3000A控制LED的FPGA嵌入式工程。将嵌入式程序代码“嵌入”到TSK3000A处理器中,在软件平台搭建器SwPlatform提供底层驱动程序的基础上,用C语言编写应用程序代码,控制NanoBoard 3000开发板上的LED。同时,自动配置FPGA约束文件,在创新电子平台NanoBoard 3000上下载程序。程序下载调试成功后,可以看到LED的亮暗情况与嵌入式代码中预先设计的一样,表明设计是完全正确的。
2.1 OpenBus 系统设计与顶层原理图设计
在Altium Designer中新建一个FPGA工程,为工程添加原理图文件和OpenBus文件。打开OpenBus Palette面板,调用LED Controller、连接器Interconnect、32-bit RISC Processor TSK3000A、SBAM Controller等元件,合理配置OpenBus器件参数,完成OpenBus文件的设计,如图3所示。
将图3的OpenBus文件生成原理图符号,在设计的顶层原理图中调用。调用FPGA设计元件库中的其他外围组成电路的元器件,连线完成顶层原理图的设计,如图4所示。
2.2 软件平台搭建器SwPlatform与嵌入式代码设计
本设计中要用32-bit RISC Processor TSK3000A处理器来控制LED,需要添加LED的驱动程序,如图5所示。在器件栈中选择Import from FPGA按钮,Altium Designer将自动检查FPGA工程,添加LED Controller和LED Controller Drive,这样就为LED器件完成了硬件驱动程序的添加。
在软件平台搭建器SwPlatform完成LED器件底层硬件驱动代码的基础上,用C语言设计应用程序代码,实现32—bit RISC Processor TSK3000A处理器控制LED器件的功能。NanoBoard 3000上有一组共8个LED(RGBUSERLEDS)。程序代码拟控制LED7的亮度值为最大值的一半,LED0的亮度每隔一定的时间,逐渐增强然后熄灭。程序代码清单如下:
上述程序中的led_open函数、led_set_intensity函数都可以在Altium Designer软件的知识中心面板查看到其具体含义和调用方法。
2.3 FPGA管脚映射与设计下载
FPGA设计必不可少的一步是通过约束文件,建立设计端口与实际目标FPGA器件真实引脚之间的连接关系。约束文件中详细列出了端口到引脚的映射及其它相关的设计特性,如时钟分配等。配置管理器会自动打开,显示检测到的约束文件并添加到工程中,约束配置文件就创建完成了。连接NanoBoard 3000与装有Altium Designer软件的电脑,成功下载设计后,占用的资源情况,如图6所示。在NanoBoard 3000开发板上可以看到,最左侧的LED7的亮度是程序中设定的数值,而最右侧的LED0亮度则是逐渐变化的,LED的亮暗变化情况与设计意图一致。
3 结论
基于OpenBus系统的FPGA嵌入式设计没有硬件描述语育的编程,OpenBus文件的设计像绘制原理图一样方便,软件平台搭建器SwPlatform为FPGA嵌入式设计完成了底层的驱动代码。结合Altium Designer的创新电子平台NanoBoard3000可片内在线调试,能及时发现设计中的问题,节约项目的研发与设计时间。这种设计方法相对传统的FPGA设计开发,设计过程大大简化,符合FPGA嵌入式“软”设计的设计应用发展趋势。
评论
查看更多