你的位置:首頁(yè) > 測(cè)試測(cè)量 > 正文
不用處理器控制FPGA總線的方法
發(fā)布時(shí)間:2016-08-10 責(zé)任編輯:wenwei
【導(dǎo)讀】許多FPGA設(shè)計(jì)使用嵌入式處理器實(shí)現(xiàn)控制。典型的解決方案是使用Nios這樣的軟處理器,雖然內(nèi)置硬處理器的FPGASoC也變得很流行了。圖1顯示的是一個(gè)典型的Altera FPGA系統(tǒng),其中包含了處理器和通過(guò)Altera的Avalon內(nèi)存映射(MM)總線連接的各種外設(shè)。這些處理器極大地簡(jiǎn)化了終端應(yīng)用,但要求很強(qiáng)的編程背景和復(fù)雜的工具鏈知識(shí)。這將妨礙調(diào)試,特別是當(dāng)硬件工程師不想求助軟件工程師,只需要一種簡(jiǎn)單的方式讀寫(xiě)外設(shè)時(shí)。
圖1:使用Avalon內(nèi)存映射總線連接的典型Altera FPGA系統(tǒng)。
本設(shè)計(jì)實(shí)例使用Altera的SPI Slave to Avalon MM橋?qū)崿F(xiàn)了一種掛接到Avalon總線的簡(jiǎn)單方法。這種技術(shù)有兩個(gè)優(yōu)勢(shì):它不會(huì)影響原始系統(tǒng)設(shè)計(jì),橋可以與嵌入式處理器共存。對(duì)于圖1所示的系統(tǒng)來(lái)說(shuō),這種SPI橋允許工程師直接控制LTC6948小數(shù)分頻鎖相環(huán)的頻率、設(shè)置LTC1668數(shù)模轉(zhuǎn)換器的電壓、讀取LTC2498模數(shù)轉(zhuǎn)換器的電壓或讀取LTC2983的溫度,就像處理器那樣。
圖2:高亮部分+例子代碼+反向工程=Python腳本。
Altera為SPI-Avalon MM橋提供了參考設(shè)計(jì)。遺憾的是,相關(guān)文檔非常少,并且將Nios處理器用作SPI主器件。這其實(shí)有違使用SPI橋的初衷,因?yàn)镹ios可以直接連接Avalon MM總線。實(shí)用性的SPI主器件是凌力爾特公司的Linduino微控制器,它是Arduino處理器的的克隆版本,不過(guò)增加了連接LT演示板的接口等額外功能。其中一個(gè)額外功能是電平轉(zhuǎn)換SPI端口。當(dāng)連接電壓低至1.2V的FPGA I/O組時(shí)這個(gè)電平轉(zhuǎn)換功能特別有用。Linduino固件可以用來(lái)接受來(lái)自虛擬COM端口的命令,并將命令翻譯成SPI處理內(nèi)容。 在對(duì)Altera設(shè)計(jì)例子進(jìn)行反向工程后(圖2)就能得到一個(gè)Python庫(kù),接著創(chuàng)建SPI橋可以接受的數(shù)據(jù)包。這些數(shù)據(jù)包隨后被翻譯成Linduino命令。Python腳本隨后允許硬件工程師完全控制整個(gè)項(xiàng)目,無(wú)需重新開(kāi)發(fā)接口協(xié)議。LinearLabToolsPhython文件夾中提供了幫助LTC1668數(shù)模轉(zhuǎn)換器控制數(shù)字圖案發(fā)生器頻率的Python腳本例子。圖3顯示了演示裝置。
圖3:插入FPGA電路板(左)的DC2459數(shù)模轉(zhuǎn)換器演示板(右)。
圖4顯示了系統(tǒng)框圖。注意,數(shù)字控制振蕩器(NCO)可以由移位寄存器或PIO內(nèi)核進(jìn)行控制。移位寄存器用于調(diào)試,因?yàn)樗梢灾苯涌刂芅CO。將GPIO線置高將激活SPI-Avalon橋,進(jìn)而控制Avalon總線上的32位PIO端口。PIO輸出隨即用于控制NCO頻率。
圖4:FPGA系統(tǒng)框圖。
借助基本的一些系統(tǒng)操作,可以將額外的外設(shè)內(nèi)核連接到總線上。為了幫助系統(tǒng)設(shè)計(jì),Altera提供了一款名為Qsys的工具,它提供了連接各個(gè)IP的圖形用戶(hù)界面(GUI)。Qsys可以將GUI設(shè)計(jì)的系統(tǒng)(圖5)翻譯為HDL。外設(shè)地址是完全可配置的。在這個(gè)案例中,PIO被設(shè)為基地址0x0。
圖5:Qsys GUI。
當(dāng)設(shè)計(jì)在FPGA中實(shí)現(xiàn)后,LinearLabTools中提供的Python庫(kù)包含的兩個(gè)函數(shù)就能連接到設(shè)計(jì):
transaction_write(dc2026, base, write_size, data) transaction_read(dc2026, base, read_size)
這些函數(shù)的第一個(gè)參數(shù)是Linduino的串口實(shí)例。第二個(gè)參數(shù)是Avalon總線上的外設(shè)地址。這兩個(gè)函數(shù)分別用于接收和返回字節(jié)列表。當(dāng)讀寫(xiě)IP時(shí)這兩個(gè)函數(shù)具有一定的靈活性。為了設(shè)置給定例子的NCO,只需要transaction_write一個(gè)函數(shù)。公式1用于確定調(diào)節(jié)字。
要將NCO設(shè)為1kHz并具有50MSPS采樣率,調(diào)節(jié)字的值需要設(shè)為85899或0x00014F8B,并按4個(gè)字節(jié)一起傳送。這樣,將數(shù)模轉(zhuǎn)換器設(shè)為1kHz的Python代碼是: transaction_write(linduino_serial_instance, 0, 0, [0x0, 0x01, 0x4F, 0x8B])
圖6:Python Avalon總線例子。
圖6中的Python腳本描述了用于配置NCO的簡(jiǎn)單文本接口。值得一提的是:SPI橋使用SPI模式3。這是通過(guò)不斷的試錯(cuò),并通過(guò)分析Altera例子中的Nios處理器的SPI接口驗(yàn)證后才確定的模式。 本設(shè)計(jì)實(shí)例提供了一種無(wú)需使用嵌入式處理器就能控制系統(tǒng)的方法,它能幫助硬件工程師在不打擾軟件工程師的情況下搞定一個(gè)項(xiàng)目,并且對(duì)硬件設(shè)計(jì)的影響最小。
【推薦閱讀】
特別推薦
- 是否存在有關(guān) PCB 走線電感的經(jīng)驗(yàn)法則?
- 一文看懂電壓轉(zhuǎn)換的級(jí)聯(lián)和混合概念
- 第12講:三菱電機(jī)高壓SiC芯片技術(shù)
- 準(zhǔn) Z 源逆變器的設(shè)計(jì)
- 貿(mào)澤電子持續(xù)擴(kuò)充工業(yè)自動(dòng)化產(chǎn)品陣容
- 低功耗嵌入式設(shè)計(jì)簡(jiǎn)介
- 如何通過(guò)基本描述找到需要的電容?
技術(shù)文章更多>>
- 瑞典名企Roxtec助力構(gòu)建安全防線
- 貿(mào)澤與Cinch聯(lián)手發(fā)布全新電子書(shū)深入探討惡劣環(huán)境中的連接應(yīng)用
- 第二十二屆中國(guó)國(guó)際軟件合作洽談會(huì)在成都順利舉行
- 混合信號(hào)示波器的原理和應(yīng)用
- 功率器件熱設(shè)計(jì)基礎(chǔ)(十)——功率半導(dǎo)體器件的結(jié)構(gòu)函數(shù)
技術(shù)白皮書(shū)下載更多>>
- 車(chē)規(guī)與基于V2X的車(chē)輛協(xié)同主動(dòng)避撞技術(shù)展望
- 數(shù)字隔離助力新能源汽車(chē)安全隔離的新挑戰(zhàn)
- 汽車(chē)模塊拋負(fù)載的解決方案
- 車(chē)用連接器的安全創(chuàng)新應(yīng)用
- Melexis Actuators Business Unit
- Position / Current Sensors - Triaxis Hall
熱門(mén)搜索
電池管理系統(tǒng)
電磁蜂鳴器
電磁兼容
電磁爐危害
電動(dòng)車(chē)
電動(dòng)工具
電動(dòng)汽車(chē)
電感
電工電路
電機(jī)控制
電解電容
電纜連接器
電力電子
電力繼電器
電力線通信
電流保險(xiǎn)絲
電流表
電流傳感器
電流互感器
電路保護(hù)
電路圖
電路圖符號(hào)
電路圖知識(shí)
電腦OA
電腦電源
電腦自動(dòng)斷電
電能表接線
電容觸控屏
電容器
電容器單位