林盛鑫 王電令
(1.東莞理工學(xué)院 國(guó)際微電子學(xué)院,廣東東莞 523808; 2.合肥真仁自動(dòng)化科技有限公司,安徽合肥 230093)
《中國(guó)教育現(xiàn)代化2035》提出:提升一流人才培養(yǎng)與創(chuàng)新能力,加強(qiáng)創(chuàng)新人才特別是拔尖創(chuàng)新人才的培養(yǎng),加大應(yīng)用型、復(fù)合型、技術(shù)技能型人才培養(yǎng)比重。同時(shí)《加快推進(jìn)教育現(xiàn)代化實(shí)施方案(2018-2022年)》提出:大力推進(jìn)教育信息化。著力構(gòu)建基于信息技術(shù)的新型教育教學(xué)模式,促進(jìn)信息技術(shù)與教育教學(xué)深度融合,支持學(xué)校充分利用信息技術(shù)開(kāi)展人才培養(yǎng)模式和教學(xué)方法改革,逐步實(shí)現(xiàn)信息化教與學(xué)應(yīng)用師生全覆蓋[1]。
高校為培養(yǎng)高素質(zhì)應(yīng)用型創(chuàng)新人才,不斷增加實(shí)驗(yàn)室教學(xué)的重視程度,實(shí)驗(yàn)考核已成為提高學(xué)生實(shí)驗(yàn)實(shí)踐能力、技術(shù)水平的重要考核環(huán)節(jié)。特別是電子與通信技術(shù)專(zhuān)業(yè)的一些重要專(zhuān)業(yè)基礎(chǔ)課程,其實(shí)驗(yàn)考核環(huán)節(jié)涉及實(shí)驗(yàn)電路、信號(hào)發(fā)生器、示波器、萬(wàn)用表等實(shí)驗(yàn)儀器設(shè)備,實(shí)驗(yàn)設(shè)備多,價(jià)格昂貴,難以推廣,同時(shí)實(shí)驗(yàn)考核過(guò)程中無(wú)法確保學(xué)生的實(shí)驗(yàn)步驟是否正確,實(shí)驗(yàn)數(shù)據(jù)結(jié)果容易被篡改,增加實(shí)驗(yàn)考核公平性和真實(shí)性的難度[2]。因此可通過(guò)嵌入式開(kāi)發(fā)結(jié)合信號(hào)發(fā)生器、示波器、萬(wàn)用表等功能的一體化設(shè)備,通過(guò)軟硬結(jié)合,記錄實(shí)驗(yàn)過(guò)程數(shù)據(jù)中的關(guān)鍵數(shù)據(jù),用實(shí)驗(yàn)過(guò)程數(shù)據(jù)與實(shí)驗(yàn)結(jié)果數(shù)據(jù)相結(jié)合的方式取得實(shí)驗(yàn)考核結(jié)果[3],通過(guò)信息化方式解決實(shí)驗(yàn)考核過(guò)程中繁重的工作量,對(duì)高校實(shí)驗(yàn)室實(shí)驗(yàn)教學(xué)管理有著得要的意義。
由于實(shí)驗(yàn)中所需要的設(shè)備種類(lèi)多,如示波器、信號(hào)發(fā)生器、萬(wàn)用表等儀器設(shè)備,且實(shí)驗(yàn)考核需要考核每個(gè)學(xué)生的動(dòng)手能力,需要一人一組儀器設(shè)備進(jìn)行操作,而儀器設(shè)備數(shù)據(jù)多、成本高,占用實(shí)驗(yàn)室空間大,不利于實(shí)驗(yàn)考核的推廣?;贔PGA的多功能一體化儀器設(shè)備的設(shè)計(jì)能解決以上問(wèn)題。
實(shí)驗(yàn)考核系統(tǒng)裝置由觸摸顯示屏、控制主模塊、通信模塊、信號(hào)發(fā)生器模塊、外接電路板模塊、示波器模塊、萬(wàn)用表模塊和電源模塊組成,實(shí)驗(yàn)考核裝置系統(tǒng)如圖1所示。其中控制主模塊由Raspberry Pi(樹(shù)莓派)和FPGA(Field Programmable Gate Array)芯片組成。Raspberry Pi用于linux的開(kāi)發(fā),實(shí)現(xiàn)對(duì)功能模塊的驅(qū)動(dòng)和控制以及實(shí)驗(yàn)考核系統(tǒng)功能設(shè)計(jì)。FPGA模塊主要實(shí)現(xiàn)數(shù)據(jù)采集以及多儀器設(shè)備功能集成;而外接電路板模塊用于根據(jù)不同的實(shí)驗(yàn)內(nèi)容,外接不同的實(shí)驗(yàn)電路板塊,如高頻小信號(hào)放大器電路模塊、正弦波振動(dòng)器電路模塊和低電平振幅調(diào)制器及解調(diào)器電路模塊等。
圖1 實(shí)驗(yàn)考核裝置系統(tǒng)圖
PCI-e(Peripheral Component Interconnect express)是一種高速串行計(jì)算機(jī)擴(kuò)展總線標(biāo)準(zhǔn),簡(jiǎn)稱“PCI-e”,其主要優(yōu)勢(shì)就是數(shù)據(jù)傳輸速率高。PCI Express設(shè)備間通過(guò)鏈路的邏輯連接進(jìn)行通信,鏈路支持任何兩個(gè)端點(diǎn)之間的全雙工通信,每個(gè)通道由兩個(gè)差分信號(hào)對(duì)組成,一對(duì)用于接收數(shù)據(jù),另一對(duì)用于發(fā)送數(shù)據(jù)。其通信協(xié)議是一種分層協(xié)議,由事務(wù)層、數(shù)據(jù)鏈路層和物理層組成。該協(xié)議以一種串行的點(diǎn)對(duì)點(diǎn)的方式互聯(lián)兩個(gè)設(shè)備,可實(shí)現(xiàn)單通道或多通道的數(shù)據(jù)傳輸,被廣泛應(yīng)用于網(wǎng)絡(luò)適配、圖形加速器、網(wǎng)絡(luò)存儲(chǔ)、大數(shù)據(jù)傳輸以及嵌入式系統(tǒng)等領(lǐng)域[4-5]。
該系統(tǒng)的Raspberry Pi與FPGA采用這種基于數(shù)據(jù)包的高性能互連協(xié)議PCI-e進(jìn)行連接。其中Raspberry Pi采用CM4核心板,目前該板只支持PCI-e x1接口。FPGA采用Artix-7的C7A100T開(kāi)發(fā)板,該開(kāi)發(fā)板支持PCI-e-2.0 x4接口,可以向下兼容x1模式。因此Raspberry Pi與FPGA兩者采用基于PCI-e的x1模式進(jìn)行通信,傳輸帶寬最高可達(dá)500 MB/s。其中GTP為FPGA內(nèi)部高速收發(fā)器,RX和TX代表數(shù)據(jù)收發(fā),CLK為數(shù)據(jù)傳輸同步時(shí)鐘,P/N代表采用差分方式傳輸信號(hào),如圖2所示。主要鏈接的引腳為PCIE_TX0_P/N、PCIE_RX0_P/N、PCIE_CLK_P/N、PCIE_nRST和PCIE_CLK_nREQ。
圖2 系統(tǒng)引腳鏈接圖
該軟件系統(tǒng)主要由硬件驅(qū)動(dòng)設(shè)計(jì)和考核系統(tǒng)界面設(shè)計(jì)。硬件驅(qū)動(dòng)設(shè)計(jì)主要驅(qū)動(dòng)觸摸屏模塊以及FPGA控制模塊,其中功能模塊間的數(shù)據(jù)傳輸采用PCI-e協(xié)議的DMA(Direct Memory Access)模式,該模式的數(shù)據(jù)傳送由一個(gè)特殊的處理器DMA控制器來(lái)完成,不是由CPU負(fù)責(zé)處理,因此占用極少的CPU資源,適合嵌入式的開(kāi)發(fā)[6]。而示波器模塊、信號(hào)發(fā)生器模塊和數(shù)字萬(wàn)用表模塊主要由FPGA控制模塊實(shí)現(xiàn)數(shù)據(jù)的采集與處理[7-8],linux作為操作系統(tǒng)實(shí)現(xiàn)Raspberry Pi系統(tǒng)開(kāi)發(fā),另外數(shù)據(jù)庫(kù)作為用戶數(shù)據(jù)、實(shí)驗(yàn)數(shù)據(jù)存儲(chǔ)與管理,實(shí)驗(yàn)考核系統(tǒng)運(yùn)行流程如圖3所示。
圖3 系統(tǒng)流程圖
其中實(shí)驗(yàn)考核系統(tǒng)具體工作流程如下:
1)通過(guò)觸摸屏輸入學(xué)生賬戶與班級(jí)等信息進(jìn)行系統(tǒng)登錄;
2)同時(shí)顯示實(shí)驗(yàn)考核倒計(jì)時(shí);
3)插入實(shí)驗(yàn)考核要求的外接電路板;
4)系統(tǒng)檢測(cè)接入模塊,開(kāi)始記錄實(shí)驗(yàn)過(guò)程數(shù)據(jù);
5)觸摸顯示屏顯示可控制的儀器設(shè)備圖標(biāo),如信號(hào)發(fā)生器、示波器、萬(wàn)用表、系統(tǒng)設(shè)置、實(shí)驗(yàn)考核報(bào)告;
6)通過(guò)信號(hào)連接線連接信號(hào)發(fā)生器輸出端、示波器輸入端、萬(wàn)用表輸入端;
7)當(dāng)用戶選擇信號(hào)發(fā)生器時(shí),顯示該儀器設(shè)備參數(shù)設(shè)置,如波型、頻率、幅度等,同時(shí)當(dāng)用戶完成設(shè)置后彈出對(duì)話框詢問(wèn)是否記錄該實(shí)驗(yàn)過(guò)程數(shù)據(jù)庫(kù);
8)當(dāng)用戶選擇示波器時(shí),顯示該儀器設(shè)備參數(shù)設(shè)置,自動(dòng)檢測(cè)鍵、頻率調(diào)節(jié)鍵、幅度調(diào)節(jié)鍵、波型顯示區(qū)、光標(biāo)控制鍵等;
9)同時(shí)當(dāng)用戶完成設(shè)置后彈出對(duì)話框詢問(wèn)是否記錄該實(shí)驗(yàn)過(guò)程數(shù)據(jù)庫(kù)。其中波型顯示區(qū)有截圖按鈕,并把該截圖記錄到實(shí)驗(yàn)過(guò)程數(shù)據(jù)庫(kù);
10)當(dāng)用戶選擇萬(wàn)用表時(shí),顯示該儀器設(shè)備參數(shù)設(shè)置,電壓值顯示區(qū)、量程設(shè)置等,同時(shí)當(dāng)用戶完成設(shè)置后彈出對(duì)話框詢問(wèn)是否記錄該實(shí)驗(yàn)過(guò)程數(shù)據(jù)庫(kù);
11)當(dāng)用戶選擇設(shè)置時(shí),可設(shè)置上傳服務(wù)器的IP地址、自身設(shè)備IP地址、實(shí)驗(yàn)考核時(shí)間等,該設(shè)置需要管理員權(quán)限才能進(jìn)入;
12)當(dāng)用戶選擇實(shí)驗(yàn)考核報(bào)告時(shí),顯示實(shí)驗(yàn)考核模版,所需填寫(xiě)的數(shù)據(jù)只能通過(guò)調(diào)用實(shí)驗(yàn)過(guò)程數(shù)據(jù)庫(kù)進(jìn)行選擇,防止用戶篡改數(shù)據(jù)等作弊行為,同理所需的波型圖也需要通過(guò)調(diào)用實(shí)驗(yàn)過(guò)程數(shù)據(jù)庫(kù)進(jìn)行選擇;
13)當(dāng)用戶點(diǎn)擊提交鍵進(jìn)行實(shí)驗(yàn)考核報(bào)告時(shí),系統(tǒng)會(huì)把實(shí)驗(yàn)考核報(bào)告以及自行生成實(shí)驗(yàn)過(guò)程數(shù)據(jù)報(bào)告至服務(wù)器,并顯示是否上傳成功[9];
14)當(dāng)用戶未點(diǎn)擊提交鍵時(shí),而實(shí)驗(yàn)考核時(shí)間結(jié)束時(shí)同樣會(huì)自動(dòng)提交報(bào)告,同時(shí)在離實(shí)驗(yàn)考核時(shí)間結(jié)束前3分鐘時(shí)會(huì)提醒用戶時(shí)間將至。
Raspberry Picm CM4核心板支持PCIe 2.0 通信,徹底解決了樹(shù)莓派跟FPGA之間的數(shù)據(jù)傳輸帶寬和標(biāo)準(zhǔn)化外設(shè)驅(qū)動(dòng)問(wèn)題。采用神電測(cè)控專(zhuān)門(mén)開(kāi)發(fā)的針對(duì)ARTIX7的通用型LabVIEW FPGA工具包,進(jìn)行基于PCI-e DMA 的FPGA 與樹(shù)莓派 Linux 之間的雙向高速通信異構(gòu)系統(tǒng)通信設(shè)計(jì)。
1)下位機(jī)FPGAPCIe Send上行程序設(shè)計(jì)(FPGA-->樹(shù)莓派Linux)。
①選擇100 MHz 的PCIe CLIP時(shí)鐘作為時(shí)鐘源。該同步時(shí)鐘驅(qū)動(dòng)的定時(shí)循環(huán)是專(zhuān)門(mén)用來(lái)處理用戶創(chuàng)建的 FIFO 跟 PCIe IP 核內(nèi)部的 FIFO 之間進(jìn)行數(shù)據(jù)交互的,支持標(biāo)準(zhǔn)四線握手串聯(lián)。
②將FPGA終端下的“pcie_lv_clip_ip_to_gpio_led”節(jié)點(diǎn)放在定時(shí)循環(huán)里面,利用“數(shù)值至布爾數(shù)組”轉(zhuǎn)換 VI 將FXP<+4,4> 定點(diǎn)數(shù)轉(zhuǎn)換成布爾數(shù)組,再利用數(shù)組索引將前3個(gè)狀態(tài)賦給 AX7103 開(kāi)發(fā)板上的前3個(gè)LED,通過(guò)LED_1(心跳 1Hz 閃爍)來(lái)判斷FPGA里面的 PCIe IP核是否正常工作;LED_2狀態(tài)來(lái)判斷FPGA是否發(fā)送了上行數(shù)據(jù);LED_3狀態(tài)來(lái)判斷FPGA是否接收到了PC下發(fā)的下行數(shù)據(jù)。最后一個(gè)LED_4指示燈信號(hào)判斷FIFO是否溢出用的。
③FPGA傳遞數(shù)據(jù)給PCIe IP核然后發(fā)送給樹(shù)莓派(Linux)。把FPGA終端下的 PCIE Data里面的通道0(64 位位寬)的3個(gè)信號(hào)端口pcie_lv_clip_fpga2host_in_64_tdata_ch0”、
“pcie_lv_clip_fpga2host_out_64_tready_ch0”、“pcie_lv_clip_fpga2host_in_64_tvalid_ch0”,拖拽到程序框圖中,這3個(gè)信號(hào)端口符合標(biāo)準(zhǔn)的四線握手。
④把創(chuàng)建好的64位位寬的FIFO(FIFO_PCIe_Write_U64)也拖到程序框圖里面,然后根據(jù)四線握手的方式,將PCIe CLIP通道0的3個(gè)握手信號(hào)接到 FIFO上面去,完整的 PCIe 數(shù)據(jù)上行發(fā)送程序框圖如圖4所示。
圖4 FPGA-->樹(shù)莓派Linux上行數(shù)據(jù)發(fā)送程序框圖
當(dāng)PCIe IP核內(nèi)部的FIFO沒(méi)有滿時(shí),這個(gè)“pcie_lv_clip_fpga2host_out_64_tready_ch0”信號(hào)會(huì)拉高,也就是通知 FPGA,可以將采集的數(shù)據(jù)發(fā)送給 PCIe IP 核內(nèi)部的 FIFO。將這個(gè)信號(hào)接到FPGA里面用戶創(chuàng)建的 FIFO(FIFO_PCIe_Write_U64)的“輸出就緒”端口,然后把“元素”和“輸出有效”兩個(gè)端口分別接到PCIe IP核的“pcie_lv_clip_fpga2host_in_64_tdata_ch0”和“pcie_lv_clip_fpga2host_in_64_tvalid_ch0”兩個(gè)信號(hào)端口上;當(dāng)用戶FIFO里面有數(shù)據(jù)輸出時(shí),就會(huì)直接通過(guò)PCIe總線傳輸給樹(shù)莓派(Linux)端,完成上行通信。
2)下位機(jī)FPGA PCIe Receive下行程序設(shè)計(jì)(樹(shù)莓派Linux -->FPGA)。
①使用FPGA終端下PCIe Data這個(gè)CLIP里面的后4個(gè)8 位位寬(ch4~ch7)的 host2fpga 通道來(lái)傳輸PC下發(fā)的字節(jié)數(shù)組。
②將FPGA終端下行通道4的3個(gè)握手信號(hào)(“pcie_lv_clip_host2fpga_out_8_tdata_ch4”、“pcie_lv_clip_host2fpga_in_8_tready_ch4”、“pcie_lv_clip_host2fpga_out_8_tvalid_ch4”)拖拽到FPGA程序框圖里面。
③根據(jù)四線握手的方式,將PCI-e CLIP下行通道4的3個(gè)握手信號(hào)接到用戶創(chuàng)建的Read FIFO(FIFO_PCIe_Read_U8),完整的FPGA PCIe 數(shù)據(jù)下行接收程序框圖如圖5所示。
3)上位機(jī)樹(shù)莓派(Linux RT)PCIe通信程序設(shè)計(jì)。
程序框圖由兩個(gè)相互獨(dú)立的線程組成,程序?yàn)閮蓚€(gè)while循環(huán),分別是PCIe寫(xiě)線程(樹(shù)莓派下發(fā)數(shù)據(jù)給FPGA)和PCIe讀線程(樹(shù)莓派讀取FPGA上傳的數(shù)據(jù)),如圖6所示。為了讓上位機(jī)樹(shù)莓派(Linux RT)能夠控制下位機(jī)FPGA里面的采樣率和信號(hào)采集的啟動(dòng)和停止,將樹(shù)莓派程序前面板上的 U32 類(lèi)型的“分頻系數(shù)(10ns)”控件通過(guò)“強(qiáng)制類(lèi)型轉(zhuǎn)換”函數(shù)變成字節(jié)數(shù)組;再把前面板上的布爾型“開(kāi)始/停止采集”按鈕轉(zhuǎn)成 U8類(lèi)型的0或者1;然后再把預(yù)留的一個(gè)參數(shù)“size_read_U32”控件通過(guò)“強(qiáng)制類(lèi)型轉(zhuǎn)換”變成字節(jié)數(shù)組;最后將這3個(gè)轉(zhuǎn)換后的字節(jié)數(shù)組進(jìn)行數(shù)組拼接(實(shí)際上就是字節(jié)數(shù)組),賦給“FPGA_FIFO_Write_Pipe_Send_DLW30_Linux.vi”寫(xiě)VI,將樹(shù)莓派里面的數(shù)據(jù)通過(guò)PCIe總線下發(fā)給FPGA。
為了提高讀取效率或者為了方便定長(zhǎng)數(shù)據(jù)的解析,給定一個(gè)長(zhǎng)度閾值,只有當(dāng)上位機(jī)樹(shù)莓派(Linux RT)端的PCIe DMA FIFO里面接收到了一定長(zhǎng)度的字節(jié)數(shù)之后,才能把這些字節(jié)數(shù)組一次性讀取出來(lái)。因?yàn)镻CIe傳輸?shù)臄?shù)據(jù)都是以字節(jié)為單位,所以如果用戶希望讀取的數(shù)據(jù)位寬不是字節(jié),下位機(jī)FPGA上傳的數(shù)據(jù)是I32類(lèi)型的Sine信號(hào),正好就是4個(gè)字節(jié),那么在判斷之前,需要將I32點(diǎn)數(shù)×4,再做比較判斷,這樣讀取出來(lái)的數(shù)據(jù)點(diǎn)數(shù)才是正確的。
圖5 樹(shù)莓派Linux -->FPGA下行數(shù)據(jù)接收程序框圖
圖6 樹(shù)莓派(Linux RT)PCIe 上位機(jī)通信程序框圖
根據(jù)圖3的系統(tǒng)流程,需要設(shè)計(jì)三個(gè)表,分別是用戶表、操作數(shù)據(jù)表、數(shù)據(jù)內(nèi)容表。其中用戶表用于保存用戶登錄信息,如學(xué)生ID、姓名、學(xué)號(hào)、班級(jí)、登錄時(shí)間等;操作數(shù)據(jù)表用于保存設(shè)備通信數(shù)據(jù),如讀取示波器和信號(hào)發(fā)生器的波形、頻率、幅度,數(shù)字萬(wàn)用表電壓值、電流值等數(shù)據(jù);數(shù)據(jù)內(nèi)容表為實(shí)驗(yàn)考核內(nèi)容。
圖7 實(shí)驗(yàn)考核作答界面
實(shí)驗(yàn)考核作答界面如圖7所示。其中學(xué)號(hào)、姓名、班級(jí)和實(shí)驗(yàn)考核內(nèi)容等信息會(huì)從數(shù)據(jù)庫(kù)用戶表里自動(dòng)讀取,不用再次填寫(xiě),考核倒計(jì)時(shí)開(kāi)始計(jì)時(shí)。其中表格數(shù)據(jù)導(dǎo)入按鍵可以導(dǎo)入信號(hào)發(fā)生器和數(shù)字萬(wàn)用表數(shù)據(jù),由數(shù)據(jù)庫(kù)的操作數(shù)據(jù)表提供數(shù)據(jù),該數(shù)據(jù)來(lái)源直接由儀器設(shè)備提供,防止用戶手動(dòng)輸出,避免數(shù)據(jù)作假。波形數(shù)據(jù)導(dǎo)入可以導(dǎo)入示波器數(shù)據(jù)。聯(lián)網(wǎng)狀態(tài)顯示與服務(wù)器是否鏈接,提交按鍵即把實(shí)驗(yàn)考核報(bào)告上傳至服務(wù)器,作答完畢。實(shí)驗(yàn)證明實(shí)驗(yàn)數(shù)據(jù)能夠通過(guò)考核系統(tǒng)進(jìn)行實(shí)驗(yàn)數(shù)據(jù)信息化,并遠(yuǎn)程上傳到服務(wù)器上。
該實(shí)驗(yàn)考核系統(tǒng)通過(guò)PCIe協(xié)議實(shí)現(xiàn)了Raspberry Pi和FPGA的異構(gòu)系統(tǒng)互聯(lián),采用PCIe-DMA模式提高了數(shù)據(jù)采集與處理速度,分別對(duì)上位機(jī)樹(shù)美派和下位機(jī)FPGA的進(jìn)行上行和下行的通信設(shè)計(jì),有效解決導(dǎo)構(gòu)高速雙向通信問(wèn)題。通過(guò)嵌入式技術(shù)大大減低了設(shè)備成本,解決了實(shí)驗(yàn)室空間不足問(wèn)題,同時(shí)基于物聯(lián)網(wǎng)技術(shù)實(shí)現(xiàn)設(shè)備間的數(shù)據(jù)傳輸,實(shí)現(xiàn)了高校教育信息化在實(shí)驗(yàn)室中的應(yīng)用。