IP核引发的关于定,浮点数的认识
上面是一段關于CORDIC_IP測試文件,用于計算給定角度的sin值和cos值,關于數值表示規則在此不再重復,僅僅說明以下3點:
1? 數采用原碼,反碼,補碼,本身并沒有正確與否之分(這一點很重要,我們不能認為只有補碼的表示是正確的),有的只是適用場合,采用補碼的方式能夠使得使得加法和減法變得統一,而采用原碼自然也有它的好處。
2? 在編寫Verilog文件時,不管是源文件,還是測試文件,出現小數是一種錯誤的做法(準確的說直接將小數作為輸入輸出信號或者中間變量,或者作為測試信號)都是不正確的。永遠需要記住的是,數的表示永遠是 :位寬+'進制+相應進制下的數。這才是開發環境 以及FPGA本身所允許的數據格式。(否則會出現不太滿意的數據)。
3? 2說明了我們對于想要處理的小數,通常要通過某種規則轉化成符合數表示方式的數,有定點表示和浮點表示兩種方法,在FPGA中,更多的是定點數,因此更多的采用定點的轉換方法。需要額外注意的是,這一步轉換,需要我們自己完成,而不能夠通過開發環境完成!
下面通過乘法器IP核進一步直觀闡述上述3? :
上述圖是乘法器IP核的驗證代碼,其中a和b作為輸入,p作為輸出.從圖中看出來,本人想通過賦值小數給測試信號輸入端,來驗證小數相乘(其實已經違背了數據的表示格式),觀察輸出波形如下:
觀察上圖,發現,對于符號數(帶符號整數)的計算是正確的,但是發現輸入的小數被近似成了整數,實際上這并不是我們希望得到的,我們想要得到的是小數的結果(需要注意的是,盡管這里顯示的是十進制,但也只能顯示整數,不能顯示小數),而且計算結果也不對。
這提示我們:當面臨小數輸入(不管是仿真,還是實際中需要把數據輸入到模塊中去),必須要通過某種手段將這些小數轉化成整數,進行乘法計算,再通過某種手段將結果變成我們要的小數(雖然我們不能直觀的在波形上看出來)。但是在實際的數據處理中要求我們要這兒做,而這種方式就是:小數定點化(再次強調FPGA中定點數使用的更多)
同時也額外的得到這樣的信息:FPGA中乘法器的IP核是定點的,而不是浮點的。
關于對數本身的理解:
在計算機中,并沒有類似于,整數,小數,正數,負數這些概念.實際上也并不存在諸如,反碼,補碼,這些概念。唯一有一個概念就是計數器。計數器反應了數的本質。
對于有符號數,應該有這樣一個認識:比如4位計數器,當我們記到0111也就是7的時候,再加1變成了1000,也就是-8,即最大的正數加1變成了最小的負數,同樣的,最小的負數減一變成了最大的正數,這個概念我們一定要十分的明確,在我們進行計數的時候,這一點要尤其明確!!!!!1關鍵在于計數本身就是一個輪回的概念!!!!!這也反應了計算機對于數理解的本質!!!
?
轉載于:https://www.cnblogs.com/shaonianpi/p/8784610.html
總結
以上是生活随笔為你收集整理的IP核引发的关于定,浮点数的认识的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Gym101128F:Landscapi
- 下一篇: 【Python】 tempfile模块