補碼的意義及Verilog中的補碼定點小數計算

2021-09-01 13:21:47 字數 2360 閱讀 1132

目錄

1.原碼,反碼,補碼

2.補碼的意義

3.verilog中的補碼運算與定點小數

3.1補碼定點小數的加減運算

3.2補碼定點小數的乘除運算

3.3對運算的結果近似擷取一定位寬

3.4實際應用中的例子

原碼:n位的二進位制數,最高位為符號位,正數為0,負數為1。剩下的n-1位表示該數的絕對值

反碼:原碼的符號位不變,正數不變,負數按位取反

補碼:反碼正數不變,負數加1

我認為在verilog中,這樣更方便:

正數的原碼、反碼和補碼是乙個;

負數補碼的獲得方法:負數的絕對值對應的二進位制數取反加一(就不需要用原碼反碼了)

如果得到乙個補碼,如何知道其表示的負數的絕對值呢?補碼所有位減一取反等價於取反加一。也就是說都是取反加一[1]。

學過微機原理的應該知道,計算機只會進行簡單二進位制的加減操作,補碼的意義在於:不管這n位二進位制是正負數還是有小數,計算機只看成無符號二進位制直接運算,而且結果是對的。[2]

並且,在處理不同位寬的資料時,是將短的資料通過符號位拓展,這都不會影響結算結果的正確性。

符號位擴充套件:例如均為補碼形式的8位有符號數1101 0011與16位有符號數運算,首先要將8位符號擴充套件,即符號位填充增加的位上,此數符號位為1,擴充套件後:1111 1111 1101 0011

也就是說:補碼統一了計算機進行正負數運算,使得符號位也參與運算,並能得到正確結果

上一步已經說了在補碼運算時要進行符號位寬展,但在將補碼看成定點小數,對運算結果小數字的判斷、運算結果取近似擷取還是要有很多注意的地方。

定點小數有兩種表示方法:

1.xqn:1位符號位+x位整數字+n位小數字,例如1q7表示位寬為9的有7位小數字的定點數。

2.fix(1+x+n)_n:例如fix9_7表示位寬為9的有7位小數字的定點數。

乙個xqn的定點小數所表示的範圍:

加減是等效的,都需要進行符號位擴充套件,且擴充套件的是定點小數的整數字,

例如:兩個fix9_7相加或相減,結果是fix10_7,擴充套件的是整數字,小數字不變,

n個數相加減,需要擴充套件ceil(

乘法:相乘需要符號位擴充套件且小數字與整數字都會改變,類似於十進位制的乘法

例如:兩個fix9_7相乘,結果是fix18_14,

乘法簡化為左移時,即低位補0,位寬變長

除法:除法一般簡化為右移操作,高位補符號位,小數字不變

例如:fix9_7除以8,位寬不變,低3位捨棄,高位補符號位,仍是fix9_7,1 1.011 0101除以8,得到1 1.111 0110

應該對計算的結果值的範圍有一定預估,然後進行擷取

xilinx的ip核很多情況下預設都是捨棄小數字,取高位,這是容易出錯的。

例1:對fix14_12格式的資料累加128個後取平均,要求最後結果還是fix14_12,

首先累加後的結果是fix21_12,取平均即右移8位後還是fix21_12,這時就要取對應的低2位整數+12位小數字作為最終結果,捨棄高位(補碼可以直接捨棄包括符號位的高位,對應的整數字就成了符號位)。

例2:兩個fix14_12相乘,因為兩個數的範圍都不大,結果使用fix14_12也不會溢位,對相乘的結果fix28_24取近似,那我們就要以小數點為準,取整數字中的低2位以及小數字中的高12位,而不是直接取高14位。

有符號數對映:ofdm實現中,要對二進位制資料進行調製,例如qpsk,將2b資料對映為復平面的乙個點(包含實部與虛部)功率歸一化後的對映關係為:

00->(-0.707,-0.707)

01->(-0.707,0.707)

11->(0.707,0.707)

10->(0.707,-0.707)

用8位二進位制如何表示呢?

要用補碼,因為在整個工程中考慮到我使用的數字範圍都是-2~2,那我們可以採用fix8_6,

那0.707*2^6=45.248,取45,補碼結果為0010 1101

-0.707*2^6=-45.248,取-45,將45的補碼取反加1,得到1101 0011

然後將上述二進位制賦值給verilog裡的變數,直接對二進位制操作,最後得到的結果再對映回來就可以了。

定點小數是我們給定義的小數字數,是在對映回小數時用到,我們自己心裡有數就好,計算機並不知道,也不影響計算結果。

補碼的意義

數值有正負之分,計算機就用乙個數的最高位存放符號 0為正,1為負 這就是機器數的原碼了.假設機器能處理的位數為8.即字長為1byte,原碼能表示數值的範圍為 127 0 0 127 共256個.有了數值的表示方法就可以對數進行算術運算.但是很快就發現用帶符號位的原碼進行乘除運算時結果正確,而在加減運...

補數 補碼的意義

前言 之前在大學的數字電子技術這門課程學到這個概念,但一直沒有應用過,最多就是做過課後作業。本人目前做的是工控行業,工控就離不開電機的控制,工控行業裡常見的三種控制方案,一是plc,二是運動控制卡,三是微控制器,我做的是的微控制器這一塊,眾所周知定時器是微控制器的基礎外設,而行業內對使用微控制器對電...

深入解析補碼的意義

相信大家看到這個標題都不屑一顧,因為在任何一本計算機基礎知識書的第一章都有他們的解釋,但是在書上我們只能找到一些簡單的定義,沒次看過之後不久就忘了。最近論壇裡有人問起這些概念,看到很多人的回覆是以前看過現在忘了去看看某某書之類,很少有給出乙個合理的解釋。於是本人就開始思考 雖然上帝會發笑,我還是要思...