Verilog演算法入門

2021-08-09 05:17:40 字數 2475 閱讀 8406

一、什麼是演算法?

演算法就是按步就班地解決問題,也就是解決問題的辦法。

演算法是個很泛的概念,並不是一定得包含高深的數學公式。

二、用verilog語言實現的演算法跟c語言實現的演算法有何區別?

verilog是完全可以自主地設計硬體,而c語言則是依賴於cpu,依賴於現成的硬體。

verilog做出來的演算法執行速度往往比c的要快,這也是我們使用verilog最好的理由。

然而,較為複雜的演算法,就很難使用verilog實現。

三、怎樣用verilog實現演算法?

1、直接法。直接把公式、邏輯關係轉成verilog。

2、間接法。把c語言、matlab的m語言等現成的演算法轉成verilog。

3、混合法。比如在zynq等arm+fpga的異構晶元中,把演算法的一部分工作交給arm,另一部分交給fpga,也就是c與verilog混合。

4、偷懶。使用現成的ip核。

下面詳細地介紹直接法、間接法和混合法。

四、直接法。

1、把數學公式轉成verilog。

先回想起數電裡最基礎的數位電路:與或非門、選擇器、計數器、移位暫存器、加法器、乘法器、ram/rom等。

把複雜的數學公式拆分成若干個簡單的計算步驟,再對應於基本的數位電路,並畫出電路圖(熟練後可以不畫)。

另外還要考慮數字在fpga中的表示方式,推薦計算機組成原理的《定點與浮點》。

還有一些較難計算的函式,如:三角函式、開方、e的n次方等,可以使用cordic演算法。

2、把邏輯關係轉成verilog。

乙個數學公式常常包含優先順序,也就是先算一部分,後算一部分,這也是屬於邏輯關係。

這時,可以使用狀態機、計數器、流水線操作等,理清它們的邏輯關係。

不包含數學公式的演算法,也是使用該方法處理。

五、間接法。

由於matlab的m語言可以轉成c語言,而且c語言是一種較為貼近硬體層的語言(微控制器使用c語言開發就是最好的證明)。這裡就以c語言轉verilog為例。

與直接法類似,也是先把c語言往基本的數位電路靠攏,並畫出電路圖(熟練後可以不畫)。

具體的**,可以參考本部落格的《最大公約數stein演算法之verilog實現》。

這裡需要特別注意的一點,不一定要照著c語言一步一步轉換。

你可以先得到c語言演算法的輸入和輸出,自己構造裡面的電路,也就是把c語言當成乙個黑匣子。

實際在寫**時,不一定需要使用c和verilog混合語言開發(防歧義)。

其中的邏輯關係,也是跟直接法一樣的處理方法。

此外,要盡量避免做fpga不擅長的計算,如:求餘、迭代等。要把這些計算轉化成fpga擅長的,如:加法、移位、查表等。

當然,計算結果可以做取捨,只要精度符合要求即可。

六、混合法。

混合法適用於異構晶元,如arm+fpga。在arm中可以使用c語言,在fpga中可以使用verilog語言。

這樣,我們把各自擅長的任務分配給不同的架構。

作業系統、人機互動、複雜的協議棧交給arm。(低速、非實時、變化較多)

高速介面、大吞吐量的資料、重複性高且簡單的運算交給fpga。(高速、實時、變化較少)

一種影象識別的框圖,如下圖所示。

其中演算法的處理,跟間接法一樣。但是這裡多了乙個介面。

介面,說白了,就是搬運資料,把fpga的資料搬到arm。這裡需要考慮速率、接外掛程式使用時的便利性。

1、速率。

fpga出來的資料要以多快的速率,才讓arm無誤地接收。一般像這種大量的資料搬運,在arm中可以使用dma。

2、接外掛程式使用時的便利性。

比如,傳影象有並行rgb、vga、dvi、hdmi、dp、lvds、usb、pcie等介面。

選用不同的介面,要考慮arm底層的驅動是否易寫、座子的體積、是否支援熱插拔等。

七、其它問題。

使用verilog做演算法,最基本的還是要發揮出fpga最擅長做的事,把fpga不擅長的交給其它晶元。

關於工程師具體做什麼樣的演算法,還是要看相關的演算法書籍,也就是要把理論學好(可以參考《如何學習fpga》第五點),才能做出演算法。

verilog只是表達演算法的一種工具。

verilog入門小結

1 verilog hdl語言過程中關於三種常用賦值語句 阻塞賦值語句,相當於序列語句,即所有該型別語句在所在模組內按順序執行。常用於組合邏輯。非阻塞賦值語句,相當於並行語句,當該語句所在模組結束時,所有帶 的語句同時執行。常用於時序邏輯 暫存器 2 inout outpunt inout 等本身預...

Verilog 語法入門知識

verilog 語法入門知識 一 變數型別 數值 數值表示採用 二進位制位數 數值表示的進製 數值 的結構。其中進製可以為b o d h分別代表 二 八 十 十六進製制。例如22 d0代表22位二進位制數用十進位制表示為0。暫存器型別 reg宣告暫存器型別變數,如 reg 0 3 my 0 63 是...

Verilog演算法高階

verilog演算法入門 只是介紹一些寫 時的基本思路,但是,一上來就寫 的,往往很難寫出來。接下來,介紹一下較為正規的流程。做演算法時,一般包含以下幾個步驟。需求分析 快速原型驗證 編排框架 編寫 演算法驗證 演算法優化 保護智財權 撰寫文件。這些步驟不一定要遵守,在實際的工程當中,可以視具體情況...