很多小夥伴對上一篇文章講的取對數沒感覺,覺得這個沒什麼用。確實很多時候用不著,verilog本身不夠靈活,所以很多時候我們也就沒想把她寫的多簡介靈活,而且受限於編譯器的支持,很多靈活的語法不能被編譯成電路,所以有這種想法情理之中,畢竟花大把時間去玩一個函數發現他局限性很大那確實收益太少。
那麼他到底有什麼用?
如果大家要設計一個深度1024的fifo,那麼地址位寬取多大合適?*╭︎( ˙º˙)╯︎*
當然是10位,log2(1024)
所以可以如下定義
parameter deepth = 1024;
parameter width = $clog2(deepth);
這樣就把兩個參數關聯起來,調整代碼的時候提高了可維護性也更方便。
⊙ω⊙...⊙ω⊙
但是到此為止了嗎?不知道大家有沒有對做完fft以後取對數很苦惱,比如fft輸出實部虛部各16bit,平方和開根號以後暫且也以16bit表示,那麼怎麼取對數呢?第一種方法是查表,第二種是傳到上位機,讓他處理。很多時候FPGA上確實不需要取對數這個操作,但是如果受限於高速接口,比如萬兆網,pcie等接口速率希望壓縮數據的時候對fft結果取對數無疑是一個很有必要的操作。畢竟log10這個對數可以把16位的數壓縮到8位以內。所以查表確實可行,但是位數是24位呢,那情況就多了太多了,32位呢?
所以取對數這時候就有價值了,但是這是10為底的對數,和2為底的對數有什麼關係?當然有關係,換底公式啊!
多數時候fft之後我們計算10*log10或者20*log10,那麼就等價於如下操作
忽略3後面的小數影響的話,那麼可以近似為
多震撼的結論,所以數學好真的很有必要啊!當然你想更高精度,可以對換底公式以後的分子分母同時放大10的冪次方倍,然後再往下計算,這裡留給讀者自行思考。
是不是很累,很複雜?
那麼我告訴你,verilog2005有log10的系統函數,哈哈哈哈哈,意不意外???
想知道的話大家去查查verilog 2005的國際標準(༎ຶ-༎ຶ)
llllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllll
hi,這是我用百度網盤分享的內容~複製這段內容打開「百度網盤」APP即可獲取
連結:https://pan.baidu.com/s/17c6fz_RwDGnPr3_CbpRKYA
提取碼:he16
llllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllll
寶兒姐鎮樓