Lattice FPGA中假双口RAM控制器的设计

    在很多数据采集系统中,都涉及到双口RAM进行数据交换的设计。一般的方式是,通过FPGA控制AD进行数据的采样,然后通过双口与ARM和FPGA进行数据交互。但是这个设计的难点在于应用设计过程中,硬件电路设计和软件设计。一般性的ARM+FPGA构架方式的开发为,ARM7+FPGA和ARM9+FPGA,如果涉及到数字信号处理方面的可能会用到DSP+FPGA的一个设计。但是这些所有的设计都涉及到一个问题,那就是MCU和FPGA之间到底应用那组数据交换的方式。

   在理解arm构架的过程或是DSP的构架过程中,都能发现一个问题。就是它们都带有一个共同点,就是能控制外部SRAM都带有SMC。它们的总体称呼为EBI(外部总线接口),这是一个相当有用的接口,EBI接口可以外接RAM等静态和动态存储器,还可以改造成TFT接口的控制器,其实原理是一样的。下面我简略的分析一下EBI接口,以AT91SAM9260的EBI接口为例(ARM7的接口方式比较简单):

    在上图可以看出,在AHB总线上挂有,SDRAM控制器、static memory控制器、CF卡控制器、NAND flash控制器和ECC控制器。APB是低速总线的问题,这个不考虑。这些控制器的信号经过数据选择器处理后分别接到对应的存储器上。重点分析的是static memory控制器接口的问题。我们根据数据手册能够很轻松的看出,外接的方式。不外乎地址总线、数据总线、控制总线等方式。其中的数据总线分为8位宽方式、16位宽方式和32位宽方式。一般建议用简单的16位宽的方式。NCS[0..7]分别控制不同的地址空间,选择没有使用的NCS,然后NBS[0..3]来选择位宽,如果是用的16位宽就只需要接口NBS0和NBS1。

    在接口完成后可以用altera的开发环境或是lattice的开发环境中的IP生成双口ram。假双口ram的block图为:

   其中是两套控制总线和地址总线独立的双口RAM,数据总线公用。在这个过程中重点是设计接口了,双口ram是一个中间件。通过arm控制fpga的双口的读写是相当简单的事情,难点在于用FPGA自己写的控制器。控制流程是分析双口ram时序的问题。模拟控制的时序,这是设计的一般流程。但是由于IP提供的资料不齐全,这会导致很多的问题,其中一个问题就是时钟的偏移问题和时序同步问题。这个问题有遇到的可以详询本人!


你可能感兴趣的:(FPGA开发之verilog)