Mailbox Client Intel® FPGA IP用户指南

ID 683290
日期 12/04/2023
Public
文档目录

1.8. 使用Mailbox Client Intel FPGA IP

写命令数据包

图 4. 写命令包流程图

写命令描述

当向SDM发送命令时,将命令字写入命令寄存器,即基地址。为了与硬件保持同步,当命令长度(t)大于零时,请将header和自变量写入Command寄存器(基地址+ 0)。当FIFO中有可用空间写入命令(n > t)时,请继续将header或自变量,一次一个字写入Command寄存器(基地址+ 0)。将最后一个字写入 Command last word寄存器(基地址+ 1)。对于不带自变量的命令,请将header写入Command last word寄存器,(基地址+ 1)。

从(基地址+ 2)读取的内容显示FIFO中用于命令的剩余可用空间。当SDM繁忙时,命令FIFO可能会变满。IP需要3个时钟周期来更新Command FIFO empty space的值。您可以在将命令写入IP后开始读取Command FIFO empty space的值3个时钟周期。

您必须先检查Command FIFO empty space寄存器,(基地址+ 2),然后再继续写入CommandCommand last word寄存器。如果在 FIFO已满时写入(基地址+ 0)和(基地址+ 1),则IP的行为未定义。写入数据被丢弃。

如果您发送的命令多于需要的数量,则可能会出现意外或未定义的行为。例如,发送以下命令读取Chip ID值:
  • 将命令头(header)写入(基址+ 0)。
  • 再次将命令头写入(基址+ 1)。

在上述场景中,IP核预计一次3个字的响应(命令头和2个数据字)。然而,SDM仅返回单字响应,即错误响应代码。

您必须以正确的顺序向Command或者Command last word寄存器发送命令,如Writing Command Packet中所述。未能按正确顺序发送命令可能会导致所有邮箱客户端的服务丢失,包括以下独立IP核:

  • 温度感应器Intel FPGA IP
  • 电压传感器Intel FPGA IP
  • 芯片ID Intel FPGA IP
  • 高级SEU检测Intel IP
  • 部分重配置控制器Intel IP
  • 部分重配置外部配置控制器Intel FPGA IP

读响应包

图 5. 读响应包流程图

读命令描述

  1. 读(基地址+ 8)以检查Interrupt status寄存器的位0是否为1,从而表示有效数据可供主机读取。您可以继续轮询(poll)Interrupt status寄存器,直到位0为1。
  2. 读(基地址+ 6)来检查SOP(数据包的开始),EOP(数据包末尾),以及Response FIFO fill level (n)。

    要读取多个字(word),请完成以下步骤:

    1. 如果SOP = 1并且EOP = 0,则响应有多个字(word)。
    2. 如果Response FIFO fill level (n)为非零(non-zero),则FIFO具有有效数据。
    3. 例如,如果您执行QSPI_READ操作从quad SPI flash存储器读取10个字,其返回值为0x0000002d,表示SDM向响应FIFO写入了11个字。这 11 个字包括一个响应头(header)字和 10 个数据(data)字。
    要读取单个字,请完成以下步骤:
    1. 如果SOP = 1并且 EOP = 1,则响应只有一个字。
    2. 如果Response FIFO fill level为非零(non-zero),则FIFO具有有效数据。
    3. 返回值0x00000007表示SDM将单个字写入响应FIFO。该单字既是单周期数据包的开始也是结束。
  3. 读取位于(基地址 + 5)处的响应头(header)。LENGTH值指定响应中的字数。如果响应错误代码为零,则继续步骤4。对于不成功的命令,响应错误代码不为零。请参阅Error Codes了解更多信息。
  4. 当响应header的长度(t)大于零时(LENGTH > 1),读取(基地址+ 5)以检索响应数据。在不断读取响应数据的同时,还必须不断轮询(基地址+ 6)来检查Response FIFO fill level (n)。对于数据包的最后一个字,预计Response FIFO fill level (n)和EOP值同时为1。在继续读取响应数据的最后一个字之前,必须先检查是否EOP = 1。
    注:

    如果响应FIFO为空,则返回数据未被定义。您必须检查Interrupt status寄存器以确保有效数据可用。在读取响应数据之前您必须验证Response FIFO fill level (n)不为零。

    向邮箱发出新命令之前请确保读取或刷新响应FIFO中的内容。连续发送命令(无需从响应FIFO读回有效数据)会逐渐填满响应FIFO。当响应FIFO溢出时,SDM冻结。

    如果SDM冻结,您必须重新配置器件。英特尔 Quartus Prime软件从版本19.1开始支持设备重配置。对于早期版本的英特尔 Quartus Prime软件,请重新启动器件以恢复。

限制

  1. 在向Mailbox Client IP发出新的请求之前,您只能发出一个请求并读回响应。
  2. 不要在设计中例化超过六个mailbox client。对于需要六个以上mailbox client的设计,请使用Mailbox Client IP取代以下独立IP核:
    • Voltage Sensor Intel® FPGA IP
    • Chip ID Intel® FPGA IP
    • Serial Flash Mailbox Client Intel® FPGA IP
    • Temperature Sensor Intel® FPGA IP
注意:

英特尔 Quartus Prime软件的19.2版本开始, 对通过 Avalon® memory-mapped interface访问SDM mailbox的以下mailbox client IP有限制:

  • 温度传感器
  • 电压传感器
  • 芯片ID
  • 串行Flash Mailbox Client
  • Mailbox Client IP
  • 高级SEU检测IP
  • 局部重配置IP(Partial Reconfiguration)

如果您在通过英特尔 Quartus Prime Pro Edition软件19.2或更新版本编译的设计中使用Mailbox IP,从版本19.2或更新版本开始必须只能使用SDM固件来配置FPGA。