2015年4月18日 星期六

數位電路設計 - 開放式課程筆記(一)

最近幾個月在複習數位電路,同時上了一門edxMIT和交大OCW的數位電路課程。


EDX MITx: 6.004.1x  https://courses.edx.org/courses/MITx/6.004.1x/1T2015/info


數位電路(Digital circuit)是電機系大一的必修課,以前大四時想拿個電機輔系跑去聽這門課,但一直到下學期的實驗課寫verilog時才有一點感覺。

交大的這門課的規劃跟以前自己上的進度差不多,大概就是一整個學期先講組合電路(combinational circuit)、再講順序電路(sequential circuit)

MIT的進度要緊湊得多,edx上的Digital Circuits不過是校內課程6.004 Computation Structure的三分之一,數位電路在台灣要講一學期的內容只講了6週,接著則進入programmable architecturecomputer systems

比較起來,MIT的這門課程要更注重與其他學門的關係,課後的練習也不時帶你去質疑一些看來基本、但也許不問,就從來不會去深究的電路。除了一般的填答題,還有幾個電路模擬的實驗,按照spec走過一遍更有感覺。

以下就每堂課做個簡單的筆記 :


第一講 : Basics of Information 

1. 定量訊息 :
    先對information下個定義 : Data communicated or received that resolves uncertainty about particular fact or circumstance.
    要定量一筆訊息,先知道該訊息出現的機率,再來計算要使用幾個0/1來為此筆訊息編碼,可由I(x)=log(base2)(1/機率)得到該訊息的量。
    例如在一副牌中出現紅心的機率是1/4,訊息量即為2 bit;黑桃A則是1/52,訊息量為5.70 bit
    得到的訊息量越多,越能去除掉不確定性。

2. 編碼 :

         編碼(encoding) : an unambiguoug mapping between bit strings and the set of possible data
         原則上就是用一串bit的組合來表示一組data。若各個data出現的機率均等,可使用固定t;長度的bit組合;若不均等,可使用不定長度的編碼。

  • ASCII共有94個字元,就可用log2(94) ~ 6.5557bit表示。
  • Binary-Coded Decimal (BCD)可用log2(10) ~ 3.3224bit表示。
  • 正整數可由二進制編碼表示,而為了閱讀方便,可將二進制改寫成十六進制
  • 負數可使用signed magnitude將首位設成1,或是用2補數表示。
  • * nbit的數N,其二補數 = 2^n – N
  • 不定長度的編碼可使用Huffman's algorithm, LZW...

3. 偵錯與除錯 :

        當送出與收到的訊息不一樣時,表示有幾個bit出了錯。
          
           Hamming distance : The number of positions in which the corresponding digits differ in two encodings of the same length.
     
        兩段相同長度的編碼,對應位置不同的數值的bit數目,即為Hamming distance
        要能偵測單個bit的錯誤,可在原先的data再加上一位parity bit,使得總共1出現奇數或偶數次。
        原來兩組有效訊息之間的Hamming distance就從1增加到2
        若是拿到的訊息出現1的奇偶次數與發送方不同,即表示可能出現單個bit的錯誤。
    若是要偵測更多bit錯誤,Hamming distance就要再增加。
  •  偵測E個錯誤,兩組有效訊息之間的Hamming distanceE+1
  •  更正E個錯誤,兩組有效訊息之間的Hamming distance2E+1


-----------------------------------------------------------------------------------------------------------------------------------------------------------------

第二講 : The Digital Abstraction


1. 編碼的bit怎麼來 :
    使用電壓來編碼 – 電壓容易產生、偵測,也有可能較省電;但容易受環境影響,也有可能受到電容電壓的延遲影響。
    但若要使用電壓來趨近一段連續的變化,例如0~10的變化分別以10個電壓位階來表示時,又容易受到干擾。
    -> 用電壓僅表示bit的兩個值 0,1

2. 組合電路 : 
  • 有一個以上的數位輸入
  •  有一個以上的數位輸出
  • 有一份功能規格(functional specification)詳述每個輸出與輸入所有可能的值的對應關係
  • 有一份時間規格(timing specification)至少包含了穩定有效的輸入至輸出所需的時間
  • 沒有directed cycles,從輸入到輸出,每個元件僅會經過一次 沒有feedbach loop

3. Noise :
    訊息傳送的過程中,有可能會受到外界雜訊的干擾,造成上一級的訊號輸出到了下一級的輸入發生錯誤。因此,提高判斷輸出訊號為1或是0的標準,容許輸出在進入下一級的輸入時能有一定的誤差範圍,稱為noise margin
  • 輸出 :
    0 : V <= V(OL)
    1 : V >= V(OH)
  •  輸入 :
    0 : V <= V(IL)
    1 : V >= V(IH)
  • 標準 :
    對於低電位來說,輸出的電壓V(OL) 要小於 V(IL)
    對於高電位來說,輸出的電壓V(OH)要大於V(IH)
    即有效的輸出電壓須大於V(OH)或小於V(OL)
    而有效的輸入電壓須大於V(IH)或小於V(IL)
    V(IL)V(IH)之間則為Forbidden Zone,當輸入電壓落在此區間時,輸出可為任何值
    簡單地說 : V(OL) < V(IL) < V(IH) < V(OH)
    output對於判斷是0或是1的要求較為嚴格,當signal從output到input之間若受到雜訊干擾,只要仍在input判斷0和1的範圍之內,仍為有效值。
    允許雜訊干擾的範圍 : V(IL) - V(OL) 和 V(OH) - V(IH),即為noise margin。