原文鏈接(相關文章合集):OFDM 802.11a的xilinx FPGA實現
目錄
1.前言
2.data域的時序要求
3.Debug
1.前言
??前面12篇文章詳細講述了,OFDM 802.11a發射部分data域的FPGA實現和驗證,今天對data域的設計做一個總結。在總結過程中,發現了設計中存在bug,經過檢查和調試成功的解決了bug,現在對整個過程進行詳細描述。
2.data域的時序要求
??前面設計的時候說到過,根據信道間隔(channel spacing)的不同,可以計算出如下一些參數:

時序參數

時序參數
??可以看到當信道間隔為20MHz時,一個OFDM的符號的有效數據周期是3.2us,一個OFDM的符號周期是4us。假設采樣率是20M,那么該采樣率下的采樣周期是50ns,因此一個OFDM符號的有效周期需要64個采樣點。所以我們只要保證IFFT的輸出數據速率大于20MHz即可,后續在DAC輸出的時候,再將數據速率降到20M,由于我們設計的時候數據流一直采用的是vaild-ready握手機制,DAC沒有輸出完當前數據會對前面的一系列處理形成反壓,進而可以保證OFDM符號間不會存在間隙。 ??
考慮到IFFT的輸出需要滿足20MHz的數據速率,使用最快的傳輸方案,64-QAM調制+3/4編碼效率。編碼前的數據速率應該為2063/4=90MHz;編碼后的數據速率為20*6=120MHz。為了仿真方便,系統時鐘選取125MHz。 ?
?總而言之,就是data域的數據必須是以20MHz的速率送給DAC,可以大于20M,但是不能低于20M。也就是,上一個IFFT輸出(經過加循環前綴和加窗之后)的80個數據,和下一個之間的時間間隔不能大于8us。
3.Debug
??對于之前的設計,按照如下連接方式進行測試:

data域模塊連接圖
??采用64-QAM調制+3/4編碼效率。之前的設計仿真結果如下:

之前有bug的設計仿真結果
從上圖可以看到,每個IFFT輸出之間,間隔為,是不能夠保證OFDM符號間不會存在間隙的,除非將系統時鐘提高,但是這樣會帶來更大的挑戰。所以還是著手于去排查問題,檢查中間傳輸是否存在氣泡,影響效率。

并串轉換存在傳輸氣泡
如上圖所示,并串轉換模塊在進行最后一個數據輸出后,隔了一個時鐘才開始像上游請求接收數據。按理說,應該在傳輸完最后一個數據,dout_rdy立即拉高,向上游請求接收數據,這里延遲了一個時鐘導致產生了一個傳輸氣泡。由于64-QAM調制+3/4編碼效率,測試數據一個OFDM符號為216個數,第一次并串轉換和后面卷積編碼和刪余之間使用的模2的并串轉換,均會產生大量傳輸氣泡,大大增加了系統延時。點此跳轉到之前設計的并串轉換模塊
更正設計,擠掉傳輸氣泡,代碼如下(其中counter為自己設計的計數器IP核點此跳轉到計數器篇):
assign?wr_en??=?dout_rdy?&?din_vld?;//與上游握手成功,開始接收數據
assign?rd_en??=?din_rdy?&?dout_vld?;//與下游握手成功,啟動讀計數器,開始輸出counter?#(.CNT_NUM(WIDTH),.ADD(LSB_FIRST))
u_counter(.clk??(clk????),?.rst_n??(rst_n????),.En_cnt??(rd_en????),??????.cnt??(cnt????),?.cnt_last?(cnt_last???)
);assign??dout?=?din_r[cnt];always?@(posedge?clk?or?negedge?rst_n)if(!rst_n)begindin_r?<=?'d0;dout_vld?<=?1'b0;endelse?if(wr_en)begindin_r?<=?din;dout_vld?<=?1'b1;//寫進數據時,輸出有效endelse?if(rd_en?&?cnt_last)dout_vld?<=?1'b0;//輸出完成,輸出無效;只有在輸入數據無效的時候才會進入次判斷,保證無氣泡傳輸/*?//初始化時,或輸出數據完成,可以接收數據(之前含有氣泡的設計)
always?@(posedge?clk?or?negedge?rst_n)if(!rst_n)dout_rdy?<=?1'b1;else?if(cnt_last?&?rd_en)dout_rdy?<=?1'b1;else?if(wr_en)dout_rdy?<=?1'b0;?*/?
assign?dout_rdy?=?cnt_last?&?rd_en?|?~dout_vld;//更正后擠掉氣泡
如下圖所示,可以看到更正之后,數據連續傳輸,沒有氣泡。

擠掉并串轉換傳輸氣泡
對IFFT輸出間隔進行測量:

Debug后IFFT輸出間隔
如上圖所示,輸出間隔為,符合802.11a協議的要求。64-QAM調制+3/4編碼效率,符合要求,那么802.11a中其他調制方式也肯定符合要求。
下面是10個OFDM符號,采用64-QAM調制+3/4編碼效率,加窗后,FPGA輸出和Matlab仿真對比。

實部

虛部
原文鏈接(相關文章合集):OFDM 802.11a的xilinx FPGA實現