郭 震,馮夢丹
(西安工程大學電子信息學院,西安710048)
基于FPGA的AT24C08驅動設計
郭 震,馮夢丹
(西安工程大學電子信息學院,西安710048)
VHDL語言作為一種數字電路設計語言,在集成電路前端設計和用FPGA器件實現數字電子系統設計的過程設計中發揮著十分重要的作用。通過實現對AT24C08的讀寫,掌握VHDL這一硬件描述語言以及FPGA程序的設計思路,熟練掌握狀態機的應用。首先簡單介紹了IIC硬件電路設計,IIC通訊接口的標準協議以及ATMEL公司串行EEPROM AT24C08的工作原理,重點闡述了IIC總線驅動AT24C08的程序設計思路。整個程序設計采用VHDL語言,在QUARTUS II開發環境下進行各個模塊的程序編寫,并且通過原理圖輸入方式完成頂層模塊的原理圖設計,然后通過Modelsim仿真軟件進行整個程序仿真,最終通過示波器觀測實驗波形,來驗證程序的正確性。實驗結果與仿真結果一致,實現了AT24C08數據的寫入和讀取。
FPGA集成芯片;驅動;串行;硬件描述語言;狀態機;IIC總線;AT24C08存儲器
在嵌入式系統開發過程中,IIC占據非常重要的地位。IIC通訊接口能到搭載較多的從設備,從而實現與多個從設備進行通訊,在板級通訊中是一種比較常用的通訊接口。對于其他MCU,例如:DSP, ARM,或者單片機內部都集成了IIC接口,然而對于FPGA來說,內部是許多邏輯單元,并沒有集成IIC接口。因此,針對FPGA這種應用較為靈活的MCU來說,如何進行IIC通訊便成為一個現實問題。針對這一問題,進行了詳細說明,并通過利用IIC通訊接口,實現對AT24C08串口EEPROM的讀寫,驗證了基于VHDL語言的IIC通訊接口設計的正確性。
在微處理器選擇上,采用ALTERA公司CyloneIV的EP4CE6E22C8N處理器,內部邏輯單元6272個,內嵌存儲容量270Kbits,最大用戶I/O口179個。EEPROM采用ATMEL公司的AT24C08,內存為8Kbits,支持標準IIC通訊協議。通過IIC接口實現FPGA對AT24C08的讀寫。以此為例,詳細說明IIC的設計原理,并通過示波器觀察實驗波形,從而驗證程序的正確性。
以ALTERA公司CyloneIV的EP4CE-6E22C8N處理器為例,利用VHDL硬件描述語言,在Quartus II開發環境下,實現程序設計并通過ModelSim進行程序仿真。EP4CE6E22C8N是一款低功耗處理器,內部邏輯單元 6272個,內嵌存儲容量270Kbits,18*18的硬件乘法器15個,最大用戶I/O口179個,EP4CE15E22C8N支持三種電壓,內核電壓1.2V,鎖相環模擬電源2.5V,鎖相環數字電源1.2V,I/O口供電電源3.3V[1]。
AT24C08是一款內存為8Kbits的串行EEPROM,內部包含1024個8位字節,供電電源2.7V到5.5V,支持標準IIC通訊協議。AT24C08的引腳包括:A0-A2地址輸入引腳,SDA數據輸入引腳,SCL時鐘輸入引腳,WP寫保護引腳,NC懸空引腳[2]。
IIC總線是一種由PHILIPS公司開發的兩線式串行總線,用于連接微控制器及其外圍設備。它是由數據線SDA和時鐘SCL構成的串行總線,可發送和接收數據。在處理器與被控IC之間,IC與IC之間進行雙向傳送,高速 IIC總線一般可達400Kbps以上。
IIC總線在傳輸過程中有三種信號,分別是:開始信號,結束信號和應答信號。
開始信號:SCL為高電平時,SDA由高電平向低電平跳變,開始傳送數據。
結束信號:SCL為高定平時,SDA由低電平向高電平跳變,結束傳送數據。
應答信號:接收數據的IC在接收到8bit數據后,向發送數據的IC發出特定的低電平脈沖,表示已收到數據。處理器向受控單元發出一個信號后,等待受控單元發出一個應答信號,處理器接收到應答信號后,根據實際情況作出是否繼續傳遞信號的判斷。若未收到應答信號,判斷為受控單元出現故障[3]。
IIC總線時序圖如圖1所示。

