• 方案介紹
  • 附件下載
  • 相關(guān)推薦
申請入駐 產(chǎn)業(yè)圖譜

EEPROM測試試驗設(shè)計Verilog代碼VIVADO ARTIX-7開發(fā)板

加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點資訊討論

2-24110Q95312B8.docx

共1個文件

名稱:EEPROM測試試驗設(shè)計Verilog代碼VIVADO? ARTIX-7開發(fā)板

軟件:VIVADO

語言:Verilog

代碼功能:

EEPROM測試試驗。

EEPROM掉電緩存數(shù)據(jù),并觀察數(shù)據(jù)讀寫。

FPGA代碼Verilog/VHDL代碼資源下載:www.hdlcode.com

本代碼已在ARTIX-7開發(fā)板驗證,ARTIX-7開發(fā)板如下,其他開發(fā)板可以修改管腳適配:ARTIX-7開發(fā)板.png

 

設(shè)計文檔:

1 實驗簡介

本實驗通過使用開源軟件opencores上的I2C master控制器去控制I2C接口的EEPROM讀寫,練習(xí)如何有效的使用開源代碼提升開發(fā)效率。

2 實驗原理

硬件電路

在開發(fā)板上,F(xiàn)PGA芯片通過I2C總線連接EEPROM24LC04,I2C的兩根總線各上拉一個4.7K的電阻到3.3V,所以當(dāng)總線上沒有輸出時會被拉高,24LC04的寫保護沒有使能,不然FPGA會無法寫入數(shù)據(jù)。因為在電路上A0~A2都為低,所以24LC04的設(shè)備地址為0xA0。

開發(fā)板部分電路

I2C的總線協(xié)議和時序

I2C標準速率為100kbit/s,快速模式400kbit/s,支持多機通訊,支持多主控模塊,但同一時刻只允許有一個主控。由數(shù)據(jù)線SDA和時鐘SCL構(gòu)成串行總線;每個電路和模塊都有唯一的地址。

在這里以AT24C04為例說明I2C讀寫的基本操作和時序,I2C設(shè)備的操作可分為寫單個存儲字節(jié),寫多個存儲字節(jié),讀單個存儲字節(jié)和讀多個存儲字節(jié)。存儲方式如下圖所示:

下面對I2C總線通信過程中出現(xiàn)的幾種信號狀態(tài)和時序進行分析。

①?總線空閑裝填

I2C總線的SDA和SCL兩條信號線同時處于高電平時,規(guī)定為總線的空閑狀態(tài)。此時各個器件的輸出級場效應(yīng)管均處在截止狀態(tài),即釋放總線,由兩條信號線各自的上拉電阻把電平拉高。

②啟動信號(Start)

在時鐘線SCL保持高電平期間,數(shù)據(jù)線SDA上的電平被拉低(即負跳變),定義為I2C總線的啟動信號,它標志著一次數(shù)據(jù)傳輸的開始。啟動信號是由主控器主動建立的,在建立該信號之前I2C總線必須處于空閑狀態(tài),如下圖所示。

③停止信號(Stop)

在時鐘線SCL保持高電平期間,數(shù)據(jù)線SDA被釋放,使得SDA返回高電平(即正跳變),稱為I2C總線的停止信號,它標志著一次數(shù)據(jù)傳輸?shù)慕K止。停止信號也是由主控器主動建立的,建立該信號之后,I2C總線將返回空閑狀態(tài)。

④數(shù)據(jù)位傳送

在I2C總線上傳送的每一位數(shù)據(jù)都有一個時鐘脈沖相對應(yīng)(或同步控制),即在SCL串行時鐘的配合下,在SDA上逐位地串行傳送每一位數(shù)據(jù)。進行數(shù)據(jù)傳送時,在SCL呈現(xiàn)高電平期間,SDA上的電平必須保持穩(wěn)定,低電平為數(shù)據(jù)0,高電平為數(shù)據(jù)1。只有在SCL為低電平期間,才允許SDA上的電平改變狀態(tài)。

⑤應(yīng)答信號(ACK和NACK)

