I2C_WRITE_WDATA.v模塊實(shí)現(xiàn)I2C寫時(shí)序,I2C_Controller (I2C控制器)例化了I2C_WRITE_WDATA.v模塊,同時(shí)增加了I2C數(shù)據(jù)線SDA的三態(tài)緩沖電路。I2C_HDMI_Config.v 是頂層模塊,該模塊例化了I2C_Controller模塊,對(duì)系統(tǒng)時(shí)鐘進(jìn)行了分頻,并控制寄存器的配置。

1 I2C寫操作的Verilog實(shí)現(xiàn)
I2C_WRITE_WDATA.v是一個(gè)I2C寫數(shù)據(jù)模塊,用于通過(guò)I2C總線向從設(shè)備ADV7513寫入數(shù)據(jù)。

該模塊接口定義如下:

該模塊實(shí)現(xiàn)了一個(gè)狀態(tài)機(jī),其功能是向從設(shè)備寫入多個(gè)字節(jié)數(shù)據(jù)。它按照I2C協(xié)議生成起始條件、發(fā)送從設(shè)備地址(包括讀/寫位)、發(fā)送數(shù)據(jù)字節(jié)以及產(chǎn)生停止條件。同時(shí),它還會(huì)檢測(cè)從設(shè)備的應(yīng)答信號(hào),并在傳輸完成后給出結(jié)束信號(hào)。具體過(guò)程如下圖:

為了能更好的理解這個(gè)狀態(tài)機(jī)的控制邏輯,下面畫出I2C傳輸某個(gè)寄存器的過(guò)程波形如下:

2 I2C的三態(tài)門電路Verilog實(shí)現(xiàn)
I2C_Controller.v里面例化了一個(gè)I2C_WRITE_WDATA.v模塊:

該模塊將I2C_WRITE_WDATA.v模塊的SDAI 和SDAO 之間增加了一個(gè)三態(tài)門電路:

在I2C_WRITE_WDATA模塊中,SDAO是輸出信號(hào),用于控制數(shù)據(jù)線的輸出狀態(tài)。當(dāng)需要輸出高電平時(shí),SDAO設(shè)置為1,使得I2C_SDAT為高阻,由上拉電阻拉高;當(dāng)需要輸出低電平時(shí),SDAO設(shè)置為0,將I2C_SDAT拉低。同時(shí),I2C_WRITE_WDATA模塊還接收SDAI(即I2C_SDAT)作為輸入,用于讀取總線上的實(shí)際狀態(tài)(例如檢測(cè)ACK信號(hào))。
3 I2C配置寄存器的Verilog設(shè)計(jì)
這是一個(gè)HDMI的寄存器配置模塊,它使用了一個(gè)查找表(LUT)來(lái)存儲(chǔ)配置數(shù)據(jù),然后通過(guò)I2C控制器(實(shí)現(xiàn)了I2C協(xié)議)對(duì)HDMI transmitter的寄存器逐個(gè)進(jìn)行寫入配置。
時(shí)鐘分頻
一般FPGA開發(fā)板板載系統(tǒng)時(shí)鐘是50MHz, 但是I2C 的時(shí)鐘不能太高,從手冊(cè)上看, 最大不能超過(guò)400KHz,所以設(shè)計(jì)代碼的時(shí)候需要分頻。

Verilog代碼里面將50MHz時(shí)鐘分頻為20KHz時(shí)鐘:

配置寄存器
寄存器配置的值通過(guò)查找表(LUT)來(lái)存儲(chǔ), 代碼里面主要配置了31個(gè)寄存器,其他的沒有配置的就表示使用的是默認(rèn)的配置,有關(guān)于ADV7513的寄存器查找請(qǐng)參考2 ADV7513寄存器配置章節(jié)。

寄存器數(shù)據(jù)的配置采用一個(gè)三狀態(tài)的狀態(tài)機(jī)去控制:

狀態(tài)機(jī)完整代碼如下:

這個(gè)狀態(tài)機(jī)確保了HDMI配置數(shù)據(jù)的可靠傳輸,具備完整的錯(cuò)誤處理和重試機(jī)制,是HDMI初始化過(guò)程中的核心控制邏輯。
I2C設(shè)備地址
ADV7513的PD引腳接2K電阻到地:

參考ADV7513_Hardware_User's_Guide_R0.pdf文檔可知其I2C讀、寫地址是0x72/0x73:

HDMI_TX_INT信號(hào)
HDMI_TX_INT信號(hào)低電平有效,具體描述可以參考ADV7513_Hardware_User's_Guide_R0.pdf的第17頁(yè):

在DE10-Nano的開發(fā)板電路中,
該引腳默認(rèn)被拉高到3.3V,當(dāng)觸發(fā)中斷事件發(fā)生時(shí),由軟件控制該信號(hào)發(fā)生電平變化。

I2C_HDMI_Config.v文件里面設(shè)置若HDMI_TX_INT信號(hào)為低電平,則重新配置寄存器:

-
FPGA
+關(guān)注
關(guān)注
1660文章
22406瀏覽量
636080 -
寄存器
+關(guān)注
關(guān)注
31文章
5608瀏覽量
129942 -
Verilog
+關(guān)注
關(guān)注
30文章
1373瀏覽量
114515 -
I2C控制
+關(guān)注
關(guān)注
0文章
5瀏覽量
1847
原文標(biāo)題:5-DE10-Nano的HDMI方塊移動(dòng)案例——基于FPGA的I2C控制模塊設(shè)計(jì)
文章出處:【微信號(hào):友晶FPGA,微信公眾號(hào):友晶FPGA】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
基于FPGA的I2C SLAVE模式總線的設(shè)計(jì)方案
SM-IIC/2051模塊用戶說(shuō)明(I2C 數(shù)據(jù)控制模塊)
視頻解碼技術(shù)中I2C總線控制核的實(shí)現(xiàn)
I2C總線規(guī)范與I2C器件C51讀寫程序
用Verilog HDL實(shí)現(xiàn)I2C總線功能
I2C總線接口模塊設(shè)計(jì)
基于EasyFPGA030的I2C總線接口模塊
I2C Guid I2C指南
用Verilog HDL實(shí)現(xiàn)I2C總線功能
Arduino教程之I2C模塊使用教程資料免費(fèi)下載
硬件I2C與模擬I2C
DA9062 PMIC I2C控制參考電路
I2C控制器驅(qū)動(dòng)介紹
基于FPGA的I2C控制模塊設(shè)計(jì)
評(píng)論