一HPM6200 系列 PLA 整體結(jié)構(gòu)
HPM6200 系列的 UM 中帶有 PLA 的結(jié)構(gòu)簡(jiǎn)圖。為了方便大家把握整體結(jié)構(gòu),我也繪制了一個(gè)稍微更詳細(xì)的結(jié)構(gòu)圖,將 PLA 外設(shè)中的大部分元素都展示出來(lái),并給出了單個(gè)通道內(nèi)的具體結(jié)構(gòu)。
從總體來(lái)看,PLA 外設(shè)擁有 8 輸入、8 反饋、8 輸出,其中 8 輸入、8 反饋是內(nèi)部的 8 個(gè)通道共享,8 輸出則是每個(gè)通道使用一個(gè)。輸入、輸出均連接到 TRGM 外設(shè),再通過(guò) TRGM 連接到定時(shí)器、編碼器、外部引腳等地方。需要注意的是,PLA 的 8 輸入、8 輸出并非全部都能引出至外部引腳中。每個(gè) PLA 外設(shè)都連接到一個(gè)指定的 TRGM 外設(shè),而每個(gè) TRGM 外設(shè)最多僅可連接 12 個(gè)外部引腳,同時(shí) TRGM 還可能有其他信號(hào)需要接到外部引腳中,如果想要使用更多外部引腳,則還需要使用 TRGM 間連接等方式。因此,在設(shè)計(jì) PLA 程序時(shí)需要盡可能提前考慮 I/O 安排的問(wèn)題。
每個(gè) PLA 外設(shè)由一個(gè)濾波器 FILTER1 和 8 個(gè)通道組成,F(xiàn)ILTER1 對(duì)輸入和反饋信號(hào)進(jìn)行濾波后,寬度為 16bit 的信號(hào)將同時(shí)輸入到 8 個(gè)通道之中(這個(gè)扇出也挺驚人的)。每個(gè)通道的輸出寬度均只有 1bit,8 個(gè)通道合并組成的 8bit 就是 PLA 外設(shè)的輸出。下面我們將分別對(duì) PLA 濾波器和單個(gè)通道進(jìn)行介紹。
二PLA 外設(shè)中的濾波器
和我們之前介紹過(guò)的 PLA 結(jié)構(gòu)相比,HPM6200 系列的 PLA 最大的特點(diǎn)就是多出了一些濾波器。每個(gè) PLA 外設(shè)都有一個(gè) FILTER1 濾波器,8 個(gè)通道中每個(gè)通道還各有一個(gè) FILTER2 濾波器和 FILTER3 濾波器。目前,文檔中并沒(méi)有向我們介紹這些濾波器的設(shè)計(jì)目的,不過(guò)我們也不難從其功能中窺探一二。無(wú)論是 FILTER 1, 2 還是 3,他們的功能基本一致:將輸入信號(hào)經(jīng)過(guò)同步、邊沿檢測(cè)、軟件注入和擴(kuò)展濾波四個(gè)環(huán)節(jié)后輸出。
1. 同步
文檔中并沒(méi)有告訴我們同步功能的具體實(shí)現(xiàn)方式,不過(guò)在這一段描述里面,我們可以大致猜測(cè)出很多信息:
FILTER_SYNC_LEVEL 位選擇同步器級(jí)數(shù),清 0 時(shí)為 2 級(jí)同步,置 1 時(shí)為 3 級(jí)同步。根據(jù)該位的設(shè)置,同步器會(huì)將信號(hào)延時(shí) 2 個(gè)或者 3 個(gè)時(shí)鐘周期。
2級(jí)、3 級(jí)同步可選,聽(tīng)上去就與跨時(shí)鐘域處理中的同步器很像。比較了解 FPGA 或 IC 設(shè)計(jì)的朋友知道,同步器是減少亞穩(wěn)態(tài)對(duì)邏輯電路影響的一個(gè)常用措施,PLA 外設(shè)可以接受外部輸入的信號(hào),自然也算是一種“跨時(shí)鐘域”傳遞信號(hào)的過(guò)程。同時(shí),增加同步功能還有利于避免出現(xiàn)組合邏輯電路的競(jìng)爭(zhēng)-冒險(xiǎn),畢竟 FPGA 和 CPLD 開(kāi)發(fā)時(shí)有 EDA (盡管 EDA 也不完全可靠)工具幫忙看著,我們?cè)诤?PLA 玩耍的時(shí)候就沒(méi)那么好的條件了。因此我們不妨猜測(cè)同步功能實(shí)際上就是使用 2/3 級(jí)觸發(fā)器構(gòu)成的同步器。
2. 邊沿檢測(cè)
這一功能很好理解,將邊沿轉(zhuǎn)為脈沖,此處不再贅述。
3. 軟件注入
這一功能也很好理解:強(qiáng)制將輸出設(shè)置為高電平或低電平。實(shí)際上各邏輯門(mén)前的四選一 MUX 也能實(shí)現(xiàn)類(lèi)似的功能,這一功能更多是為可配置觸發(fā)器 CFF 或者是降低配置復(fù)雜度而生的。
4. 擴(kuò)展濾波
擴(kuò)展濾波要比上面三個(gè)功能復(fù)雜得多,文檔也并沒(méi)有講得特別清楚,下面我將結(jié)合實(shí)際例子,分別介紹它的四個(gè)濾波類(lèi)型效果。
在開(kāi)始之前,我們首先要了解 PLA 外設(shè)的時(shí)鐘。PLA 外設(shè)掛載在 AHB/APB 總線下,因此也受在 AHB/APB 時(shí)鐘(默認(rèn) 200MHz)驅(qū)動(dòng)。在上文提到的同步器同步周期數(shù)量中,2/3 級(jí)同步就是指的 AHB/APB 時(shí)鐘的 2/3 個(gè)周期。擴(kuò)展濾波功能最高支持 65535 周期的擴(kuò)展,對(duì)應(yīng)的 AHB/APB 時(shí)鐘周期數(shù)也為 65535 周期,單個(gè)周期的時(shí)間為 5ns,這在我們后續(xù)的計(jì)算中會(huì)常常用到。對(duì)于 hpm_sdk v1.2 以前的版本,周期數(shù)配置部分存在一個(gè)小 bug,需在代碼中將計(jì)算出來(lái)的周期數(shù)乘二。
(1)輸入高電平擴(kuò)展
這一個(gè)模式相對(duì)比較好理解:擴(kuò)展高電平的長(zhǎng)度,也就是在輸入信號(hào)變?yōu)榈碗娖揭院?,輸出信?hào)仍會(huì)保持高電平,時(shí)間為設(shè)定的周期數(shù)。下圖給出了一個(gè)例子。輸入信號(hào)是周期為 80μs,占空比 50% 的 PWM 信號(hào),濾波器設(shè)置為輸入高電平拓展,周期數(shù)為 2000,輸出信號(hào)較輸入信號(hào)延遲10μs 變?yōu)榈碗娖健?/p>
(2)輸入低電平擴(kuò)展
這一個(gè)模式正好與上一個(gè)模式相反。下圖輸入信號(hào)仍是周期為 80μs,占空比 50% 的 PWM 信號(hào),濾波器設(shè)置為輸入低電平拓展,周期數(shù)為 2000,輸出信號(hào)較輸入信號(hào)延遲 10μs 變?yōu)楦唠娖健?/p>
(3)輸出狀態(tài)擴(kuò)展
這一個(gè)模式可以看作是以上兩種模式的加和:既延長(zhǎng)低電平時(shí)間,也延長(zhǎng)高電平時(shí)間。輸入信號(hào)發(fā)生變化時(shí),輸出信號(hào)將先在設(shè)定的周期數(shù)內(nèi)維持現(xiàn)有狀態(tài),結(jié)束后跟隨輸入信號(hào)變化。這一模式可以起到兩個(gè)效果,一是將脈沖寬度小于設(shè)定周期數(shù)的脈沖全部過(guò)濾掉,二是將脈沖寬度大于設(shè)定周期數(shù)的脈沖延遲設(shè)定周期后輸出。
下圖前半段輸入信號(hào)是一個(gè)脈沖寬度為 40μs 的 PWM 波,輸出信號(hào)對(duì)比輸入信號(hào)延遲了 10μs;在后半段將輸入信號(hào)和輸出信號(hào)對(duì)比,則可以發(fā)現(xiàn)所有寬度不大于 10μs 的波形都被過(guò)濾掉了。
(4)輸入跳變擴(kuò)展
這一模式下輸出信號(hào)跟隨輸入信號(hào)變化,但是當(dāng)輸出信號(hào)發(fā)生過(guò)跳變以后,在設(shè)定周期數(shù)的時(shí)間內(nèi),輸出信號(hào)將保持不變,隨后輸出信號(hào)繼續(xù)跟隨輸入信號(hào)的變化。
下圖中前半段濾波器設(shè)置的周期數(shù)為 2000,對(duì)應(yīng) 10μs 的時(shí)間,因此對(duì)于半周期 20μs 的 PWM 信號(hào)不會(huì)產(chǎn)生任何影響;后半段濾波器設(shè)置的周期數(shù)為 6000,對(duì)應(yīng) 30μs 時(shí)間,因此在輸入信號(hào)從高電平跳變?yōu)榈碗娖揭院螅敵鲂盘?hào)還會(huì)繼續(xù)保持高電平直至 30μs 結(jié)束。
三PLA 外設(shè)通道結(jié)構(gòu)
1. 與- 或陣列
每個(gè)通道的 16 信號(hào)輸入會(huì)分別接入到 8 個(gè) 16 輸入與門(mén)中,對(duì)單個(gè)輸出信號(hào)最高支持 8 個(gè)最小項(xiàng)相加(8 個(gè)與門(mén)),并可生成 7 個(gè)輸出信號(hào)(7 個(gè)或門(mén))。每個(gè)邏輯門(mén)的輸入端都有一個(gè)四選一 MUX,可選邏輯 1、邏輯 0、原信號(hào)和原信號(hào)取反四種輸入。
2. 可配置觸發(fā)器
CFF 可被配置為 D 觸發(fā)器、雙邊沿 D 觸發(fā)器、JK 觸發(fā)器、T 觸發(fā)器、鎖存器、運(yùn)算器和直接輸出信號(hào)這幾種功能。CFF 的輸出即為其所在通道的輸出,輸出信號(hào)寬度 1bit,輸入信號(hào)寬度則為 7bit,CFF 配置為各類(lèi)觸發(fā)器時(shí),觸發(fā)器的使能、置位、同步/異步復(fù)位、時(shí)鐘等信號(hào)均來(lái)自于 7bit 寬度的輸入信號(hào),具體的分配表可見(jiàn) UM 文檔。除了使用輸入信號(hào)以外,CFF 還可以使用 AHB/APB 的時(shí)鐘。
四如何使用 HPM_SDK 中的PLA驅(qū)動(dòng)
在之前介紹的各種含有 PLA 的芯片基本都會(huì)配置對(duì)應(yīng)的 EDA 工具,用戶(hù)一般可以使用 verilog 編程或者圖形化界面編程,由 EDA 工具生成比特流。比如 PSoC 芯片用戶(hù)可以使用圖形化界面編輯狀態(tài)機(jī)的狀態(tài)轉(zhuǎn)移條件,再由軟件完成后端的處理。HPM6200 的 PLA 則沒(méi)有使用這種開(kāi)發(fā)方式,而是將所有的可配置項(xiàng)均以寄存器的方式暴露給 CPU,CPU 設(shè)置好對(duì)應(yīng)的寄存器以后,PLA 即可開(kāi)始工作。
1. FILTER
濾波器的可配置項(xiàng)非常多,包括是否同步、是否啟用邊沿檢測(cè)、是否軟件注入等一系列內(nèi)容,不過(guò)最關(guān)鍵的其實(shí)是準(zhǔn)確把握配置的數(shù)量。PLA 中有 1 個(gè) FILTER1、8 個(gè) FILTER2 和 8 個(gè) FILTER3,F(xiàn)ILTER1/2/3 中分別有 16/8/7 個(gè)信號(hào),每一個(gè)信號(hào)都可以獨(dú)立設(shè)置上述介紹過(guò)的所有濾波功能,也就是共有 136 個(gè)信號(hào),很容易錯(cuò)配、漏配。因此,除了所有通道共用的 FILTER1 單獨(dú)配置以外,F(xiàn)ILTER2/3 建議和它們所在的通道一同配置,避免混淆的同時(shí),如果部分通道沒(méi)有使用,也就不需要對(duì)它們的 FILTER2/3 進(jìn)行配置了。
濾波器的配置結(jié)構(gòu)體是一個(gè)位域結(jié)構(gòu)體,使用四個(gè)字節(jié)保存一個(gè)信號(hào)的濾波選項(xiàng),其每個(gè)成員的功能結(jié)合手冊(cè)也非常容易理解,注意,配置結(jié)構(gòu)體里面并沒(méi)有任何關(guān)于該配置位于哪個(gè)通道、哪個(gè)濾波器等位置的信息。結(jié)構(gòu)體填充完成以后,則需要使用以下幾個(gè)函數(shù)完成設(shè)置:
這里面實(shí)際上有不少容易踩坑的地方。例如 FILTER2/3 都只有一個(gè)函數(shù),而 FILTER1 有 in/out 兩個(gè)函數(shù)。實(shí)際上 in/out 兩個(gè)函數(shù)分別負(fù)責(zé) FILTER1 16 個(gè)信號(hào)里面前 8 個(gè)和后 8 個(gè)信號(hào)的配置,原因大概是前 8 個(gè)是 PLA 的輸入信號(hào),后 8 個(gè)則是 PLA 的輸出信號(hào)反饋回來(lái)的。
剛剛提到的濾波器配置結(jié)構(gòu)體里面并沒(méi)有關(guān)于位置的信息,因此這些信息要以參數(shù)的形式提供給設(shè)置函數(shù)。以在通道 3 的 FILTER2 為例,使用 pla_set_filter2() 時(shí)不僅要寫(xiě)明通道 3,還要指出是 FILTER2 8 個(gè)信號(hào)中的具體哪一個(gè)信號(hào)。而 SDK 中通道參數(shù)和信號(hào)參數(shù)分別叫 chn 和 filter2_chn,使用時(shí)一定要注意區(qū)分兩者之間的差別。
2. 與門(mén)
16 輸入與門(mén)本身只有一個(gè)可配置的內(nèi)容:各輸入信號(hào)的 MUX 選項(xiàng)。不過(guò)同樣需要注意數(shù)量和位置的問(wèn)題。8 個(gè)通道里面,每個(gè)通道有 8 個(gè)與門(mén),每個(gè)與門(mén)又有 16 個(gè) MUX。當(dāng)然,除了沒(méi)有使用的通道無(wú)需配置以外,部分沒(méi)有使用的與門(mén)也可以不進(jìn)行設(shè)置,默認(rèn)狀態(tài)下與門(mén)將輸出低電平。
與門(mén)的配置結(jié)構(gòu)體是 pla_aoi_16to8_chn_cfg,可以對(duì)一個(gè)與門(mén)進(jìn)行配置,記得不要被它名字里面那個(gè) chn 給欺騙了。結(jié)構(gòu)體里面有 pla channel 和 aoi_16to8 channel 兩個(gè)“通道”成員,一個(gè)指的是 PLA 的通道,另一個(gè)則是指 8 個(gè)與門(mén)的編號(hào)。個(gè)人認(rèn)為這樣設(shè)計(jì)其實(shí)容易混淆,可以在命名方面更加有區(qū)分度一些。
一個(gè)與門(mén)中有 16 個(gè) MUX,因此 pla_aoi_16to8_chn_cfg 里面有長(zhǎng)度為 16 的 MUX 配置結(jié)構(gòu)體 pla_aoi_16to8_cfg_unit_t 數(shù)組。MUX 配置結(jié)構(gòu)體的 signal 成員是信號(hào)的編號(hào);op 成員的四個(gè)選項(xiàng)對(duì)應(yīng) MUX 的四個(gè)選項(xiàng),對(duì)應(yīng)關(guān)系在上面的代碼注釋中給出。
最后我們需要使用以下函數(shù)對(duì)一個(gè)與門(mén)進(jìn)行配置。
3. 或門(mén)
或門(mén)的代碼和注意事項(xiàng)和與門(mén)大同小異,數(shù)量上一個(gè)通道有 7 個(gè)或門(mén),每個(gè)或門(mén)有 8 個(gè) MUX,比與門(mén)會(huì)少不少,其余部分基本一致,參照使用即可。
4. 可配置觸發(fā)器
CFF 可配置的內(nèi)容并不多,主要就是功能選擇和時(shí)鐘源,具體情況可參考源代碼。需要注意的是觸發(fā)器的同步復(fù)位、同步置位、異步復(fù)位、異步置位等信號(hào)有的是高電平有效,有的則是低電平有效,且有優(yōu)先級(jí)順序,使用時(shí)需要對(duì)照手冊(cè)仔細(xì)調(diào)整。
5. 使能 PLA
在完成上述全部配置完成以后,還需要對(duì)每一個(gè)通道進(jìn)行使能。
在沒(méi)有使能的情況下,PLA 的寄存器可以作為 1KB 的 APB SRAM 使用。
五一個(gè)簡(jiǎn)單的例子:同步八進(jìn)制計(jì)數(shù)器
1. 概述
在前面章節(jié)的基礎(chǔ)上,我們將實(shí)戰(zhàn)使用 PLA 構(gòu)建一個(gè)經(jīng)典的同步時(shí)序邏輯電路:同步八進(jìn)制計(jì)數(shù)器。為了簡(jiǎn)化問(wèn)題讓大家更容易理解,我們要構(gòu)建的計(jì)數(shù)器只會(huì)計(jì)數(shù),沒(méi)有復(fù)位、沒(méi)有使能、沒(méi)有置數(shù),長(zhǎng)得更像是個(gè)分頻器,它的電路結(jié)構(gòu)如下所示:
有了電路圖,下一步就是將電路結(jié)構(gòu)轉(zhuǎn)換為 PLA 的配置代碼。不過(guò),由于 PLA 是與或結(jié)構(gòu),我們不妨進(jìn)一步直接將使用到的與門(mén)、或門(mén)和各種信號(hào)都繪制出來(lái),在編碼時(shí)將會(huì)更加方便。
對(duì)照上圖,我們可以提煉出以下信息:
· 此電路使用了 3 個(gè) PLA 通道,每個(gè)通道的 CFF 均配置為 T 觸發(fā)器(圖上是 JK,實(shí)際功能是 T)
· 觸發(fā)器時(shí)鐘使用外部時(shí)鐘PLA OUT0OUT1OUT2 分別作為計(jì)數(shù)器 D2D1D3 的輸出
· OUT1OUT2 將作為反饋信號(hào)進(jìn)入通道 1 和 通道 2
2. 工程準(zhǔn)備
本部分包括新建工程、使用 GPTMR 產(chǎn)生 1M PWM 作為時(shí)鐘的代碼,本文不打算討論這一部分內(nèi)容,讀者可以參考 HPM_SDK 中的其他例程了解。為了區(qū)分三個(gè)通道的設(shè)置代碼,在 main 函數(shù)前聲明了三個(gè)通道的配置函數(shù)。
3. TRGM 與 I/O
PLA 并沒(méi)有專(zhuān)屬于自己的輸入輸出引腳,和其他增強(qiáng)運(yùn)動(dòng)控制系統(tǒng)外設(shè)一樣,所有輸入輸出信號(hào)都要通過(guò) TRGM 處理。因此,這里的代碼將 GPTMR0 CH2 的 PWM 輸出引入到了 PLA0 IN0 中,將 PLA0 OUT0/1/2 輸出到三個(gè)外部引腳中。為了方便對(duì)比時(shí)鐘波形和計(jì)數(shù)器輸出,還將 GPTMR CH2 的 PWM 也輸出到外部引腳中。
4. FILTER1
FILTER1 并沒(méi)有特別的功能需求,因此我們只需要開(kāi)啟同步功能即可。
5. 通道 0
來(lái)到通道 0 的配置函數(shù),首先聲明與門(mén)陣列、或門(mén)陣列和兩個(gè)濾波器的配置結(jié)構(gòu)體變量。
通道 0 使用了兩個(gè)與門(mén)。第一個(gè)與門(mén)根據(jù)兩個(gè)反饋信號(hào)相與生成 T 觸發(fā)器的 T 信號(hào),先將它的全部 MUX 設(shè)為輸出邏輯 1,再將反饋通道對(duì)應(yīng)的 9、10 號(hào) MUX 修改為輸出原信號(hào)。第二個(gè)與門(mén)只需要輸出 PWM 時(shí)鐘信號(hào),因此只設(shè)置一個(gè) MUX 輸出原信號(hào),其余全部設(shè)置輸出邏輯 1。
FILTER2 同樣只需要設(shè)置同步。
通道 0 使用了兩個(gè)或門(mén)。第一個(gè)或門(mén)需要輸出與第一個(gè)與門(mén)完全相同的信號(hào),因此 0 號(hào) MUX 設(shè)置輸出原信號(hào),其余 MUX 輸出邏輯 0(注意,沒(méi)有使用的信號(hào) MUX,一般與門(mén)設(shè)置輸出邏輯 1,或門(mén)設(shè)置輸出邏輯 0),第二個(gè)與門(mén)也基本一致。
FILTER3 同樣設(shè)置信號(hào)同步,不過(guò)不要忘了 FILTER3 同時(shí)也輸出觸發(fā)器的同步異步復(fù)位置位,我們這個(gè)電路沒(méi)有相關(guān)功能,因此全部根據(jù)手冊(cè)設(shè)置為固定值即可。如果要使用這些功能,則需要另外構(gòu)建他們的控制邏輯函數(shù)。
最后是 CFF 并使能通道。
其余兩個(gè)通道配置過(guò)程大同小異,就不再?gòu)?fù)制粘貼那么多次了,完整的代碼可在先楫社區(qū)中獲取。最終的效果如下圖所示。
六結(jié) 語(yǔ)
通過(guò)介紹,相信大家對(duì) PLA 已經(jīng)有了一個(gè)較為全面的了解。在 6200 系列剛推出時(shí),許多開(kāi)發(fā)者非常關(guān)注的一點(diǎn)就是 PLA 外設(shè)能不能當(dāng)作 FPGA 使用,對(duì)此,我個(gè)人的看法是“能,但不完全能”。PLA 擁有完備的邏輯結(jié)構(gòu),但是其資源數(shù)量注定只適合小型邏輯使用,尤其是觸發(fā)器資源的缺乏,使得 PLA 很難單獨(dú)構(gòu)建稍復(fù)雜的時(shí)序邏輯電路。因此我們?cè)陂_(kāi)發(fā) PLA 程序之前,對(duì)資源數(shù)量要把控地比較準(zhǔn)確,以免做無(wú)用功。
除了底層資源的限制,個(gè)人認(rèn)為,使用方式上 PLA 也有其遺憾之處:
重復(fù)的配置代碼相當(dāng)多,開(kāi)發(fā)效率不高,寫(xiě)代碼時(shí)容易發(fā)生錯(cuò)誤
無(wú)法對(duì)內(nèi)部信號(hào)進(jìn)行調(diào)試,對(duì)復(fù)雜邏輯調(diào)試?yán)щy
“牽一發(fā)而動(dòng)全身”,難以通過(guò)模塊化設(shè)計(jì)等方式復(fù)用現(xiàn)有資料
基于以上原因,我認(rèn)為圖形化配置,程序自動(dòng)生成配置代碼將會(huì)是 PLA 極好的開(kāi)發(fā)方式:PLA 配置項(xiàng)繁多但并不復(fù)雜,代碼由機(jī)器生成非常合適;圖形化配置的方式降低了開(kāi)發(fā)者編寫(xiě)大量重復(fù)代碼時(shí)出錯(cuò)的可能性,還可以通過(guò)抽象出電路圖的方式協(xié)助開(kāi)發(fā)者調(diào)試;甚至還可以以此為基礎(chǔ)造出 PLA 的模擬器。
當(dāng)然,即使沒(méi)有這些,PLA 也仍不失為構(gòu)建簡(jiǎn)單邏輯的好工具,也期待有更多開(kāi)發(fā)者給出他們使用 PLA 的姿勢(shì)與心得,共同學(xué)習(xí)共同進(jìn)步。
以上內(nèi)容來(lái)自先楫開(kāi)發(fā)者的原創(chuàng)分享。
-
mcu
+關(guān)注
關(guān)注
146文章
16992瀏覽量
350315 -
濾波器
+關(guān)注
關(guān)注
160文章
7728瀏覽量
177685 -
可編程邏輯
+關(guān)注
關(guān)注
7文章
514瀏覽量
44072 -
PLA
+關(guān)注
關(guān)注
0文章
38瀏覽量
17029
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論