溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

如何將算法翻譯成Verilog

發(fā)布時(shí)間:2021-12-22 14:17:39 來源:億速云 閱讀:104 作者:柒染 欄目:互聯(lián)網(wǎng)科技

這期內(nèi)容當(dāng)中小編將會(huì)給大家?guī)碛嘘P(guān)如何將算法翻譯成Verilog,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

我是一名數(shù)字前端IP設(shè)計(jì)工程師,方向?yàn)橥ㄐ判酒琁P設(shè)計(jì),我的工作主要就是將算法C代碼手工轉(zhuǎn)換為RTL,尤其是通信芯片的設(shè)計(jì),算法主要是將浮點(diǎn)運(yùn)算近似成定點(diǎn)運(yùn)算,定點(diǎn)的精度決定了系統(tǒng)的性能,所以一種開發(fā)模式就是,用C平臺(tái)生成的case數(shù)據(jù)和RTL仿真的數(shù)據(jù)進(jìn)行對比,保證定點(diǎn)化后的仿真性能。

所以對于單個(gè)計(jì)算模塊的開發(fā)來說,可以說就是體力活了,算法的計(jì)算過程已經(jīng)擺在那里,單就是純翻譯。

然而再復(fù)雜的算法,在設(shè)計(jì)工程師的眼里,也就是一堆數(shù)學(xué)公式,算法設(shè)計(jì)者也應(yīng)該盡量做簡單的算法實(shí)現(xiàn),比如除法,求冪次方、開平方等復(fù)雜運(yùn)算到了設(shè)計(jì)工程師這里都已經(jīng)轉(zhuǎn)化成了簡單的乘法和加法運(yùn)算。更復(fù)雜的就是累加、累乘(我所能接觸到的)。

做芯片第一應(yīng)該關(guān)注的是芯片的PPA(Performance, Power, Area),如何設(shè)計(jì)的出更高性能的電路,占用更少的資源/面積,更低的功耗。這才是我們的專業(yè)知識。

通過學(xué)習(xí)算法代碼和文檔以及協(xié)議,了解算法的計(jì)算意圖。然后進(jìn)行數(shù)據(jù)通路的分析,整體的數(shù)據(jù)流走向。哪些需要計(jì)算的數(shù)據(jù)可以用寄存器存儲(chǔ),哪些數(shù)據(jù)需要用RAM存儲(chǔ)。模塊的劃分可拆解,哪些計(jì)算單元是功能類似的,可以做成一個(gè)小IP,乘法器同時(shí)使用的最大數(shù)量,是否能在整個(gè)大模塊中分時(shí)復(fù)用。

算法的設(shè)計(jì)中沒有時(shí)序的概念,也沒有計(jì)算時(shí)間的長短。需要設(shè)計(jì)工程師去整理整個(gè)模塊的計(jì)算流水,流水線排的時(shí)間長,需要的計(jì)算邏輯就越少,反之,面積越大。面積與速度互換思想,貫穿始終?,F(xiàn)成乘法器的數(shù)量有限,是否能加上幾個(gè)乘法器而獲得模塊整體運(yùn)算速度提高30%的收益,都需要去折中(Trade off)考慮。

排好計(jì)算流水,控制通路,一般都使用狀態(tài)機(jī)去做,當(dāng)然,狀態(tài)機(jī)怎么設(shè)計(jì)算法可不會(huì)教你。整個(gè)模塊與更高層模塊的交互,接口控制時(shí)序需要討論確定。數(shù)據(jù)通路可能還需要用到RAM/Regfile去緩存中間數(shù)據(jù)的結(jié)果,RAM/Regfile的讀寫地址控制也是常見設(shè)計(jì)。數(shù)據(jù)通路的運(yùn)算,是主要消耗資源的部分,所以一個(gè)好的詳細(xì)設(shè)計(jì)方案非常重要,同樣的設(shè)計(jì),別人可以用比你小30%的面積和少30%的時(shí)間來實(shí)現(xiàn)。這可能就是設(shè)計(jì)工程師真正的價(jià)值體現(xiàn)之處。

對于通信算法中,矩陣運(yùn)算也是比較常見的,復(fù)雜矩陣的運(yùn)算是最耗費(fèi)資源的,矩陣運(yùn)算的拆解也需要很多技巧,比如矩陣的乘法是A的第一行乘以B的第一列,累加得到第一個(gè)元素,這部分的運(yùn)算電路可以復(fù)用流水起來做。一個(gè)矩陣需要拆解合并成數(shù)個(gè)小矩陣,想要保持并行,用寄存器存儲(chǔ),就會(huì)消耗的資源多。存在RAM中就是串行流水做會(huì)消耗的時(shí)間長,所以這都需要在模塊架構(gòu)設(shè)計(jì)階段去計(jì)算處理時(shí)間和評估消耗資源、折中是否采?。═rade off)。

這種大型矩陣運(yùn)算動(dòng)輒幾百上千bit的寄存器輸出,連線選擇運(yùn)算,可能會(huì)造成后端congestion問題,所以方案設(shè)計(jì)的重要性又體現(xiàn)出來了。組合邏輯的運(yùn)算,如果路徑過長,時(shí)序會(huì)出現(xiàn)問題,插寄存器的位置也非常重要,消耗的寄存器的數(shù)量也是不同的,甚至可以通過手動(dòng)retimming,找個(gè)寄存器把打拍的位置換一下,消耗的資源還是相同的。

對于芯片的功耗前端能做的就是,去加一些時(shí)鐘門控,模塊不用時(shí)候可以關(guān)掉,組合邏輯計(jì)算單元不用的時(shí)候避免翻轉(zhuǎn),乘法器的使能信號的控制,避免無效翻轉(zhuǎn),數(shù)據(jù)通路寄存器帶著使能打拍,工具也會(huì)自動(dòng)插時(shí)鐘門控,這些就和算法沒關(guān)系了。

至于算法,當(dāng)然不同領(lǐng)域的相關(guān)知識不同,雖然設(shè)計(jì)方法是完全類似的,但是在一個(gè)領(lǐng)域深扎,成為這個(gè)領(lǐng)域的專業(yè)的人,可以更好的理解算法到硬件的實(shí)現(xiàn)。

IP設(shè)計(jì)工程師經(jīng)常調(diào)侃自己是算法“翻譯官”,雖然也沒什么問題,但是自嘲歸自嘲,如果感興趣的話,還是應(yīng)該去想著如何更好的做好自己的設(shè)計(jì),做好芯片。即使是“翻譯官”也是一個(gè)十分有價(jià)值的“翻譯官”。

上述就是小編為大家分享的如何將算法翻譯成Verilog了,如果剛好有類似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI