發表文章

目前顯示的是有「Lattice XO2」標籤的文章

FPGA sample - Lattice I2C IP (EFB) #2

圖片
  Lattice Diamond Setting Click "IPexpress button" and select "EFB" IPX Select "Project Path" (source code files), "File Name" and "Module Output" is Verilog Click "Customize" Select Primary I2C EFB have 2 I2C controller, suggestion use primary I2C "EFB Enable" tab  →  "EFB Function Enable" Field  → Click "Primary User"    Configuration Primary I2C Speed is 400KHz Slave Address is "0001001" "I2C" tab  → "Primary I2C " Field   → "I2C Bus Preformance" is 400KHz   → "Slave Address" is 7'b0001001 Click "Generate" to generate hardware I2C code Founad hardware I2C IPX in your project files   範例程式碼  宣告 EFB-IP /*********************************************************************** * * * EFB Module Instanitiation * * ...

FPGA sample - Lattice I2C IP (EFB) #1

圖片
Lattice I2C IP 話說原本使用 Verlog 寫了 I2C Slave 模組功能正常沒有太多的問題,有天同事問我如何做 I2C-stress 測試,協助設計了幾個指令,長時間 I2C  的 讀取測試,測試結果使用 Verlog I2C Slave 模組居然有幾次沒有 acknowledge,於是花了時間研讀 Lattice I2C IP (EFB),把原本的模組更換成 Lattice I2C IP,通過了 I2C-stress 的測試。當然,原本 Verlog I2C Slave 模組程式碼,也找到問題所在,修正並通過 I2C-stress 驗證。 EFB Block Diagram Lattice 提供了一個 EFB- IP  (Embedded Function Block)提供了 Serial Peripheral Interface (SPI),兩組 I2C (可以設定為 Master/Slave) 和 Timer/Counter。因此,在使用 EFB-IP 就和編寫 MCU 模組程式很像,要先做 EFB-IP 初始化(功能設定),再控制 EFB-IP 完成 I2C 功能。 Block Diagram             程式開發者利用 Wishbone bus 來初始化和控制 EFB-IP,Wishbone bus 包含 Wishbone address,Wishbone data input/output 和控制訊號,再使用 I2C_SDA/I2C_SCL 來連接外面的 I2C 裝置。 Wishbone bus 透過讀寫 EFB-IP 的暫存器來完成初始化和讀寫外部的 I2C  裝置,存取 EFI-IP 的訊號流程順序。 EFB-IP Register wb_adr Description MICO_EFB_I2C_CR 0x40 0x4A Control Register b[7] : I2C controller enable b[6] : I2C GC mode enable (I2C 廣播模式) b[5] : I2C controller wake-up enable MICO_EFB_I2C_CMDR 0x41 0x4B Command R...