隨著(zhù)電子技術(shù)的飛速發(fā)展,嵌入式系統的需求越來(lái)越大、應用領(lǐng)域也越來(lái)越廣泛。數據采集是嵌入式系統不可或缺的組成部分,其性能在某種程度上直接決定了整個(gè)系統能否滿(mǎn)足設計的要求。目前,數據采集部分的實(shí)現基本上都是利用單片機或者ARM片內集成好的AD外設。這種AD外設的性能參數往往都已經(jīng)在片上固化好了(即具有不可更改性),而且與其他片內外設不可分離地組合在了一起,從而使得整個(gè)系統的設計具有很大局限性。加之市面上單片機、ARM的款式型號非常有限,使用者不得不在性能與成本上作出折中的選擇來(lái)滿(mǎn)足所設計系統的要求,由于這種設計方案是不可更改的,且應用范圍小、可移植性差,因此往往無(wú)法滿(mǎn)足客戶(hù)更高的要求。 Nios II是Altera公司開(kāi)發(fā)的第二代可進(jìn)行SOPC設計的RISC型處理器軟核,具有定制指令、硬件加速、可重配置、低成本和無(wú)與倫比的靈活性等特點(diǎn);贜iosII處理器的通用AD IP核是一種全新的設計思路與實(shí)現方案,它可以將市面上任意一款AD芯片制作成IP核并集成到NiosII系統中使用,具有高性能、參數可配置、可移植、可裁剪等特點(diǎn),并且具有很高的靈活性、實(shí)用性,從而更能滿(mǎn)足設計的要求。 本文提出了一種基于NiosII處理器的通用AD IP核來(lái)實(shí)現嵌入式數據采集系統的新方案,在A(yíng)ltera公司的FPGA芯片CycloneII EP2C35F484C8 上完成了硬件驗證,最終應用到某數據采集系統的設計中。 1 通用AD IP核的整體構架 通用AD IP核是針對所有AD芯片設計的,它可以將市面上任意一款AD芯片集成到NiosII系統中使用,其整體構架如圖1所示。 整個(gè)通用AD IP核主要由4個(gè)子模塊組成:AD 控制器模塊、FIR 濾波器模塊、FIFO 緩存模塊和帶Avalon-MM Slave接口的寄存器文件模塊。首先AD控制器控制AD芯片對外界的模擬信號的采集,采集到的數據送入FIR濾波器進(jìn)行數字濾波,然后將經(jīng)過(guò)數字信號處理后的數據存入FIFO緩存中,當FIFO緩存數據為滿(mǎn)時(shí),會(huì )向NIOSII處理器產(chǎn)生一個(gè)中斷,頂層應用程序可以通過(guò)中斷服務(wù)程序將FIFO中的數據讀到內存中進(jìn)行處理。帶Avalon-MM Slave接口的寄存器文件模塊提供了所設計的AD IP核的任務(wù)邏輯與Avalon交換結構交換信息的途徑。有了寄存器文件模塊,NiosII處理器就可以通過(guò)Avalon接口采用“基地址+地址偏移量”的方式來(lái)訪(fǎng)問(wèn)AD IP核內部的各寄存器。 2 AD IP核各個(gè)模塊的設計與實(shí)現 由于市面上AD芯片的種類(lèi)和型號非常多,不可能在此一一進(jìn)行闡述。本設計以一款常用的典型AD芯片TLC549為例,詳細闡述針對這款AD芯片的IP核的各個(gè)模塊的設計與實(shí)現。 2.1 AD控制器模塊的設計 本系統采用AD轉換芯片TLC549,它是TI公司生產(chǎn)的一種低價(jià)位、高性能的8位A/D轉換器,它能方便地采用三線(xiàn)串行接口方式與各種微處理器連接,構成各種廉價(jià)的測控應用系統。 本文利用有限狀態(tài)機的方法采用Verilog HDL硬件描述語(yǔ)言設計了一個(gè)TLC549控制器,從而完成了對TLC549 AD芯片的時(shí)序控制,它的狀態(tài)轉移圖如圖2所示。 由圖2可以看出,狀態(tài)機一開(kāi)始處于idle狀態(tài)。在下一個(gè)clk時(shí)鐘周期上升沿時(shí)刻進(jìn)入cs_low狀態(tài),在cs_low狀態(tài)將cs輸出引腳拉低并延時(shí)2 μs。當2 μs延時(shí)完成時(shí),狀態(tài)機進(jìn)入sclk_low狀態(tài),在sclk_low狀態(tài)將sclk輸出引腳拉低并延時(shí)0.5 μs。當0.5 μs延時(shí)完成時(shí),狀態(tài)機進(jìn)入sclk_high狀態(tài),在sclk_high狀態(tài)將sclk輸出引腳拉高并延時(shí)0.5 μs,同時(shí)讀取串行數據線(xiàn)miso上的AD采樣值并將其存入移位寄存器中。當0.5 μs延時(shí)完成時(shí),進(jìn)入finish狀態(tài),在該狀態(tài)狀態(tài)機對已經(jīng)接收到的串行數據位數進(jìn)行判斷,如果小于8說(shuō)明串行數據還沒(méi)有接收完畢,加1并進(jìn)入sclk_low狀態(tài);如果等于8說(shuō)明8位AD采樣值已經(jīng)接收完畢,進(jìn)入delay狀態(tài)。在delay狀態(tài)將延時(shí)30μs,當30 μs延時(shí)完成時(shí)將進(jìn)入load狀態(tài)。在load狀態(tài),狀態(tài)機在data_ready輸出引腳上拉高一個(gè)clk時(shí)鐘周期并在data[7..0]引腳上輸出接收到的8位采樣數據。在下一個(gè)clk時(shí)鐘周期上升沿狀態(tài)機將自動(dòng)進(jìn)入idle狀態(tài),以進(jìn)行下一次AD數據采集。由此周而復始不斷循環(huán)從而完成通過(guò)TLC549 AD芯片實(shí)現對外界模擬信號的實(shí)時(shí)采集。 本文采用Quartus 軟件集成的Signal Tap II 嵌入式邏輯分析儀軟件對TLC549控制器模塊進(jìn)行硬件仿真,波形如圖3所示。 由圖3可以看出,在cs、sclk和miso信號的時(shí)序配合下,data信號線(xiàn)上輸出穩定的8位AD采樣數據,經(jīng)過(guò)數字量到模擬量的轉換發(fā)現與外界輸入模擬值一致,從而完成了TLC549控制器模塊的驗證。 AD控制器模塊是針對某一款具體的AD芯片而設計的,如果選用不同款式的AD芯片,則需要參考該芯片的芯片手冊設計針對該款AD芯片的AD 控制器模塊。 2.2 FIR濾波器模塊的設計 在實(shí)際應用的數據采集系統中,往往需要對外界模擬輸入信號進(jìn)行濾波,以提取信號中有用的信息。在本設計中這部分的功能是由FIR濾波器模塊來(lái)完成的。FIR濾波器模塊采用Altera公司提供的FIR IP核來(lái)實(shí)現,通過(guò)Simulink軟件中的DSP Builder工具對其進(jìn)行仿真并最終可以生成底層HDL代碼。由于TLC549的最高采樣頻率為40 kHz,本文設計了一個(gè)低通濾波器,它的采樣頻率為40 kHz,3 dB截止頻率為100 Hz。在Simulink軟件中建立的FIR IP核的仿真模型如圖4所示。 圖4中nco_v8_0模塊和nco_v8_1模塊是2個(gè)數控振蕩器,分別用于產(chǎn)生100 Hz和1 kHz的正弦信號,signal add模塊是并行加法器,它將兩路正弦信號進(jìn)行疊加并將和信號輸出。fir_compiler_v8_0模塊是FIR IP核,它將signal add模塊輸出的和信號作為輸入,并將數字濾波的結果輸出到示波器進(jìn)行顯示。仿真結果如圖5和圖6所示。 由圖5可以看出:第1路是頻率為100 Hz的正弦信號,第2路是頻率為1 kHz的正弦信號,第3路是前兩路信號的疊加。圖6中顯示的是經(jīng)過(guò)數字濾波后的波形,可以看出只有100 Hz的頻率分量存在,1 kHz的信號被濾除了,從而完成了對FIR IP核的功能驗證。通過(guò)圖4中的Signal Compiler工具可以完成該FIR IP核的底層HDL代碼的生成。 FIR濾波器模塊采用Altera公司提供的FIR IP核來(lái)實(shí)現,具有高性能、可配置、可重用等特點(diǎn)。設計者只需根據整個(gè)系統的需求以及所選用AD芯片的采樣速率等參數確定濾波器的類(lèi)型與系數,并對該IP核進(jìn)行參數化、實(shí)例化,即可完成針對該款AD芯片的FIR濾波器模塊的設計。因此這部分的設計對于不同的AD芯片是相對獨立的,具有很好的通用性。 2.3 FIFO緩存模塊的設計 為了連續和正確地采集數據,實(shí)現無(wú)縫緩沖,本設計利用了FIFO做數據緩存。由于TLC549是8位的AD芯片,故本設計采用1個(gè)512×8 bit 的FIFO來(lái)存儲采樣的數據。當FIFO中的數據存滿(mǎn)時(shí),它會(huì )向Nios II CPU產(chǎn)生一個(gè)中斷信號。頂層應用程序可以通過(guò)中斷服務(wù)程序將FIFO中的數據讀到內存中進(jìn)行處理。這樣既不會(huì )造成數據的丟失,同時(shí)可以保證CPU較高的效率,很好地解決了上述的速度不匹配的問(wèn)題。 FIFO緩存模塊的設計對于不同的AD芯片是相對獨立的,設計者只需根據所選用AD芯片的精度、采樣速率、時(shí)鐘速率等參數確定FIFO緩存的位寬和深度,并對FIFO進(jìn)行參數化、實(shí)例化,即可完成針對該款AD芯片的FIFO緩存模塊的設計,因此具有很好的通用性。 2.4 帶Avalon-MM Slave接口的寄存器文件模塊的設計 本文設計的帶Avalon-MM Slave接口的寄存器文件模塊是具有Avalon-MM Slave 從端口的外設。它內部共有2個(gè)8位寄存器,具體結構和功能如表1所示。NiosII處理器可以通過(guò)Avalon接口采用“基地址+地址偏移量”的方式來(lái)訪(fǎng)問(wèn)這2個(gè)寄存器,從而實(shí)現對AD IP核的控制以及AD采樣數據的讀取。 對于一些比較復雜的AD芯片(如AD73360),往往需要對其寫(xiě)控制字、讀狀態(tài)字,這就需要增加寄存器文件模塊中的寄存器個(gè)數來(lái)完成相應的邏輯功能。Avalon接口采用“基地址+地址偏移量”的方式來(lái)訪(fǎng)問(wèn)寄存器,這樣就可以簡(jiǎn)單地通過(guò)增加地址線(xiàn)的位數并進(jìn)行譯碼來(lái)實(shí)現,因此對于各種復雜的AD芯片具有很好的可擴展性和適用性。 3 整個(gè)IP核在NiosII系統中的硬件測試 本設計采用Verilog HDL語(yǔ)言建立了一個(gè)頂層文件tlc549_adc_ip.v,通過(guò)對AD控制器模塊、FIR濾波器模塊、FIFO緩存模塊和帶Avalon-MM Slave接口的寄存器文件模塊進(jìn)行實(shí)例化與互連,最終完成了整個(gè)IP核的設計,它的模塊圖如圖7所示。 本文采用C++語(yǔ)言做了一個(gè)基于NiosII處理器的頂層應用測試程序,利用描點(diǎn)法將不斷采集到的AD數據繪制成波形顯示出來(lái),從而完成對整個(gè)IP核的硬件功能測試。測試過(guò)程中,在A(yíng)D芯片的模擬輸入端輸入一個(gè)由1 kHz正弦信號和100 Hz的正弦信號疊加而成的混合信號,整個(gè)系統的運行結果顯示在NiosII IDE軟件的Console控制臺中,如圖8所示。 通過(guò)對圖8中的正弦波形以及采樣到的數據進(jìn)行分析與計算可知,采集到的信號頻率是100 Hz,信號的幅度與外界的模擬輸入信號完全一致,從而驗證了整個(gè)IP核的功能正確性。整個(gè)IP核使用5 275個(gè)LE,占總數的15.8%,4 096個(gè)存儲單元,占總數的0.8%。系統的主頻能達到199.64 MHz。 為了驗證AD IP核的通用性與適用性,本文還針對另外兩款AD芯片(AD7476和AD73360)進(jìn)行了IP核制作與測試,且測試信號與TLC549 IP核的測試信號完全相同。 AD7476 IP核采用了上述通用AD IP核的設計方法,它的AD控制器模塊是針對AD7476這款 12位串行AD芯片而設計的。FIR濾波器模塊的參數與TLC549 IP核中的FIR濾波器參數相同,只是輸入數據的位寬設置為12位。由于A(yíng)D7476芯片的采樣速率比較快,所以FIFO 緩存模塊的深度設置為1 024,位寬設置為12位,這樣可以使NiosII CPU的效率更高。 AD73360 IP核同樣也采用了上述通用AD IP核的設計方法,它的AD控制器模塊是針對6路16位串行AD芯片AD73360設計的。它的FIR 濾波器模塊的參數和FIFO 緩存模塊的參數與TLC549中的相應參數設置相同,只是把位寬設置為16位。由于控制的過(guò)程中需要對AD73360芯片內部的寄存器進(jìn)行讀寫(xiě),所以在寄存器文件模塊中增加了兩個(gè)寄存器(1個(gè)讀狀態(tài)字寄存器,1個(gè)寫(xiě)控制字寄存器),從而完成對AD73360芯片內部控制與狀態(tài)寄存器的讀寫(xiě)。 這兩款AD IP核與TLC549 IP核的比較如表2所示。由表2可以看出,本文提出的基于NiosII處理器的通用AD IP核對于不同精度、不同采樣速率、不同時(shí)鐘速率、不同通道數的AD芯片都適用,并且具有較高的性能和靈活性。在實(shí)際應用中,如果對該IP核所占用的資源數有一定的限制,可以自行編寫(xiě)FIR濾波器模塊,這樣能大大降低IP核所占用的資源數,從而實(shí)現整個(gè)IP核的性能與資源之間的平衡。 |