All Programmable SoC 進軍制造行業(yè)
制造領(lǐng)域為許多人提供了喜聞樂見的業(yè)余愛好,也激勵著年輕人從事科學(xué)、技術(shù)、工程和數(shù)學(xué)方向的職業(yè)。這個領(lǐng)域的許多項目都使用嵌入式處理器(通常如 Arduino 或 Raspberry PI 系列),以提供系統(tǒng)所需的智能化。
本文引用地址:http://www.ex-cimer.com/article/201807/384749.htmArduino 和 Raspberry PI 這兩大系列嵌入式處理器均得到開發(fā)環(huán)境的支持,為其提供多種軟件庫、模塊和實例。這些軟件庫、模塊和實例可幫助開發(fā)人員迅速方便地接口到各類型外設(shè),如攝像頭、加速計和電機等。正是這種易用性讓這些處理器在制造領(lǐng)域倍受青睞。
直到最近制造商都把 All Programmable SoC 排除在制造領(lǐng)域之外,認(rèn)為它適用于更專業(yè)的工程師。但隨著 ZynqBerry、Pynq 和 Snickerdoodle 等基于 Zynq® 的開發(fā)板的推出以及基于軟件的開發(fā)方法的問世,這種情況已經(jīng)發(fā)生根本性變化。
這些開發(fā)板配有賽靈思 All Programmable Zynq®-7000 SoC 系列器件。這些器件將雙核 ARM® Cortex™-A9 處理器與 All Programmable Artix®-7 FPGA 系列的可編程邏輯完美結(jié)合在一起。這可加快可編程邏輯架構(gòu)內(nèi)的功能,從而顯著提升系統(tǒng)性能。但是傳統(tǒng)的開發(fā)工作將可編程邏輯的設(shè)計與軟件開發(fā)工作分割開來,可編程邏輯設(shè)計的實現(xiàn)需要專門的開發(fā)經(jīng)驗?,F(xiàn)在已不存在這種情況。
當(dāng)這些開發(fā)板與能在純軟件中開發(fā)應(yīng)用的最新開發(fā)環(huán)境相結(jié)合,它們對制造業(yè)就變得極為有用。尤其是因為使用這些開發(fā)環(huán)境,用戶不必具備FPGA專家級水平就能夠開發(fā)出可編程邏輯,從而充分發(fā)揮了軟硬件的優(yōu)勢。
從左到右制造商開發(fā)板分別是 Arduino、ZynqBerry、Pynq、Raspberry 和 Snickerdoodle。
開發(fā)環(huán)境
有兩種開發(fā)環(huán)境可用于為這些 Zynq 開發(fā)板創(chuàng)建應(yīng)用。第一種是基于 Eclipse 的 SDSoC™ 開發(fā)環(huán)境。這種環(huán)境能夠使用 C 或 C++ 開發(fā)應(yīng)用并無縫地將運行在 ARM Cortex-A9 處理器上的功能移到可編程邏輯中加速。SDSoC 環(huán)境使用高層次綜合(HLS)將選定的 C 語言功能移到可編程邏輯中。在 HLS 完成連接后,就使用框架將 HLS 模塊與軟件應(yīng)用集成?,F(xiàn)在除了可編程邏輯中的功能加速帶來的性能提升,該流程還對用戶透明。功能在處理器和可編程邏輯間切換極為簡便并可在 SDSoC 內(nèi)通過使用項目簡介進行控制。
SDSoC 項目簡介
SDSoC 支持制造業(yè)常用的 Linux 操作系統(tǒng),同時也支持實時操作系統(tǒng)(FreeRTOS)和裸機。
第二種方法由 Pynq 提供,這種方法提供基于 Python 和 Juypter 筆記本的開發(fā)框架。二者都在運行于處理器上的 Linux 發(fā)行版上執(zhí)行,同時可編程邏輯有一個已定義的疊層,用于為 Pynq 上的外設(shè)提供連接。在用于支持外設(shè)和硬件疊層的 Linux 發(fā)行版內(nèi)有一個已定義的 Pynq 包,該包可讓我們使用 Python 直接接口外設(shè)。
因為 Pynq 提供兩個 PMOD 接口,該軟件包能為 ADC、DAC 等各種 PMOD 提供重大支持,簡化與 Python 應(yīng)用的集成。
在 Pynq 內(nèi),用許多疊層中的一個來加載可編程邏輯以實現(xiàn)硬件加速。除提供的基本疊層外,還存在多個開源疊層。
用戶可通過借助 Web 瀏覽器連接到 Juypter 筆記本服務(wù)器為 Pynq 編程。連接到該筆記本電腦后,他們就能開發(fā)自己的 Python 應(yīng)用并為其建立文檔,以便在 Pynq 上運行。
這種使用 Python 并運用 Python 直接接口 PMOD 的能力提供了一種極為強大的開發(fā)平臺。
兩種開發(fā)方法都提供使用 OpenCV 等開源嵌入式視覺框架來執(zhí)行嵌入式視覺應(yīng)用的能力。在 Linux 發(fā)行版支持 USB 視頻類或特定攝像頭(例如 ZynqBerry 支持的 Raspberry PI 攝像頭)時,這些應(yīng)用能夠使用網(wǎng)絡(luò)攝像頭。
OpenCV 方便開發(fā)人員使用 C/C++ 或者 Python 開發(fā),運用這一框架他們能夠便捷地實現(xiàn)復(fù)雜圖像處理算法,發(fā)揮 Zynq 可編程邏輯的加速功能,顯著提升性能。
這些應(yīng)用借助這一框架能處理圖像,檢測對象或面部等。
在需要實現(xiàn)簡單的對象檢測算法時,它們能在基于 Zynq 的平臺上運行 Linux、Python 和 OpenCV。下面我們了解如何使用 OpenCV 和網(wǎng)絡(luò)攝像頭實現(xiàn)簡單的對象跟蹤系統(tǒng)。他們要實現(xiàn)的算法是:
1.從網(wǎng)絡(luò)攝像頭捕獲第一幀。第一幀用作基準(zhǔn)背景幀。他們將檢測從第一幀的場景中發(fā)生的任何變化。
2.將色域從 RGB 轉(zhuǎn)換為灰度。這是一種常見的圖像分割技術(shù),能用于創(chuàng)建二值圖像。圖像分割涉及數(shù)種將圖像劃分為多個片段(常稱為超像素)的方法。通過分割,更易于分析各片段的內(nèi)容。在他們的應(yīng)用中,他們使用閾值化來從前景中分割出背景。這樣可以生成二值圖像。
3.對圖像進行高斯模糊。許多用于檢測對象或邊緣的圖像處理應(yīng)用的性能受抓取的幀內(nèi)存在的噪聲的不利影響。在進一步處理前將圖像模糊化可降低幀內(nèi)的噪聲。這一方法常用于圖像處理,尤其是邊緣檢測算法(例如高斯邊緣檢測算法的拉普拉斯算子)。這一運算的結(jié)果即為用于檢測變化的基準(zhǔn)圖像。
4.再次重復(fù)步驟1-3,從網(wǎng)絡(luò)攝像頭中捕獲另一圖像,從彩色域轉(zhuǎn)換到灰度并在圖像上執(zhí)行高斯模糊。
5.計算基準(zhǔn)幀和最近采集的圖像間的絕對差。
6.對絕對差進行取閾,以創(chuàng)建二值圖像。
7.開展形態(tài)學(xué)操作,擴大圖像以放大任何差異。
8.找出二值圖像中剩余的等值線并忽略面積過小的任何等值線。
9.在每個被檢測出的等值線周圍畫一個方框,通過 HDMI 輸出顯示原始采集的圖像。
開發(fā)人員能直接在 ZynqBerry 上或是在 Juypter 筆記本內(nèi)的 Pynq 上運行結(jié)果 python 代碼。他們看到的圖像如下圖所示,該圖識別出了與基準(zhǔn)圖像的差異并用方框高亮顯示出這些差異。
圖像跟蹤應(yīng)用的結(jié)果。
這個實例體現(xiàn)了開發(fā)人員運用熟悉的開源框架,借助 Zynq 平臺執(zhí)行他們的嵌入式視覺應(yīng)用所帶來的強大功能和簡便性。
結(jié)論
本文呈現(xiàn)的開發(fā)環(huán)境展現(xiàn)了開發(fā)人員發(fā)揮多個Zynq開發(fā)板的功能的簡便性。這些開發(fā)環(huán)境讓用戶開發(fā)出既能在處理器內(nèi)的處理內(nèi)核上執(zhí)行,又能使用可編程邏輯加速的設(shè)計。
評論