)
AMD LogiCORE? IP 快速傅里葉變換FFT核實現(xiàn)了庫利?圖基Cooley?TukeyFFT 算法該算法是一種高效計算離散傅里葉變換DFT的方法。本 IP 核支持標(biāo)準(zhǔn)采樣模式與超采樣率SSR工作模式在定點、原生浮點運算模式下每個時鐘周期最多可處理 64 個采樣點。主要功能特點支持復(fù)數(shù)信號的正向 FFT 與反向 IFFT 運算。變換點數(shù)只能是 2 的整數(shù)次冪范圍 865536 點。提供多種運算方式定點運算無縮放、分級縮放、塊浮點三種模式方便控制溢出與計算噪聲原生浮點運算采用標(biāo)準(zhǔn) IEEE754 單精度浮點格式。輸入數(shù)據(jù)、旋轉(zhuǎn)因子的位寬可在 834bit 之間配置。超采樣率 SSR每個時鐘周期并行處理多組采樣大幅提升吞吐。定點架構(gòu)每周期可并行處理 1/2/4/8/16/32/64 個采樣浮點架構(gòu)每周期可并行處理 2/4/8/32/64 個采樣。內(nèi)置 4 種硬件架構(gòu)用戶可以根據(jù)需求在占用資源多少和數(shù)據(jù)處理速度之間做取舍。存儲旋轉(zhuǎn)因子與采樣數(shù)據(jù)時可以選用塊 RAM 或者分布式 RAM。四種硬件架構(gòu) 流水線流式 I/O、基 4 突發(fā) I/O、基 2 突發(fā) I/O、精簡基 2 突發(fā) I/O。該 FFT IP 采用三組獨立的 AXI4?Stream 通道配置通道、數(shù)據(jù)輸入通道、數(shù)據(jù)輸出通道額外附帶狀態(tài)通道與事件報警信號。s_axis_config每幀開始前下發(fā)配置動態(tài)指定 FFT/IFFT、變換點數(shù)、縮放策略、循環(huán)前綴長度s_axis_data送入時域復(fù)數(shù)采樣tlast 標(biāo)記一幀末尾m_axis_data輸出頻域或 IFFT 時域運算結(jié)果tuser 攜帶溢出、塊指數(shù)、輸出索引等附加信息event_xxx 事件信號用來監(jiān)測幀異常、運算溢出、數(shù)據(jù)流停滯等故障方便系統(tǒng)調(diào)試與錯誤處理。信號名稱輸入 / 輸出是否可選描述aclk輸入否上升沿時鐘信號aclken輸入是高電平有效的時鐘使能信號可選aresetn輸入是低電平同步復(fù)位信號可選復(fù)位擁有最高優(yōu)先級復(fù)位脈沖寬度至少保持 2 個時鐘周期s_axis_config_tvalid輸入否配置通道有效信號。由外部主控拉高表示準(zhǔn)備向 IP 發(fā)送配置數(shù)據(jù)s_axis_config_tready輸出否配置通道就緒信號。由 IP 拉高表示 IP 可以接收配置數(shù)據(jù)s_axis_config_tdata輸入否配置通道數(shù)據(jù)。承載配置信息循環(huán)前綴長度 CP_LEN、正 / 逆變換選擇 FWD_INV、FFT 點數(shù) NFFT、縮放表 SCALE_SCH支持運行時變換參數(shù)配置s_axis_data_tvalid輸入否數(shù)據(jù)輸入通道有效信號。外部主控拉高表明輸入數(shù)據(jù)有效s_axis_data_tready輸出否數(shù)據(jù)輸入通道就緒信號。IP 拉高表示 IP 能夠接收輸入采樣數(shù)據(jù)s_axis_data_tdata輸入否數(shù)據(jù)輸入通道數(shù)據(jù)。傳輸復(fù)數(shù)采樣信號包含實部 XK_RE、虛部 XK_IMs_axis_data_tlast輸入否輸入幀結(jié)束標(biāo)記。外部主控在一幀最后一個采樣點拉高該信號僅當(dāng) tlast 出現(xiàn)異常時IP 才會產(chǎn)生 tlast 錯誤事件m_axis_data_tvalid輸出否數(shù)據(jù)輸出通道有效信號。IP 拉高表示輸出采樣數(shù)據(jù)有效m_axis_data_tready輸入否數(shù)據(jù)輸出通道就緒信號。下游模塊拉高表示可以接收 IP 輸出數(shù)據(jù)僅在非實時模式Non?Realtime下存在實時模式Realtime無此端口m_axis_data_tdata輸出否數(shù)據(jù)輸出通道數(shù)據(jù)輸出經(jīng)過 FFT/IFFT 運算后的復(fù)數(shù)結(jié)果包含實部 XK_RE、虛部 XK_IMm_axis_data_tuser輸出否輸出用戶附加信息通道。攜帶幀相關(guān)附加信息輸出索引 XK_INDEX、溢出標(biāo)志 OVFLO、塊浮點指數(shù) BLK_EXP 等m_axis_data_tlast輸出否輸出幀結(jié)束標(biāo)記。IP 在一幀的最后一個輸出采樣點拉高該信號m_axis_status_tvalid輸出否狀態(tài)通道有效信號。IP 拉高表示狀態(tài)數(shù)據(jù)有效僅在非實時模式下存在m_axis_status_tready輸入否狀態(tài)通道就緒信號。下游模塊拉高表示可以接收狀態(tài)數(shù)據(jù)僅在非實時模式下存在m_axis_status_tdata輸出否狀態(tài)通道數(shù)據(jù)傳輸塊浮點指數(shù) BLK_EXP、整幀溢出 OVFLO 等幀狀態(tài)信息event_frame_started輸出否幀啟動事件信號。IP 拉高標(biāo)志 IP 開始處理新一幀數(shù)據(jù)event_tlast_unexpected輸出否異常 tlast 事件。當(dāng)一幀還沒有結(jié)束輸入通道提前出現(xiàn) tlast 幀結(jié)束標(biāo)志時該信號拉高報警event_tlast_missing輸出否tlast 缺失事件。一幀數(shù)據(jù)傳輸完畢但在最后一個采樣點沒有收到 tlast 結(jié)束標(biāo)志該信號拉高報警event_fft_overflow輸出是FFT 溢出事件。當(dāng)運算出現(xiàn)溢出時拉高僅在輸出通道溢出有效時觸發(fā)event_data_in_channel_halt輸出否輸入通道暫停事件。IP 請求接收新數(shù)據(jù)但外部無法提供有效數(shù)據(jù)輸入通道停滯信號拉高報警event_data_out_channel_halt輸出否輸出通道暫停事件。IP 已經(jīng)產(chǎn)生有效輸出數(shù)據(jù)但下游 tready 未拉高無法接收輸出通道停滯僅非實時模式有效event_status_channel_halt輸出否狀態(tài)通道暫停事件。IP 產(chǎn)生狀態(tài)數(shù)據(jù)但下游無法接收僅非實時模式有效時鐘本 IP 核僅使用一路時鐘信號 aclk。所有輸入、輸出接口以及內(nèi)部狀態(tài)均同步于該時鐘。aclken時鐘使能若 IP 核引出 aclk 時鐘使能引腳將該引腳置低可暫停 IP 運行并保持當(dāng)前狀態(tài)不變IP 內(nèi)部所有邏輯停止工作將 aclk 置高IP 恢復(fù)繼續(xù)運算。復(fù)位aresetn同步清零若 IP 核引出 aresetn 引腳當(dāng)該引腳拉低時所有輸出引腳、內(nèi)部計數(shù)器以及狀態(tài)變量均復(fù)位至初始值。下表給出的初始值同樣是芯片上電后的默認(rèn)值無論 IP 是否開啟復(fù)位功能。所有正在執(zhí)行的數(shù)據(jù)加載、FFT 變換運算、數(shù)據(jù)輸出流程都會停止并重新初始化。NFFT 默認(rèn)設(shè)置為 IP 配置允許的最大 FFT 點數(shù)即在 AMD Vivado 集成設(shè)計環(huán)境 IDE 中設(shè)定的變換長度縮放調(diào)度默認(rèn)系數(shù)為 1/N。對于基 4 突發(fā) I/O 架構(gòu)、流水線流式 I/O 架構(gòu)當(dāng) FFT 點數(shù)不為 4 的整數(shù)次冪時最后一級縮放系數(shù)為 1其余各級縮放系數(shù)見表 3。事件信號本 IP 提供若干非 AXI 標(biāo)準(zhǔn)的實時事件信號用來上報 IP 運行狀態(tài)。事件信號每個時鐘周期更新一次可接入中斷控制器等響應(yīng)式組件。該類信號不能在 IDE 中配置若端口懸空未連接綜合工具會將其移除。event_frame_startedIP 開始處理新一幀數(shù)據(jù)時該事件信號拉高單個時鐘周期??衫迷撔盘柦y(tǒng)計幀數(shù)或根據(jù)需要將 IP 配置與特定幀做同步。event_tlast_missing在一幀的最后一個輸入采樣點若s_axis_data_tlast為低電平該事件信號拉高單個時鐘周期。代表 IP 與上游數(shù)據(jù)源的幀長度配置不匹配上游數(shù)據(jù)源設(shè)置的幀點數(shù)大于 IP 的幀點數(shù)。該事件僅在 IP 開始處理幀時才會判定上報因此報警信號相比缺失的tlast會滯后較多時鐘周期。event_tlast_unexpectedIP 在非幀末尾的采樣點檢測到s_axis_data_tlast為高電平時該事件信號拉高單個時鐘周期。代表 IP 與上游數(shù)據(jù)源幀長度配置不匹配上游數(shù)據(jù)源設(shè)置的幀點數(shù)小于 IP 的幀點數(shù)。 該事件僅在 IP 開始處理幀時判定上報報警信號相比異常tlast會滯后較多時鐘周期若一幀內(nèi)多次出現(xiàn)無效 tlast每次都會觸發(fā)一次該事件。event_fft_overflow當(dāng)m_axis_data_tdata輸出采樣數(shù)據(jù)出現(xiàn)溢出時每個時鐘周期該信號均保持拉高。只有采用縮放定點算法或者偽浮點 I/O 模式時才可能產(chǎn)生 FFT 溢出報警其余配置模式下該引腳會被綜合移除。event_data_in_channel_haltIP 需要從數(shù)據(jù)輸入通道獲取數(shù)據(jù)但此時沒有有效數(shù)據(jù)每個時鐘周期該信號均拉高。實時模式盡管幀數(shù)據(jù)發(fā)生不可恢復(fù)損壞IP 仍然繼續(xù)處理當(dāng)前幀非實時模式IP 暫停幀處理只有收到新輸入數(shù)據(jù)后才繼續(xù)運算幀數(shù)據(jù)不會損壞。 兩種模式下只要輸入通道無有效數(shù)據(jù)事件信號就持續(xù)有效直到收到輸入數(shù)據(jù)。event_data_out_channel_haltIP 需要向數(shù)據(jù)輸出通道寫入結(jié)果但通道緩沖區(qū)已滿無法輸出每個時鐘周期該信號拉高。觸發(fā)后 IP 暫停運算所有操作停止直到輸出緩沖區(qū)有空余位置幀數(shù)據(jù)不會損壞。該事件引腳僅在非實時模式下可用。event_status_channel_haltIP 需要向狀態(tài)通道寫入狀態(tài)數(shù)據(jù)但通道緩沖區(qū)已滿無法輸出每個時鐘周期該信號拉高。觸發(fā)后 IP 暫停運算所有操作停止直到狀態(tài)緩沖區(qū)有空余位置幀數(shù)據(jù)不會損壞。該事件引腳僅在非實時模式下可用。AXI4?Stream 接口設(shè)計要點采用 AXI4?Stream 接口實現(xiàn)了 AMD LogiCORE IP 標(biāo)準(zhǔn)化提升不同 IP 之間的互通兼容性。除 aclk、aclken、aresetn 等通用控制信號、事件信號以外IP 所有輸入輸出信號均由 AXI4?Stream 通道傳輸。 一條 AXI 通道固定包含 TVALID、TDATA根據(jù)需求可選增加 TREADY、TUSER、TLAST 等信號。TVALID 與 TREADY 完成握手交互以傳輸報文報文載荷由 TDATA、TUSER、TLAST 共同組成。字段名位寬是否填充對齊說明NFFT5bit是變換點數(shù)。NFFT 可以設(shè)置為最大點數(shù)或者更小點數(shù)例如最大 1024 點 FFT 可配置成 1024/512/256 點等。NFFT 的值 log?(點數(shù))僅在開啟運行時可配置變換長度功能時有效詳見變換長度章節(jié)CP_LENlog?(最大點數(shù))是循環(huán)前綴長度從變換結(jié)果末尾取出的采樣點數(shù)在輸出整個幀之前作為循環(huán)前綴先行輸出。取值范圍 0點數(shù)?1。僅開啟循環(huán)前綴插入功能時存在詳見循環(huán)前綴插入章節(jié)FWD_INV正向變換 1SCALE_SCH當(dāng) N 為 4 的整數(shù)次冪基 4 突發(fā) I/O 或流水線流式 I/O 架構(gòu)[10 10…10]當(dāng) N 不為 4 的整數(shù)次冪基 4 突發(fā) I/O 或流水線流式 I/O 架構(gòu)[01 10…10]基 2 突發(fā) I/O、基 2 精簡突發(fā) I/O 架構(gòu)[01 01…01]下一篇會單獨寫IP核的仿真。