现代高性能处理器和FPGA/ASIC使用点对点差分SERDES接口(如PCI-Express、DMI或CCIX),但在管理子系统和某些DSP逻辑设计中,常需使用传统低速并行接口连接存储器芯片和外设控制器。CPU可以以不同的速率与同一总线上的不同设备通信。同步和异步设备共享地址和数据信号,但它们可能有单独的控制信号。德州仪器(TI)称其为EMIF(外部存储器接口),adi公司称其为EBIU(外部总线接口单元)。

图2.14显示了一个通用的微控制器外部接口,连接了一个同步SDRAM存储器芯片、一个FPGA和一个异步外围芯片。
在这里插入图片描述
FIGURE 2.14 General microcontroller external memory interface (sketch).

芯片通常使用片选信号(cs#)通知一个外围设备,它被选择通信;当总线访问进入某个地址范围时,地址范围在处理器内部已经被解码。我们可以使用小型FPGA或CPLD对总线地址进行解码,从而实现进一步的芯片选择信号。我们还可以使用FPGA隔离和分离设备之间的总线,作为总线桥。将本地总线分成两个段,一个靠近处理器,另一个在FPGA的另一边,允许近段运行得更快,而不必等待另一段上的慢速设备。FPGA总线桥接功能可以通过来自处理器芯片的片选信号、使用FPGA对地址范围进行解码和检测来选择通信下游芯片。主机接口内部始终是同步的,但外部异步设备将不接收任何时钟信号,并依赖于频闪信号的上升和下降沿,如读频闪(RD#或OE#),写频闪(WR#),或地址锁存使能(ALE#)。

  • 接口类型:

    • 许多微控制器,dsp和fpga具有并行单端3.3V CMOS主总线接口
    • 支持同步(时钟驱动)和异步(握手)设备连接到同一总线上
    • 最大总线速度:10到133MHz
  • 外设连接:

    • 设备种类:RAM、Flash内存、自定义FPGA功能、I/O控制器(如,NXP的SJA1000 CAN总线控制器)
    • 芯片选择(CS#)信号用于通知特定外设通信
  • FPGA/CPLD的角色:

    • 解码总线地址以实现更多的芯片选择信号
    • 作为总线桥隔离和分离设备之间的总线
    • 可使靠近处理器的总线以更快的速率运行
  • 接口特点:

    • 内部主接口始终同步
    • 外部异步设备依赖于读脉冲(RD#)、写脉冲(WR#)、地址锁存使能(ALE#)
  • 地址和数据复用:

    • 一些设备要求在同一条线上复用地址和数据
    • 地址锁存使能信号用于区分地址和数据阶段
  • 设计注意事项:

    • 不同处理器的实现差异,包括信号有效边缘和时序协议
    • 设计电路板前需研究相关数据手册

同步模式–总结

在同步模式下,处理器与同步设备(如SDRAM、FIFO和FPGA)进行通信。

事务组成部分

事务涉及几个关键信号:

  • 地址
  • 数据
  • I/O时钟
  • 芯片选择(CS)
  • 写使能
  • 读使能
  • 特定于SDRAM的控制信号

信号采样

  • 每个信号在接收设备的时钟上升沿被采样。
  • 一些信号在同步和异步设备之间共享,尤其是数据总线和地址总线(引脚较多)。

时钟管理

  • 时钟通常由处理器提供给内存/外设芯片。
  • 如果多个设备需要时钟,则使用时钟扇出缓冲器,特别是“零延迟时钟缓冲器”,通过使用相位锁定环(PLL)来消除输入输出之间的相位差,从而防止静态时序问题。

示例事务

在这里插入图片描述
FIGURE 2.15 Bus access protocol and handshaking on a timing diagram.

  • 在示例(图2.15)中:

    • 芯片选择#2被触发两次:
      1. 第一次是针对同步外设的读访问。
      2. 然后是针对同一外设的写访问。
  • 第一个事务序列:

    1. 激活芯片选择(CS)。
    2. 读信号和地址在处理器的同一时钟上升沿启动。
    3. 设备在下一个时钟上升沿采样这些信号。
    4. 在某些访问延迟后,设备将读取的数据放到总线上。
    5. CPU在下一个时钟上升沿采样数据。
    6. 最后,禁用CS/RD/ADDR信号以完成事务。

异步模式–总结

异步设备不依赖时钟;相反,它们在读写信号的上升沿采样数据,并在信号的下降沿发送数据。信号的持续时间根据设备的数据手册进行编程,以满足其需求。位定时的详细描述见第10章“时序分析”。

事务流程

在同一个时序图中,可以看到第一次事务是针对异步外设。在此过程中:

  1. CPU 激活 CS1# 芯片选择信号并将 ALE# 信号置为低,同时将地址放到数据总线上。
  2. 随后,CPU 取消激活 ALE,让外设芯片可以采样地址。
  3. 然后稍后,CPU 移除地址并将总线设置为三态。
  4. 接着,CPU 激活读控制信号,这会导致外设内部获取数据并将其放到总线上。
  5. 此时,CPU 取消激活读信号并在同时采样数据,这使得外设停止驱动数据到总线。
  6. 最后,CPU 取消激活芯片选择信号以结束该事务。

地址传输

在该事务中,单独的地址总线没有被使用,因为外设没有地址引脚;相反,地址需要在数据总线上复用。

等待状态——外设与总线主控器的通信

某些外设设备可以通过发送等待信号来通知总线主控器(处理器)等待响应,因为外设需要时间来内部收集数据。这通常通过以下方式实现:

  • 发送等待信号,或
  • 保持就绪信号(RDY#)为高状态,直到数据可用并能够放到总线上。

现代总线处理方式

例如,现代总线如PCIe使用“延迟读取请求”来处理这种情况:

  • 在短时间间隔内发送读取请求,目标设备记录该请求但同时会终止它。
  • 然后,CPU必须在稍后的时间重新尝试传输(延迟读取完成),以便接收响应数据。

在请求和完成事务之间,处理器可以执行代码或与其他设备进行交互。

PCIe中的已发布写操作

PCIe中的已发布写操作类似于写事务:

  • 它不会等待外设将来自I/O触发器的数据存储到其核心寄存器中,这个过程可以在总线事务之后发生。

一般情况下,传统本地外设总线的处理器被编程为等待一定的时间,因此板上没有等待信号的握手过程。

仲裁机制

当外部主设备(如其他处理器或FPGA)想要与某些外部外设通信时,它必须请求对总线的控制访问。这是通过仲裁信号来实现的。

访问流程

  1. 请求访问:外部主设备通过激活总线请求信号(BR#)来请求对总线的访问。
  2. 授权控制
    • 如果主处理器当前没有使用总线,它将通过BG#信号授予该请求,并把自己的总线引脚设置为三态。
  3. 结束使用:外部主设备完成操作后,取消激活BR#信号。
  4. 控制恢复
    • 如果主处理器希望重新获得控制权,但外部主设备仍在使用总线,则主处理器会激活BGH#信号。

此描述假设总线仲裁器集成在主处理器中。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