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