1 什么是RFNoC
RFNoC是一個基於FPGA的一個異構軟件無線電框架,可以使用該架構,對USRP系列的SDR設備進行FPGA級別的自定義。也就是說,使用RFNoC可以在GNURadio提供的SDR框架之外,使用剩余的FPGA的資源實現更高性能,更高自由度的軟件無線電設備的定義。
在UHD 4.0版本之后,RFNoC已經成為了UHD fpga驅動程序的一部分,USRP的核心DSP處理功能將作為RFNoC block應用在UHD中。
下面將從USRP默認的FPGA鏡像架構來介紹RFNoC的組成。
2 默認RFNoC鏡像組成
下圖是默認的USRP的鏡像結構圖,絕大多數的USRP默認鏡像架構都與之非常相似。
可以注意到,RFNoC FPGA鏡像由以下部分構成:
-
RFNoC Image Core
這是RFNoC軟件的主體,或者是稱之為最大集合,除了FPGA必備的接口以外,剩下的組件均包含在RFNoC Image Core中。RFNoC Image Core 由RFNoC Image Core YAML
文件所定義,並且工具鏈中的image_builder
程序會自動根據RFNoC Image Core YAML
文件生成必要的頂層設計文件(top verilog)。 -
Transport Adapter
傳輸適配器,是USRP與外部進行通信的接口組件,他允許USRP設備通過高速以太網、SFP+、PCIe等接口與上位機取得聯系。P.S. 在E312中,也用於與ARM處理器進行通信。 -
CHDR Crossbar
所謂CHDR,為Condensed Hierarchical Datagram for RFNoC,是RFNoC中的自定協議,正如他的字面意思,是一種壓縮、分層、數據報形式的數據協議。而CHDR Crossbar,就是基於這一協議的動態路由器,他允許在SDR運行前通過軟件定義方式,決定stream endpoints
與Transport Adapter
之間的數據走向。也就是說,如果想讓模塊中的數據從FPGA傳輸到上位機上,則必須配有stream endpoints
。 -
Stream Endpoint (SEP)
Stream Endpoint (SEP),其中一個功能在上一點中已經提到,那就是提供RFNoC內部block中的數據到host的數據接口,除此之外, Stream Endpoint還提供數據流(data traffic)與控制流(control traffic)的分離。其中的控制流則是提供一系列的寄存器讀寫接口,用來提供host的軟件在 運行中控制Block的能力,如在之前我們用到的gain
所提供的增益數值,就是通過SEP從GNURadio中傳輸到block當中,並且這個增益數值是可以在運行時進行更改的。 -
Control Crossbar
這是一個小型的路由裝置,與CHDR Crossbar類似,不同的是,Control Crossbar只能對控制信號進行路由,因此它所占用的 資源更少一些。 -
其他模塊
在圖中的DDC、DUC和Radio則是RFNoC自帶的一些功能模塊(也是UHD必備的功能模塊,早在RFNoC時代之前,他們被強耦合得編譯在FPGA軟件中,很難作出更改)。通常來說RFNoC模塊一般在RFNoC框架中進行數據交互,但是如Radio或者DRAM模塊,還需要與RFNoC以外的硬件進行數據的交互。
3 動態連接與靜態連接
如果RFNoC模塊之間通過了Crossbar連接那么他們就是動態連接,這意味着模塊之間的連接可以通過軟件動態的改變。CHDR crossbar可以提供十分強大的互聯功能,他允許任意模塊之間、模塊與host之間甚至不同USRP的模塊之間通過CHDR進行互聯,當然也運行新的DSP單元加入的應用當中。
同樣的 control crossbar 也提供動態路由,允許RFNoC block之間、block與host之間發送控制信號(即讀寫寄存器信號)。
一些模塊,並不通過crossbar,例如radio與DDC或DUC連接,再連接到SEP上,這就是靜態連接,即他們不能在運行時進行改變,一旦FPGA鏡像編譯好后,這些連接關系就確定了。靜態連接的好處就是不需要占用crossbar的端口,並且能夠有效降低模塊之間的延遲,並且節約更多的FPGA邏輯資源,以使一個FPGA鏡像能夠包含更多的功能。靜態連接關系可以在RFNoC image core YAML
文件進行描述。