• 沒有找到結果。

第四章 CNN-based IS 硬體設計

4.1 Current-mode CNN電路設計

近年來,類比電路設計者越來越廣泛使用 current-mode 的電路設計方法,

和 voltage-mode 相比,current-mode 具有高速、較大的頻寬和較低的供給電壓。

而針對 CNN 的電路實現,採用 current-mode 的方法,就可以將大量數目的電流 相加在一個節點上,以降低設計的困難度。

很多關於類比類神經網路的電路也在最近被提出,而且越來越多人用 current-mode 來建構基本的元件,例如利用 OTA-based 的處理單元、或是用 switch-current 的訊號處理來設計 CNN,每種設計方法都有利有弊,主要還是因 為類比電路的設計上,可程式化(programmability,這裡的解釋是通過電子手

輸出電流iyij(t)可以用ixij(t)表示成:

所以我們如果要使電路表現某一種的 template,只要設計兩對電流鏡的增 益即可,兩個增益的比例就是 template A 的值。在我們的應用中,均把右邊 、

的增益訂為 1 :1,只改變左邊的電流鏡增益來設計 template A,另外在輸出 的上下限方面,定為 ±10μA ,圖 4-2 為我們用 Hspice 模擬輸出函數的結果。

M1

M2

(a) (b) 圖 4-2 在不同的電流增益下,用 Hspice 模擬 cell 的輸出函數。

(a) positive (b) negative slopes 4.2 Initialization 和 template A、B 電路設計 4.2.1 Initialization 電路

圖 4-3 Initialization 電路圖

圖 4-3 是給 cell 初始值的電路,在 CNN 的運算中,有些 template 要能夠正 確運作,STATE 需要給特定的初始值,例如之前所用的找投影量的 template,

就需要將 STATE 的初始值設為要找投影量的那張影像。 和 主要是控制是

否要將初始值輸入到 cell 中,當

1

Vin Vin2 HIGH

Vin1 = ,Vin2 =LOW 時, 打開, 關 閉, 就會輸入到 的節點去,也就是 cell 中表示 STATE 的位置,此時動作 是在注入 STATE 的初始值,當

M1 M2

Iinit Ixu

LOW

Vin1 = ,Vin2 = HIGH時,則 關閉,

打開, 就會經由 、 流出,而不會流進 cell 裡了,所以 、 基本

上是提供一個放電的路徑,以免將 關閉時,電流會有無路徑可流動的情形。

M1 M2

Iinit M2 M3 M2 M3

M1

4.2.2 Template A 設計

neuron

A template

圖 4-4 Template A 電路圖

在 2.1 節中描述,template A 主要是讓輸出乘上權重後,傳給四周的 cell,

因此這裡我們使用電流鏡的技術,給輸出電流乘上一個倍數,再傳給其他的 cell。如圖 4-4 所示,上面框起來的部分為 neuron 本身,也就是 4.1 節提到的 basic cell,左邊的電流鏡,其實也是 template A 的部分,代表的是 template 最 中間的值,表示自己 cell 的輸出迴授給自己的權重,而下面框起來的部分,則 是 template A 中其他的值,表示給周圍 cell 的權重,由於 template 值有正有負,

所以電路也有兩個輸出 和 ,分別代表正值與負值,至於選擇哪一個,則

是依賴 和 來控制。

Opa Ona

Vpa Vna

4.2.3 Template B 設計

圖 4-5 Template B 電路圖

由於 template B 是控制額外給 cell 的輸入,所以是獨立的電路, 代表的 是 cell 的 input 而 和 、 和 是電流鏡,功能是給 乘上一倍數,以 控制輸入到 cell 的大小,和 template B 一樣,B 也是有正有負,所以輸出亦有

兩個,分別為 (正)和 (負),至於選擇哪一個,則是由 和 控制。

Ib

M1 M2 M1 M3 Ib

Opb Onb Vpb Vnb

4.2.3 Boundary 的考量

在 CNN array 中,邊緣的 cell 周圍並沒有可供連接的 neighbor cell,為了避 免這種情形,通常會在整個 array 外面加一層 boundary cell,而 boundary cell 的 template、state 和 input,則需要不同的設計,在 MATLAB 中的 CNN toolbox 中,

對 boundary 的設計,給予三種方法:第一種是複製原來 array 內邊緣的 cell,

第二種是全部接一定值,第三種是以 torus 的函數給值。在軟體實現中,我們使 用第一種或是第二種方法,都有正確的結果,而在硬體實現中,則是採取第二 種方法,因為第一種方法,複製的 boundary cell 的外面還是沒有和其他 cell 做 連接,在缺少 neighborhood 的影響下,會讓 boundary cell 的輸出越來越小(加

上電晶體的漏電效應),最後穩定時會趨近於 0,而這趨近於 0 的電流,會經由

內部連接傳給 array 內的每個 cell,導致最後整個 array 輸出都等於 0。所以採 取第二種方法,在 boundary 接上一定值的電流,讓輸出保持穩定的值,CNN array 才能正確運作。

4.3 CNN-based IS 電路設計

4.3.1 Image difference

在前一章的演算法描述中,用到了 inversion 和 addition 的 template。然而,

在提出的 CNN-based DIS 架構中,由於是用 current-mode 的方法實現,所以在 相加時,可以不必用到 CNN 來處理,只要將兩條導線連到同一點就能做到兩 數相加的效果,同時也簡化硬體的複雜度。

在 template 的實現方面,由於 A、B template 都只有中間有值,所以 4.2.2 節中提到的電路可以省略,只要留下 neuron 的電路即可,neuron 中左邊的電流 鏡要調成 1:1(右邊的電流鏡均固定為 1:1),並且後面要多接一個反相器,使 增益為負,以符合 A template 的值(等於-1),B template 由於也是只有中間有 值,所以 4.2.3 的電路只需要放一組,由於 template 值是-2,所以電流鏡的增益 要設計為 1:2,輸出選擇Onb的端點。圖 4-6 為用 Hspice 模擬 3×3 的 CNN array,

擷取出其中一個 cell 的輸出結果,在此設定 cell 在10µs時開始工作,圖中標號 1 的區段,是給初始值的時候,而標號 2 的區段,則是 cell 開始經由 template 彼此影響的時候。由波形很快成一條水平線可知,cell 在極短的時間內就會達 到穩定。圖中第三條曲線是拿來做 inversion 的值,原來的值是−2.6µA,而第 二條曲線則是拿來做 wire addition 的值,其值等於5µA,第一條曲線則代表兩 條曲線相減後的答案:5µA−(−2.6µA)=7.6µA

c d

圖 4-6 用 Hspice 模擬 image difference 之結果

4.3.2 Adaptive threshold

在做adaptive threshold時,需要將CNN array的輸出加總和Ith比較,由於是 current-mode,所以只要將所有cell的OUTPUT連在一點就可以做相加,但是直 接將輸出做連接,會讓其他cell的輸出有通路進到自己cell,因而造成電路運作 的不正確,所以相加的動作必須和neuron絕緣,因此我們在neuron左邊的電流

鏡,再加上一個電晶體 ,gate端和 相連,偏壓電流也和 相仿,所以

的輸出電流會和 大致上相同(由於連接的負載不同,會有些許誤差),由於

的電流即等於輸出電流,所以 的功用是複製輸出電流出來,讓相加的工

作能夠在不影響cell正確工作下進行。

M5 M4 M4 M5

M4

M4 M5

有了加總的電流後,就把電流值和自己定的threshold Ith相減後輸入到電流 比較器內,比較器的電路在之後 4.4.2 節有詳細的描述,如果加總電流小於Ith則輸出為LOW,若加總電流大於Ith,輸出則為HIGH。

給予cell array偏壓電流的Ibias由於必須在一次回圈後加一個step,所以應該 設計成像階梯般的輸入電流源,但為了方便硬體實現,這裡直接使用ramp current input,可以降低斜率以增加精確度,當Ibias > Ith後,就打開開關,將做 adaptive threshold的CNN cell輸出到下一個做投影的CNN array,的initialization 電路,當作state的初值。圖 4-7 是用Hspice模擬threshold的結果,CNN array是 3

×3,threshold值設在−1µA,由圖可看出大於threshold的電流均會被saturate到 µA

10 ,小於則會被saturate到−10µA

圖 4-7 用 Hspice 模擬 threshold 電路之結果

4.3.3 累加器

圖 4-8 累加器的架構

累加器的架構如圖 4-8,為了計算所有子區域相對應的 pixel 的差異值之和,

需要一個類比式的累加器(accumulator),由於欲相加的資料,是以 serial 的方 式進入 current adder,所以在相加的資料更新前,需要將之前相加的結果保留

住,以供和後來的資料繼續相加,所以需要類似儲存的單元,我們利用了 switch-current memory cell,來當作相加電流中間的暫存器。在圖 4-8 中,input1 是提供相加的資料,input2 則是接到最後的輸出,把上一次相加完成的值回傳 到加法器繼續運算,運作流程大致分為兩個階段:

第一階段:將 S1 打開,S2 關閉,S3 打開,此時 input1+input2 的結果會流進 memory cell1 中儲存。

第二階段:將 S1 關閉,S2 打開,S3 關閉。此時存在 memory cell1 的電流會流 進 memory cell2 儲存。此時可更新 input1 的資料。

current adder 的架構如圖 4-9,利用閘極的輸入電阻是無限大就可以分析出 相加的原理。memory cell 的架構則可參考圖 4-10[8],S1 和 S2 的開關是由兩個 互不 overlap 的訊號 和 所控制,在 phase 時,輸入電流 和偏壓電流 I

的和會流入以二極體方式連接的電晶體 ,為了讓 能流過這麼多電流,電

容 C 必須被充電到某個值 1,其大小由汲極電流和電晶體的 DC 特性所決定。

在 phase 時, 被電容 C 維持住因此流過 的電流是固定在 +I 的大

小,所以輸出電流 等於 。

φ1 φ2 φ1 Iin

M1 M1

Vgs

φ2 Vgs1 M1 Iin

IoutIin

圖 4-9 current adder

圖 4-10 switch-current memory cell

4.3.4 Median circuit 和 Error function

Median circuit 的功能是為了在 LMVs 中找到一個最適合的 MV,在演算法 中,是先把 LMVs 求平均,再找最接近平均的 MVs,在電路實現中,我們採用 類似的方法,先將輸入的 LMVs 電流值分流成四條,等同於除以 4 求平均,後 來再使用比較器,比較每個 LMVs 和平均值的大小,將差值最小的 LMV 輸出 當作最好的 MV。

Error function 在第三章中已提過是為了計算背景,在整張影像中分割出五 個區域來計算,在此處我們也可以利用像 4.3.1 的方法來實現,利用以 inversion template 為主體的 CNN array 加上 wire addition 來實現出來。

4.4 其他用到的類比電路 4.4.1 絕對值

圖 4-11 絕對值電路圖

在累加每個 pixel 在兩張影像中的差異之前,必須先將每個 pixel 的差異取 絕對值,才能正確估計累加差異的大小並找出最小值。圖 4-11 是我們使用的絕 對值電路[9],具有 current-mode 的操作模式以及取絕對值後的電流和輸入電流

很相近的優點。無論 是向外還是向內,輸出 都是向內進入電路的,當 是

向外流出電路的時候, 會打開而 會關閉,所以 會通過 而流到上半

Ix ISN Ix

M5 M6 Ix M5

部由 PMOS 組成的電流鏡,最後再從 流到下半部的 NMOS 電流鏡。當 是

向內流進電路的時候, 會關閉而 會打開, 會直接通過 而流進下半

部的 NMOS 電流鏡。所以無論 的正負為何,輸出都是同一方向。圖 4-12 是 用 Hspice 模擬的結果,可以看出雖然會受到負載的影響而使響應較慢,但是仍 然有呈現取絕對值的效果。

M10 Ix

M5 M6 Ix M6

Ix

圖 4-12 用 Hspice 模擬絕對值電路之結果

4.4.2 電流比較器

圖 4-13 比較器電路圖

在 adaptive threshold 中,需要比較加總後的電流和 的大小,所以需要比 較器,而且需要能比較正和負的值,我們使用如圖 4-13 的電流比較器架構[10],

具有 current-mode 的操作模式,也可以判斷雙向(正負)的電流。 和 是 Ith

M1 M2

class B 的電壓緩衝器(voltage buffer),而 到 是兩組反向放大器(inverting amplifier), 是兩筆電流相減後的電流值,當作比較器的輸入電流,這電路有

class B 的電壓緩衝器(voltage buffer),而 到 是兩組反向放大器(inverting amplifier), 是兩筆電流相減後的電流值,當作比較器的輸入電流,這電路有

相關文件