原创 ARM与FPGA通信

2010-7-9 17:25 7439 10 12 分类: FPGA/CPLD

 


    在数据采集卡中ARM主要负责数据显示和数据分析,处理的速度处于MS级;而FPGA在系统中处于数据的高速采集和高速处理,处理的速度是ns级。两个处理器的之间的数据传输属于典型的异步数据通信,它们之间通信的速度之间决定了系统处理数据的效率。FPGAARM之间属于大量数据交换,以异步并行读取的方式为例介绍ARMFPGA的通信,实际设计中使用DMA方式来实现ARMFPGA之间的大数据量通信。


 


ARM存储系统分析


 


    S<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />3C2410A存储控制器提供访问外部存储器所需要的存储器控制信号。S3C2410A支持大、小端模式,将存储空间分为8个组(Bank),每组大小是128M,共计1GB,如图1所示。所有存储器组都可用于ROMA或者SRAMBank6Bank7还可以用于SDRAM。所有内部块的访问周期都可编程。总线访问周期可以通过插入外部等待来延长,支持SDRAM的自刷新和掉电模式。Bank0~Bank6的开始地址是固定的,Bank7的开始地址是Bank6的结束地址,灵活可变,并且Bank7的大小与Bank6的大小必须相等。除Bank0外,其余各存储器的总线宽度可编程设置为8位、16位或者32位,但是Bank0只支持16位或者32位。Bank0作为引导ROM,地址映射到0x0000_0000OM[1:0]是系统的引导模式控制引脚,在复位时,系统将检测OM[1:0]上的逻辑电平,并根据这个电平来决定Bank0区存储器的总线宽度<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

 


<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" /><?xml:namespace prefix = w ns = "urn:schemas-microsoft-com:office:word" />


 


 点击看大图

 


 


 

1 ARM存储单元分配图

 

    在设计中ARMbank0用于Nor Flashbank6bank7用于两块SDRAM,我们选择bank4作为FPGA内部RAM映射的空间。Bank4ARM的统一基地址为0x20000000,后面的采集的数据都是基于这个地址为首地址的。


     EP3C25基于SRAM结构,器件内部自带RAM,容量最大达到594Kbit。为了方便ARMFPGA通信,在FPGA上建立一个8KbitRAM数据缓冲区,将AD采集的数据缓冲在这8KbitRAM中,将ARM的数据总线和地址总线与RAM缓冲区构建的双口RAM的数据线、地址线直接相连,使用总线访问FPGA内部RAM就可以达到高速数据读取的目的。这种结构下相当于将采集到的数据直接存储到S3C2410的系统内存中,从而节省了数据传输的时间,大大提高了系统的效率。如上图4-2所示ARM存储系统的结构图,ARM与外部存储器相连时,必须先给其分配在一个固定的Bank,本设计将FPGA内的缓冲区指定在Bank4上,地址范围从0x2000_00000x2000_1000。使用片选引脚nGCS4、读引脚nOE和写引脚nWE即可完成对FPGA内存储空间的读写。 


                               


ARM读取双口RAM中的数据


 


    被测信号经过AD9480转换后,需要将转换后的数据进行存储,这是数字存储示波器与模拟示波器的区别之一。对于数据的存储方案主要有FIFO和双端口RAM两种。第一种使用FIFO方案,其特点是数据存储格式是先入先出,可以省去地址总线,只需要将数据按照一定的时钟写入存储单元,数据的读取相同。第二种是双端口RAM方案,其特点是需要两个独立的数据总线、地址总线和控制总线;一方在写入的时候,另一方可以进行数据的读取。由于需要读取存储器中某个“特定”位置的数据,所 以必须使用地址线,所以后端的存储器选择双口RAM


点击看大图 


 


2 双口RAMARM总线连接图


 


    上图2是双口RAMARM总线连接图,双口RAM的地址线addr[8..0]ARM的地址线的低九位相连,nOE取反后作为双口RAM的读取时钟,双口RAM的数据输出q经过一个八位的三态缓冲器输出。如图ARM读取信号nOE低电位有效,而双口RAM的读时钟为上升沿有效,为了得到合适的读取时序,我们将nOE取反后作为双口RAM的读取时钟。输出数据总线与ARM的数据总线连接,若直接连接共享存储区的数据总线会长期占用ARM的数据总线,会造成CPU无法运行。在两个数据总线中加一个三态缓冲器,以取反的nOE 为三态门的选通信号后问题既可以解决。


