在進(jìn)行復(fù)雜系統(tǒng)的架構(gòu)開發(fā)時(shí),架構(gòu)師和設(shè)計(jì)師很少對(duì)設(shè)計(jì)的系統(tǒng)控制方面予以重視。最好的情況是,系統(tǒng)控制在整個(gè)系統(tǒng)的設(shè)計(jì)考慮中排第二位。而最壞的情況是直接被遺忘,直到設(shè)計(jì)后期,板上只有很小的空間能實(shí)現(xiàn)系統(tǒng)控制功能,也不可能再有時(shí)間來重新進(jìn)行架構(gòu)設(shè)計(jì)。
過去,設(shè)計(jì)師常常會(huì)使用一些方法來解決這些問題:請(qǐng)軟件設(shè)計(jì)師想辦法在軟件中實(shí)現(xiàn)某些控制功能;在電路板上四處增加小的PLD,因?yàn)槭艿诫娐钒蹇臻g限制而不得不忍受布局布線的不便和擁擠;或者,以時(shí)間進(jìn)度為由,犧牲某些功能。這些方法聽起來都不怎么樣。我們需要一種方法,最大限度地減少電路板的面積和布線,同時(shí)減少微處理器的使用并且實(shí)現(xiàn)所需的功能。
CPLD和小型FPGA往往是這種情況下的首選解決方案。使用CPLD和FPGA,設(shè)計(jì)人員可以不再需要集中監(jiān)測(cè)和控制,而更多的采用本地化控制和分配。創(chuàng)建一條通信路徑,盡可能地減少中央處理器和分布的PLD之間的連接,將會(huì)是一個(gè)最接近理想的解決方案。幸運(yùn)的是,串行外設(shè)接口(SPI)標(biāo)準(zhǔn)和內(nèi)部集成電路(I2C)標(biāo)準(zhǔn)就是理想的低開銷的通信路徑,他們最初分別由Motorola公司和Phillips公司開發(fā)。這兩個(gè)標(biāo)準(zhǔn)并非設(shè)計(jì)用于提供大多數(shù)數(shù)據(jù)路徑所需的高吞吐量,但它們?cè)诒O(jiān)控和控制應(yīng)用中表現(xiàn)良好,相比之下這些應(yīng)用中的延遲問題不是那么重要。
將FPGA和CPLD的靈活性和這些低開銷總線相結(jié)合,為系統(tǒng)設(shè)計(jì)師提供了大量的系統(tǒng)控制功能,同時(shí)最大限度地減少所需的電路板面積。
低速串行總線
從物理學(xué)和電氣學(xué)的角度來看,SPI和I2C都是低開銷的總線標(biāo)準(zhǔn),一般從電路板實(shí)現(xiàn)的角度來看就很容易理解。I2C只需要兩個(gè)信號(hào)來實(shí)現(xiàn):SDA(數(shù)據(jù)線)和SCK(時(shí)鐘線)。這些線路都是漏極開路,并要求端接上拉電阻。這些連線可以跨越多個(gè)主器件和從器件,如圖1所示。該電路還需要的唯一一個(gè)額外要求就是使用適當(dāng)?shù)亩私由侠娮鑱硖幚砭€路電容。兩線總線上的多個(gè)主器件的問題需要使用總線仲裁來處理消息沖突。但是使用一個(gè)簡(jiǎn)單的專用總線結(jié)構(gòu)和一個(gè)主器件,這些問題就可以全部解決。
圖1 典型的I2C連接
SPI是一個(gè)4線串行總線,由于總線上僅允許有一個(gè)主器件因而無需總線仲裁。此外,還有兩個(gè)數(shù)據(jù)引腳,都不是真正的雙向引腳。MOSI(主器件輸出,從器件輸入)線負(fù)責(zé)將數(shù)據(jù)發(fā)送給外設(shè);MISO(主器件輸入,從器件輸出)負(fù)責(zé)將數(shù)據(jù)發(fā)送給主器件。時(shí)鐘(SCLK)和從器件選擇(SS)信號(hào)提供總線控制,它們都是由主器件驅(qū)動(dòng)。雖然這種安排避免了總線仲裁的需要,但是需要使用更多的信號(hào)。
圖2 典型的三個(gè)從器件的SPI總線
今天使用哪種串行總線方面的限制相對(duì)較少。截至2006年,NXP(原Phillips)不再需要許可證即可使用I2C協(xié)議。應(yīng)當(dāng)指出的是,獲取I2C從器件地址仍需收取費(fèi)用。然而,對(duì)于外設(shè)無需與外界通信的應(yīng)用,這是沒有必要的。而SPI是一個(gè)沒有正式規(guī)范文檔而被廣泛使用的標(biāo)準(zhǔn)。然而,該標(biāo)準(zhǔn)已經(jīng)在許多不同的嵌入式處理器中實(shí)現(xiàn),由此看出雖然它沒有正式規(guī)范文檔,但是并未阻礙其廣泛使用。
低開銷的I2C和SPI兩種標(biāo)準(zhǔn)被廣泛采用并且集成到微控制器和外設(shè)中。