如今,無線系統(tǒng)無處不在,無線設備和服務的數(shù)量也在持續(xù)增長。完整RF系統(tǒng)的設計是一項多學科設計挑戰(zhàn),其中模擬RF前端是最關鍵的部分。然而,AD9361等集成RF收發(fā)器的可用性大大降低了此類設計的RF挑戰(zhàn)。這些收發(fā)器為模擬RF信號鏈提供數(shù)字接口,并允許輕松集成到ASIC或FPGA進行基帶處理?;鶐?a target="_blank">處理器(BBP)允許用戶數(shù)據(jù)在終端應用和收發(fā)器設備之間的數(shù)字域中進行處理。使用系統(tǒng)建模工具(如 Simulink)也可以輕松設計基帶處理器設計。但是,新手用戶可能會發(fā)現(xiàn)很難理解和填寫通信系統(tǒng)難題的這一部分。本文是設計和實現(xiàn)用于空中通信系統(tǒng)的簡單RF基帶處理器的適度嘗試。該設計采用AD9361 FPGA參考設計框架,在AD-FMCOMMS2-EBZ和Xilinx ZC706平臺上實現(xiàn)。
本文的第一部分詳細介紹了該基帶處理器的一般設計原則。本節(jié)主要是對BBP的理論介紹。在第二部分中,使用ADI公司的AD9361 FPGA參考設計討論BBP的實際硬件實現(xiàn)。需要注意的是,主要設計目標是使設計盡可能簡單,并在實驗室環(huán)境中演示快速無線數(shù)據(jù)傳輸。在使用并因此干擾RF頻譜方面存在法規(guī)和其他影響。
底座設計
典型的RF系統(tǒng)如圖1所示,直接RF系統(tǒng)除外。圖 1 中僅顯示了一條數(shù)據(jù)路徑,相反的方向是該數(shù)據(jù)路徑的鏡像。本文所討論的基帶處理器允許以這樣一種方式處理數(shù)據(jù),即在RF兩個系統(tǒng)之間通過空中傳輸數(shù)據(jù)。下面討論基本設計要求。
圖1.射頻系統(tǒng)框圖。
數(shù)據(jù)在兩個正交信號 I&Q 上重復
請注意,載波是獨立且彼此異步的。因此,發(fā)射和接收載波之間存在相位和頻率偏移。這對接收器的解調(diào)有不利影響。一個重要的問題是信號反轉,正交信號可能會反轉它們的作用,因為偏移周期性地合并和漂移??朔@種模糊性的簡單方法是在兩個正交信號上重復相同的數(shù)據(jù)。
數(shù)據(jù)串行傳輸和接收(按位)
在大多數(shù)情況下,BBP的RF前端接口是DAC和ADC。這些是模擬信號的數(shù)字接口。因此,不可能簡單地將數(shù)據(jù)發(fā)送到DAC輸入,并期望在ADC輸出端獲得相同的數(shù)據(jù)。數(shù)據(jù)串行傳輸,將單比特數(shù)據(jù)映射到DAC的全分辨率。類似地,數(shù)據(jù)以串行方式接收,從ADC的全分辨率解映射。這提供了充足的冗余。如果這些是 16 位轉換器,接收器將從可能的 65536 數(shù)據(jù)集中做出 1 或 0 的決定。僅此一項就大大簡化了解碼。
I&Q信號彼此正交
RF前端器件(如AD9361)是I/Q收發(fā)器。如果輸入是正交信號,則這些設備工作得最好。這些器件通常沿兩條數(shù)據(jù)路徑具有內(nèi)部I/Q匹配和校正功能,以抵消它們之間的任何變化。慣例是實數(shù)(I)信號是余弦函數(shù),虛數(shù)(Q)信號是正弦函數(shù)。
調(diào)制方案為 BPSK
可以部署所有常見的方法,信號的幅度,頻率或相位調(diào)制。檢測相位差相對容易。由于數(shù)據(jù)是串行傳輸?shù)模虼俗匀贿x擇二進制相移鍵控(BPSK)。
位間隔為 8 個樣本
數(shù)據(jù)需要時序信息,位間隔。最大可能的位間隔是采樣周期。為了使接收器保持簡單,需要充足的時間來解碼信號并做出決定。最簡單的時序恢復方法是過零和峰值檢測。在這種情況下,峰值將不一致。因此,選擇過零來檢測和跟蹤位間隔。兩個系統(tǒng)之間也存在載波差異。在某些情況下,樣本在用戶數(shù)據(jù)的任一端可能不明確。正弦信號的每半允許四個樣本,位間隔設置為八個樣本。因此,有效傳輸速率是采樣頻率除以 8。
數(shù)據(jù)沒有直流內(nèi)容
定時和相對相位恢復基于信號的過零。因此,各個信號需要不含任何直流成分。它還要求信號允許每個位間隔至少跨越一個零點。正弦信號具有這兩種特性,并且非常適合上述BPSK調(diào)制方案。
數(shù)據(jù)被打亂
用戶數(shù)據(jù)是任意的,很可能是一長串 1 或 0。需要對數(shù)據(jù)進行加擾,以便接收器的定時和相位恢復能夠更有效地跟蹤信號。
數(shù)據(jù)以數(shù)據(jù)包形式傳輸
接收器上的信號預計具有幅度、頻率和相位誤差,因為系統(tǒng)彼此異步。解調(diào)信號是傳輸信號相對于本地載波的相位變化。運營商可能會跟蹤一段時間,接受數(shù)據(jù)命中,然后再次跟蹤。因此,設計需要準備好承受一些數(shù)據(jù)丟失。為了支持這一點,數(shù)據(jù)以數(shù)據(jù)包的形式傳輸。可以重復幾個數(shù)據(jù)包來代替整個數(shù)據(jù)。
使用 CRC 驗證數(shù)據(jù)包
數(shù)據(jù)包帶有循環(huán)冗余校驗 (CRC),以便允許接收方在不匹配時丟棄數(shù)據(jù)包并請求再次發(fā)送數(shù)據(jù)包。
在每個前導碼期間進行時序和相位校正
數(shù)據(jù)包標頭帶有一個前導碼,用于將其與接收到的數(shù)據(jù)流區(qū)分開來。接收器還使用該前導碼來復位信號的時序和相位信息,以解調(diào)數(shù)據(jù)包數(shù)據(jù)。
內(nèi)置性能指標
接收方還支持統(tǒng)計計數(shù)器,例如接收、丟棄或更正的數(shù)據(jù)包數(shù)。這些計數(shù)器用于測量和監(jiān)控性能指標,包括誤碼率和有效數(shù)據(jù)率。
總之,數(shù)據(jù)以數(shù)據(jù)包的形式串行傳輸和接收。數(shù)據(jù)包帶有前導碼和 CRC。數(shù)據(jù)在收發(fā)器設備之前的中間正交信號上進行BPSK調(diào)制和解調(diào)。中間信號頻率,因此數(shù)據(jù)的比特率是采樣率的八分之一。具有上述設計細節(jié)的基帶處理器模塊如圖2和圖3所示。
圖2.BBP傳輸功能框圖
圖3.BBP接收功能框圖。
發(fā)送器讀取數(shù)據(jù)字節(jié)(字符寬度),并將其轉換為帶有標頭或前導碼的數(shù)據(jù)包。CRC 被添加到數(shù)據(jù)包的尾端。然后對數(shù)據(jù)包數(shù)據(jù)進行加擾和序列化。然后,單比特數(shù)據(jù)在與收發(fā)器接口之前對余弦(I)和正弦(Q)功能進行相位調(diào)制。
在接收方向上,離線模塊恢復并跟蹤調(diào)制信號的時間間隔和相對相位。此信息用于從輸入的ADC樣本中恢復串行數(shù)據(jù)。然后將它們組裝成數(shù)據(jù)包并進行解擾。在數(shù)據(jù)包的末尾,比較CRC,如果不匹配,則丟棄數(shù)據(jù)包。如果CRC匹配,則數(shù)據(jù)將傳遞給最終用戶。
實現(xiàn)
BBP 設計在硬件中實現(xiàn)和測試。該硬件是兩塊評估板的組合:采用 Zynq FPGA 器件的賽靈思 ZC706 評估板和采用 AD9361 收發(fā)器的 AD-FMCOMMS3-EBZ 評估板。ADI公司提供了支持該硬件的完整參考設計。這種開源設計是免費提供的,完全支持,并在主要工具版本中更新。硬件詳細信息可在以下 URL 中找到:
ZC706
AD-FMCOMMS3-EBZ
Zynq SOC
AD9361
ADI GitHub 存儲庫
ZC706 和 AD-FMCOMMS3-EBZ HDL 參考設計
AXI AD9361 IP
ADI參考設計是支持Linux框架的嵌入式系統(tǒng)。它由ARM處理器周圍的各種外圍設備組成。AD9361器件與axi_AD9361 IP外設接口。它在RF器件和系統(tǒng)存儲器之間傳輸原始采樣數(shù)據(jù)。??
外圍設備和設備通過 Linux 內(nèi)核驅動程序進行初始化和控制。BBP 作為與axi_AD9361接口的另一個 IP 外設實現(xiàn)。BBP IP因歷史原因被命名為axi_xcomm2ip。Linux 中的用戶空間應用程序用于控制、發(fā)送和接收系統(tǒng)之間的數(shù)據(jù)。
在ADI參考設計中,axi_AD9361 IP與發(fā)射方向的解包模塊(util_upack)和接收方向的包裝模塊(util_cpack)接口。在發(fā)射方向,BBP數(shù)據(jù)插入解包模塊和AD9361內(nèi)核之間。為了不影響默認數(shù)據(jù)路徑,BBP 支持可選的數(shù)據(jù)路徑多路復用器來選擇解壓縮的數(shù)據(jù)源或 BBP 數(shù)據(jù)源。BBP 允許將參考設計數(shù)據(jù)路徑作為默認路徑,并且僅在啟用時選擇 BBP 數(shù)據(jù)源。在接收方向,BBP僅與AD9361內(nèi)核接口。參考設計數(shù)據(jù)路徑不受影響。這允許框架工作不受阻礙地啟動和設置系統(tǒng)。系統(tǒng)設置完成后,BBP 將啟用,以通過覆蓋默認數(shù)據(jù)路徑來允許數(shù)據(jù)傳輸。ADI參考設計中BBP的框圖如圖4所示。
圖4.BBP IP 框圖。
本文中討論的設計、初始化和數(shù)據(jù)傳輸使用此硬件。該設置只需要一對HDMI顯示器,一個鍵盤和鼠標以及天線。這些系統(tǒng)彼此完全異步,但確實需要相同的設置。數(shù)據(jù)在每個方向上通過不同的載體傳輸。設備1的發(fā)射載波頻率和設備2的接收載波頻率相同,但在另一個方向上不同。但是,如果在環(huán)回中使用單個設備,則發(fā)射和接收載波必須具有相同的頻率。BBP的HDL設計采用ADI庫模塊。?
控制(微處理器)接口
AXI-Lite 接口用于控制和監(jiān)視處理器的 BBP。該接口模塊使用ADI公共庫(hdl/library/common/up_axi.v)中的up_axi模塊簡單推斷。該模塊將 AXI-Lite 接口轉換為簡單的存儲器,如讀寫總線。內(nèi)部寄存器和存儲器的添加方式與任何其他ADI IP一樣。寄存器映射詳見表1。
地址 | 寄存器名稱 | 類型 | ||
領域 | 名字 | 描述 | 違約 | |
0x000 | XCOMM2IP_VERSION | 反滲透 | ||
31:0 | 版本 | IP 版本。 | 0x40063 | |
0x008 | XCOMM2IP_SCRATCH | 烏爾曼 | ||
31:0 | 抓 | 刮刮樂寄存器 | 0x0 | |
0x800 | XCOMM2IP_TX_RESET | 烏爾曼 | ||
0 | TX_RESET | 如果設置為 0x1,則重置傳輸。此位必須設置為 0x0 才能正常運行。 | 0x1 | |
0x804 | XCOMM2IP_TX_ENABLE | 烏爾曼 | ||
0 | TX_ENABLE | 如果設置為 0x0,則數(shù)據(jù)路徑不受影響,解壓縮數(shù)據(jù)將傳輸?shù)?DAC。如果設置為0x1,則BBP數(shù)據(jù)傳輸?shù)紻AC。 | 0x0 | |
0x808 | XCOMM2IP_TX_REQ | 烏爾曼 | ||
0 | TX_REQ | 如果由軟件設置,則在傳輸方向上啟動數(shù)據(jù)包傳輸。傳輸完成后,硬件會自行清除此位。 | 0x0 | |
0x80C-0x87C | XCOMM2IP_TX_PKT_DATA_3-XCOMM2IP_TX_PKT_DATA_31 | W | ||
7:0 | TX_PKT_DATA_3-TX_PKT_DATA_31 | 分組數(shù)據(jù)字節(jié)為3至31。硬件將前三個字節(jié)用于標頭,最后一個字節(jié)用于 CRC。 | W | |
0xC00 | XCOMM2IP_RX_RESET | 烏爾曼 | ||
0 | RX_RESET | 如果設置為 0x1,則重置接收。此位必須設置為 0x0 才能正常運行。 | 0x1 | |
0xC08 | XCOMM2IP_RX_REQ | 烏爾曼 | ||
0 | RX_REQ | 如果由硬件設置,則表示已收到數(shù)據(jù)包,需要由軟件讀取。軟件必須在讀取數(shù)據(jù)包數(shù)據(jù)后清除此位。所有后續(xù)數(shù)據(jù)包都將被丟棄,直到軟件清除此位。 | 0x0 | |
0xC0C-0xC7C | XCOMM2IP_RX_PKT_DATA_3-XCOMM2IP_RX_PKT_DATA_31 | W | ||
7:0 | RX_PKT_DATA_3-RX_PKT_DATA_31 | 分組數(shù)據(jù)字節(jié)為3至31。硬件將前三個字節(jié)用于標頭,最后一個字節(jié)用于 CRC。 | W |
下面介紹了up_axi模塊端口及其端口映射。
up_rstn:AXI 接口復位(異步低電平有效),連接到s_axi_aresetn。
up_clk:AXI 接口時鐘,連接到s_axi_aclk。
up_axi_*:AXI 接口信號,連接到等效的 s_axi_* 端口。
up_wreq、up_waddr、up_wdata up_wack:內(nèi)部寫入接口,up_wreq信號被置位以指示寫入請求以及地址和數(shù)據(jù)。請求需要通過up_wack端口進行確認。
簡單的寄存器寫入實現(xiàn)如下。
always @(negedge up_rstn or posedge up_clk)
begin
if (up_rstn == 0) begin
up_wack <= ‘d0;
up_reg0 <= UP_REG0_RESET_VALUE;
end else begin
up_wack <= up_wreq_s;
if ((up_wreq_s == 1’b1) && (up_waddr == UP_ REG0_ADDRESS)) begin
up_reg0 <= up_wdata[UP_REG0_WIDTH-1:0];
end
end
end
該模塊在兩者之間執(zhí)行地址轉換。AXI 接口使用字節(jié)地址,但內(nèi)部總線使用 DWORD 地址。結果是up_axi模塊刪除 AXI 地址的兩個最低有效位以生成內(nèi)部 DWORD 地址。
up_rreq、up_raddr、up_rdata up_rack:內(nèi)部讀取接口(up_rreq信號)被斷言為指示讀取請求以及地址。請求需要通過up_rack端口以及讀取的數(shù)據(jù)進行確認。
上面為讀取實現(xiàn)的相同寄存器如下所示。
always @(negedge up_rstn or posedge up_clk)
begin
if (up_rstn == 0) begin
up_rack <= ‘d0;
up_rdata <= ‘d0;
end else begin
up_rack <= up_rreq_s;
if ((up_rreq_s == 1’b1) && (up_raddr == UP_ REG0_ADDRESS)) begin
up_rdata <= up_reg0;
end else begin
up_rdata <= 32‘d0;
end
end
end
相同的地址轉換也適用于讀取。讀取數(shù)據(jù)僅在請求時驅動,否則設置為零。這是因為up_axi模塊將各個地址塊的單個讀取數(shù)據(jù)傳遞到OR門。因此,未選擇的塊需要將讀取數(shù)據(jù)驅動為零。
BBP 有三個地址空間,如上面的寄存器映射表中所列。公共寄存器空間映射到0x000,發(fā)送(DAC)映射到0x800(0x200),接收(ADC)映射到0xC00(0x300)。軟件(Linux用戶空間應用程序)期望將傳輸?shù)臄?shù)據(jù)包數(shù)據(jù)寫入緩沖區(qū),并從另一個緩沖區(qū)讀取接收到的數(shù)據(jù)包數(shù)據(jù)。數(shù)據(jù)包大小選擇為 32 字節(jié),帶有 3 字節(jié)前導碼和 1 字節(jié) CRC。
數(shù)據(jù)接口
AD9361接口內(nèi)核由兩對16位I/Q數(shù)據(jù)組成,用于接收和發(fā)送方向的兩個通道。內(nèi)核與AD9361數(shù)字接口的運行時鐘相同。在2R2T模式下,這是采樣率的4×。在1R1T模式下,這是采樣率的2×。有效數(shù)據(jù)速率由有效信號控制。因此,在2R2T模式下,每四個時鐘置位一次有效。在 1R1T 模式下,每兩個時鐘置位一次有效。BBP 設計用于支持 2R2T 和 1R1T 模式。它使用單個發(fā)射和接收通道。內(nèi)部邏輯在2R2T和1R1T模式下均以采樣速率運行。然后,BBP 以時鐘頻率與接口內(nèi)核傳輸數(shù)據(jù)。這樣做是為了演示BBP內(nèi)的時鐘轉換。在許多情況下,用戶可能希望以采樣速率運行BBP邏輯,而不管收發(fā)器的接口速率如何。
采樣頻率下的內(nèi)部時鐘使用 Xilinx 基元 BUFR 和 BUFG 生成。BUFR是一個分頻器,BUFG是一個高扇出時鐘緩沖器。也可以為此目的使用MMCM。內(nèi)部時鐘的生成方式如下。
parameter XCOMM2IP_1T1R_OR_2T2R_N = 0; localparam XCOMM2IP_SCLK_DIVIDE = (XCOMM2IP_1T1R_OR_2T2R_N == 1) ? “2” : “4”;
BUFR #(.BUFR_DIVIDE(XCOMM2IP_SCLK_DIVIDE)) i_bufr (
.CLR (1’b0),
.CE (1’b1),
.I (clk),
.O (s_clk_s));
BUFG i_bufg (
.I (s_clk_s),
.O (s_clk));
使用BUFR和BUFG可確保時鐘的頻率鎖定,但會犧牲相位確定性。最大相位模糊度是接口時鐘的單個周期。這很容易通過帶有同步信號的四級寄存器陣列進行補償。但是,該設計使用雙端口RAM模塊來實現(xiàn)數(shù)據(jù)傳輸。這是有意作為常見信號處理要求的用例示例完成的。雙端口RAM元件使用ADI庫存儲器模塊(ad_mem)進行推斷。
傳輸接口
在傳輸方向上,處理器將數(shù)據(jù)包數(shù)據(jù)寫入緩沖區(qū)(參見上面的寄存器映射表)。然后,它請求硬件發(fā)送此數(shù)據(jù)包。BBP 不斷向設備發(fā)送數(shù)據(jù)包。在數(shù)據(jù)包的開頭,它會檢查是否有任何請求。如果沒有掛起的請求,它將傳輸空閑數(shù)據(jù)包。如果請求掛起,則會讀取并傳輸數(shù)據(jù)包緩沖區(qū)。
發(fā)送邏輯使用自由運行的位計數(shù)器以位寬運行。當位計數(shù)器0x0時,緩沖區(qū)讀取地址將更新。由于處理器請求可能在數(shù)據(jù)包傳輸期間的任何時間發(fā)生,因此會立即捕獲并在數(shù)據(jù)包傳輸開始時清除該請求。在數(shù)據(jù)包傳輸開始時,如果請求處于掛起狀態(tài),則會將其確認回處理器接口。該請求用于在緩沖區(qū)數(shù)據(jù)或空閑數(shù)據(jù)之間進行選擇。
圖5.傳輸數(shù)據(jù)路徑。
數(shù)據(jù)包數(shù)據(jù)的前兩個字節(jié)設置為 0xfff0。第三個字節(jié)用于指示空閑 (0xc5) 或數(shù)據(jù) (0xa6) 數(shù)據(jù)包。CRC 字節(jié)作為數(shù)據(jù)包的最后一個字節(jié)插入。CRC 多項式是 x8 + x2 + x + 1。除標頭外的所有字節(jié)都將被打亂。加擾多項式與 SONET/SDH (x7 + x6 + 1) 相同。
余弦和正弦查找表用于生成調(diào)制載波。位間隔等于八個樣本中信號的完整周期(0至2π)。位數(shù)據(jù)用于反轉信號。然后將數(shù)據(jù)寫入一個小緩沖器,并使用接口時鐘根據(jù)來自AD9361接口內(nèi)核的有效信號進行讀取。
接收接口
在接收方向,I/Q數(shù)據(jù)被監(jiān)視0xfff0的報頭模式。這是在數(shù)據(jù)包傳輸中出現(xiàn)一次的唯一模式。可以發(fā)送數(shù)據(jù)包數(shù)據(jù),以便加擾器輸出重復此模式。軟件不鼓勵和防止這種情況。該系列連續(xù)12位間隔的同相數(shù)據(jù)序列用于通過定時恢復模塊復位和跟蹤接收器時序和相位。因此,它重置其時序計數(shù)器并將其相位值設置為 0x1。此序列之后的第一個反轉被認為是0x0的。在此之后,定時恢復模塊在整個數(shù)據(jù)包傳輸過程中保持其狀態(tài)。
數(shù)據(jù)恢復模塊對信號進行平均,并對信號的當前相位做出決定。然后將其與時序恢復模塊跟蹤的相對相位進行比較。在發(fā)生沖突的情況下,決策基于過去對信號的變化。這是因為沖突通常由相位切換引起。
圖6.接收數(shù)據(jù)路徑。
然后將解調(diào)的位數(shù)據(jù)組裝成字節(jié)并進行解擾。如果數(shù)據(jù)為空,則數(shù)據(jù)將寫入傳輸緩沖區(qū)。CRC 在數(shù)據(jù)包末尾進行驗證。如果匹配并且寫入了傳輸緩沖區(qū),則會通知處理器接口。該軟件應監(jiān)視此請求,如果設置,則通過讀取其內(nèi)容來清空緩沖區(qū)。然后,它必須清除請求以允許進一步的數(shù)據(jù)包傳輸。
審核編輯:郭婷
-
處理器
+關注
關注
68文章
19407瀏覽量
231182 -
收發(fā)器
+關注
關注
10文章
3454瀏覽量
106243 -
RF
+關注
關注
65文章
3059瀏覽量
167363
發(fā)布評論請先 登錄
相關推薦
評論