学海荡舟手机网

主页 > 实用文摘 > 教育文摘_15 > > 详细内容

内嵌ARM核的FPGA芯片EPXA10及其在图像驱动和处理方面的应用_EDAP

摘要:介绍了内嵌arm核的fpga芯片epxa10的主功能特点、内部结构及工作方式,通过其在图像驱动和处理方面的应用,体现了epx10逻辑控制实现简单、对大量数据做简单处理速度快以及软件编程灵活的特点。

    关键词:arm fpga epxa10 图像驱动 图像处理

随着亚微米技术的发展,fpga芯片密度不断增加,并以强大的并行计算能力和方便灵活的动态可重构性,被广泛地应用于各个领域。但是在复杂复法的实现上,fpga却远没有32位risc处理器灵活方便,所以在设计具有复杂算法和控制逻辑的系统时,往往需要risc和fpga结合使用。这样,电路设计的难度也就相应大大增加。随着第四代eda开发工具的使用,特别是在ip核产业的迅猛发展下产生的sopc技术的发展,使嵌入式risc的通用及标准的fpga器件呼之欲出。单片集成的risc处理器和fpga大大减小了硬件电路复杂性和体积,同时也降低了功耗、提高了系统可靠性。altera公司的epxa10芯片就是应用sopc技术,集高密度逻辑(fpga)、存储器(sram)及嵌入式处理器(arm)于单片可编程逻辑器件上,实现了速度与编程能力的完美结合。本文所介绍的图像驱动和处理系统正应用了epx10的这些特点,充分发挥了fpga逻辑控制实现简单、对大量数据做简单处理速度快的优势以及arm软件编程灵活的特点。

1 内嵌arm核的fpga芯片epxa10及其主要特点

epx10单片集成了arm核、高密度的fpga、存储器及接和控制模块,不仅简化了arm与fpga之间的通讯,也使片外扩展存储器以及和外设通讯变得相对简单;同时通过在fpga中嵌入各种ip核和用户控制逻辑可以实现各种接口和控制任务。这样的高度集成化不仅大大加快了arm与片内各种资源的通讯速度,而且减小了硬件电路的复杂性、体积和功耗,真正实现了sopc。

epx10内部结构框图如图1所示,主要分为嵌入式处理器和fpga两部分。

1.1 嵌入式微处理器arm922t

epx10嵌入式处理器部分集成了业界领先的32位arm处理器(arm922t),工作频率可达200mhz;支持32位armv4t指令集和16位thumb扩展指令集;具有全性能的内存管理单元以及8k的指令缓存和8k数据缓存,以支持实时操作系统(rtos)、c语言和汇编语言。

    1.2 高密度的fpga

epxa10片内fpga部分具有1000000门可编程逻辑、3mb的内置ram和512个可供用户使用的i/o管脚,可以通过嵌入各种ip核实现各种标准工业接口(如pci、usb等)。

1.3 先进的存储支持

epxa10嵌入式处理器部分集成了256kb单口sram和128kb双口sram;同时集成了两个先进的存储支持:(1)sdram控制器,用于控制单倍速/双倍速不同控制进序来确定的,实现起来非常复杂。有了sdram控制器的支持,只需要在altera公司提供的eda开发软件quartus ii中设置好sdram工作所需的各种参数,就可以按照直接给出指令、地址和数据的方式对sdram进行操作,控制器会自动将各种指令转化成sdram所需的工作时序,大大降低了对sdram的控制难度。(2)从fpga启动。这种启动方式需要将设计下载到片外e2prom中,而且设计中可包含fpga部分的应用。启动时fpga为主动,arm处复位状态,配置完成后,如果有对arm的应用,则arm解除复位,执行软件代码;反之,arm一直处于复位状态。

图3

    2 epxa10的工作方式

epxa10嵌入式处理器部分提供了两条32位amba微控制器总线ahb1、ahb2,分别用于片内各种资源的通讯,如图1所示。基于ahb1、ahb2总线,epxa10的工作方式大致可分为三种:(1)arm作为ahb1总线的主控,直接访问hab1总线的从属资源。包括sdram控制器、片上sram、中断控制器等。(2)arm作为ahb1总线的主控,通过ahb1-2桥访问ahb2总线上的从属资源,包括uart、ebi、sram、stripe-to-pld桥等,同时通过stripe-to-pld桥对fpga进行访问和控制。(3)fpga通过ahb2的总线主控pld-to-stripe桥访问ahb2总线上的从属资源,包括sram、sdram控制器,uart等。

epxa10片内集成了软件可编程锁相环路(pll),为微控制器总线及sdram控制器提供了灵活精确的时钟基准。

3 epxa10在图像驱动和处理方面的应用

