數(shù)字進(jìn)制_二進(jìn)制是基礎(chǔ)
需要看對應(yīng)的視頻,請點(diǎn)擊視頻編號:?001100000055
1、本視頻主要說明,在數(shù)字電路中,一切都將用二進(jìn)制來定義,即0,1。主要介紹了如何用二進(jìn)制表示高低電平、負(fù)數(shù)、小數(shù)、邏輯運(yùn)算等? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??2、這是ALTERA和VIVADO視頻
5.2.2?二進(jìn)制是基礎(chǔ)
在數(shù)字電路中如果芯片A給芯片B傳遞數(shù)據(jù),例如傳遞0或者1信息,可以將芯片A和芯片B通過一個管腳進(jìn)行相連,
然后由芯片A控制該管腳輸出為高電平或者低電平,通過高低電平來表示0和1。
芯片B檢測到該管腳為低電平時,表示收到0,芯片B檢測到該管腳為高電平時,表示收到1。

反之,如果用低電平表示收到1,用高電平表示收到0可不可以呢?當(dāng)然可以,只要芯片A和芯片B事先協(xié)定,
芯片A要發(fā)數(shù)字1時會將該管腳置為低電平。芯片B檢測到該管腳為低電平,表示收到了數(shù)字1,通信完成。

一個管腳擁有高低電平兩種狀態(tài),可以分別表示數(shù)字0和1的兩種情況。
如果芯片A要發(fā)數(shù)字0、1、2、3給芯片B又要如何操作呢?
可以讓芯片A和芯片B連接兩根管腳,即兩條線:a和b。當(dāng)兩條線都為低電平時,
表示發(fā)送數(shù)字0;當(dāng)a為高電平b為低電平時,
表示發(fā)送數(shù)字1;當(dāng)a為低電平b為高電平時,表示發(fā)送數(shù)字2;當(dāng)兩條線都是高電平時,表示發(fā)送數(shù)字3。

按照同樣的道理,芯片A要發(fā)送數(shù)據(jù)4,5,6,7給芯片B時,只要再添加一條線就可以了。
三根線一共有8種狀態(tài),可以表示8個數(shù)字。綜上所述,線的不同電平狀態(tài)可以表示不同的含義,
有多少種不同狀態(tài)就可以表示多少個數(shù)字。
下面來思考一下如果芯片A要發(fā)送+1,-1,0,+2等數(shù)字給芯片B,這里的正負(fù)又該如何表示呢?參考前面的思路,
線的高低電平表示的含義是由芯片雙方向事先約定好的,既然如此則可以單用一根線來表示符號,
例如低電平表示正數(shù),高電平表示負(fù)數(shù)。

上圖所示的三根線中用線c表示正負(fù),其中0表示正數(shù),1表示負(fù)數(shù)。用線a和線b表示數(shù)值,
以3’b111為例,其可以解釋為十進(jìn)制數(shù)7,也可以解釋為有符號數(shù)原碼“-3”,
也可以解釋為有符號數(shù)補(bǔ)碼“-1”,如何解釋取決于工程師對二進(jìn)制數(shù)的定義。
只要該定義不影響到電路之間的通信就不會發(fā)生問題。因此數(shù)字中的“0”和“1”不僅可以表示字面上的數(shù)值含義,
也可以表示其他意義,如正負(fù)符號等。同樣的道理,
在數(shù)字電路中二進(jìn)制數(shù)是八進(jìn)制、十進(jìn)制、十六進(jìn)制、有符號數(shù)、無符號數(shù)、小數(shù)等其他數(shù)制的根本。在FPGA設(shè)計中,
不清楚小數(shù)、有符號數(shù)的計算方法的最根本原因是不清楚這些數(shù)據(jù)所對應(yīng)的二進(jìn)制值,
只要理解了對應(yīng)的二進(jìn)制值,很多問題都可以解決。
下面通過例子讓同學(xué)們更好的理解這一概念,很多初學(xué)者經(jīng)常問,F(xiàn)PGA中如何實(shí)現(xiàn)小數(shù)計算呢?以“0.5+0.25”為例,
眾所周知0.5+0.25的結(jié)果為0.75,可以考慮0.5、0.25和0.75用二進(jìn)制該如何表示?
具體表示方法取決于工程師的做法,因?yàn)檫@種表示方法有很多種,例如定點(diǎn)小數(shù),浮點(diǎn)小數(shù),
甚至如前面所討論,用幾根線自行來定義,只要能正常通信,那就沒有問題。
假設(shè)某工程師用三根線自行定義了二進(jìn)制值所表示的小數(shù)值,如下表所示。
表1.3- 3自定義二進(jìn)制數(shù)值表

為了說明二進(jìn)制值的意義是可以隨便定義的,筆者特意將數(shù)字順序打亂。
當(dāng)然,有讀者可能說為什么只有這幾種小數(shù)呢?這是因?yàn)榧俣ㄖ械南到y(tǒng)就只有這幾種數(shù)字,
如果想表示更多數(shù)字增加線的數(shù)量就可以了。
完成上面定義之后,要實(shí)現(xiàn)“0.5+0.25”就很容易了,其實(shí)就是3’b001和3’b100“相加”,
期望得到3’b010。但是在該表中直接使用3’b001 + 3’b100,結(jié)果為“101”,
這不是想要的結(jié)果,此時可以將代碼寫為:

當(dāng)然,這只是其中一種寫法,只要能實(shí)現(xiàn)所對應(yīng)的功能且結(jié)果正確,任意寫法都可以。
有讀者可能會有疑問,0.1+0.8應(yīng)該為0.9,但上面的表格中并沒有0.9的表示。
這其實(shí)是設(shè)計者定義的這個表格有缺陷,或者設(shè)計者認(rèn)為不會出現(xiàn)這一情況。
筆者此處要表達(dá)的是:只要定義好對應(yīng)的二進(jìn)制數(shù),很多功能都是很容易設(shè)計的。
當(dāng)然,實(shí)際的工程中通常會遵守約定成俗的做法,沒必要另辟蹊徑。
例如,下表是常用的定點(diǎn)小數(shù)的定義:
表1.3- 4常用定點(diǎn)小數(shù)定義

此時如果要實(shí)現(xiàn)0+0.5=0.5,也就是3’b000和3’b100相加,期望能得到3’b100。
可以發(fā)現(xiàn)直接用二進(jìn)制3’b000+3’b100就能得到3’b100。
同樣地,要實(shí)現(xiàn)0.125+0.75=0.8725,也就是3’b001和3’b110相加,期望能得到3’b111。
可以發(fā)現(xiàn)直接用二進(jìn)制3’b001+3’b110就能得到3’b111。
如果要實(shí)現(xiàn)0.5+0.75=1.25這一計算,可以看出此時1.25已經(jīng)超出了表示范圍,
可以通過增加信號位寬或只表示小數(shù)位的做法解決這一問題。如果只是表示小數(shù)位則結(jié)果就是0.25,
即3’b100和3’b110相加,期望得到3’b010。不難發(fā)現(xiàn)3’b100 + 3’b110 = 4’b1010,用3位表示就是3’b010,
也就是0.25。綜上所述可以看出,定點(diǎn)小數(shù)的計算并不復(fù)雜,
定義好定點(diǎn)小數(shù)與二進(jìn)制值之間的關(guān)系后直接進(jìn)行計算即可。
相關(guān)視頻:https://www.bilibili.com/video/BV1yf4y1R7gH?p=9
相關(guān)視頻:https://www.bilibili.com/video/BV1yf4y1R7gH?p=9