利用單片機(jī)實(shí)現(xiàn)復(fù)雜的分立邏輯
在許多嵌入式系統(tǒng)應(yīng)用中,通常都會(huì)使用分立式邏輯器件,例如74'HC系列。這些邏輯器件的優(yōu)勢(shì)在于可以獨(dú)立于單片機(jī)(MCU)工作,并且響應(yīng)速度比軟件快得多。但是,這些器件會(huì)增加物料清單(BOM)并且需要占用額外的PCB面積。
為了解決這一問題,Microchip的許多單片機(jī)都集成了一種名為可配置邏輯單元(CLC)的外設(shè)(在PIC® MCU上)或名為可配置定制邏輯(CCL)的類似外設(shè)(在AVR® MCU上)。這兩種外設(shè)都實(shí)現(xiàn)了軟件定義的定制邏輯,可以獨(dú)立于CPU執(zhí)行。換句話說,一旦設(shè)置了定制邏輯功能,其行為就獨(dú)立于單片機(jī)。
但是,這兩種外設(shè)存在限制,即每個(gè)實(shí)例的邏輯數(shù)量非常小。每個(gè)CLC大約相當(dāng)于一個(gè)查找表(LUT),而CCL相當(dāng)于一個(gè)內(nèi)部具有幾個(gè)獨(dú)立LUT的實(shí)例。這兩種外設(shè)的功能非常強(qiáng)大,可用于開發(fā)簡單邏輯電路、將各種信號(hào)混合在一起以及與其他硬件外設(shè)相集成。例如,硬件按鈕去抖、WS2812輸出生成和正交解碼這些示例都需要使用這兩種外設(shè),但單片機(jī)中這兩種外設(shè)的數(shù)量并不多,因此限制了應(yīng)用的復(fù)雜度。
為了支持更復(fù)雜的應(yīng)用,PIC16F13145系列單片機(jī)引入了一種名為可配置邏輯模塊(CLB)的新型邏輯外設(shè)(如圖1所示)。請(qǐng)注意,CLB并不會(huì)取代CLC或CCL外設(shè),器件可以同時(shí)配備CLC/CCL和CLB。
圖1—— CLB框圖
PIC16F13145系列單片機(jī)上的CLB包含四個(gè)邏輯組,每組包含八個(gè)BLE。不同邏輯組的BLE之間彼此連接——每個(gè)邏輯組代表兩個(gè)GPIO輸出和一個(gè)可選的CPU中斷。當(dāng)工作電壓為5.5V時(shí),BLE的傳播時(shí)間典型值小于6 ns。整個(gè)結(jié)構(gòu)中的所有BLE共用一個(gè)公共時(shí)鐘,其時(shí)鐘源與可選的時(shí)鐘分頻器一起在軟件中進(jìn)行配置。CLB可以使用單片機(jī)的內(nèi)部時(shí)鐘源之一或外部提供的時(shí)鐘源。
該外設(shè)從單片機(jī)的存儲(chǔ)器中進(jìn)行初始化,之后可通過外設(shè)引腳選擇(PPS)直接從自身結(jié)構(gòu)中控制引腳。用戶可通過PPS重新分配用于硬件外設(shè)的I/O引腳,從而獲得更大的設(shè)計(jì)靈活性。舉例來說,如果SPI時(shí)鐘先前使用RA1,但使用RA6會(huì)更有利,那么便可以通過PPS重新映射引腳。
CLB中的其他元件包括專用的3位硬件定時(shí)器(帶解碼輸出)、用于輸入信號(hào)的邊沿檢測(cè)器以及32位輸出寄存器(用于調(diào)試)。單片機(jī)上的其他獨(dú)立于內(nèi)核的外設(shè)(CIP)輸出可用作CLB的輸入,以便實(shí)現(xiàn)更復(fù)雜的設(shè)計(jì)。
由于CLB比CLC或CCL復(fù)雜得多,因此Microchip開發(fā)了一款名為CLB合成器的新工具。CLB合成器提供了一個(gè)用于配置邏輯的圖形界面,如下面的圖2所示。除了邏輯原語之外,該工具還支持更高級(jí)的邏輯模塊庫(可由用戶預(yù)先提供或定制)。
與該圖形工具交互時(shí),后臺(tái)會(huì)自動(dòng)生成一個(gè)Verilog模塊用于合成。如果開發(fā)人員更喜歡編寫自己的Verilog或者已準(zhǔn)備好該文件,則可以將其作為模塊直接導(dǎo)入工具。
圖2——已打開相移鍵控(PSK)示例的CLB合成器
CLB合成器的輸出是一個(gè)匯編文件,其中包含用于設(shè)置CLB的比特流和一些用于將CLB配置為外設(shè)的源代碼。該工具可通過MPLAB®代碼配置器(MCC)或獨(dú)立在線工具運(yùn)行。MCC是一款代碼生成實(shí)用程序,允許用戶使用可視化界面來設(shè)置和配置單片機(jī)中的外設(shè)。當(dāng)硬件外設(shè)完成配置后,MCC將生成初始化代碼和器件API。
在運(yùn)行時(shí),使用板上硬件直接從程序存儲(chǔ)器加載CLB比特流。這種實(shí)現(xiàn)的好處在于如果在程序運(yùn)行時(shí)需要更改CLB配置,則可以使用存儲(chǔ)在器件存儲(chǔ)器中的不同比特流重復(fù)執(zhí)行加載過程。
為了演示CLB的應(yīng)用,我們創(chuàng)建了一系列用例示例。這里我們將討論兩個(gè)示例:7段顯示轉(zhuǎn)換器和SPI至WS2812轉(zhuǎn)換器。用例示例可作為構(gòu)件復(fù)制以用作完整解決方案的一部分。這里旨在展示該外設(shè)的實(shí)用性以及它能夠?yàn)樵O(shè)計(jì)帶來哪些價(jià)值。
第一個(gè)用例是7段顯示轉(zhuǎn)換器。7段顯示器可通過一組普通的I/O引腳驅(qū)動(dòng),但標(biāo)準(zhǔn)實(shí)現(xiàn)通常需要使用軟件定義的查找表將輸入數(shù)字轉(zhuǎn)換為適合顯示器的正確輸出模式。在該實(shí)現(xiàn)中,CLB充當(dāng)硬件查找表。所需的輸出字符(0到F)從軟件加載到CLB輸入寄存器中。顯示器的每個(gè)輸出段均由LUT控制,以將輸入映射到輸出。
該用例示例在內(nèi)部用于構(gòu)建計(jì)時(shí)系統(tǒng)的新控制板。最初的用戶界面是在20世紀(jì)80年代使用74'HC系列邏輯開發(fā)。使用CLB后,一個(gè)20引腳的單片機(jī)即可實(shí)現(xiàn)電路板上的顯示和鍵盤邏輯,極大地精簡了物料清單(BOM)。圖3并排給出了兩種方案以供比較。
圖3——原PCB與新PCB的并排比較。該示例由Josh Booth開發(fā)。
下一個(gè)示例是SPI至WS2812轉(zhuǎn)換器。WS2812是一種單線串行協(xié)議,用于通過脈寬調(diào)制控制LED陣列。在本例中,SPI硬件用作要發(fā)送到LED的數(shù)據(jù)的移位寄存器,而CLB用于將SCLK和SDO轉(zhuǎn)換為預(yù)期的輸出。
在本例中,這是通過單觸發(fā)3位計(jì)數(shù)器、帶使能功能的D鎖存器和4輸入LUT來實(shí)現(xiàn),如下面的圖4所示。該實(shí)現(xiàn)的技巧體現(xiàn)在SPI和CLB的時(shí)鐘源。SPI時(shí)鐘設(shè)置為空閑高電平、在上升沿改變狀態(tài)并以WS2812輸出的頻率(800 kHz)運(yùn)行,而CLB的時(shí)鐘源以前者10倍的頻率(8 MHz)運(yùn)行。當(dāng)SCLK為低電平時(shí),將觸發(fā)3位計(jì)數(shù)器并開始計(jì)數(shù)。當(dāng)計(jì)數(shù)到7(0b111)時(shí),3位計(jì)數(shù)器將停止并保持為0,直到時(shí)鐘脈沖的下一個(gè)低電平周期為止。
計(jì)數(shù)器的輸出與輸出數(shù)據(jù)的鎖存版本一起饋入4輸入LUT。這將設(shè)置數(shù)據(jù)的輸出模式,如圖4的右側(cè)所示。計(jì)數(shù)器復(fù)位后,計(jì)數(shù)器輸出將保持為0以完成循環(huán)。之后,可根據(jù)需要發(fā)送SPI硬件中的下一個(gè)字節(jié),重復(fù)該循環(huán)。
圖4——SPI至WS2812轉(zhuǎn)換器框圖(由Petre Teodor-Emilian開發(fā))
這兩個(gè)示例都證明了單片機(jī)內(nèi)部分立邏輯的優(yōu)勢(shì)。硬件外設(shè)可將CPU從各種任務(wù)中解放出來,從而縮短響應(yīng)時(shí)間并降低功耗,同時(shí)減少元器件數(shù)量。有了CLB,之前無法在單片機(jī)內(nèi)部實(shí)現(xiàn)的復(fù)雜應(yīng)用現(xiàn)在都可以順利開發(fā)。目前,可前往Microchip直銷網(wǎng)站或其他代理商處購買PIC16F13145系列單片機(jī)來獲取CLB。
Robert Perkel是Microchip的一名應(yīng)用工程師。他主要負(fù)責(zé)編輯應(yīng)用筆記,投稿文章和視頻等技術(shù)內(nèi)容,以及分析外設(shè)的用例和開發(fā)代碼示例與演示。Perkel畢業(yè)于弗吉尼亞理工大學(xué),獲得了計(jì)算機(jī)工程理學(xué)學(xué)士學(xué)位。