“把一個算法用RTL實現,有哪些比較科學的步驟?第一步干什么?第二步干什么?第三步干什么……?”
這個問題,對于FPGA、ASIC等邏輯電路設計人員來講,是非常重要的問題。
通常來講,我們做算法實現,需要有對標的算法模型,作為驗證硬件邏輯設計是否正確的參考依據。
我們首先要根據實際需求,針對某方面的信號處理問題,做一個鏈路級或模塊級快速仿真驗證設計。最常見的比如通過MATLAB/C/C++等軟件環境進行設計和驗證。
軟件環境可以快速搭建仿真模型,并且進行驗證,為硬件RTL實現提供參考依據。在具體算法設計時,必須考慮數據流的處理過程:數據從哪里來,數據需要經過哪些步驟處理,處理之后送到哪里。
接下來,我們需要將MATLAB、C++等算法模型由浮點轉為定點,這個工作可以做好之后再去做邏輯設計,也可以省略,但一定要清楚是如何定點的。
做好算法設計后,需要進行性能評估,看是否符合預期要求,不符合則進一步優化,或者換一種設計方法。
在做邏輯實現之前,還有一個重要工作,就是對算法處理步驟進行一步一步分解,解決如何從a到b再到c的過程,落實到加減乘除。
當算法實際滿足要求后,則考慮邏輯實現的問題。
首先,建議采用自頂向下的設計思想,進行系統架構設計,明確整個處理過程,需要執行哪些功能,涉及哪些接口。
接下來,選芯片器件,評估資源占用情況,評估需要用多少乘法器,除法器,DSP,BRAM,GT等。
其次,評估處理時間要求,是否需要實時性處理,給予多少時間來處理,進而評估所需時鐘頻率,以及是否需要存在多個時鐘域處理。
對于信號處理系統,有的需要實時處理,有的則不需要實時處理。最具挑戰的無疑是實時性要求高的通信、雷達和圖像等領域的信號處理問題。
首先解決信號處理中的算法問題,為實現某一處理過程,需要分哪些步驟,最終得到什么樣的結果。
為了實現實時處理,邏輯電路該怎么去設計?
于是,算法問題既要研究如何處理數據流的問題,也要研究如何快速處理的問題。
電路實現時,則需要考慮資源消耗、并行處理結構,流水處理和控制邏輯。
如果有處理速率要求,則需考慮并行+流水的處理方式,并考慮單時鐘下的數據位寬。
同時,務必明確數據流向,前后級接口,功能模塊內部RTL邏輯處理,細化到每個時鐘應該怎么處理,step by step。
以上都比較明確后,可以著手進行RTL設計。RTL設計的核心,便是寄存器、RAM和FSM的靈活使用。其中,FSM占據了大部分功能。通常情況下,我們不只是操作純數據流,而是在各種控制信號和參數下進行設計,此時涉及各種FSM和選擇器設計,并注意是否需要進行流控。
RTL代碼設計完成之后,進行TestBench平臺搭建和仿真驗證是必要的,特別是對于復雜功能模塊或系統設計而言。經驗再豐富的工程師,也不敢保證,不經過仿真驗證直接上板一定沒問題。
驗證也是一門重要的技術,這也是為什么存在IC驗證崗位,目的就是為芯片成功流片嚴格把關,一旦流片失敗,損失重大,影響深遠。
FPGA的開發設計,同樣需要進行仿真驗證。通常,我們可以通過算法鏈路產生所需激勵源,通過TestBench對功能模塊進行驗證,并進行結果對比分析。重點解決兩個問題:
一是驗證邏輯時序是否存在問題,比如信號是否對齊,有無接口處理不當導致數據丟失等。
二是信號處理過程是否得當,數據位寬、精度等是否符合算法要求。
解決功能性問題后,就需要考慮性能問題。定點是否合適,與浮點算法性能的差異有多大,或者軟件中的定點處理與邏輯電路定點處理,誤差有多大。在不斷驗證過程中,優化算法設計和邏輯電路設計。
剩下的邏輯綜合、實現、比特流生成和調試等環節,屬于常規操作,但對于邏輯綜合、實現中的時序約束和相關策略設置,也是十分重要的。
最后,用一張圖總結如何從算法到RTL實現。
本文只是粗略地分析了算法到RTL代碼實現之間的邏輯關系,以及從實現角度,我們應該怎么去著手。
具體到某個信號處理算法實現時,必須清楚整個信號處理過程,對算法一步一步分解,再對信號流、定點和接口進行設計。
審核編輯:劉清
-
FPGA
+關注
關注
1630文章
21768瀏覽量
604624 -
邏輯電路
+關注
關注
13文章
494瀏覽量
42658 -
asic
+關注
關注
34文章
1205瀏覽量
120600 -
RTL
+關注
關注
1文章
385瀏覽量
59874
原文標題:從算法到RTL實現,FPGA工程師該怎么做?
文章出處:【微信號:處芯積律,微信公眾號:處芯積律】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論