圖1 IIC總線時序圖
AT24C08數據手冊,由于SCL,SDA引腳均是OC輸出,所以要分別添加上拉電阻,上拉電壓到3.3V,芯片供電電壓3.3V,A2,A1,A0是AT24C08的頁地址引腳,這里A2,A1,A0接地。寫保護引腳高電平有效,這里將寫保護引腳接地,硬件連接如圖2所示。
6.1 寫操作
在字節寫模式下,主器件發送起始命令和從器件設備地址給從器件,從器件產生應答信號后,主器件發送AT24C08的字地址,主器件收到從器件的另一個應答信號后,再發送數據到被尋址的存儲單元。AT24C08再次應答,并在主器件產生停止信號后開始內部數據的擦寫,在內部擦寫過程中,AT24C08不再應答主器件的任何請求。

圖2 硬件連接圖
AT24C08字節寫時序如圖3所示。

圖3 字節寫時序圖
6.2 讀操作
隨機讀取模式下,主器件發送起始命令和從器件設備地址給從器件,從器件產生應答信號后,主器件發送AT24C16的字地址,主器件收到從器件的另一個應答信號后,這個字節為無效字節,然后主器件再發送起始命令和從器件設備地址給從器件,從器件產生應答信號后,被尋址的存儲單元中的數據就會從SDA線發送出來,此處不需要應答,然后發送停止命令即可完成隨機讀取操作[4]。AT24C08隨機讀取時序如圖4所示。

圖4 隨機讀取時序圖
7.1 頂層模塊介紹
整個驅動程序包括兩個模塊:讀模塊和寫模塊[5-6]。
讀模塊輸入包括:
MCLK:系統主頻時鐘50MHz。
En_r:模塊讀使能控制信號,高電平使能。
Word_read_addr:8位讀地址線。
Over_read_zd:讀完成中斷信號。
Data_out:從AT24C08讀出的8位并行數據。
SCL:IIC時鐘線。
SDA:IIC數據線。
寫模塊輸入包括:
MCLK:系統主頻時鐘50MHz。
En_W:模塊寫使能控制信號,低電平使能。Word_write_addr:8位寫地址線。
Data_write:8位待寫入的數據。
over_write_zd:寫完成中斷。
SCL:IIC時鐘線。
SDA:IIC數據線。
頂層模塊圖如圖5所示。

圖5 頂層模塊圖
7.2 寫操作狀態機設計
字節寫操作包括9個狀態:初始狀態Free,開始狀態start,發送器件地址狀態device_address,等待第一次應答位狀態wait_1,發送字地址狀態word_address,等待第二次應答位狀態wait_2,寫數據狀態write_data,等待第三次應答位狀態wait_3,停止狀態stop[7]。
當執行寫操作時,首先進入Free狀態,在此狀態下如果寫使能信號en_w=‘0’,進入開始狀態start,如果條件不成立,不發生狀態變化。進入start狀態,如果start_over=‘1’則進入發送器件地址狀態device_address,如果條件不滿足,則不發生狀態變化。當處于device_address狀態時,如果device_address_over=‘1’則進入等待應答位狀態wait_1,若不成立,則不進入wait_1狀態,當處于wait_1狀態時,若wait_1_over=‘1’則跳轉至發送字地址狀態word_address,同理其他狀態也一樣,最終回到初始狀態Free,也就是空閑狀態,等待下一次寫入[8]。字節寫狀態變化如圖6所示。

圖6 字節寫狀態變化圖
7.3 讀操作狀態機設計
隨機讀操作包括12個狀態:初始狀態Free,第一次開始狀態start1,第一次發送器件地址狀態device_address1,第一次等待應答位狀態wait_1,發送字地址狀態word_address,第二次等待應答位狀態wait_2,第二次開始狀態start2,第2此發送器件地址狀態device_address2,第三次等待應答位狀態wait_3,讀數據狀態data_read,no_ack狀態,停止狀態。
當執行隨機讀取操作時,首先進入初始狀態Free,若en_r=‘1’并且count3=1000,則進入start1狀態,若條件不成立則不發生狀態變化。當處于start1狀態時,如果start1_over=‘1’則進入Device_address1狀態,若不成立則不發生狀態變化,同理其他狀態也一樣,最終狀態回到初始狀態Free,等待下一次讀取。這里需要指出的是,當執行隨機讀取操作時,首先要先執行一個無效的字節寫操作,即并不寫入數據,只發送器件地址和字地址。隨機讀取狀態變化如圖7所示。

圖7 隨機讀取狀態變化圖
8.1 寫程序試驗
測試條件:
Device_address(7 downto0)=“10100000”
***********器件地址0xA0********
Word_write_addr(7 downto0)=“00001100”
***********字地址0x0C**********
Data_write(7 downto0)=“00101010”
***********寫入數據0x2C*********
試驗波形如圖8所示。