以读取操作为例,ARM读取外部存储器的时序图如下图3所示,针对FPGA内部缓冲区的读取,下面通过一个最基本的读语句来分析ARM读取的过程。


点击看大图


 


3 ARM读取外部存储器的时序图


 


    以程序a[0] = *0x20000000为例,这条程序是将地址0x20000000地址中的数据赋给a[0],地址0x20000000bank4的首地址,当程序需要访问bank4地址空间内的数据时,操作步骤如下:


    在接下来的时钟上升沿,将需要访问的地址赋给地址总线。


    在第二个周期选通访问地址所在bank的片选,即nGCS4拉低。


    在第三个周期将nOE拉低,给出发出读取信号。


    在第四个周期,将访问地址中的数据赋给数据总线。


    由于整个调试过程都在SDRAM中运行,而a[0]也是在SDRAM中由编译器指定一个地址,因此在读操作完成后,紧接着的是向SDRAM中某个地址赋值的写操作,所以片选信号和读信号在读操作完成后立即被拉高了。设计中真是使用了读信号nOE在读一次时产生的这个下降沿,将其取反做为双口RAM的读时钟。当nOE上升沿时,要读取的地址正占据着地址总线,地址被送到双口RAM的读地址,得到双口RAM内的数据,被送到数据总线上,ARM数据总线接收数据。经过若干个周期的读取即可完成ARMFPGA之间的数据读取。

PARTNER CONTENT

文章评论2条评论)

登录后参与讨论

用户219734 2015-5-9 17:04

写的好,学习了。

ilove314_323192455 2010-7-10 09:56

借助于存储器的方式
相关推荐阅读
bitao1983_395643617 2016-01-26 16:32
华为硬件开发是怎么做的,有什么不一样?(感同身受)
朱晓明 最近很多朋友咨询的一些硬件问题,发现朋友们没有仔细的看datasheet,也没有好好的做电路分析。我讲一讲华为是怎么做硬件开发的,给正在做硬件开发的朋友一些启示。说的不对的地方,大家批...
bitao1983_395643617 2015-12-08 11:24
(多图)宽带数字下变频器的FPGA实现
随着软件无线电理论的日趋成熟,软件无线电技术越来越多地应用到军用或民用通信系统中。其中,数字下变频技术(DDC)是软件无线电中的核心技术之一。数字下变频工作在模拟前端输入模拟信号经模数转换之后,而在终...
bitao1983_395643617 2015-10-15 09:41
扒开看移动5G原型机,聊聊其硬件设计的构想?
虽然5G标准尚未成型,但距离大家公认的商用化时间已不足5年(业界公认到2020年会实现5G的大规模部署)。为了抢占先机,参与标准制定,许多公司目前已提出了就5G的新兴算法和应用进行原型设计的需求,全球...
bitao1983_395643617 2015-10-15 09:39
(多图)时钟抖动和相噪及其测量方法
抖动测量一直被称为示波器测试测量的最高境界。传统最直观的抖动测量方法是利用余辉来查看波形的变化。后来演变为高等数学概率统计上的艰深问题,抖动测量结果准还是不准的问题就于是变得更加复杂。 时钟的特性可...
bitao1983_395643617 2015-06-27 22:49
你设计的PCB EMI达标了吗?
电子设备的电子信号和处理器的频率不断提升,电子系统已是一个包含多种元器件和许多分系统的复杂设备。高密和高速会令系统的辐射加重,而低压和高灵敏度 会使系统的抗扰度降低。因此,电磁干扰(EMI)实在是威胁...
bitao1983_395643617 2015-04-10 14:28
(多图) FPGA与ADC数字数据输出的接口及LVDS应用诀窍
现场可编程门阵列(FPGA)与模数转换器(ADC)输出的接口是一项常见的工程设计挑战。本文简要介绍各种接口协议和标准,并提供有关在高速数据转换器实现方案中使用LVDS的应用诀窍和技巧。 接口方式和标...
EE直播间
更多
我要评论
2
10
关闭 站长推荐上一条 /3 下一条