390 likes | 677 Views
ç¬¬äºŒç« é›»è…¦çš„é‚輯數å¸é‹ç®—. å¸ç¿’目標. çžè§£é›»è…¦åŸºæœ¬ç®—è¡“é‹ç®—ä¸çš„進ä½è½‰æ› çžè§£æµ®é»žé‹ç®—的概念以åŠé›»è…¦å¦‚何執行浮點é‹ç®— çžè§£çµ„æˆé›»è…¦çš„硬體電路 — 數ä½é‚輯電路的概念和é‹ä½œ çžè§£åŠ æ³•å™¨ã€æ¸›æ³•器ã€ä¹˜æ³•器和除法器的è¨è¨ˆ 程å¼ç·¨è¯èˆ‡åŸ·è¡Œè¨è¨ˆçš„æœ€ä½³åŒ–. å‰ è¨€. 電腦是數ä½åŒ–çš„è¨å‚™ï¼Œé›–然我們和電腦æºé€šå¯ä»¥ä½¿ç”¨ç¨‹å¼èªžè¨€ï¼Œå¯æ˜¯å¯¦éš›åŸ·è¡Œæ™‚,電腦是é€éŽå±¤å±¤çš„語言轉æ›ï¼Œæœ€å¾Œè®ŠæˆäºŒé€²ä½çš„ 0101 的機器語言(或數ä½è³‡æ–™ï¼‰ï¼Œæ‰äº¤çµ¦å®ƒï¼ˆé›»è…¦ï¼‰çš„硬體è¨å‚™åŽ»åŸ·è¡Œå‘½ä»¤ã€‚
E N D
學習目標 • 瞭解電腦基本算術運算中的進位轉換 • 瞭解浮點運算的概念以及電腦如何執行浮點運算 • 瞭解組成電腦的硬體電路—數位邏輯電路的概念和運作 • 瞭解加法器、減法器、乘法器和除法器的設計 • 程式編譯與執行設計的最佳化
前 言 • 電腦是數位化的設備,雖然我們和電腦溝通可以使用程式語言,可是實際執行時,電腦是透過層層的語言轉換,最後變成二進位的0101的機器語言(或數位資料),才交給它(電腦)的硬體設備去執行命令。 • 其實電腦系統也曾短暫使用過十進位,但是因為硬體上的開(on)和關(off)動作實際上是高電位和低電位的關係,因此順理成章的使用1和0來表示最為方便有效率,也因此一直到今天二進位仍是電腦系統中最基本的運算方式,然隨著量子電腦的發展,也許未來是以八進位為主呢(量子有3種型態,23等於8)。
數值表示: i.f*b • 二進位:0、1 • 四進位:0、1、2、3 • 八進位:0、1、2、3、4、5、6、7 • 十進位:0、1、2、3、4、5、6、7、8、9 • 十六進位:0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F
例題1:數值43510 說明:該數值為十進位(基底為10),另可將43510表示成4.35*102 • 例題2:數值10112 說明:該數值為二進位(基底為2) 換算成十進位為1*23+0*22+1*21+1*20 =1*8+0*4+1*2+1 =1110 =1.1*101
例題3:數值3148 說明:該數值為八進位(基底為8) 換算成十進位為3*82+1*81+4*80 =3*64+1*8+4*1 =192+8+4 =20410 =2.04*102
32位元暫存器 31 0 MSB • 電腦中儲存資料的暫存器或記憶體都是以32位元或64位元位址為基礎的設計 • 最左邊的位元(第31st位元)稱為最高(或最重要的)位元(MSB,most significant bit),最右邊的位元(第0位元)稱為最低(或最不重要的)位元(LSB,least significant bit)
二進位的系統中,資料的移位(shift)具有乘冪的關係,若是向左位移m個位置相當於乘上2m;向右位移k個位置則相當於乘上2-k(等於是除以2k)。二進位的系統中,資料的移位(shift)具有乘冪的關係,若是向左位移m個位置相當於乘上2m;向右位移k個位置則相當於乘上2-k(等於是除以2k)。 • 例題4:ir*2r+ir-1*2r-1+…+i1*21+i0*20+f1*2-1+f2*2-2+…+fn*2-n分別向左和向右移一個位置。 解答:向左移1個位置(相當於乘2), ir*2r+1+ir-1*2r+…+i1*22+i0*21+f1*20+f2*2-1+…+fn*2-n+1 向右移1個位置(相當於除2), ir*2r-1+ir-1*2r-2+…+i1*20+i0*2-1+f1*2-2+f2*2-3+…+fn*2-n-1
浮點數運算 • 小數:數值介於0和1之間(小於1)的符點數值。 • 指數:以某一數值為基底(b),數與數之間具有基底次方乘冪關係,其中所付予的次方即是指數(如bk:b為基底,k為指數)。 • MIPS應用程式系統中,浮點數的數學關係式為:(-1)s*F*2E • s稱為符號位元,它僅佔1個位元(非0即1),它代表著這個浮點數的值是屬於正值或負值(s為0表示正值《任何數的零次方均為1》,s為1表示負值《-1的1次方值等於-1》);F代表小數,佔23個位元;E代表指數,佔8個位元
欄 位 31 0 E(指數23~30共8個位元) F(小數0~22共23個位元) s表正負值符號,1個位元
數值溢位(overflow):數值超越欄位可以表示的範圍 。 • 數值短少(underflow):當負的指數值超過指數欄位時,會造成無法有效表示該數值的時後,便會發生數值短少的現象。 • 雙倍精確度(double precision):使用2個32位元字組來表示一個浮點數值的方法(C程式語言宣告格式)。 • 單一精確度(single precision):使用1個32位元字組來表示一個浮點數值的方法。
任何浮點數值均可以表示成: ir*br+ir-1*br-1+…+i2*b2+i1*b1+i0*b0+f1*b-1+f2*b-2+…+fn*b-n • 其中,i0~ir表示整數部分數值、f0~fn表示小數部分、b表示進位基底、r表示整數值部分的指數、n表示小數值部分的指數。
例題1:八進位數值435.78轉換為二進位 435.78100011101.1112 • 例題2:八進位數值435.78轉換為十進位 435.7104*82+3*81+5*80+7*8-1 =4*64+3*8+5*1+7*0.125 =256+24+5+0.875 =285.87510 =2.85875*102
例題3:將二個二進位數值的浮點數1.0012和0.1112相加,其和為102例題3:將二個二進位數值的浮點數1.0012和0.1112相加,其和為102 1.001 +0.111 10.000 驗證 1.0012=1+0.125=1.12510 0.1112=0.5+0.25+0.125=0.87510 1.125+0.875=210=102
數位邏輯電路 • 數位邏輯是電腦執行布林運算(Boolean operation)的重要單元,也是電腦內部的重要組成,而邏輯電路中最基本的單元便是及(AND)電路、或(OR)電路、反(NOT)電路和互斥(EXOR)電路,電腦裡面的運算單元(加、減、乘、除)都可以由及電路、或電路、反電路和互斥電路組成。
B A Cin 全加 法器 A S 全加 法器 F1 F0 多 工 器 A I0 S B B I1 Ci F Ci I2 Co I3 Co 算術邏輯單元(ALU) • 提供加、減、乘、除算術和及(and)、或(or)和互斥(exor)等邏輯運算的電路
B A Cin F1 F0 多 工 器 I0 I1 F I2 全加 法器 A S I3 B F0 Ci Co Cout 1位元算術邏輯單元(簡化版)
Sum A B Cout Cin Sum A B Cout 加法器的設計與運作
全加 法器 16 A S B C15 Co 全加 法器 1 A S 全加 法器 2 A S B B C1 C2 Co Co • 加法器的邏輯電路有”半加法器”和”全加法器”;不論多少位元的加法器都可以使用1位元的加法器組成,如設計1個16位元的加法器,其中低位元的進位(Cout)會當做是下一級的輸入(Cin,C1~C16)
減 法 器 1 A S B C15 Co 減 法 器 16 Cout為借位輸出 A S 減 法 器 15 A S B B C1 C2 Co Co 減法器的設計與運作 • 減法器和加法器最大的不同是加法器有”進位”的關係,而減法器則有”借位”的關係。所以加法計算是從最右邊最後一個位元,由右至左進行數值的累加並向左進位,減法計算則相反,是由最左位元開始減至最右邊最後一個位元。
另一種減法的計算為採用補數(在整數的運算中,以十進位為例,正整數”N”和負整數”-N”互為補數),由於電腦的運算係以0和1為主,故補數的計算稍有不同。另一種減法的計算為採用補數(在整數的運算中,以十進位為例,正整數”N”和負整數”-N”互為補數),由於電腦的運算係以0和1為主,故補數的計算稍有不同。 • 其中,1的補數系統最為普遍,意即0和1互為補數(0+1=1,1+0=1),也就是互斥(exor)的邏輯運算。
補數(compliment) • 僅考慮無號正整數:以N為基底的進位系統,假設有一個iN值(iN<N),則iN的補數等於N-iN。 • 有號數值:N的補數,假設有一個i值,則i的補數等於N-i。 • 四進位系統中,1和3互為補數,0和4互為補數。八進位系統中,1和7互為補數,2和6互為補數,3和5互為補數,0和8互為補數
電腦中常用的計算還有2的補數系統,其計算原則為若數值以0為開頭表示正值、以1為開頭表示負值(如前所述,第31st位元用來表示正、負值)。如數值0111111111111111111111111111111112(等於2,147,483,64710),其補數為100000000000000000000000000000002 (等於-2,147,483,64810),二個數值加起來的和為-110(即111111111111111111111111111111112)
例題2:計算111111111111111111111111111110012的十進位數值例題2:計算111111111111111111111111111110012的十進位數值 解題: 111111111111111111111111111110012 =1*(-231)+1*230+…+1*23+0*22+0*21+1*20=-231+230+…+23+0+0+1 =-214748364810+214748364110 =-710 答案為-7
例題3:計算數值111111111111111111111111111110012和112相加例題3:計算數值111111111111111111111111111110012和112相加 解題: 111111111111111111111111111110012 + 11 111111111111111111111111111111002 驗證 111111111111111111111111111110012=-710 112=310 -7+3=-410 =111111111111111111111111111111002
乘法器的設計與運作 • 乘法的運算中,前(上)面的運算元是”被乘數”,後(下)面的運算元是”乘數”,相乘後所得到的結果是”乘積”(或簡稱為”積”)。 • 乘法的計算公式如下:乘積=被乘數*乘數 • 二進位的乘法其實就是向左移位的結果,而一個N位元二進位的被乘數和M位元二進位的乘數,相乘後所得到的積是(N+M)個位元的二進位數值
例題1:二進位數值110112和2相乘,其積為1101102 11011 被乘數 X 10乘數 0 +11011 110110 乘積 • 驗證:110112=16+8+2+1=2710 27*2=5410=32+16+4+2=1101102
乘法器 • MIPS乘法的計算: MIPS組合語言系統特別提供2個獨立的32位元暫存器(以Hi和Lo區分較高的32個位元和較低的32個位元),合併有64位元的寬度,作為儲存乘積值的乘積暫存器。 • MIPS乘法的指令有無號乘法(multu)和乘法(mult,即有號乘法)的計算。
加法器 加法器 加法器 乘 積 第 1 位 元 乘 積 第 0 位 元 加法器 乘 積 第 63 位 元 乘 積 第 31 位 元 快速乘法器的硬體架構圖
向左移位 被乘數暫存器 左移 向右移位 算術邏輯單元 乘數暫存器 右移 乘積暫存器 寫入 控制 單元 • 第一個被設計完成的乘法器是64位元的乘法器,其中除乘數暫存器為32位元,其餘的被乘數暫存器、算術邏輯單元和乘積暫存器則都是64位元;控制單元用來決定被乘數暫存器和乘數暫存器的移位和將乘積的結果寫入乘積暫存器中。
被乘數暫存器 算術邏輯單元 向右移位 控制 單元 乘積 右移 暫存器 寫入 • 最佳化的乘法器版本(如左圖),其中乘數暫存器為64位元,其餘的被乘數暫存器、算術邏輯單元和乘積暫存器則都是32位元,大幅縮減了暫存器的寬度。
在乘法器中,因應有號乘法的需要,最高的第31st位元都須提供作為符號位元使用,而其實在乘法的計算中,我們可以將表示正、負值的符號位元直接拉出做”互斥(exor)”的邏輯運算,其他的數值仍按原來的方式計算,如此一來可多空出1個位元提供進位使用,而符號位元直接經硬體互斥邏輯的運算,其速度較快,或許也是一項優點呢!在乘法器中,因應有號乘法的需要,最高的第31st位元都須提供作為符號位元使用,而其實在乘法的計算中,我們可以將表示正、負值的符號位元直接拉出做”互斥(exor)”的邏輯運算,其他的數值仍按原來的方式計算,如此一來可多空出1個位元提供進位使用,而符號位元直接經硬體互斥邏輯的運算,其速度較快,或許也是一項優點呢! • 說明:正值的符號位元值為0,負值的符號位元值為1,當被乘數和乘數同為正值或同為負值時,乘積的值必定是正值,意即乘積的符號位元必定為0《0⊕0=0(同為正值),1⊕1=0(同為負值)》;反之,當被乘數和乘數分別為一正值和一負值時,乘積的值必定是負值,意即乘積的符號位元必定為1《1⊕0=1(一負一正),0⊕1=1(一正一負)》。
除法器的設計與運作 • 除法其實就是乘法的倒數運算,因為除法的變化較多,而且當除以”0”時會造成無法解決的狀況,所以相對下除法比乘法較少使用。除法的計算中,二個運算元分別是”被除數”和”除數”,而相除後所得到的結果是”商數”(或簡稱為”商”),而無法整除所餘留的數值是”餘數”。 • 除法的計算公式如下:被除數=商*除數+餘數 • 二進位的除法其實就是向右移位的結果
除法計算 • 例題1:101102除2,其商為10112 驗證:101102=16+4+2=2210 22/2=1110=8+2+1=10112 由上可證明二進位的除法確實是位元向右移位的關係。
例題2:十進位數值435除以10,得到的商是43,餘數是5例題2:十進位數值435除以10,得到的商是43,餘數是5 43510= 43*10 + 5 43商 除數10 | 435 被除數 40 35 30 5 餘數
向右移位 除數暫存器 右移 向左移位 算術邏輯單元 商數暫存器 右移 餘數暫存器 寫入 控制 單元 • 第一個版本的64位元除法器,其中除商數暫存器為32位元,其餘的除數暫存器、算術邏輯單元和餘數暫存器則都是64位元;控制單元用來決定除數暫存器和商數暫存器的移位並將結果寫入餘數暫存器
除數 暫存器 算術邏輯單元 向右或右移位 控制 單元 右移 餘數 左移 暫存器 寫入 • 最佳化的版本(如左圖),其中餘數暫存器為64位元,其餘的除數暫存器、算術邏輯單元和商數暫存器則都是32位元,大幅縮減了暫存器的寬度