在嵌入式系統(tǒng)中,許多應(yīng)用常常使用離散邏輯器件,例如74'HC系列。這些邏輯器件的優(yōu)點(diǎn)在于它們可以獨(dú)立于微控制器(MCU)工作,并且響應(yīng)速度比軟件快得多。然而,這些器件會(huì)增加材料清單(BOM),并且需要額外的PCB面積。
為了解決這個(gè)問題,許多微芯科技的微控制器在PIC MCU上集成了一種名為可配置邏輯單元(Configurable Logic Cell, CLC)的外設(shè),或在AVR MCU上集成了一種類似的外設(shè),稱為可配置自定義邏輯(Configurable Custom Logic, CCL)。這兩種外設(shè)都實(shí)現(xiàn)了軟件定義的自定義邏輯,可以獨(dú)立于CPU執(zhí)行。換句話說,一旦自定義邏輯功能設(shè)置完成,其行為就不再依賴于微控制器。
這些外設(shè)為開發(fā)簡單的邏輯電路、混合信號以及與其他硬件外設(shè)集成提供了有用的工具。但這些外設(shè)的一個(gè)局限性是每個(gè)實(shí)例的邏輯量非常小。每個(gè)CLC大約相當(dāng)于一個(gè)查找表(LUT),而CCL則是一個(gè)內(nèi)部有幾個(gè)獨(dú)立LUT的實(shí)例。
引入可配置邏輯塊
為了支持更復(fù)雜的應(yīng)用,開發(fā)了一種新型邏輯外設(shè)——可配置邏輯塊(Configurable Logic Block, CLB),如圖1所示。它首次出現(xiàn)在PIC16F13145系列微控制器中。
圖1
需要注意的是,CLB并不一定取代CLC或CCL外設(shè)。微控制器可以同時(shí)擁有CLC/CCL和CLB。
PIC16F13145系列的CLB由四組邏輯組組成,每組包含八個(gè)基本邏輯單元(BaSIC Logic Element, BLE)。各邏輯組之間是相互連接的,每個(gè)邏輯組代表兩個(gè)GPIO輸出和一個(gè)可選的CPU中斷。
CLB中的其他元素包括:
一個(gè)具有解碼輸出的專用3位硬件定時(shí)器
輸入信號的邊沿檢測器
一個(gè)用于調(diào)試的32位輸出寄存器
此外,微控制器上的其他核心獨(dú)立外設(shè)輸出可以用作CLB的輸入,以實(shí)現(xiàn)更復(fù)雜的設(shè)計(jì)。
CLB從微控制器的內(nèi)存中初始化,并能夠通過外設(shè)引腳選擇(Peripheral Pin Select, PPS)直接控制引腳。PPS允許用戶重新分配與硬件外設(shè)使用的I/O引腳,以獲得更大的設(shè)計(jì)靈活性。例如,如果RA1用于SPI時(shí)鐘而RA6更為合適,則可以通過PPS重新映射該引腳。
所有BLE在整個(gè)電路中共享一個(gè)通用時(shí)鐘,其源在軟件中配置,并可選配一個(gè)時(shí)鐘分頻器。CLB可以使用來自微控制器的內(nèi)部時(shí)鐘源或外部提供的源。當(dāng)在5.5V下運(yùn)行時(shí),BLE的典型傳播時(shí)間小于6納秒。
CLB合成
由于CLB的復(fù)雜性遠(yuǎn)高于CLC或CCL,開發(fā)了一種名為CLB合成器的工具。CLB合成器提供了一個(gè)圖形界面來配置邏輯,如圖2所示。
圖2
除了邏輯原語,合成器還支持更高級邏輯塊的庫,這些庫可以是預(yù)先提供的或由用戶自定義構(gòu)建的。
在與圖形工具交互時(shí),會(huì)在后臺(tái)生成一個(gè)用于合成的Verilog模塊。如果開發(fā)人員希望編寫自己的Verilog或已有文件,可以將該文件直接作為模塊導(dǎo)入到工具中。
CLB合成器的輸出是一個(gè)包含設(shè)置CLB的位流的匯編文件,以及一些用于將CLB配置為外設(shè)的源代碼。該工具可以通過MPLAB代碼配置器(MCC)或獨(dú)立的在線工具運(yùn)行。MCC是一個(gè)代碼生成工具,允許用戶使用可視化界面設(shè)置和配置微控制器中的外設(shè)。在配置硬件外設(shè)后,MCC生成初始化代碼和設(shè)備API。
在運(yùn)行時(shí),CLB位流直接從程序內(nèi)存中加載,使用板載硬件。這種實(shí)施方式使程序能夠在運(yùn)行時(shí)更改CLB的配置。加載過程可以重復(fù)進(jìn)行,使用存儲(chǔ)在設(shè)備內(nèi)存中的不同位流。
使用CLB的設(shè)計(jì)示例
為了演示CLB的應(yīng)用,我們將討論兩個(gè)示例:
七段顯示器轉(zhuǎn)換器
SPI到WS2812串行數(shù)據(jù)轉(zhuǎn)換器
這些用例示例是可以復(fù)制并用作完整解決方案的一部分的構(gòu)建模塊,旨在展示CLB在設(shè)計(jì)中的實(shí)用性。
七段顯示器轉(zhuǎn)換器
七段顯示器可以由常規(guī)的I/O引腳驅(qū)動(dòng)。標(biāo)準(zhǔn)實(shí)現(xiàn)通常需要一個(gè)軟件定義的查找表,將輸入數(shù)字轉(zhuǎn)換為顯示器的正確輸出模式。
在這個(gè)實(shí)現(xiàn)中,CLB作為硬件查找表工作。所需的輸出字符(0到F)從軟件加載到CLB輸入寄存器中。顯示器的每個(gè)輸出段由一個(gè)LUT控制,該LUT將輸入映射到輸出。
這一用例示例曾在內(nèi)部用于構(gòu)建一個(gè)新的計(jì)時(shí)系統(tǒng)控制板。原始用戶界面是在1980年代使用74'HC系列邏輯開發(fā)的。通過使用CLB升級設(shè)計(jì),單個(gè)20引腳的微控制器可以實(shí)現(xiàn)顯示和鍵盤邏輯。
如圖3所示,這大大減少了材料清單(BOM)。頂部的原始電路板比底部的新設(shè)計(jì)包含更多組件,后者使用了帶有CLB的MCU。
圖3
SPI到WS2812串行數(shù)據(jù)轉(zhuǎn)換器
WS2812是一種用于控制LED陣列的1線串行協(xié)議,采用脈寬調(diào)制。在這種情況下,SPI硬件被用作要發(fā)送到LED的數(shù)據(jù)的移位寄存器,而CLB將SCLK和SDO轉(zhuǎn)換為預(yù)期的輸出。
如圖4所示,這一實(shí)現(xiàn)使用了一個(gè)單觸發(fā)的3位計(jì)數(shù)器、一個(gè)帶使能的D觸發(fā)器和一個(gè)4輸入的LUT。
圖4
這一實(shí)現(xiàn)的關(guān)鍵在于SPI和CLB的時(shí)鐘源。SPI時(shí)鐘設(shè)置為空閑高電平,在上升沿變換狀態(tài),并以800 kHz的WS2812輸出頻率運(yùn)行。CLB的8 MHz時(shí)鐘源是10倍更快的。
當(dāng)SCLK為低時(shí),3位計(jì)數(shù)器被觸發(fā)并開始計(jì)數(shù)。當(dāng)計(jì)數(shù)器達(dá)到7(0b111)時(shí),它停止并保持在0,直到下一個(gè)時(shí)鐘脈沖的低周期。
計(jì)數(shù)器的輸出與鎖存版本的輸出數(shù)據(jù)一起饋入4輸入的LUT。這設(shè)置了數(shù)據(jù)的輸出模式,如圖4右側(cè)所示。在計(jì)數(shù)器重置后,計(jì)數(shù)器輸出將保持在0以完成周期。然后,如果需要,SPI硬件中的下一個(gè)字節(jié)將被傳輸,重復(fù)這一周期。
可配置邏輯塊的優(yōu)點(diǎn)
這兩個(gè)示例展示了微控制器內(nèi)部離散邏輯的優(yōu)勢。硬件外設(shè)將任務(wù)卸載給CPU,從而改善響應(yīng)時(shí)間和功耗,同時(shí)減少部件數(shù)量。CLB使得開發(fā)以前無法在微控制器內(nèi)部實(shí)現(xiàn)的復(fù)雜應(yīng)用成為可能。目前,CLB可以在PIC16F13145系列微控制器上找到,用戶可以通過Microchip Direct或其他電子分銷商直接獲取。
浮思特科技專注功率器件領(lǐng)域,為客戶提供IGBT、IPM模塊等功率器件以及MCU和觸控芯片,是一家擁有核心技術(shù)的電子元器件供應(yīng)商和解決方案商。