曹玉丹, 左冬紅, 朱 明
(華中科技大學(xué)電子信息與通信學(xué)院,武漢 430074)
隨著互聯(lián)網(wǎng)技術(shù)的發(fā)展,實(shí)施“現(xiàn)代遠(yuǎn)程教育工程”,形成開放式教育網(wǎng)絡(luò),構(gòu)建終身學(xué)習(xí)體系,是教育部“面向21 世紀(jì)教育振興行動計劃” 的重要內(nèi)容[1]。各高校將MOOC、BlackBoard、超星學(xué)習(xí)通等在線教學(xué)平臺引入常規(guī)教學(xué)體系,對理論課程的課堂教學(xué)起到了很好的輔助作用。實(shí)驗(yàn)教學(xué)是理工科高等教育教學(xué)體系中非常重要的環(huán)節(jié),現(xiàn)有在線教學(xué)平臺只能提供實(shí)驗(yàn)教學(xué)演示視頻學(xué)習(xí)以及問答式測驗(yàn),不能構(gòu)建開放、共享、有效的高等教育信息化實(shí)驗(yàn)教學(xué)體系。教育部關(guān)于一流本科課程建設(shè)的實(shí)施意見中指出,從2019 年到2021 年將完成1 500 門左右國家虛擬仿真實(shí)驗(yàn)教學(xué)一流課程認(rèn)定[2]。
“計算機(jī)組成原理與接口技術(shù)”是電子信息類專業(yè)的核心課程,掌握計算機(jī)硬件系統(tǒng)的工作原理且具備數(shù)字系統(tǒng)硬件設(shè)計能力為該課程的重要教學(xué)目標(biāo),也是學(xué)生學(xué)習(xí)的難點(diǎn)。如何有效地提升該門課程的教學(xué)效果,一直是困擾一線教師的一個重要問題。隨著電子設(shè)計技術(shù)的發(fā)展,出現(xiàn)了很多優(yōu)秀的針對電子電路設(shè)計的仿真軟件如MultiSim[3]、LogiSim[4]、Proteus[5]、PSpice[6]以及針對硬件描述語言仿真的ModelSim[7]、iverilog[8]、ISim、VCS 等。這些軟件為單機(jī)版,學(xué)生完成電路仿真需具備正確安裝并使用軟件、設(shè)置仿真激勵和判斷仿真結(jié)果的能力。單機(jī)版軟件無法采集學(xué)生在仿真過程中的數(shù)據(jù),教師無法得知學(xué)生在仿真過程中遇到的問題,不能對教學(xué)過程形成反饋[9]。隨著科學(xué)技術(shù)的進(jìn)步,學(xué)生所學(xué)課程實(shí)驗(yàn)內(nèi)容越來越復(fù)雜,實(shí)驗(yàn)教學(xué)學(xué)時卻不斷縮減,依賴教師人工檢驗(yàn)學(xué)生仿真結(jié)果是否正確,需要耗費(fèi)大量的課內(nèi)教學(xué)時間。通過實(shí)驗(yàn)驗(yàn)收的形式檢查學(xué)生對課程知識的掌握情況只能看到學(xué)生仿真的最終結(jié)果,不能發(fā)現(xiàn)學(xué)生在仿真過程中出現(xiàn)的問題和錯誤并加以及時糾正,這易導(dǎo)致學(xué)生失去學(xué)習(xí)的興趣而直接拷貝他人的代碼敷衍完成仿真任務(wù)。建設(shè)信息化線上實(shí)驗(yàn)教學(xué)平臺是理工科高等教育發(fā)展的必然趨勢。
國內(nèi)外計算機(jī)硬件類遠(yuǎn)程虛擬實(shí)驗(yàn)系統(tǒng)研究較早,目前已具備不少成熟的遠(yuǎn)程實(shí)驗(yàn)平臺,它們可以分為有真實(shí)硬件支撐的遠(yuǎn)程虛擬實(shí)驗(yàn)平臺[10]、純仿真的遠(yuǎn)程虛擬實(shí)驗(yàn)平臺以及兩者的結(jié)合[11-12]。
絕大部分虛擬實(shí)驗(yàn)平臺建設(shè)目標(biāo)是為學(xué)習(xí)者提供便捷的實(shí)驗(yàn)環(huán)境,解決學(xué)習(xí)者在不具備相應(yīng)實(shí)驗(yàn)環(huán)境的情況下也能進(jìn)行遠(yuǎn)程實(shí)驗(yàn)的問題。它們不具備學(xué)習(xí)者實(shí)驗(yàn)過程數(shù)據(jù)存儲、實(shí)驗(yàn)結(jié)果自動檢驗(yàn)等功能。作為信息化線上實(shí)驗(yàn)教學(xué)平臺要求具備以下功能:①為教師根據(jù)課程教學(xué)目標(biāo)定制實(shí)驗(yàn)內(nèi)容;②記錄學(xué)生實(shí)驗(yàn)過程中的行為數(shù)據(jù)、出錯信息以及自動檢驗(yàn)實(shí)驗(yàn)結(jié)果;③對學(xué)生實(shí)驗(yàn)過程中的行為以及實(shí)驗(yàn)結(jié)果進(jìn)行評分。促進(jìn)教師改進(jìn)實(shí)驗(yàn)教學(xué)方法,提高實(shí)驗(yàn)教學(xué)質(zhì)量。
隨著超大規(guī)模集成芯片技術(shù)的發(fā)展,硬件設(shè)計日趨軟件化,越來越多場景采用硬件描述語言設(shè)計硬件電路,國內(nèi)越來越多的高校數(shù)字電路以及計算機(jī)硬件設(shè)計等相關(guān)課程采用硬件描述語言進(jìn)行教學(xué)[13-14]。基于以上因素,本文設(shè)計了一種面向Verilog 硬件描述語言的在線仿真自動檢驗(yàn)信息化實(shí)驗(yàn)平臺。
本實(shí)驗(yàn)平臺采用B/S 架構(gòu),學(xué)生實(shí)驗(yàn)時無須另外安裝客戶端。采用前后端分離的開發(fā)模式,前端UI采用Vue框架[15],實(shí)現(xiàn)學(xué)生、教師的人機(jī)交互;后端采用Springboot[16]框架,實(shí)現(xiàn)Verilog語言代碼的綜合、功能仿真以及功能正確性黑盒驗(yàn)證;實(shí)驗(yàn)數(shù)據(jù)的存儲采用關(guān)系型數(shù)據(jù)庫Mysql。在線仿真實(shí)驗(yàn)系統(tǒng)交互流程如圖1 所示。主要包含:實(shí)驗(yàn)任務(wù)布置;實(shí)驗(yàn)代碼提交及自動仿真驗(yàn)證;實(shí)驗(yàn)結(jié)果展示;實(shí)驗(yàn)成績生成和實(shí)驗(yàn)行為記錄等功能模塊。
實(shí)驗(yàn)任務(wù)布置模塊除接收教師提交的實(shí)驗(yàn)任務(wù)描述、設(shè)計示例代碼之外,還需教師提交電路對應(yīng)的仿真激勵文件。仿真激勵文件為學(xué)生的電路設(shè)計提供確定的激勵,如時鐘信號等。在確定的激勵信號作用下,電路的輸出端口將輸出確定的響應(yīng)。本系統(tǒng)基于黑盒驗(yàn)證的思想,在教師提供的初始激勵文件(原激勵文件)中加入波形采集任務(wù),仿真時生成VCD(Value Change Dump)波形文件,將電路正確的VCD波形文件與學(xué)生設(shè)計輸出的波形VCD文件比較,實(shí)現(xiàn)電路設(shè)計正確性的自動檢驗(yàn)。系統(tǒng)激勵文件生成方法如圖2 所示。
圖2 系統(tǒng)激勵文件自動生成方法
以半加器電路設(shè)計為例,原激勵文件和系統(tǒng)激勵文件之間關(guān)系見表1。
表1 原激勵文件與系統(tǒng)激勵文件之間的關(guān)系
其中verilog硬件描述語言的系統(tǒng)任務(wù)$dumpfile(“wave.vcd”)用于生成wave.vcd 波形文件,而$dumpvars(0,adder_sim)用來采集adder_sim級別為0 的端口信號變化信息,即In1,In2,Out端口信號變化信息。添加波形采集任務(wù)的系統(tǒng)激勵文件在仿真后生成波形VCD 文件wave.vcd,并記錄輸入、輸出信號的變化關(guān)系,用于后續(xù)電路設(shè)計正確性檢驗(yàn)和波形的可視化。
系統(tǒng)的仿真功能通過iverilog軟件實(shí)現(xiàn),iverilog是一個支持全平臺的開源Verilog 仿真軟件,在Linux 系統(tǒng)中使用非常方便。通過以下命令在服務(wù)器中安裝iverilog:$yum install iverilog。安裝iverilog 時自動安裝VVP,VVP 根據(jù)iverilog 生成的可執(zhí)行文件生成VCD波形文件。
功能仿真及正確性檢驗(yàn)需要用到激勵文件、電路設(shè)計源文件和波形VCD 文件。源文件即學(xué)生提交的Verilog代碼,激勵文件為源文件提供激勵,同時生成VCD文件。
學(xué)生提交設(shè)計源文件之后,系統(tǒng)將學(xué)生代碼存儲到服務(wù)器文件系統(tǒng)指定文件目錄下,并根據(jù)模塊類型生成仿真shell腳本。Verilog代碼仿真shell腳本命令格式見表2。
表2 Verilog代碼仿真完整shell腳本命令格式
其中:sim.v 為激勵文件;code.v 為學(xué)生提交的源文件;path為相應(yīng)文件所在路徑。
iverilog code.v命令對電路設(shè)計源文件進(jìn)行編譯完成語法檢驗(yàn)。iverilog-o out sim.v code.v 通過激勵文件為源文件提供激勵,生成可執(zhí)行文件,參數(shù)-o 指定了可執(zhí)行文件的名字。vvp-n out 對可執(zhí)行文件out
進(jìn)行分析生成波形VCD 文件。通過Java Runtime 類提供的getRuntime()方法獲取當(dāng)前JVM的運(yùn)行時環(huán)境,通過Runtime.getRuntime().exec()方法創(chuàng)建仿真進(jìn)程調(diào)用動態(tài)生成的shell 腳本,同時創(chuàng)建2 個線程,分別讀取仿真子進(jìn)程的標(biāo)準(zhǔn)輸出流和錯誤流,避免因緩沖區(qū)滿而導(dǎo)致子進(jìn)程阻塞產(chǎn)生死鎖。使用waitFor()方法等待iverilog 仿真進(jìn)程執(zhí)行結(jié)束。仿真腳本正常退出后,通過進(jìn)程的標(biāo)準(zhǔn)錯誤流中的信息判斷仿真代碼是否編譯報錯。若標(biāo)準(zhǔn)錯誤流為空,編譯通過。若代碼無語法錯誤,進(jìn)一步判斷仿真波形是否正確。否則代碼編譯報錯,將報錯信息返回到學(xué)生仿真界面。Verilog在線仿真流程如圖3 所示。
圖3 Verilog在線仿真流程
實(shí)驗(yàn)結(jié)果的呈現(xiàn)包含3 種情況:①設(shè)計代碼存在語法錯誤;②無語法錯誤但存在功能錯誤;③既無語法錯誤也無功能錯誤。
若存在語法錯誤,直接將編譯語法錯誤通過web界面顯示給學(xué)生,如圖4 所示,顯示存在錯誤的代碼所在行行號以及錯誤原因。
圖4 編譯報錯
學(xué)生代碼編譯通過后,前端接收到服務(wù)器返回的波形數(shù)據(jù)WaveData,根據(jù)WaveData 渲染波形界面。在渲染之前先將WaveData 中的端口信號分別存儲到數(shù)組中,通過Vue框架的V-for指令結(jié)合Flex彈性布局對波形信號數(shù)組中的波形數(shù)據(jù)進(jìn)行水平方向循環(huán)渲染。每一個信號的每一個周期都是一個基本單元波形組件?;締卧ㄐ谓M件由HTML 的span 標(biāo)簽以及前后2 個旋轉(zhuǎn)135°偽元素共同構(gòu)成,通過組合顯示span及偽元素的不同邊,完成多位寬波形信號基本單元組件的構(gòu)建。
波形比對發(fā)現(xiàn)錯誤時,顯示如圖5 所示波形。此時通過對比的方式顯示正確波形以及學(xué)生代碼存在錯誤的波形,且錯誤之處除采用文字提醒之外,在波形圖中采用紅色高亮顯示,并將輸入\輸出信號的值顯示在波形圖中。
圖5 電路設(shè)計邏輯有誤
若功能仿真成功,則僅顯示正確波形如圖6 所示。
圖6 功能仿真成功
功能仿真實(shí)驗(yàn)時間截止時,系統(tǒng)自動計算學(xué)生的分?jǐn)?shù)。教師在發(fā)布實(shí)驗(yàn)時可分別設(shè)置功能仿真實(shí)驗(yàn)中學(xué)生代碼編譯通過且波形正確、編譯通過但波形不正確、編譯不通過3 種情況的分?jǐn)?shù)。根據(jù)教師設(shè)置的得分規(guī)則以及每一個實(shí)驗(yàn)?zāi)K的分值權(quán)重,對各個模塊的分?jǐn)?shù)進(jìn)行帶權(quán)累加,生成學(xué)生仿真實(shí)驗(yàn)總分?jǐn)?shù)。
學(xué)生使用本系統(tǒng)完成功能仿真實(shí)驗(yàn)時,會進(jìn)行很多操作,如登錄系統(tǒng)、查看實(shí)驗(yàn)內(nèi)容、提交實(shí)驗(yàn)代碼等。本系統(tǒng)攔截學(xué)生實(shí)驗(yàn)操作的HTTP請求以及操作產(chǎn)生的中間數(shù)據(jù),如代碼信息、報錯信息等,將這些數(shù)據(jù)的類型和內(nèi)容持久化到數(shù)據(jù)庫中。結(jié)合教師教學(xué)經(jīng)驗(yàn),將這些數(shù)據(jù)總結(jié)為如表3 所示實(shí)驗(yàn)數(shù)據(jù)行為指標(biāo):學(xué)生實(shí)驗(yàn)進(jìn)展、實(shí)驗(yàn)行為偏好、實(shí)驗(yàn)遇到的問題等。平臺通過對上述數(shù)據(jù)的收集以及Echart 前端可視化框架向教師實(shí)時展示實(shí)驗(yàn)中每一個模塊每一個學(xué)生的實(shí)驗(yàn)完成情況,代碼報錯信息等,便于教師根據(jù)學(xué)生實(shí)驗(yàn)情況進(jìn)行有針對性的教學(xué)。
表3 實(shí)驗(yàn)行為數(shù)據(jù)類型
學(xué)院2018 級本科生(330 人)在開學(xué)初補(bǔ)做“計算機(jī)組成原理與接口技術(shù)”實(shí)驗(yàn)課中的微處理器設(shè)計(見圖7),實(shí)驗(yàn)采用了該實(shí)驗(yàn)平臺,有效緩解了實(shí)驗(yàn)課補(bǔ)課期間課內(nèi)學(xué)時緊張以及實(shí)驗(yàn)室沖突的問題,并保證了實(shí)驗(yàn)教學(xué)效果。平臺于8 月底上線,在9 月1 日~10 月4 日期間穩(wěn)定運(yùn)行,期間總宕機(jī)時長少于24h,最大限度地減少了實(shí)驗(yàn)平臺對學(xué)生在線學(xué)習(xí)行為數(shù)據(jù)的影響,保證了數(shù)據(jù)的可靠性。實(shí)驗(yàn)平臺共采集到316 個學(xué)生的實(shí)驗(yàn)數(shù)據(jù)。包括《微處理器設(shè)計》實(shí)驗(yàn)中的16 個必做模塊,5 個選做模塊,3 萬多次提交代碼信息、5 萬多條報錯信息以及其他數(shù)據(jù)。
圖7 微處理器電路框圖
《微處理器設(shè)計》實(shí)驗(yàn)主界面如圖8 所示,子模塊詳情描述界面示例如圖9 所示。
圖8 《微處理器設(shè)計》實(shí)驗(yàn)主界面
圖9 子模塊詳情描述界面
根據(jù)平臺記錄的數(shù)據(jù),分析平臺記錄數(shù)據(jù)所表征的實(shí)驗(yàn)掌握程度與課程期末成績的相關(guān)性,得到如表4 所示結(jié)果,這說明:①平臺實(shí)驗(yàn)分?jǐn)?shù)表征的實(shí)驗(yàn)掌握程度能夠在一定程度上預(yù)測課程的期末成績;②開始實(shí)驗(yàn)距截止日期的天數(shù)與期末成績達(dá)到了0.503 的極顯著正相關(guān)性,即開始實(shí)驗(yàn)越早,期末成績越高;③完成實(shí)驗(yàn)距截止日期的天數(shù)與期末成績達(dá)到了0.404 的極顯著正相關(guān)性,即完成實(shí)驗(yàn)越早的學(xué)生,期末成績越高,而快到實(shí)驗(yàn)驗(yàn)收截止時間臨時抱佛腳完成實(shí)驗(yàn)的學(xué)生分?jǐn)?shù)較低。
本文將傳統(tǒng)面向Verilog 硬件描述語言硬件電路功能仿真單機(jī)軟件部署到了互聯(lián)網(wǎng)云平臺,為學(xué)生提供了在線仿真平臺,同時也為教師了解學(xué)生實(shí)驗(yàn)過程行為提供了實(shí)驗(yàn)數(shù)據(jù)收集平臺。它具有以下優(yōu)點(diǎn):①
學(xué)生無須安裝任何軟件即可隨時隨地在PC 端或移動端進(jìn)行仿真代碼提交、仿真結(jié)果查看。②合理設(shè)置仿真結(jié)果后,采用自動仿真結(jié)果正確性檢驗(yàn)以及實(shí)驗(yàn)行為綜合評分手段,實(shí)現(xiàn)了更加科學(xué)和公平的仿真實(shí)驗(yàn)驗(yàn)收以及實(shí)驗(yàn)效果評分。③無須教師參與,學(xué)生便可實(shí)時查看仿真結(jié)果,并根據(jù)可視化的波形對電路邏輯功能進(jìn)行分析,有助于提高學(xué)生參與實(shí)驗(yàn)的積極性和熱情。④學(xué)生實(shí)驗(yàn)行為數(shù)據(jù)的收集和分析為教師定位教學(xué)難點(diǎn)、改進(jìn)教學(xué)方法、提高教學(xué)質(zhì)量提供了參考依據(jù)。
該平臺首次應(yīng)用于計算機(jī)組成原理與接口技術(shù)實(shí)驗(yàn)課程的微處理器設(shè)計實(shí)驗(yàn),它還可應(yīng)用于數(shù)字電路課程基于硬件描述語言設(shè)計電路的實(shí)驗(yàn),并且在添加一定的身份驗(yàn)證功能之后可以應(yīng)用于基于硬件描述語言的實(shí)驗(yàn)操作考試中。借助其自動仿真驗(yàn)證以及多元化的數(shù)據(jù)記錄和分析功能,可以減輕教師的實(shí)驗(yàn)操作類考試監(jiān)考和驗(yàn)收壓力。
實(shí)踐告訴我們,偉大事業(yè)都成于實(shí)干。新時代是奮斗者的時代。新時代是在奮斗中成就偉業(yè)、造就人才的時代。我們要激勵更多科學(xué)大家、領(lǐng)軍人才、青年才俊和創(chuàng)新團(tuán)隊(duì)勇立潮頭、銳意進(jìn)取,以實(shí)干創(chuàng)造新業(yè)績,在推進(jìn)偉大事業(yè)中實(shí)現(xiàn)人生價值,不斷為實(shí)現(xiàn)中華民族偉大復(fù)興的中國夢奠定更為堅(jiān)實(shí)的基礎(chǔ)、作出新的更大的貢獻(xiàn)。
——2019 年2 月20 日,習(xí)近平在會見探月工程嫦娥四號任務(wù)參研參試人員代表時強(qiáng)調(diào)