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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 基于NiosII處理器的通用AD IP核的設(shè)計(jì)與實(shí)現(xiàn)

          基于NiosII處理器的通用AD IP核的設(shè)計(jì)與實(shí)現(xiàn)

          作者: 時(shí)間:2010-04-07 來源:網(wǎng)絡(luò) 收藏
          隨著電子技術(shù)的飛速發(fā)展,嵌入式系統(tǒng)的需求越來越大、應(yīng)用領(lǐng)域也越來越廣泛。數(shù)據(jù)采集是嵌入式系統(tǒng)不可或缺的組成部分,其性能在某種程度上直接決定了整個(gè)系統(tǒng)能否滿足的要求。目前,數(shù)據(jù)采集部分的基本上都是利用單片機(jī)或者ARM片內(nèi)集成好的外設(shè)。這種外設(shè)的性能參數(shù)往往都已經(jīng)在片上固化好了(即具有不可更改性),而且與其他片內(nèi)外設(shè)不可分離地組合在了一起,從而使得整個(gè)系統(tǒng)的具有很大局限性。加之市面上單片機(jī)、ARM的款式型號非常有限,使用者不得不在性能與成本上作出折中的選擇來滿足所系統(tǒng)的要求,由于這種設(shè)計(jì)方案是不可更改的,且應(yīng)用范圍小、可移植性差,因此往往無法滿足客戶更高的要求。
          Nios II是Altera公司開發(fā)的第二代可進(jìn)行SOPC設(shè)計(jì)的RISC型軟核,具有定制指令、硬件加速、可重配置、低成本和無與倫比的靈活性等特點(diǎn)[1]。 核是一種全新的設(shè)計(jì)思路與方案,它可以將市面上任意一款A(yù)D芯片制作成核并集成到系統(tǒng)中使用,具有高性能、參數(shù)可配置、可移植、可裁剪等特點(diǎn),并且具有很高的靈活性、實(shí)用性,從而更能滿足設(shè)計(jì)的要求。
           本文提出了一種AD 核來嵌入式數(shù)據(jù)采集系統(tǒng)的新方案,在Altera公司的FPGA芯片CycloneII EP2C35F484C8 上完成了硬件驗(yàn)證,最終應(yīng)用到某數(shù)據(jù)采集系統(tǒng)的設(shè)計(jì)中。
          1 AD IP核的整體構(gòu)架
          通用AD IP核是針對所有AD芯片設(shè)計(jì)的,它可以將市面上任意一款A(yù)D芯片集成到NiosII系統(tǒng)中使用,其整體構(gòu)架如圖1所示。

          本文引用地址:http://www.ex-cimer.com/article/151966.htm

          整個(gè)通用AD IP核主要由4個(gè)子模塊組成:AD 控制器模塊、FIR 濾波器模塊、FIFO 緩存模塊和帶Avalon-MM Slave接口的寄存器文件模塊。首先AD控制器控制AD芯片對外界的模擬信號的采集,采集到的數(shù)據(jù)送入FIR濾波器進(jìn)行數(shù)字濾波,然后將經(jīng)過處理后的數(shù)據(jù)存入FIFO緩存中,當(dāng)FIFO緩存數(shù)據(jù)為滿時(shí),會(huì)向NIOSII處理器產(chǎn)生一個(gè)中斷,頂層應(yīng)用程序可以通過中斷服務(wù)程序?qū)IFO中的數(shù)據(jù)讀到內(nèi)存中進(jìn)行處理。帶Avalon-MM Slave接口的寄存器文件模塊提供了所設(shè)計(jì)的AD IP核的任務(wù)邏輯與Avalon交換結(jié)構(gòu)交換信息的途徑。有了寄存器文件模塊,NiosII處理器就可以通過Avalon接口采用“基地址+地址偏移量”的方式來訪問AD IP核內(nèi)部的各寄存器[2]。
          2 AD IP核各個(gè)模塊的設(shè)計(jì)與實(shí)現(xiàn)
           由于市面上AD芯片的種類和型號非常多,不可能在此一一進(jìn)行闡述。本設(shè)計(jì)以一款常用的典型AD芯片TLC549為例,詳細(xì)闡述針對這款A(yù)D芯片的IP核的各個(gè)模塊的設(shè)計(jì)與實(shí)現(xiàn)。
          2.1 AD控制器模塊的設(shè)計(jì)
           本系統(tǒng)采用AD轉(zhuǎn)換芯片TLC549,它是TI公司生產(chǎn)的一種低價(jià)位、高性能的8位A/D轉(zhuǎn)換器,它能方便地采用三線串行接口方式與各種微處理器連接,構(gòu)成各種廉價(jià)的測控應(yīng)用系統(tǒng)[3]。
          本文利用有限狀態(tài)機(jī)的方法采用Verilog HDL硬件描述語言設(shè)計(jì)了一個(gè)TLC549控制器,從而完成了對TLC549 AD芯片的時(shí)序控制,它的狀態(tài)轉(zhuǎn)移圖如圖2所示。


          由圖2可以看出,狀態(tài)機(jī)一開始處于idle狀態(tài)。在下一個(gè)clk時(shí)鐘周期上升沿時(shí)刻進(jìn)入cs_low狀態(tài),在cs_low狀態(tài)將cs輸出引腳拉低并延時(shí)2 μs。當(dāng)2 μs延時(shí)完成時(shí),狀態(tài)機(jī)進(jìn)入sclk_low狀態(tài),在sclk_low狀態(tài)將sclk輸出引腳拉低并延時(shí)0.5 μs。當(dāng)0.5 μs延時(shí)完成時(shí),狀態(tài)機(jī)進(jìn)入sclk_high狀態(tài),在sclk_high狀態(tài)將sclk輸出引腳拉高并延時(shí)0.5 μs,同時(shí)讀取串行數(shù)據(jù)線miso上的AD采樣值并將其存入移位寄存器中。當(dāng)0.5 μs延時(shí)完成時(shí),進(jìn)入finish狀態(tài),在該狀態(tài)狀態(tài)機(jī)對已經(jīng)接收到的串行數(shù)據(jù)位數(shù)進(jìn)行判斷,如果小于8說明串行數(shù)據(jù)還沒有接收完畢,加1并進(jìn)入sclk_low狀態(tài);如果等于8說明8位AD采樣值已經(jīng)接收完畢,進(jìn)入delay狀態(tài)。在delay狀態(tài)將延時(shí)30μs,當(dāng)30 μs延時(shí)完成時(shí)將進(jìn)入load狀態(tài)。在load狀態(tài),狀態(tài)機(jī)在data_ready輸出引腳上拉高一個(gè)clk時(shí)鐘周期并在data[7..0]引腳上輸出接收到的8位采樣數(shù)據(jù)。在下一個(gè)clk時(shí)鐘周期上升沿狀態(tài)機(jī)將自動(dòng)進(jìn)入idle狀態(tài),以進(jìn)行下一次AD數(shù)據(jù)采集。由此周而復(fù)始不斷循環(huán)從而完成通過TLC549 AD芯片實(shí)現(xiàn)對外界模擬信號的實(shí)時(shí)采集。
          本文采用Quartus 軟件集成的Signal Tap II 嵌入式邏輯分析儀軟件對TLC549控制器模塊進(jìn)行硬件仿真,波形如圖3所示。

          由圖3可以看出,在cs、sclk和miso信號的時(shí)序配合下,data信號線上輸出穩(wěn)定的8位AD采樣數(shù)據(jù),經(jīng)過數(shù)字量到模擬量的轉(zhuǎn)換發(fā)現(xiàn)與外界輸入模擬值一致,從而完成了TLC549控制器模塊的驗(yàn)證。
          AD控制器模塊是針對某一款具體的AD芯片而設(shè)計(jì)的,如果選用不同款式的AD芯片,則需要參考該芯片的芯片手冊設(shè)計(jì)針對該款A(yù)D芯片的AD 控制器模塊。


          上一頁 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); })();