2013-03-25 44 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',下一個塊就可以開始工作。