本文介紹了一種采用PLD和數(shù)據(jù)通路(datapath)來解放微控制器系統(tǒng)中CPU任務(wù)的方案。在大多數(shù)微控制器結(jié)構(gòu)中,智能的CPU身邊總會(huì)環(huán)繞著一系列不可編程的外設(shè),。外設(shè)的功能有限,,通常它們只負(fù)責(zé)數(shù)據(jù)形式的轉(zhuǎn)換。例如,I2C外設(shè)只是實(shí)現(xiàn)串行和并行數(shù)據(jù)格式之間的轉(zhuǎn)換,而ADC則實(shí)現(xiàn)模擬到數(shù)字信號(hào)的轉(zhuǎn)換。CPU因此不得不完成所有的數(shù)據(jù)處理工作,,實(shí)際上它還能做些更有用的事情。此外,,管理外設(shè)將會(huì)導(dǎo)致CPU固件異常復(fù)雜,,并可能需要一個(gè)快速高效的CPU在實(shí)時(shí)的時(shí)序限制下執(zhí)行這些固件。這又會(huì)導(dǎo)致更多的潛在程序漏洞,,從而需要使用更復(fù)雜和昂貴的調(diào)試設(shè)備等,。
但是如果外設(shè)具備足夠的復(fù)雜度、靈活度與智能,,是否能有效地減輕CPU的許多任務(wù)呢,?復(fù)雜的設(shè)計(jì)可以通過結(jié)構(gòu)重建,變?yōu)橐唤M分布在CPU和外設(shè)中間的簡單設(shè)計(jì)。CPU將可以執(zhí)行更少的任務(wù),,或進(jìn)行更少的中斷處理,,從而使程序漏洞更容易被發(fā)現(xiàn)和修正。整體設(shè)計(jì)將使系統(tǒng)具有更好的穩(wěn)定性,,并且便于復(fù)用部分設(shè)計(jì),。CPU處理任務(wù)減少就可以運(yùn)行在較低的速度,從而降低功耗,,或者這些額外可用帶寬可用來實(shí)現(xiàn)市場部規(guī)劃的下一代產(chǎn)品,。然而,外設(shè)設(shè)計(jì)仍需具成本效益,,否則整個(gè)微控制器可能變得太貴。本文將展示如何把智能,、靈活,、低成本、可定制的數(shù)字外圍設(shè)備設(shè)計(jì)到微控制器并配置,,以幫助實(shí)現(xiàn)穩(wěn)定的分布式系統(tǒng)設(shè)計(jì),。
智能邏輯選擇—PLD還是數(shù)據(jù)通路?
通常有兩種方法構(gòu)建一個(gè)智能的可配置外設(shè),。首先是使用PLD,。如圖1所示,PLD有一個(gè)驅(qū)動(dòng)若干宏單元的積和(sum of products)邏輯門陣列,。“T”和“C”符號(hào)表示每一個(gè)乘積項(xiàng)都能產(chǎn)生一個(gè)真值或補(bǔ)數(shù)(反向)輸出,,這樣無論是正、負(fù)邏輯都可以支持,。
圖1:一個(gè)PLD實(shí)例(包括12個(gè)輸出項(xiàng),、8個(gè)乘積項(xiàng)、4個(gè)宏單元),。
圖1顯示了一個(gè)簡單的PLD例子,。PLD可以有成百上千的宏單元,每個(gè)宏單元最高由16個(gè)乘積項(xiàng)驅(qū)動(dòng),。乘積項(xiàng)里的與門和或門可以互聯(lián)形成高度靈活的定制邏輯功能,。宏單元是典型的時(shí)鐘架構(gòu),它們的輸出可以反饋到乘積項(xiàng)陣列,,因此允許創(chuàng)建狀態(tài)機(jī),。
大規(guī)模PLD可以用來形成復(fù)雜的邏輯功能,甚至是完全的CPU,,因此PLD當(dāng)然可以用來實(shí)現(xiàn)智能數(shù)字外設(shè),。然而,很多門可能只是實(shí)現(xiàn)諸如計(jì)數(shù)器或加法器等簡單的邏輯功能,但對(duì)于更復(fù)雜功能的實(shí)現(xiàn),,基于PLD的方案就會(huì)變得很貴,。從某種程度上說,使用真正的CPU會(huì)更合理,。
CPU的一個(gè)非常簡單的形式是基于算術(shù)邏輯單元(ALU)的數(shù)據(jù)通路,,也稱為納米處理器(nano-processor)。數(shù)據(jù)通路只是實(shí)現(xiàn)幾個(gè)常用函數(shù),,但會(huì)比使用PLD實(shí)現(xiàn)的效率更高,。圖2:顯示了一個(gè)基于ALU的簡單的數(shù)據(jù)通路。典型的ALU可以進(jìn)行各種操作,,通常是8位操作:向上計(jì)數(shù)(遞增),、向下計(jì)數(shù)(遞減)、加,、減,、邏輯與、邏輯或,、邏輯異或,,左位移、右位移,。這里有兩個(gè)8位累加器,,它們能夠?yàn)锳LU輸出充當(dāng)輸入數(shù)據(jù)寄存器或存儲(chǔ)器。一個(gè)輸入時(shí)鐘信號(hào)沿產(chǎn)生一次操作,。函數(shù)選擇寄存器用來控制:
圖2:基于ALU的數(shù)據(jù)通路,。
* 產(chǎn)生什么操作。
* 該操作的源寄存器,。
* 輸出的目的寄存器,。
根據(jù)數(shù)據(jù)通路的具體設(shè)計(jì),其可能會(huì)做一系列復(fù)雜操作,,如表1顯示,。
表1:數(shù)據(jù)通路函數(shù)的實(shí)現(xiàn)舉例。
這個(gè)函數(shù)選擇模塊實(shí)際上可以是一個(gè)小容量的SRAM,,預(yù)加載所需的函數(shù)選擇位,,SRAM的地址線可以用來選擇運(yùn)行哪個(gè)操作。最后,,多數(shù)據(jù)通路可以用進(jìn)位和移位信號(hào)鏈在一起,,以便可以進(jìn)行多字節(jié)操作數(shù)。
由于數(shù)據(jù)通路只有少數(shù)特定功能函數(shù),,很容易優(yōu)化設(shè)計(jì),,因此其創(chuàng)建成本較低,。然而,對(duì)于實(shí)現(xiàn)復(fù)雜的邏輯,,數(shù)據(jù)通路遠(yuǎn)遠(yuǎn)沒有PLD那么靈活,。那么,對(duì)于創(chuàng)建智能,、靈活,、低成本的數(shù)字外設(shè)來說,哪一種方法是更好的呢,?是PLD還是數(shù)據(jù)通路,?答案是,將兩者相結(jié)合,。下面是一個(gè)實(shí)例,,來看看是如何實(shí)現(xiàn)的。
通用數(shù)字模塊
同時(shí)使用PLD和數(shù)據(jù)通路的系統(tǒng)實(shí)例是賽普拉斯半導(dǎo)體的PSoC3和PSoC5芯片,。每個(gè)系統(tǒng)包含最高24個(gè)通用數(shù)字邏輯子系統(tǒng),,稱為通用數(shù)字模塊(UDB),其結(jié)構(gòu)如圖3所示,。一個(gè)UDB包含兩個(gè)圖1所示的PLD,一個(gè)數(shù)據(jù)通路以及狀態(tài)機(jī)和控制寄存器,。有兩個(gè)鏈路路徑,,一個(gè)用于PLD,一個(gè)用于數(shù)據(jù)通路,。由一個(gè)路由通道來連接各UDB子塊之間以及UDB之間的信號(hào),。PLD配置、數(shù)據(jù)通路和路由通過寫入U(xiǎn)DB配置寄存器來實(shí)現(xiàn),。
UDB的PLD設(shè)計(jì)在圖1中進(jìn)行了描述,。如圖4,UDB數(shù)據(jù)通路類似于圖2所示的基本的數(shù)據(jù)通路,,但是它更精密復(fù)雜,,因?yàn)閾碛懈嗉拇嫫骱透嗟墓δ堋?/div>
圖4:UDB數(shù)據(jù)通路框圖。
* 8位ALU可以實(shí)現(xiàn)所有的七個(gè)基本函數(shù)—遞增,、遞減,、加、減,、與,、或以及異或,并且它有單獨(dú)的位移和位掩碼模塊來進(jìn)行ALU結(jié)果后處理(8位ALU傳輸功能只需通過ALU傳送一個(gè)值到位移和位掩碼模塊),。位移模塊可以做左位移,、右位移,、半字節(jié)交換和傳輸。掩碼模塊可以和單獨(dú)的掩碼寄存器里的內(nèi)容逐位相與(圖中未顯示),。
* 操作可以使用兩個(gè)累加器(A0,,A1)和兩個(gè)數(shù)據(jù)寄存器(D0,D1)來完成,。兩個(gè)FIFO寄存器(F0,、F1)可用來在數(shù)據(jù)通路和CPU之間傳輸數(shù)據(jù)。FIFO深度可達(dá)4字節(jié),。這一結(jié)構(gòu)可以使多任務(wù)處理變得簡單,;在不同的時(shí)間,獨(dú)立操作可以在寄存器子集完成,。例如,,A0、D0,、F0可以用于一個(gè)任務(wù),,而A1、D1,、F1則可用于不同的任務(wù),。
* 廣泛的狀態(tài)條件(例如:比較、零檢測,、所有個(gè)體檢測,、溢出檢測)可以應(yīng)用到累加器,數(shù)據(jù)寄存器,,以及路由到器件其它地方,。
靈活的路由
雖然UDB在PLD和數(shù)據(jù)通路兩個(gè)子系統(tǒng)都有很多特色,但廣泛的數(shù)字路由讓它們?nèi)缁⑻硪?。信?hào)可以在PLD和數(shù)據(jù)通路之間路由,,遍及整個(gè)UDB和器件的其它地方,形成了復(fù)雜的數(shù)字系統(tǒng)互連(DSI)結(jié)構(gòu),。
實(shí)例
本例中,,用一個(gè)UDB數(shù)據(jù)通路來創(chuàng)建一個(gè)帶重載(reload)功能的8位數(shù)字計(jì)數(shù)器。為了實(shí)現(xiàn)這點(diǎn),,連接一個(gè)狀態(tài)條件回到控制存貯SRAM地址線,,如圖5所示。
圖5:用UDB數(shù)據(jù)通路創(chuàng)建帶重載功能的計(jì)數(shù)器,。
在這個(gè)設(shè)計(jì)中,,A0是計(jì)數(shù)寄存器,D0是重載寄存器,。需要兩個(gè)函數(shù),,一個(gè)用來遞減計(jì)數(shù),,一個(gè)從周期寄存器重載計(jì)數(shù)器;這些函數(shù)在控制儲(chǔ)存RAM里預(yù)載了,。
邏輯如下:當(dāng)A0不為0時(shí),,狀態(tài)輸出將會(huì)變低,在地址0會(huì)執(zhí)行遞減操作,。當(dāng)A0為0時(shí),,狀態(tài)輸出將為高,在地址1會(huì)執(zhí)行重載操作,。
所有操作都發(fā)生在時(shí)鐘輸入的上升沿,,可以記錄時(shí)鐘沿?cái)?shù)量。時(shí)鐘輸入可以來自各種時(shí)鐘源,。狀態(tài)輸出可以通過DSI路由,,包括到DMA和中斷請(qǐng)求輸入。使用數(shù)據(jù)通路鏈和掩碼模塊,,該計(jì)數(shù)器的大小可以是任何位數(shù),,不受限于8的倍數(shù)。
圖5所示為減法計(jì)數(shù)器,。它可以很容易的轉(zhuǎn)換成加法計(jì)數(shù)器,,可以通過使用不同的狀態(tài)輸出(A0= =D0)和控制存儲(chǔ)SRAM里的不同函數(shù):A0=A0+1和A0=A0A0。異或任何值的結(jié)果永遠(yuǎn)為0,。
通過使用PLD這個(gè)簡單的設(shè)計(jì)可以創(chuàng)造更復(fù)雜的應(yīng)用,。以一個(gè)紅綠燈控制器為例,紅綠燈控制器周期由綠,、黃、紅三種狀態(tài)構(gòu)成,,因此需要一個(gè)狀態(tài)機(jī),。每個(gè)狀態(tài)變化到下一個(gè)狀態(tài)之前會(huì)持續(xù)一定時(shí)間,所以必需有一個(gè)計(jì)數(shù)器,。為了簡單起見,,假設(shè)“綠燈”時(shí)間和“紅燈”是相同,但“黃燈”時(shí)間不同,。
只需要使用3個(gè)數(shù)據(jù)通路寄存器(假設(shè)為8位計(jì)數(shù)值)就可以實(shí)現(xiàn)這個(gè)時(shí)序結(jié)構(gòu),。A0為計(jì)數(shù)寄存器,D0為“綠”和“紅”狀態(tài)保持計(jì)數(shù)器重載值,,D1為“黃”狀態(tài)保持計(jì)數(shù)器重載值,。模塊框圖如圖6顯示。
圖6:采用UDB PLD和數(shù)據(jù)通路構(gòu)建的紅綠燈控制器框圖
要保存在控制存儲(chǔ)RAM里的操作是:
A0 = A0 - 1 // 計(jì)數(shù)
A0 = D0 // 重載“綠”或“紅”
// 計(jì)數(shù)值
A0 = D1 //重載“黃”值
狀態(tài)機(jī)在PLD里實(shí)現(xiàn),。數(shù)據(jù)通路條件輸出反饋到PLD,,以表明需要改變狀態(tài)了,。PLD也有這樣的邏輯,根據(jù)當(dāng)前的狀態(tài)和從數(shù)據(jù)通路反饋的信號(hào),,控制執(zhí)行哪個(gè)數(shù)據(jù)通路操作和哪個(gè)燈要點(diǎn)亮,。
超越基礎(chǔ)
紅綠燈控制器是一種簡單的應(yīng)用類型,通常使用CPU編程,。然而,,我們已經(jīng)看到,除了初始化代碼,,這個(gè)功能可以完全和CPU沒關(guān)系而可以由智能的可配置外設(shè)完成,。這個(gè)功能可以很容易地?cái)U(kuò)展以支持附加需求,例如轉(zhuǎn)換信號(hào),、行人行走信號(hào),、車輛檢測傳感器、流量/緊急事件轉(zhuǎn)發(fā)器,。
CPU需要做什么
通過使用PLD和數(shù)據(jù)通路的有效組合,,可以創(chuàng)建智能的、靈活的,、低成本的外設(shè),,以減輕CPU的負(fù)擔(dān)。然而,,如果這么多的功能都由外設(shè)處理了,,那還留著CPU做什么呢?在許多情況下,,CPU不需要做很多事,,在某些情況下系統(tǒng)初始化后,CPU就可以關(guān)掉了,。不過,,更實(shí)用的方案是使用CPU做CPU能做得最好的事情,例如:
* 復(fù)雜的計(jì)算
* 字符串和文本處理
* 數(shù)據(jù)庫管理
* 通信管理
* 系統(tǒng)管理
例如,,在我們的紅綠燈應(yīng)用中,,CPU可以用于以下幾個(gè)方面:
* 檢測車輛闖紅燈
* 使用相機(jī)拍攝牌照
* 從照片上提取車牌文字信息
* 從國家數(shù)據(jù)庫中查閱車主信息,以及向車主發(fā)送罰單
通過由智能外設(shè)完成很多任務(wù),,CPU可以輕松地去做更有價(jià)值的任務(wù),。
本站內(nèi)容除特別聲明的原創(chuàng)文章之外,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,,并不代表本網(wǎng)站贊同其觀點(diǎn),。轉(zhuǎn)載的所有的文章、圖片,、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有,。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無法一一聯(lián)系確認(rèn)版權(quán)者,。如涉及作品內(nèi)容、版權(quán)和其它問題,,請(qǐng)及時(shí)通過電子郵件或電話通知我們,,以便迅速采取適當(dāng)措施,避免給雙方造成不必要的經(jīng)濟(jì)損失,。聯(lián)系電話:010-82306118,;郵箱:[email protected]。