許多FPGA設(shè)計(jì)使用嵌入式處理器進(jìn)行控制。典型的解決方案涉及使用諸如Nios的軟處理器,盡管具有內(nèi)置硬處理器的FPGA SoC也變得流行。圖1顯示了典型的Altera FPGA系統(tǒng),其中包含處理器和通過Altera的 Avalon 存儲(chǔ)器映射(MM)總線連接的外設(shè)組合。這些處理器極大地簡(jiǎn)化了最終應(yīng)用程序,但需要強(qiáng)大的編程背景和復(fù)雜工具鏈的知識(shí)。這可能會(huì)妨礙調(diào)試,特別是如果硬件工程師需要一種簡(jiǎn)單的方法來讀取和寫入外設(shè)而不會(huì)影響軟件工程師。
圖1使用Avalon內(nèi)存映射總線連接的典型Altera FPGA系統(tǒng)
本設(shè)計(jì)方案使用Altera的 SPI Slave to Avalon MM Bridge 提供了一種跳轉(zhuǎn)到Avalon總線的簡(jiǎn)單方法。這種技術(shù)有兩個(gè)優(yōu)點(diǎn):它不會(huì)損害原始系統(tǒng)設(shè)計(jì),并且橋接器可以與嵌入式處理器共存。對(duì)于圖1中所示的系統(tǒng),SPI橋允許工程師直接控制LTC6948小數(shù)N分頻PLL的頻率,設(shè)置LTC1668 DAC電壓,讀取LTC2498 ADC的電壓或讀取來自LTC2983的溫度,就像處理器一樣。
圖2熒光筆+示例代碼+反向工程= Python腳本(可縮放圖像)
Altera為SPI-Avalon MM橋提供參考設(shè)計(jì)。不幸的是,文檔最多是稀疏的,并使用Nios處理器作為SPI主控制器。這有效地破壞了SPI橋的目的,因?yàn)?/p>
Nios可以直接連接到Avalon MM總線。實(shí)用的SPI主控制器是凌力爾特公司的微控制器,它是一個(gè)Arduino克隆,具有與LT演示板接口的額外功能。一個(gè)額外的功能是電平轉(zhuǎn)換的SPI端口。當(dāng)電壓低至1.2V的FPGA I/O bank接口時(shí),這種電平轉(zhuǎn)換功能特別有用。 Linduino固件可用于通過虛擬COM端口接受命令,并將命令轉(zhuǎn)換為SPI事務(wù)。
對(duì)Altera示例設(shè)計(jì)進(jìn)行逆向工程后(圖2的左側(cè)),開發(fā)了一個(gè)Python庫(kù)來創(chuàng)建橋接器可以接受的數(shù)據(jù)包。然后將這些數(shù)據(jù)包轉(zhuǎn)換為L(zhǎng)induino命令。然后,Python腳本允許硬件工程師完全控制項(xiàng)目,而無需重新構(gòu)建接口協(xié)議。 LinearLabTools Python文件夾中提供了一個(gè)示例Python腳本,用于控制LTC1668 DAC的數(shù)字碼型發(fā)生器的頻率。圖3顯示演示設(shè)置。
圖3DC2459 DAC演示板(R)插入FPGA板(L)
圖4顯示系統(tǒng)框圖。注意,數(shù)控振蕩器(NCO)可以由移位寄存器或PIO內(nèi)核控制。包含移位寄存器用于調(diào)試,因?yàn)樗试S直接控制NCO。將GPIO線設(shè)置為高電平可啟用SPI-Avalon橋,后者又控制Avalon總線上的32位PIO端口。然后,PIO輸出控制NCO頻率。
圖4FPGA系統(tǒng)框圖
在基本系統(tǒng)運(yùn)行的情況下,可以將額外的外圍核心連接到總線。為了設(shè)計(jì)系統(tǒng),Altera提供了一個(gè)名為Qsys的工具,它提供了一個(gè)GUI來連接IP。 Qsys將GUI設(shè)計(jì)的系統(tǒng)(圖5)轉(zhuǎn)換為HDL。外設(shè)地址是完全可配置的。在這種情況下,PIO設(shè)置為0x0的基數(shù)。
圖5Qsys GUI
一旦設(shè)計(jì)在FPGA中實(shí)現(xiàn),LinearLabTools中提供的Python庫(kù)包含兩個(gè)與設(shè)計(jì)接口的函數(shù):
transaction_write(dc2026,base,write_size,data)
transaction_read(dc2026,base,read_size)
這些函數(shù)的第一個(gè)參數(shù)是Linduino串口實(shí)例。第二個(gè)參數(shù)是Avalon總線上的外設(shè)地址。函數(shù)分別接受和返回字節(jié)列表。編寫這兩個(gè)函數(shù)是為了在寫入和讀取IP時(shí)具有靈活性。要為所提供的示例設(shè)置NCO,需要transaction_write功能。公式1用于確定調(diào)諧字。
將NCO設(shè)置為1kHz使用50MSPS采樣率時(shí),調(diào)整值為85899或0x00014F8B,它作為四個(gè)字節(jié)的列表傳遞。因此,將DAC設(shè)置為1kHz的python代碼是:
transaction_write(linduino_serial_instance,0,0,[0x0,0x01,0x4F,0x8B ])
圖6Python Avalon總線示例
圖6中的Python腳本說明了簡(jiǎn)單文本配置NCO的接口。一個(gè)重要的注意事項(xiàng):橋接器使用SPI模式3.通過反復(fù)試驗(yàn)確定了正確的模式,并通過分析Altera示例中的Nios處理器的SPI接口進(jìn)行了驗(yàn)證。
-
Avalon總線
+關(guān)注
關(guān)注
0文章
11瀏覽量
10154 -
PCB打樣
+關(guān)注
關(guān)注
17文章
2968瀏覽量
21742 -
華強(qiáng)PCB
+關(guān)注
關(guān)注
8文章
1831瀏覽量
27810 -
華強(qiáng)pcb線路板打樣
+關(guān)注
關(guān)注
5文章
14629瀏覽量
43086
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論