2013-03-25 114 views
0

我很努力地在互联网上搜索解决方案。但我失败了,为什么我把它放在这里。不同块之间的VHDL同步

我想在FPGA中设计I2C模块。基本上它从其他模块接收DATA,MODE信息。接收后,I2C将从其环境设备中导出或读取数据。

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

我现在的想法是使用来自其它块生成告知I2C说:“新数据”即将到来的脉冲。我能否知道是否有其他方法?这些方法有什么区别?

非常感谢。

问候

+0

我可能会设计一个**状态机**来控制I2C内核和其他块之间的交互。你会很容易地在互联网上找到这些信息。 – 2013-03-25 17:20:00

回答

0

如果你读UM10204 I2C-Bus Specification and User Manual(PDF,1.4 MB)你可能会发现我 C到更复杂的比你想象的,但明确界定。

VHDL中的参考设计可能派上用场。试试Frank Buss的 I2C Slave with PCA9555 example implementation(ZIP,829KB)。 PCA9555(数据手册,PDF 529KB)显示了来自I接口的两个8位端口器件的读写脉冲。中断用于通知输入端口事件,使主设备读取设备。我以这种方式使用PCA9555系列设备用于SONET报警。

您的'其他区块产生的脉冲通知'声音兼容。另一种方法可能是在一个或多个设计模块上安装两个主总线或两个主设备和从设备。莱迪思半导体有一个参考主设计(参见I2C (Inter-Integrated Circuit) Bus Master Controller,ZIP文件下载494KB,VHDL和Verilog,仅供莱迪思实施许可)可用于教授您自己的主设计实现,也可用于验证流量生成器。

0

我的意思是I2C如何知道从其他块接收的数据和模式是否来自以前?还是最新?

为(几乎)在我的设计中的所有信号有一个名为启用例如为: 数据& DATA_EN

所以DATA_EN =“1”表示对数据的新值的额外信号。

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