不同块之间的VHDL同步

时间:2013-03-25 16:02:00

标签: synchronization vhdl

我在互联网上搜索解决方案非常困难。但我失败了,为什么我把它放在这里。

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

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

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

非常感谢。

祝你好运

2 个答案:

答案 0 :(得分:0)

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

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

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

答案 1 :(得分:0)

  

我的意思是I2C如何知道从其他块接收的DATA和MODE是否来自之前的?还是最新的?

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

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

这使设计生活变得简单。您可以在状态机或计算流水线中等待下一次启用,并在正确的时钟周期内开始处理。如果您的结果已准备好,只需将关联的result_en设置为' 1'并且下一个区块可以开始工作。