【问题标题】:VHDL synchronization between different blocks不同模块之间的 VHDL 同步
【发布时间】:2013-03-25 16:02:00
【问题描述】:

我已经非常努力地在互联网上搜索解决方案。但我失败了,所以我把它放在这里。

我正在尝试在 FPGA 中设计一个 I2C 模块。基本上它从其他块接收数据、模式信息。收到后,I2C 会从其环境设备中导出或读取数据。

我的问题是,当 I2C 与 FPGA 内部的其他模块通信时,I2C 如何与其他模块同步?我的意思是 I2C 怎么知道从其他块收到的 DATA 和 MODE 是否来自以前的?还是最新的?

我目前的想法是使用从其他块生成的脉冲来通知 I2C “新数据”即将到来。我能知道是否还有其他方法吗?这些方法有什么区别?

非常感谢。

最好的问候

【问题讨论】:

  • 我可能会设计一个状态机来控制 I2C 内核和其他模块之间的交互。您可以在互联网上轻松找到这些信息。

标签: synchronization vhdl


【解决方案1】:

如果您阅读 UM10204 I2C-Bus Specification and User Manual(PDF,1.4 MB),您可能会发现 I2C 比您想象的要复杂,但定义明确。

VHDL 参考设计可能会派上用场。试试 Frank Buss 的 I2C Slave with PCA9555 example implementation(ZIP,829KB)。 PCA9555(数据表,PDF 529KB)显示了从 I2C 接口对两个 8 位端口设备的读取和写入脉冲。中断用于发送输入端口事件以使主机读取设备。我已经以这种方式将 PCA9555 系列设备用于 SONET 警报。

您的“从其他块生成的用于通知的脉冲”听起来兼容。另一种选择可能是在一个或多个设计块上同时具有两条 I2C 总线或另外的主设备和从设备。 Lattice Semiconductor 有一个参考主设计(参见I2C (Inter-Integrated Circuit) Bus Master Controller,ZIP 文件下载 494KB,VHDL 和 Verilog,仅许可用于 Lattice 实现)可用于教授您自己的主设计实现,也可用于流量生成器进行验证。

【讨论】:

    【解决方案2】:

    我的意思是 I2C 怎么知道从其他块收到的 DATA 和 MODE 是否来自以前的?还是最新的?

    对于我设计中的(几乎)所有信号,有一个称为启用的额外信号,例如: 数据和数据_zh

    所以 data_en = '1' 表示数据的新值。

    这使设计生活变得轻松。您可以在状态机或计算管道中等待下一次启用并在正确的时钟周期开始处理。如果您的结果准备好了,只需将关联的 result_en 设置为 '1',下一个块就可以开始工作了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-07
      • 2012-07-28
      • 1970-01-01
      • 2021-12-04
      相关资源
      最近更新 更多