I2C總線上的所有數(shù)據(jù)都是以8位字節(jié)傳送的,發(fā)送器每發(fā)送一個字節(jié),就在時鐘脈沖9期間釋放數(shù)據(jù)線,由接收器反饋一個應(yīng)答信號。應(yīng)答信號為低電平時,規(guī)定為有效應(yīng)答位(ACK簡稱應(yīng)答位),表示接收器已經(jīng)成功地收了該字節(jié);

應(yīng)答信號為高電平時,規(guī)定為非應(yīng)答位(NACK),一般表示接收器接收該字節(jié)沒有成功。對于反饋有效應(yīng)答位ACK的要求是,接收器在第9個時鐘脈沖之前的低電平期間將SDA線拉低,并且確保在該時鐘的高電平期間為穩(wěn)定的低電平。

如果接收器是主控器,則在它收最后一個字節(jié)后,發(fā)送一個NACK信號,以通知被控發(fā)送器結(jié)束數(shù)據(jù)發(fā)送,并釋放SDA線,以便主控接收器發(fā)送一個停止信號。

3 程序設(shè)計

我們根據(jù)EEPROM手冊,需要按照I2C讀寫的要求,完成設(shè)備地址、寄存器地址、數(shù)據(jù)等讀寫。

i2c_master_top模塊是對i2c_master_byte_ctrl模塊的再次封裝,完成一個寄存器的讀寫,由于不同的設(shè)備寄存器可能是8bit,也可能是16bit,這里i2c_addr_2byte信號來控制寄存器地址是8位還是16位。

i2c_master_top模塊狀態(tài)機,如果是寫寄存器操作,先寫一個字節(jié)設(shè)備地址(寫操作),再寫1個字節(jié)或2個字節(jié)的寄存器地址,再寫一個字節(jié)的數(shù)據(jù);如果是讀操作,先寫一個字節(jié)的設(shè)備地址(寫操作),再寫1個字節(jié)或2字節(jié)的寄存器地址,完成地址的寫入,再次寫設(shè)備地址(讀操作),然后讀取一個字節(jié)的數(shù)據(jù)。不管怎么說,程序設(shè)計都是要滿足芯片時序要求的,所以在閱讀程序之前最好先把芯片的數(shù)據(jù)手冊仔細閱讀一遍。

 

i2c_master_top狀態(tài)機

i2c_eeprom_test模塊完成EEPROM的讀寫,EEPROM設(shè)備地址是A0,程序中將地址00的數(shù)據(jù)讀出,然后通過LED顯示,在KEY2按下時,數(shù)字加一并再次寫入EEPROM并顯示出來。在I2C控制器中,代碼的大部分功能在備注中也有很多批注。

4 實驗現(xiàn)象

下載實驗程序后,可以看到LED顯示一個二進制數(shù)字,這個數(shù)字是存儲在EEPROM中00地址的數(shù)據(jù),數(shù)據(jù)是隨機的,這個時候按鍵SW1按下,數(shù)字加一,并寫入了EEPROM,再次下載程序,可以看到led燈直接顯示掉電之前的數(shù)值。

部分代碼展示:

//?Copyright?1986-2017?Xilinx,?Inc.?All?Rights?Reserved.
//?--------------------------------------------------------------------------------
//?Tool?Version:?Vivado?v.2017.4?(win64)?Build?2086221?Fri?Dec?15?20:55:39?MST?2017
//?Date????????:?Thu?Apr?18?10:37:27?2019
//?Host????????:?LAPTOP-NMQVIF8I?running?64-bit?major?release??(build?9200)
//?Command?????:?write_verilog?-force?-mode?synth_stub
//???????????????D:/xilinx_work/at7_prj/at7_prj_08/at7_prj/eeprom_test.srcs/sources_1/ip/ila_0/ila_0_stub.v
//?Design??????:?ila_0
//?Purpose?????:?Stub?declaration?of?top-level?module?interface
//?Device??????:?xc7a50tcsg324-1
//
  • 2-24110Q95312B8.docx
    下載

相關(guān)推薦