王建雄,肖 明,余 龍
(1.江蘇科技大學(xué)計(jì)算機(jī)學(xué)院,鎮(zhèn)江212003;2.東莞市泰斗微電子有限公司,東莞523808)
基于AMBA總線的IIC協(xié)議IP核設(shè)計(jì)與驗(yàn)證
王建雄1,肖 明2,余 龍1
(1.江蘇科技大學(xué)計(jì)算機(jī)學(xué)院,鎮(zhèn)江212003;2.東莞市泰斗微電子有限公司,東莞523808)
介紹了一種基于AMBA總線verilog HDL實(shí)現(xiàn)的IIC主機(jī)模式的IP核設(shè)計(jì)。該模塊能夠在標(biāo)準(zhǔn)和快速模式下運(yùn)行,能夠靈活配置為十位地址尋址或七位地址尋址模式。詳細(xì)說明了該IP核的架構(gòu),各部分設(shè)計(jì)及狀態(tài)轉(zhuǎn)換過程。最后該模塊通過了系統(tǒng)驗(yàn)證,并在xilinx FPGA上轉(zhuǎn)化為硬件電路實(shí)現(xiàn)了所有功能。
AMBA總線;Verilog HDL語言;IIC協(xié)議;IP核
現(xiàn)如今,電子類產(chǎn)品向著小型化、智能化、低功耗、低成本、高可靠性的方向發(fā)展。IIC僅有兩根線就實(shí)現(xiàn)了器件之間的雙工通信,它有著接口簡單、可擴(kuò)展性好、功耗低等特點(diǎn),已經(jīng)被廣泛應(yīng)用于各類數(shù)字系統(tǒng)中。而片上系統(tǒng)(System on Chip,SoC)已逐漸成為超大規(guī)模集成電路的發(fā)展趨勢,由于系統(tǒng)與外部電路的通信是通過外圍接口實(shí)現(xiàn)的,因此設(shè)計(jì)一個(gè)穩(wěn)定可靠的外圍通信接口的IP就變得非常重要。正是在此形勢下設(shè)計(jì)了基于AMBA總線的IIC協(xié)議IP核,并通過系統(tǒng)仿真和FPGA上以硬件方式實(shí)現(xiàn)和驗(yàn)證了設(shè)計(jì)的正確性和可靠性。
IIC(Inter IC)總線是Philips公司于1992年推出的用于芯片間連接的雙向串口總線協(xié)議。它已經(jīng)被廣泛應(yīng)用于視/音頻領(lǐng)域、IC卡行業(yè)、家用電器、通訊設(shè)備及各類電子產(chǎn)品中,在智能儀器、儀表和工業(yè)測控領(lǐng)域也得到了廣泛應(yīng)用。
其電氣連接如圖1所示。
該協(xié)議使用一根數(shù)據(jù)線SDA和一根時(shí)鐘線SCL進(jìn)行通信。時(shí)鐘由主機(jī)產(chǎn)生從機(jī)接收,主機(jī)在SCL低電平時(shí)發(fā)送數(shù)據(jù)到SDA上,從機(jī)在SCL為高電平時(shí)采樣SDA。在時(shí)鐘信號為高電平期間,數(shù)據(jù)線上的數(shù)據(jù)必須保持穩(wěn)定,只有在時(shí)鐘線上的信號為低電平期間,數(shù)據(jù)線上信號才允許變化。
SDA上的數(shù)據(jù)格式分為起始條件、結(jié)束條件、重復(fù)起始條件、響應(yīng)位和數(shù)據(jù)位??偩€上每一個(gè)從器件都有一個(gè)唯一的標(biāo)識地址。主機(jī)以一個(gè)起始條件加上從機(jī)地址尋址相應(yīng)從機(jī)。當(dāng)一次尋址失敗時(shí),主機(jī)可以發(fā)送重復(fù)起始條件后繼續(xù)發(fā)送目標(biāo)地址尋址從機(jī)。從機(jī)接收到自己的地址或者接收完一個(gè)字節(jié)的數(shù)據(jù)時(shí)必須將SDA拉低以給主機(jī)一個(gè)應(yīng)答信號。主機(jī)接收完一個(gè)字節(jié)的從機(jī)數(shù)據(jù)時(shí)也必須給出應(yīng)答信號。當(dāng)傳輸完成時(shí),由主機(jī)發(fā)送結(jié)束條件完成本次傳輸。一次完整的傳輸,其SDA和SCL上的電平如圖2所示。
圖1 SCL和SDA的電氣連接方式圖
圖2 一次完整的傳輸過程
在一次傳輸中,主機(jī)可以選擇七位或者十位尋址模式進(jìn)行尋址,也可以選擇重復(fù)起始條件重新開始一次傳輸。當(dāng)從機(jī)或主機(jī)處于忙狀態(tài)時(shí)可以選擇將SDA信號線拉低使IIC主機(jī)或從機(jī)處于等待狀態(tài)。
該IP核實(shí)現(xiàn)了IIC協(xié)議的主機(jī)功能,可以靈活配置為標(biāo)準(zhǔn)和快速模式,支持7位和10位尋址模式,支持主、從機(jī)等待功能和重復(fù)起始條件尋址模式。
3.1 系統(tǒng)結(jié)構(gòu)圖
系統(tǒng)結(jié)構(gòu)如圖3所示。由圖3可以看出,其結(jié)構(gòu)可以分為控制部分和數(shù)據(jù)通道部分及時(shí)鐘部分??刂撇糠址譃榭刂茊挝弧⒅俨脝卧?、中斷寄存器和控制寄存器,由于控制寄存器僅僅起到存儲控制命令的作用,故在此將其劃分為控制部分。數(shù)據(jù)通道部分分為FIFO、地址寄存器、移位寄存器、狀態(tài)寄存器。時(shí)鐘部分分為時(shí)鐘單元和波特率寄存器。
3.2 各部分設(shè)計(jì)
3.2.1 控制部分設(shè)計(jì)
控制部分主要通過判斷控制寄存器、狀態(tài)寄存器的值和仲裁單元的狀態(tài)完成對數(shù)據(jù)通道部分的控制??刂撇糠值暮诵膶?shí)現(xiàn)為狀態(tài)機(jī),通過判斷各個(gè)條件實(shí)現(xiàn)狀態(tài)機(jī)的跳轉(zhuǎn),從而產(chǎn)生相應(yīng)控制信號控制數(shù)據(jù)通道部分中數(shù)據(jù)流的流動??刂撇糠挚刂频刂芳拇嫫髦械刂返难b載,移位寄存器中數(shù)據(jù)的移出,狀態(tài)寄存器的讀取和FIFO的讀寫控制。
圖3 系統(tǒng)結(jié)構(gòu)圖
3.2.2 數(shù)據(jù)通道部分設(shè)計(jì)
數(shù)據(jù)通道部分主要實(shí)現(xiàn)數(shù)據(jù)的暫存和轉(zhuǎn)換。其中FIFO實(shí)現(xiàn)數(shù)據(jù)緩存,它能協(xié)調(diào)高速APB協(xié)議和低速IIC協(xié)議之間的通信。移位寄存器能實(shí)現(xiàn)數(shù)據(jù)的串并轉(zhuǎn)換。地址寄存器能實(shí)現(xiàn)地址的存儲和發(fā)送。狀態(tài)寄存器主要存儲IIC工作時(shí)的各狀態(tài),用于控制部分狀態(tài)機(jī)的跳轉(zhuǎn)和傳送給CPU調(diào)試使用。
3.2.3 時(shí)鐘部分設(shè)計(jì)
時(shí)鐘模塊工作時(shí),首先需要配置波特率寄存器。通過波特率寄存器中的值計(jì)算出SCL分頻出的時(shí)鐘頻率,其計(jì)算公式如下,DIV值由波特率寄存器中的值確定。
時(shí)鐘單元產(chǎn)生SCL時(shí)鐘并且采樣SCL線上信號。當(dāng)SCL時(shí)鐘線被從機(jī)拉低時(shí)主機(jī)需要啟動等待功能。
3.3 IP核的狀態(tài)機(jī)設(shè)計(jì)
該IP核的邏輯狀態(tài)轉(zhuǎn)換如圖4所示,各個(gè)狀態(tài)的詳細(xì)說明如下。
圖4 邏輯狀態(tài)轉(zhuǎn)換圖
Idle狀態(tài):當(dāng)IIC沒有得到運(yùn)行指令或程序被復(fù)位時(shí),程序就處于idle狀態(tài)。在這個(gè)狀態(tài)時(shí)SDA和SCL對外輸出高電平。
start狀態(tài):當(dāng)控制寄存器的START位被置位時(shí),程序由idle狀態(tài)跳轉(zhuǎn)到start狀態(tài)。程序位于該狀態(tài)時(shí)SCL輸出高電平,同時(shí)SDA產(chǎn)生一個(gè)由高到低的跳轉(zhuǎn)。
addr1狀態(tài):在該狀態(tài)時(shí)會將地址寄存器中的七位地址或者十位地址的高位地址發(fā)送給從機(jī),并且采樣SDA信號線判斷主機(jī)是否丟失仲裁。當(dāng)?shù)刂肪l(fā)送完并且沒有丟失仲裁時(shí)程序跳轉(zhuǎn)到ack_addr1狀態(tài)中。
ack_addr1狀態(tài):程序在該狀態(tài)時(shí)會檢查是否有從機(jī)應(yīng)答信號。如果SDA被拉低則表明從機(jī)接收地址正確。若從機(jī)地址為7位,則程序根據(jù)最低的位進(jìn)行相應(yīng)跳轉(zhuǎn);若從機(jī)地址為10位,則程序跳轉(zhuǎn)到addr2狀態(tài)。如果SDA未被拉低,表明從機(jī)接收第一個(gè)字節(jié)有誤,程序跳到restart狀態(tài)。
addr2狀態(tài):當(dāng)從機(jī)地址是10位地址時(shí),程序把10位地址的低八位發(fā)送出去并自動跳轉(zhuǎn)到ack_addr2狀態(tài)。
ack_addr2狀態(tài):程序檢查SDA是否被拉低,若被拉低則根據(jù)跳轉(zhuǎn),否則程序跳回restart狀態(tài)。
restart狀態(tài):當(dāng)控制寄存器的RESTRART位被置位或者發(fā)送FIFO非空而從機(jī)無應(yīng)答或者程序處于ack_addr無應(yīng)答時(shí),程序都會跳轉(zhuǎn)到該狀態(tài)。程序處于此狀態(tài)時(shí)會向從機(jī)發(fā)送一個(gè)重復(fù)起始條件并自動跳轉(zhuǎn)到addr1狀態(tài)。
read狀態(tài):主機(jī)在每個(gè)SCL的上升沿采樣SDA,并將采樣值存在移位寄存器中,當(dāng)完成一個(gè)byte的接收時(shí)將移位寄存器中的值存入FIFO,并且程序跳到ack_read狀態(tài)。
ack_read狀態(tài):當(dāng)完成一個(gè)byte的接收并且主機(jī)還要繼續(xù)接收數(shù)據(jù)時(shí),主機(jī)需要發(fā)送一個(gè)響應(yīng)給從機(jī)并且跳入read狀態(tài),否則程序跳轉(zhuǎn)到stop狀態(tài)。
write狀態(tài):主機(jī)將FIFO中的數(shù)據(jù)以byte為單位發(fā)給從機(jī),發(fā)送完后自動跳轉(zhuǎn)到ack_write狀態(tài)。
ack_write狀態(tài):當(dāng)FIFO非空,并且檢測到從機(jī)的應(yīng)答時(shí)程序跳回write狀態(tài),當(dāng)FIFO為空時(shí)程序跳轉(zhuǎn)到stop狀態(tài)。
stop狀態(tài):SCL為低電平并且SDA從低電平翻轉(zhuǎn)到高電平,完成一個(gè)結(jié)束狀態(tài)的傳輸。
4.1 驗(yàn)證平臺介紹
驗(yàn)證該模塊,需要搭建一個(gè)testbench平臺,該平臺由激勵(lì)模塊、APB主機(jī)模型、DUT、輸出響應(yīng)模型、監(jiān)視器、比較器等組成,各模塊介紹如下。
激勵(lì)模塊:激勵(lì)模塊的主要功能是提供給測試平臺各種case以使IP運(yùn)行于不同的狀態(tài)。在驗(yàn)證該模塊中使用的測試用例如表1所示。
表1 驗(yàn)證測試用例表
APB主機(jī)模型:APB主機(jī)模型主要模擬APB的總線時(shí)序,使激勵(lì)數(shù)據(jù)能按APB的協(xié)議要求傳輸給被測設(shè)計(jì)。
DUT(Design Under Test):即被測的IP設(shè)計(jì)。
輸出響應(yīng)模型:其主要功能是對被測設(shè)計(jì)輸出的數(shù)據(jù)按照協(xié)議做出應(yīng)答,在該設(shè)計(jì)中選擇的輸出響應(yīng)模型有IIC從機(jī)模型和EEPROM。
監(jiān)視器:監(jiān)視器監(jiān)視輸入和輸出協(xié)議中的位傳輸,以及起始、結(jié)束、復(fù)位等條件的正確性。如果檢測到數(shù)據(jù)與期望數(shù)據(jù)不一致,那么測試平臺就給出錯(cuò)誤報(bào)告信息。
比較器:比較器的主要功能是檢測輸入和輸出各數(shù)據(jù),并比較其是否正確。如果發(fā)送數(shù)據(jù)和測試數(shù)據(jù)不正確,那么測試平臺將生成測試錯(cuò)誤報(bào)告。
4.2 測試用例介紹
以上測試用例主要測試了該IP模塊在正常和異常情況下對發(fā)送的命令是否能做出正確響應(yīng)和處理。在使用測試用例對DUT進(jìn)行測試的時(shí)候要根據(jù)設(shè)計(jì)的功能點(diǎn)全面考慮需要測試的功能,并加入一些極端情況下的測試激勵(lì)。
4.3 驗(yàn)證結(jié)果
當(dāng)驗(yàn)證完成后,該設(shè)計(jì)在synopsis公司的VCS上進(jìn)行覆蓋率統(tǒng)計(jì)。其覆蓋率統(tǒng)計(jì)如圖5所示。
圖5 IP的驗(yàn)證統(tǒng)計(jì)覆蓋率
上圖中各覆蓋率沒有達(dá)到100%的原因分析如下:
(1)由于case語句中各條件已完備,導(dǎo)致default分支不能被覆蓋到,所以行覆蓋率沒有達(dá)到100%。
(2)由于設(shè)計(jì)中增加的一些保護(hù)性代碼,在一般驗(yàn)證中難以滿足該情景,故導(dǎo)致條件覆蓋率不能到達(dá)100%。
(3)由于該設(shè)計(jì)中某些位的值按功能不會變化,故翻轉(zhuǎn)覆蓋率不能實(shí)現(xiàn)100%的覆蓋。
(4)FIFO模塊的讀寫使能不能同時(shí)有效。
該設(shè)計(jì)通過測試平臺的驗(yàn)證后并在VCS上進(jìn)行了仿真,其仿真結(jié)果完全滿足預(yù)期設(shè)計(jì),如圖6所示。
圖6 IIC仿真波形圖
然后該設(shè)計(jì)在XILINX公司的ISE軟件上進(jìn)行了編譯、映射和綜合生成最終的bit文件下載到FPGA板上。下載好了的FPGA與單片機(jī)模擬的IIC從機(jī)進(jìn)行通信,F(xiàn)PGA寫單片機(jī)數(shù)據(jù)12345678 9ABCDEF1 5A5A5A5A 00000005,其結(jié)果如圖7所示。單片機(jī)接收FPGA的數(shù)據(jù),用示波器觀察其波形如圖8所示。
基于IP的SOC模塊化設(shè)計(jì)能讓產(chǎn)品以更快的速度推向市場,而且一個(gè)精心設(shè)計(jì)并經(jīng)過多次驗(yàn)證過的IP其可靠性和資源利用率都會很高。該設(shè)計(jì)采用可重用的Verilog HDL代碼編碼風(fēng)格,并最終通過Xilinx FPGA驗(yàn)證。經(jīng)驗(yàn)證其性能完全滿足預(yù)期要求,其實(shí)現(xiàn)不依賴具體的FPGA和AISC工藝。
圖7 IIC從機(jī)接收到數(shù)據(jù)圖
圖8 示波器觀察波形圖
[1]wayne wolf著,現(xiàn)代VLSI設(shè)計(jì):基于IP核的設(shè)計(jì)(第4版)[M].李東生等譯,北京:電子工業(yè)出版社,2011-07.
[2]ciletti,M.D著.Verilog HDL高級數(shù)字設(shè)計(jì)[M].張雅倚等譯,北京:電子工業(yè)出版社,2005-01.
[3]ARM Limited.AMBA Specification Rev2.0[S].1999.05.
[4]Philips semiconductors.THE I2C-BUSSPECIFICATION VERSION 2.1[S].2000.01.
[5]俞偉,徐寧儀,羅飛,等.IIC總線控制器IP核設(shè)計(jì)[J].世界科技研究與發(fā)展,2005(1):18-21.
[6]王前,屋淑泉,劉喜英.基于FPGA的IIC總線接口實(shí)現(xiàn)方法[J].微電子技術(shù),2002(2):22-24.
[7]田耘,徐文波,著.Xilinx FPGA開發(fā)實(shí)用教程[M].北京:清華大學(xué)出版社,2008-11.
Design and Verification of IP Core of IIC Protocol Based on AMBA Bus
WANG Jian-xiong1,XIAO Ming2,YU Long1
(1.School of Computer Science,Jiangsu University of Science and Technology,Zhenjiang 212003,China;2.Techtotop Micro-electronics Company of Dongguan City,Dongguan 523808,China)
This article describes an IP core design of IIC master,base on AMBA bus,which implements by verilog HDL.The module can runs in standard mode and quick mode,and it can be flexibly configured to be ten bit or seven bit addressing mode.This article describes the structure of IP core,and its design and status conversion process.Finally,the module has passed the system-level verification and all functions have been implemented in Xilinx FPGA hardware.
AMBA Bus;Verilog HDL;IIC protocol;IP core
10.3969/j.issn.1002-2279.2014.01.002
TN492
:B
:1002-2279(2014)01-0004-05
王建雄(1988-),男,四川巴中人,碩士研究生,主研方向:數(shù)字集成電路設(shè)計(jì)。
2013-09-30