圖8 寫試驗波形
圖8中波形2表示時鐘線SCL,頻率為50KHz,波形1為數據線SDA,這里的器件地址,字地址,以及寫入的數據都是8位的,在發送中都是高位先發。
首先在開始狀態,發送器件地址“10100000”,收到應答后,接著發送字地址“00001100”,收到應答后發送要寫入的8位數據,這里是“00101010”,收到應答位后表示寫入成功,進入停止狀態,等待下次寫入。
8.2 讀程序試驗
測試條件:
Device_addr1(7 downto0)=“10100000”
*********第一次的器件地址0xC0********* Device_addr2(7 downto0)=“10100001”
********第二次的器件地址0xC1********* Word_read_addr(7 downto0)=“00001100”
******讀字地址0x0C*****************試驗波形如圖9所示:

圖9 讀試驗波形圖
圖9中波形2表示時鐘線SCL,頻率為50KHZ,波形1為數據線SDA,這里的器件地址,字地址都是8位的,發送中都是高位先發。
首先進入開始狀態,接著發送第一次器件地址“10100000”,收到應答位后,發送讀字地址“00001100”,收到應答位后,進入第二次開始狀態,接著發送第二次器件地址“10100001”,收到應答位后,進入讀數據狀態,讀出數據為“00101010”,然后一個高電平的無效應答,最后進入停止狀態,等待下次讀取。
利用VHDL語言進行程序設計,通過IIC通訊接口實現對AT24C08的讀寫,并且通過實驗驗證,結果完全正確。
[1]孫凱,程世恒.著Nios II系統開發設計與應用實例[M].北京:北京航空航天大學出版社,2007. Sun Kai,Cheng Heng.Nios II system design and application [M].Beijing:BeihangUniversitypress,2007.
[2]陳博.AT24C系列貼片式EEPROM芯片 [J].電子世界,1998(10):10-12. Chen Bo.AT24C series chip EEPROM chip [J].electronic world,1998(10):10-12.
[3]姚小兵,萬黎,林輝.串行E~2PROM的應用設計與編程[J].微型機與應用,2002(1):15-17. YaoXiaobing,Wan Li,Lin Hui.Application design and programming of serial[J].E~2PROMmicrocomputer and application,2002(1):15-17.
[4]李漁.基于NIOS的I2C總線接口芯片AT24C16讀寫的實現[D].重慶:重慶大學通信工程學院,2006. Li Yu.NIOSbased I2Cbus interface chip AT24C16 read and write toachieve[D].Chongqing:ChongqingUniversitySchool ofcommunication engineering,2006.
[5]stefan Sjoholm,Lennart Lindh,著.用VHDL設計電子線路[M].邊計年,薛宏熙,譯.北京:清華大學出版社,2000. stefan Sjoholm,Lennart Lindh author.Design of electronic circuit VHDL[M].bianjinian xuehongxi translate.Beijing: Tsinghua Universitypress,press,2000.
[6]邢建平,曾繁泰,著.VHDL程序設計教程[M].北京:清華大學出版社,2005. Xing Jianping,Zeng Fantai.Has been in the process of VHDL programmingtutorial[M].Beijing:Tsinghua Universitypress, 2005.
[7]王敏志.深入了解Alter FPGA應用設計[M].北京:北京航天航空大學出版社,2014. Wang Minzhi.with a deep understanding of the application of FPGA [M].Beijing:Beijing Aerospace University Press, 2014.
[8]劉福奇,編著.飛思科技研發中心監制.FPGA嵌入式項目開發實戰[M].北京:電子工業出版社,2009. Edited by Liu Fuqi.Freescale technology R&D center producer FPGA embedded project actual development[M].Beijing.Beijing:PublishingHouse ofelectronics industry,2009.
Design of AT24C08 Driver Based on FPGA
Guo Zhen,Feng Mengdan
(School of Electronic Information,Xi'an Polytechnic University,Xi'an 710048,China)
VHDL language,as a kind of digital circuit design language,in the front-end design of integrated circuit,using FPGA devices to achieve digital electronic system design process design,is playing a very important role.Through the realization of the AT24C08 read and write,the VHDL hardware description language,FPGA program design ideas and the application of state machine are mastered.First of all,the paper briefly introduces the IIC hardware circuit design,the standard protocol of IIC communication interface and the working principle of serial AT24C08 EEPROM of ATMEL company,focusing on the program design of IIC bus driver AT24C08.The whole process of the design using VHDL language,in the Quartus II development environment for each module of the program, completes the schematic design of the top-level module the schematic and the whole process simulation by Modelsim simulation software.Finally,the oscilloscope is used to observe the experiment for verifying the correctness of the program.The experimental results and simulation results are consistent,and AT24C08 data write and read is achieved.
FPGA integrated chip;Driver;Serial;Hardware description language;State machine; IIC bus;AT24C08 memory
10.3969/j.issn.1002-2279.2017.02.019
TP29
A
1002-2279-(2017)02-0086-05
郭震(1989-),男,陜西省西安市人,碩士研究生,主研方向:多軸聯動運動控制系統的設計與實現。
2016-08-01