許多FPGA設計使用嵌入式處理器實現控制。典型的解決方案是使用Nios這樣的軟處理器,雖然內建硬體處理器的FPGA SoC也變得很流行。圖1顯示的是一個典型的Altera FPGA系統,其中包含了處理器和通過Altera的Avalon記憶體映射(MM)匯流排連接的各種週邊。這些處理器極大地簡化了終端應用,但要求很強的程式設計背景和複雜的工具鏈知識。這將妨礙除錯(debug),特別是當硬體工程師不想求助軟體工程師,只想要一種簡單的方式讀寫週邊設備時。

本設計實例使用Altera的SPI Slave to Avalon MM橋實現了一種掛接到Avalon匯流排的簡單方法。這種技術有兩個優勢:它不會影響原始系統設計,橋可以與嵌入式處理器共存。對於圖1所示的系統來說,這種SPI橋允許工程師直接控制LTC6948分數-N型鎖相迴路(fractional-N PLL)的頻率、設置LTC1668數位類比轉換器(DAC)的電壓、讀取來自LTC2498類比數位轉換器(ADC)的電壓或讀取LTC2983的溫度,就如同處理器所做的。

20160829TA01P1
圖1 使用Avalon記憶體映射匯流排連接的典型Altera FPGA系統。



Altera為SPI-Avalon MM橋提供了參考設計。遺憾的是,相關文件非常少,並且將Nios處理器用作SPI主元件。這其實有違使用SPI橋的目的,因為Nios可以直接連接Avalon MM匯流排。實用性的SPI主元件是凌力爾特(Linear Technology)的Linduino微控制器,它是Arduino處理器的克隆(clone)版本,增加連接凌力爾特演示板介面等額外功能。其中一個額外功能是電平轉換,當連接電壓低至1.2V的FPGA I/O組時這個功能特別有用。Linduino韌體可以用來接受來自虛擬COM埠的命令,並將命令翻譯成SPI處理內容。

在對Altera設計例子進行反向工程後(圖2的左邊),Python庫的開發是為了創建一個橋以接受數據封包。這些資料封包隨後被翻譯成Linduino命令。Python腳本隨後允許硬體工程師完全控制整個專案,無需重新開發傳輸介面協定。LinearLabTools Phython資料夾中提供協助LTC1668數位類比轉換器控制數位圖型產生器(digital pattern generator)頻率的Python腳本例子。圖3顯示了演示板設置方式。

20160829TA01P2
圖2 顏色突顯的部分+示例代碼+反向工程=Python腳本。



20160829TA01P3
圖3 插入FPGA電路板(左)的DC2459數模轉換器演示板(右)。



圖4顯示了系統方塊圖。請注意,數位控制振盪器(NCO)可以由位移暫存器(shift register)或PIO核心進行控制。位移暫存器用於除錯,因為它可以直接控制NCO,利用GPIO線高使SPI-Avalon橋能夠運作,反過來控制Avalon匯流排上的32位元PIO埠,PIO輸出隨即控制NCO頻率。

20160829TA01P4
圖4 FPGA系統方塊圖。



借助基本的系統操作,額外的週邊核心可以連接到匯流排。為了設計系統,Altera提供了一款名為Qsys的工具,它提供了連接各個IP的圖形化使用者介面(GUI)。Qsys可以將GUI設計的系統(圖5)翻譯為HDL,週邊位址是完全可配置的,在這個案例中,PIO被設為基於位址0x0。

20160829TA01P5
圖5 Qsys GUI。



當設計在FPGA中實現後,LinearLabTools中提供的Python函式庫所包含的兩個函數就能介接到設計:

transaction_write(dc2026, base, write_size, data) transaction_read(dc2026, base, read_size)

這些函數的第一個參數是Linduino的序列埠實例;第二個參數是Avalon匯流排上的週邊位址。這兩個函數分別用於接收和返回位元組清單,當讀寫IP時這兩個函數具有一定的靈活性。為了設置給定例子的NCO,只需要transaction_write一個函數。公式1用於確定調節字(tuning word)。

20160829TA01P5-1
公式1



要將NCO設為1kHz並具有50MSPS取樣速率,調節字的值需要設為85899或0x00014F8B,並以4個位元組一起傳送。這樣,將數位類比轉換器設為1kHz的Python代碼是:

transaction_write(linduino_serial_instance, 0, 0, [0x0, 0x01, 0x4F, 0x8B])

圖6中的Python腳本描述了配置NCO的簡單文本介面。相當重要的是:SPI橋使用SPI模式3。這是透過不斷的嘗試錯誤,並分析Altera例子中的Nios處理器的SPI介面驗證後才確定的模式。

20160829TA01P6
圖6 Python Avalon匯流排範例。



本設計實例提供了一種無需使用嵌入式處理器就能控制系統的方法,它能說明硬體工程師在不打擾軟體工程師的情況下搞定一個專案,並且對硬體設計的影響最小。