本文所述的图像驱动和处理系统主要利用ppga逻辑控制实现简单、对大量数据做简单处理速度快以及arm软件编程灵活的特点,系统框图如图2所示。在芯片fpga部分,构造了cmos驱动模块,驱动cmos图像传感器使之能够采集图像数据。然后图像数据经数据接收模块存入片外sdram中,并经串口传入pc机,要将图像数据在pc机中显示成图像,还需编写基于cdib类的图像显示程序;同时将图像数据经芯片arm部分的图像处理算法(本系统采用sobel算子)处理,处理后的图像数据才能经串口传给pc机进行显示。为了验证基于arm的图像处理算法实现的正确性,还将这一算法在pc机中进行了实现,最后针对同一幅图像,将两种实现的结果进行了比较。

    3.1 图像的驱动

3.1.1 cmos图像传感器的驱动

要使cmos图像传感器的成像,必须设计正确的驱动时序,包括行同步、列同步、场同步及曝光时间设定等时序。利用fpga逻辑编程简单的特点,用硬件描述语言verilog hdl编程,可在fpga中实现cmos图像传感器的驱动时序,该驱动时序的仿真结果如图3所示。图中,ld_y为行选通信号;ld_x为列选通信号;cal为场选通信号;clk_adc为内部a/d转换器所需的时钟;addr为行列地址线;sys_reset为曝光时间设定信号;s和r为内部放大器选通信号。

3.1.2 图像的采集

cmos图像传感器输出的信号为数字信号(即数字图像数据),所以图像的采集要通过fpga中的数据接收模块将图像数据保存到片外sdram中。数据接收模块状态机如图4所示。标志flag为1,开始采集数据。因为cmos图像传感器在每个a/d转换时钟周期输出一个数据(如图3所示),接收模块也相应地设计成一个时钟接收周期接收一个数据(burst状态),这样就发挥了fpga对大量数据处理速度快的优势。

3.1.3 图像的显示

arm将sdram中的图像数据经串口传给计算机,在计算机中用vc++语言编写串口协议和图像显示程序,将cmos图像传感器采集到图像显示在屏幕上,以便于监测验证。

3.2 图像的处理

本系统采用的图像处理算法基于sobel边缘检测算子。图像的边缘是由灰度不连续性所反映的,是的最基本。边缘检测算子检查每个像素的的领域并对灰度变化率进行量化,也包括方向的确定,大多数使用基于方向导数掩模求卷积的方法。就sobel算子而言,如图55所示,采用了两个3×3卷积核形成边缘算子模板,紧邻中心像素的像素有4个,和中心像素成斜对角的像素也有4个,距离中心素近的模板值的系数为2,成斜对角的比较远,所以其系数为1,该系数反映了这样一点:领域对当前像素的灰度梯度的影响程度越近影响越大,越远影响越小。图像中的每个点都用这两个核做卷积,一个核对垂直边缘响应最大,而另一个核对水平边缘响应最大,两个卷积的最大值作为该点的输出位,反映了当前位置灰度梯度(图像边缘)的主要方向和大小。运算结果反馈了一幅边缘幅度图像。

因为拍摄的图像边1024×1024,采用的sobel算子为3×3模板,所以图像周边的一圈像素(第1行、第1024行、第1列、第1024列)保持原灰度值。在图像的第2行2列到1023行1023列的范围内,用图5所示的算子模板进行扫描计算,即当前像素和与当前像素相邻的8个像素,分别与模板中位置相应的8个系数相乘,累加这9个乘积结果,就得到针对某一方向的灰度梯度。比较两个方向的计算结果,取量大者作为当前位置的灰度梯度。图7为图6经过sobel算子进行边缘提取后得到的图像。该算法在arm中是基于c语言实现的,体现了arm软件编程灵活的特点。

    3.3 试验结果

图6是成功驱动cmos图像传感器后拍摄的景物图像,可见图像非常清晰。本文介别针对soble算子进行了基于pc机和基于arm的实现,图7为图6经过arm中的sobel算子的边缘提取结果,图8为图6经过pc机中sobel算子的边缘提取结果,图9为图7和图8逐像素的比较结果。可见两种实现方法得到的结果完全一致,说明了基于arm的sobel算子的实现是正确的。

上述驱动和处理系统如果仅用fpga来实现,算法部分的实现会比较复杂;如果仅用arm来实现,驱动时序的设计也会非常困难。面采用内嵌arm核的fpga芯片epxa10,单片就实现了上述系统,大大减小了设计的难度和电路的复杂性,同时也减小了硬件电路的体积和功耗,在系统小型化方面有着独特的优势。由于epxa10集成了先进的arm922t处理器器以及高密度的fpga,所以在不增加体积和改进硬件电路的情况下,可以实现更加复杂的图像处理算法和硬件控制逻辑设计,具有很强的系统扩展潜力。这种嵌入式方案必将成为集成电路的发展趋势,将会在未来较短的时间里得到快速的发展。