<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          關(guān) 閉

          新聞中心

          EEPW首頁 > 工控自動化 > 設(shè)計應(yīng)用 > 基于VHDL/CPLD的I2C串行總線控制器設(shè)計及實現(xiàn)

          基于VHDL/CPLD的I2C串行總線控制器設(shè)計及實現(xiàn)

          作者: 時間:2010-05-25 來源:網(wǎng)絡(luò) 收藏

            接口用于的驅(qū)動和接收,當(dāng)為主機時,I2C接口必須按I2C規(guī)范驅(qū)動總線;當(dāng)總線為從機時,I2C必須能正確接收滿足I2C總線規(guī)范的信號。I2C規(guī)范對總線的時序作了詳細(xì)的定義,在不同模式下這些參數(shù)的具體數(shù)值都有明確的規(guī)定?!癝CL/START/STOP 產(chǎn)生”狀態(tài)機的狀態(tài)轉(zhuǎn)換如圖4所示, I2C接口主狀態(tài)機的轉(zhuǎn)移圖如圖5所示。

          基于VHDL/CPLD的I2C串行總線控制器設(shè)計及實現(xiàn)

          基于VHDL/CPLD的I2C串行總線控制器設(shè)計及實現(xiàn)

            4 仿真與硬件

            本文中仿真工具采用Mentor公司的ModelSim Plus 6.0 SE,其顯著的優(yōu)越性能是提供了一個混合語言仿真環(huán)境,已在產(chǎn)業(yè)界廣泛應(yīng)用。為了測試驗證系統(tǒng)的功能,本文采用了Atemel公司提供的采用I2C總線協(xié)議的AT24C02 E2PROM芯片(256B 8bit)的VerilogHDL仿真模型(AT24C02.v)作為從器件對象,用VerilogHDL語言構(gòu)建了testbench(測試向量),對所I2C總線進行仿真。

            圖6和圖7為μC通過I2C總線控制器對E2PROM進行數(shù)據(jù)寫/讀的仿真波形(將數(shù)據(jù)FFH~0HH寫進地址0~255單元,然后將它們再按順序讀的模式讀出)。往E2PROM寫入時需要給出所寫起始單元的地址(圖6中為00H); 從E2PROM順序讀時不用給出起始單元地址而從當(dāng)前地址處開始讀(本文中寫完256B數(shù)據(jù)后,地址指針又回到0處)。相關(guān)狀態(tài)及數(shù)據(jù)已在圖中作了標(biāo)示。由此可見,所的總線控制器完全符合標(biāo)準(zhǔn)I2C協(xié)議的時序要求。

          基于VHDL/CPLD的I2C串行總線控制器設(shè)計及實現(xiàn)

          基于VHDL/CPLD的I2C串行總線控制器設(shè)計及實現(xiàn)

            本文設(shè)計的系統(tǒng)平臺采用Xilinx公司的XC95216-10-PQ160 CPLD芯片,總邏輯門個數(shù)為4 800。經(jīng)綜合、適配、布局布線后占用器件資源的情況為:宏單元120/216(56%)、寄存器111/216(52%)、功能塊331/432(77%)、乘積項分配器544/1080(51%)。可見,系統(tǒng)占用約一半的資源,相當(dāng)精簡。整個系統(tǒng)下載到CPLD后在2MHz時鐘頻率下運行正常。


          上一頁 1 2 3 下一頁

          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();