0

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

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

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

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

非常感谢。

此致

4

2 回答 2

0

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

对于(几乎)我设计中的所有信号,有一个称为启用的额外信号,例如:data & data_en

因此 data_en = '1' 表示数据的新值。

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

于 2013-03-27T18:27:04.323 回答
0

如果您阅读 UM10204 I2C 总线规范和用户手册(PDF, 1.4 MB),您可能会发现 I 2 C 比您预期的要复杂,但定义明确。

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

您的“从其他块生成的用于通知的脉冲”听起来是兼容的。一种替代方法可能是在一个或多个设计块上同时具有两条 I 2 C 总线或同时具有主设备和从设备。Lattice Semiconductor 有一个参考主设计(参见I2C(集成电路间)总线主控制器,ZIP 文件下载 494KB,VHDL 和 Verilog,仅许可用于 Lattice 实现)可用于教授您自己的主设计实现,也对流量生成器进行验证很有用。

于 2013-03-25T20:02:43.387 回答