亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        Verilog在線評(píng)測(cè)系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)

        2017-07-13 07:22:23張德學(xué)張小軍郭華
        教育教學(xué)論壇 2017年29期

        張德學(xué)+張小軍+郭華

        摘要:近年來(lái),在線評(píng)測(cè)系統(tǒng)(Online Judge,OJ)在多種編程語(yǔ)言的教學(xué)、ACM競(jìng)賽中得到了廣泛應(yīng)用,實(shí)踐效果良好。Verilog是一種硬件描述語(yǔ)言,目前尚沒(méi)有支持該語(yǔ)言的在線評(píng)測(cè)系統(tǒng)。本文以較流行的在線評(píng)測(cè)系統(tǒng)HUSTOJ為基礎(chǔ),對(duì)其擴(kuò)展以支持Verilog語(yǔ)言,能夠?qū)崿F(xiàn)Verilog代碼在線編輯、提交、后臺(tái)仿真、結(jié)果評(píng)價(jià),可用于Verilog語(yǔ)言個(gè)人學(xué)習(xí)、課堂教學(xué)、結(jié)課評(píng)測(cè)以及競(jìng)賽。

        關(guān)鍵詞:在線評(píng)測(cè)系統(tǒng),Verilog,Online Jud

        一、前言

        在線評(píng)測(cè)Online Judge系統(tǒng),簡(jiǎn)稱(chēng)OJ[1],是一個(gè)在線的判題系統(tǒng)。用戶可以在線提交程序源代碼(如C/C++/Java等),系統(tǒng)對(duì)源代碼進(jìn)行編譯和執(zhí)行,并通過(guò)預(yù)先設(shè)計(jì)的測(cè)試數(shù)據(jù)來(lái)檢驗(yàn)程序源代碼的正確性。OJ系統(tǒng)最初用于ACM-ICPC國(guó)際大學(xué)生程序設(shè)計(jì)競(jìng)賽和OI信息學(xué)奧林匹克競(jìng)賽中的自動(dòng)判題和排名,現(xiàn)廣泛應(yīng)用于世界各地高校學(xué)生程序設(shè)計(jì)的訓(xùn)練、參賽隊(duì)員的訓(xùn)練和選拔、各種程序設(shè)計(jì)競(jìng)賽以及數(shù)據(jù)結(jié)構(gòu)和算法的學(xué)習(xí)和作業(yè)的自動(dòng)提交判斷中。著名的OJ系統(tǒng)有RQNOJ、URAL等,各具特色的OJ系統(tǒng)也在不斷的推出和完善。HUSTOJ[2]是一款出色的開(kāi)源項(xiàng)目,由華中科技大學(xué)前ACM隊(duì)員Sempr等同學(xué)開(kāi)發(fā),2008年5月14日首先上線于華中科技大學(xué),目前已有近百家學(xué)校、公司使用HUSTOJ進(jìn)行計(jì)算機(jī)程序設(shè)計(jì)競(jìng)賽、計(jì)算機(jī)程序設(shè)計(jì)日常教學(xué)與測(cè)驗(yàn)、人才招聘等。HUSTOJ采用GPL開(kāi)源,目前主要由張浩斌先生在維護(hù),項(xiàng)目地址:https://github.com/zhblue/hustoj。HUSTOJ仍在持續(xù)更新,目前支持C、c++、Java、bash、python、ruby等17種語(yǔ)言。

        Verilog[3]是一種硬件描述語(yǔ)言,是主流的電子系統(tǒng)設(shè)計(jì)語(yǔ)言,是國(guó)內(nèi)外高校的EDA、FPGA、數(shù)字IC設(shè)計(jì)相關(guān)課程的重要內(nèi)容。Verilog語(yǔ)言主要面向硬件設(shè)計(jì),有其獨(dú)特的特點(diǎn),但其代碼也可以通過(guò)仿真軟件在計(jì)算機(jī)中運(yùn)行、調(diào)試,與其他編程語(yǔ)言類(lèi)似。目前尚沒(méi)有支持Verilog語(yǔ)言的在線評(píng)測(cè)系統(tǒng)。本文以HUSTOJ為基礎(chǔ),對(duì)其擴(kuò)展以支持Verilog語(yǔ)言,能夠?qū)崿F(xiàn)Verilog代碼在線編輯、提交、后臺(tái)仿真、結(jié)果評(píng)價(jià),可用于Verilog語(yǔ)言個(gè)人學(xué)習(xí)、課堂教學(xué)、結(jié)課評(píng)測(cè)以及競(jìng)賽。

        二、HUSTOJ代碼框架

        HUSTOJ分為core和web兩部分,分別對(duì)應(yīng)判題和數(shù)據(jù)管理兩大功能。兩者之間數(shù)據(jù)交換有兩種方式:(1)通過(guò)數(shù)據(jù)庫(kù)輪詢(xún);(2)通過(guò)http請(qǐng)求。兩種方式的選擇在判題端的配置文件/home/judge/etc/judge.conf中,HTTP_JUDGE=1則啟用后者,默認(rèn)為前者。

        core分3部分:judged、judge_client、sim,其中judged為服務(wù)進(jìn)程,負(fù)責(zé)輪詢(xún)數(shù)據(jù)庫(kù)或web端,提取判題隊(duì)列。當(dāng)發(fā)現(xiàn)新任務(wù)時(shí)產(chǎn)生judge_client進(jìn)程。judge_client進(jìn)程為實(shí)際判題程序,負(fù)責(zé)準(zhǔn)備運(yùn)行環(huán)境、數(shù)據(jù),運(yùn)行并監(jiān)控目標(biāo)程序的系統(tǒng)調(diào)用,采集運(yùn)行指標(biāo),判斷運(yùn)行結(jié)果。sim為抄襲檢查模塊,可進(jìn)行語(yǔ)法分析判斷文本相似度,通過(guò)檢驗(yàn)的程序?qū)⒂蒵udge_client復(fù)制進(jìn)題目數(shù)據(jù)的ac目錄,成為新的參考樣本。

        web分兩大部分:前端和admin目錄下的管理程序。前端是數(shù)據(jù)庫(kù)的CRUD(增加Create、查詢(xún)Retrieve、更新Update和刪除Delete)操作,是將用戶提交的程序源碼加入數(shù)據(jù)庫(kù)的任務(wù)隊(duì)列(solution表、souce_code表)。管理程序提供賬號(hào)管理、試題等方面的功能。

        三、HUSTOJ后臺(tái)數(shù)據(jù)庫(kù)

        HUSTOJ后臺(tái)數(shù)據(jù)庫(kù)默認(rèn)名為jol,含18個(gè)表,主要的表有:users(帳號(hào)信息)、problem(問(wèn)題)、solution(答案)、compileinfo(編譯輸出信息)、runtimeinfo(運(yùn)行時(shí)輸出信息)、contest(競(jìng)賽信息)等,可使用phpmyadmin等工具查看其數(shù)據(jù)庫(kù)結(jié)構(gòu)。

        四、HUSTOJ系統(tǒng)添加Verilog語(yǔ)言支持

        通過(guò)閱讀HUSTOJ系統(tǒng)代碼,深入了解其工作原理,修改代碼添加新語(yǔ)言支持。HUSTOJ系統(tǒng)中有一份增添新語(yǔ)言支持的簡(jiǎn)略說(shuō)明,參見(jiàn)文檔[4]。

        守護(hù)程序judged主要是定期查詢(xún)數(shù)據(jù)庫(kù),發(fā)現(xiàn)有新任務(wù)時(shí),提取測(cè)試需用的輸入輸出文件,并設(shè)置各種參數(shù),調(diào)用judge_client程序,judged的工作不涉及具體語(yǔ)言,無(wú)需修改。

        主要的修改工作在judge_client.cc及相關(guān)頭文件中:

        (1)在okcalls64.h中添加Verilog語(yǔ)言編譯運(yùn)行時(shí)需用到的syscalls。

        本次項(xiàng)目中,Verilog代碼的編譯采用開(kāi)源的iverilog仿真器。可用“apt-get install iverilog”安裝iverilog程序。

        編寫(xiě)一段簡(jiǎn)單的Verilog代碼 helloworld.v:

        module helloworld;

        initial begin

        $display("Hello,Verilog World!");

        end

        endmodule

        執(zhí)行:strace -ff iverilog helloworld.v 2>&1|awk -F\( '{print $1}'|sort –u >strace.log)

        可以得到iverilog編譯verilog代碼時(shí)所需用到的系統(tǒng)調(diào)用名稱(chēng),適當(dāng)修改后,寫(xiě)入okcalls64.h中,如:

        int LANG_VerilogV[256] = {

        SYS_access,

        SYS_arch_prctl,

        SYS_brk,

        /*部分略 */

        0 };

        (2)在judge_client.cc的void init_syscalls_limits(int lang)函數(shù)中,添加對(duì)新語(yǔ)言系統(tǒng)調(diào)用的支持,即在末尾處添加:

        if (lang == 18) { //Verilog

        for (i = 0;i==0||LANG_VerilogV[i];i++)

        call_counter[LANG_VerilogV[i]] = HOJ_MAX_LIMIT;

        }

        (3)修改lang_ext變量,添加新語(yǔ)言后綴,本例添加了”v”

        static char lang_ext[18][8] = { "c","cc","pas","java","rb","sh","py","php","pl","cs","m","bas","scm","c","cc","lua","js","v" };

        (4)在judge_client.cc的int compile(int lang,char * work_dir)函數(shù)中,添加Verilog語(yǔ)言的編譯指令:

        const char * CP_Verilog[] = { "iverilog","Main.v",NULL };

        及執(zhí)行命令:

        case 17:

        execvp(CP_Verilog[0],(char * const *) CP_Verilog);

        break;

        (5)在judge_client.cc的void run_solution(int & lang,char * work_dir,int & time_lmt,int & usedtime,int & mem_lmt)函數(shù)中,添加Verilog代碼編譯后執(zhí)行語(yǔ)句:

        case 18://verilog

        execl("./a.out","./a.out",(char *) NULL);

        break;

        (6)在配置文件/home/judge/etc/judge.conf中添加verilog語(yǔ)言(編號(hào)為18)的支持:

        OJ_LANG_SET=0,1,2,3,4,5,6,7,8,9,10,11,18

        五、系統(tǒng)測(cè)試

        在Ubuntu 14.04.5 LTS系統(tǒng)中安裝HUSTOJ原系統(tǒng),并添加Verilog語(yǔ)言支持后,客戶瀏覽器訪問(wèn)http:///JudgeOnline,即可進(jìn)入HUSTOJ系統(tǒng)。系統(tǒng)運(yùn)行界面如圖1所示。

        六、總結(jié)

        本文深入研究了HUSTOJ的工作原理,并對(duì)其擴(kuò)展以支持Verilog語(yǔ)言,目前基本實(shí)現(xiàn)了Verilog支持,可用于Verilog語(yǔ)言個(gè)人學(xué)習(xí)及課堂教學(xué)。進(jìn)一步開(kāi)發(fā)可從如下方面:(1)創(chuàng)建高質(zhì)量的題庫(kù)。HUSTOJ系統(tǒng)支持xml格式的題庫(kù),利于交流,如freeproblemset[4]。建設(shè)高質(zhì)量題庫(kù)是提高在線評(píng)測(cè)系統(tǒng)實(shí)用性的關(guān)鍵措施之一。(2)考慮到Verilog這類(lèi)硬件描述語(yǔ)言與普通編程語(yǔ)言的差別,即不能僅比對(duì)最終結(jié)果來(lái)判斷是否正確,還需要考慮內(nèi)部信號(hào)變化的時(shí)序問(wèn)題,在判題方法上還需要進(jìn)一步研究。

        參考文獻(xiàn):

        [1] OJ. 百度百科. http://baike.baidu.com/view/1185778.htm,2017,2.

        [2] HUSTOJ. zhblue. http://www.hustoj.com/oj/,2017,2.

        [3] Verilog. wiki. https://en.wikipedia.org/wiki/Verilog,2017,2 .

        [4] summary how to add programming language to hustoj . zhblue. https://github.com/zhblue/hustoj/blob/master/wiki/AddProgrammingLanguage.md,2017,2.

        [5] freeproblemset. zhblue. https://github.com/zhblue/freeproblemset.git,2017,2.

        Abstract:In recent years,online evaluation system (Online,Judge,OJ) in a variety of programming language teaching,ACM contest has been widely used in practice,good effect of.Verilog is a hardware description language,there is no online evaluation system that supports the language. This paper is based on HUSTOJ online evaluation system more popular. To extend it to support the Verilog language,Verilog code can achieve online editing,submission,background simulation,the evaluation result can be used in Verilog language learning,classroom teaching,teaching evaluation and competition.

        Key words:online evaluation system;Verilog;Online Judge

        免费人成网站在线播放| 国产亚洲美女精品久久久| 日本欧美国产精品| 成人免费视频自偷自拍| 久久夜色国产精品噜噜亚洲av| 中文乱码字幕人妻熟女人妻| 国产一区二区三区av天堂| 巨胸喷奶水www视频网站| 99精品久久这里只有精品| 国产99久久精品一区| 国产精品亚洲精品国产| 欧美牲交a欧美牲交aⅴ免费真| 夜色阁亚洲一区二区三区| 91色婷婷成人精品亚洲| 天堂av网手机线上天堂| 婷婷色婷婷开心五月四房播播| 亚洲网站地址一地址二| 国产美女胸大一区二区三区| 中文字幕乱码亚洲一区二区三区| 久久综合九色综合久99| 欧美人与动牲交片免费| 中文字幕一区二区三区.| 免费人成视网站在线剧情| 国产肥熟女视频一区二区三区| 98在线视频噜噜噜国产| 亚洲av自偷自拍亚洲一区| 揄拍成人国产精品视频| 亚洲精品综合一区二区| 亚洲欧洲AV综合色无码| 精品亚洲av乱码一区二区三区| 日本无码欧美一区精品久久| 伊人久久网国产伊人| 日韩av在线不卡一二三区| 麻豆91蜜桃传媒在线观看| 无码少妇一区二区浪潮av| 精品少妇一区一区三区| 精品国产乱子伦一区二区三| 久久天天躁狠狠躁夜夜avapp| 亚洲地址一地址二地址三| 国产精品人成在线765| 亚洲最大成人网站|