我們利用Tools -> Platform designer,直接實現我們I2C RAM的功能,不需要再自己去debug I2C 與RAM的IP然後組合再一起,Platform designer這邊直接幫我們處理掉。

在左上角的IP Catalog搜尋I2C,建立我們的I2C模組,這邊我們定義Address為0x50,1Byte address。

接著建立一個RAM,這邊我們設定data width = 8,, memory size = 256

做好後可以看到右邊的視窗已經有了我們的I2C與RAM,不過都還沒有建立連結,這時候我們點擊灰色的圓圈,就可以建立兩個模組的連結。

最後一步非常重要將沒有連結的唯一一根PIN在左邊選單勾選Export as,因為我們有幾根PIN需要做三態閘的處理,這邊如果沒有勾選,該元件只會提供clk與reset。


完成後Generate HDL設定一下,接著Finish

接著就可以看到該原件xxxx.qsys,如果沒出來也會在我們的project中,自己手動加入就行了。

I2C IP的文件中有告訴我們,必須設定Data的三態閘,主要是要做Ack用,因為當我們的Master傳送給slave後,Ack訊號會由slave發出,這時候三態閘的功能就會發揮作用。
這邊後來實驗I2C_SCL不需要三態處理,或許是因為我這邊用不到,所以發現沒有功能就先拿掉。


基本上這樣就設定完成了,最後可以從modelsim中看到第9 bit的東做,不是紅色那就沒問題了。

下面會提供相關的檔案連結:
打包後的qar file:
https://drive.google.com/file/d/1hhc2Dl3Kor_Yj8RCI2XUm8zuyZesdh4H/view?usp=sharing
I2C IP 說明文件:
https://drive.google.com/file/d/1EQpvU5ti_nVcTE97koGGyaFczdSBFYO9/view?usp=sharing















