亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

一種硬件語言vhdl到msvl的自動(dòng)轉(zhuǎn)換系統(tǒng)的制作方法

文檔序號:6640614閱讀:270來源:國知局
一種硬件語言vhdl到msvl的自動(dòng)轉(zhuǎn)換系統(tǒng)的制作方法
【專利摘要】一種硬件語言VHDL到MSVL的自動(dòng)轉(zhuǎn)換系統(tǒng),其能夠?qū)HDL語言程序文件轉(zhuǎn)換成MSVL語言程序文件,所述轉(zhuǎn)換系統(tǒng)包括,文件分析模塊、詞法分析模塊、語法分析模塊、信息存儲(chǔ)模塊、翻譯模塊、翻譯結(jié)果字符串連接模塊。VHDL程序轉(zhuǎn)換為MSVL程序后,模型構(gòu)造與性質(zhì)描述使用同一種語言,使得驗(yàn)證在同一邏輯框架下進(jìn)行,方便地實(shí)現(xiàn)對VHDL語言程序間接的模型檢測。在轉(zhuǎn)換的過程中,通過制定不同語法結(jié)構(gòu)的轉(zhuǎn)換規(guī)則,并通過一些額外的輔助手段將VHDL程序轉(zhuǎn)換為了語義等價(jià)的MSVL程序,這樣就可以通過對等價(jià)的MSVL程序進(jìn)行仿真、建模和驗(yàn)證,來確保源VHDL程序的正確性。
【專利說明】一種硬件語言VHDL到MSVL的自動(dòng)轉(zhuǎn)換系統(tǒng)

【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及硬件描述語言VHDL語言【技術(shù)領(lǐng)域】和編譯原理【技術(shù)領(lǐng)域】的詞法分析和語法分析,具體涉及VHDL到MSVL的自動(dòng)轉(zhuǎn)換系統(tǒng),用于將VHDL所描述的硬件電路程序轉(zhuǎn)換到語義等價(jià)的MSVL代碼。

【背景技術(shù)】
[0002]VHDL 全名 Very-High-Speed Integrated Circuit Hardware Descript1nLanguage,誕生于1982年。1987年底,VHDL被IEEE和美國國防部確認(rèn)為標(biāo)準(zhǔn)硬件描述語言。自IEEE-1076 (簡稱87版)之后,各EDA公司相繼推出自己的VHDL設(shè)計(jì)環(huán)境,或宣布自己的設(shè)計(jì)工具可以和VHDL接口。1993年,IEEE對VHDL進(jìn)行了修訂,從更高的抽象層次和系統(tǒng)描述能力上擴(kuò)展VHDL的內(nèi)容,公布了新版本的VHDL,即IEEE標(biāo)準(zhǔn)的1076-1993版本,簡稱93版。VHDL和Verilog作為IEEE的工業(yè)標(biāo)準(zhǔn)硬件描述語言,得到眾多EDA公司支持,在電子工程領(lǐng)域,已成為事實(shí)上的通用硬件描述語言。
[0003]VHDL主要用于描述數(shù)字系統(tǒng)的結(jié)構(gòu)、行為、功能和接口。除了含有許多具有硬件特征的語句外,VHDL的語言形式、描述風(fēng)格以及語法是十分類似于一般的計(jì)算機(jī)高級語言。VHDL的程序結(jié)構(gòu)特點(diǎn)是將一項(xiàng)工程設(shè)計(jì),或稱設(shè)計(jì)實(shí)體(可以是一個(gè)元件,一個(gè)電路模塊或一個(gè)系統(tǒng))分成外部(或稱可視部分及端口)和內(nèi)部(或稱不可視部分)。在對一個(gè)設(shè)計(jì)實(shí)體定義了外部界面后,一旦其內(nèi)部開發(fā)完成后,其他的設(shè)計(jì)就可以直接調(diào)用這個(gè)實(shí)體。這種將設(shè)計(jì)實(shí)體分成內(nèi)外部分的概念是VHDL系統(tǒng)設(shè)計(jì)的基本點(diǎn)。
[0004]現(xiàn)階段,VHDL主要通過一些集成環(huán)境軟件進(jìn)行仿真,通過測試用例進(jìn)行人工測試。首先測試和仿真工作是在不同環(huán)境下進(jìn)行的;其次,測試用例并不能完全排除軟件中的隱患,對于VHDL這種應(yīng)用面廣,應(yīng)用領(lǐng)域極其關(guān)鍵的編程語言,應(yīng)從根本上排除軟件隱患,所以通過MSVL語言,我們可以對其進(jìn)行建模,仿真和驗(yàn)證工作,這樣就將這些工作集中在同一環(huán)境下進(jìn)行,由于MSVL本身的特點(diǎn),使得工作量大大減少,節(jié)約了成本。
[0005]投影時(shí)序邏輯(PTL)對區(qū)間時(shí)序邏輯(ITL)進(jìn)行了擴(kuò)展,而時(shí)序邏輯語言MSVL是PTL的一個(gè)可執(zhí)行子集,它是一個(gè)集建模(Modeling)、仿真(Simulat1n)和驗(yàn)證(Verificat1n)為一體的時(shí)序邏輯程序設(shè)計(jì)語言,其對應(yīng)的MSV解釋器可以對MSVL程序進(jìn)行仿真執(zhí)行,也可以進(jìn)行建模和驗(yàn)證。其中,仿真是找到程序的一條可執(zhí)行路徑,建模是找到程序的所有模型,驗(yàn)證是對程序進(jìn)行模型檢測,判斷其是否滿足PPTL定義的期望性質(zhì)。
[0006]此外,建模、仿真和驗(yàn)證語言MSVL和硬件描述語言VHDL在語法上有很多相似之處,使得轉(zhuǎn)換成為可能。通過對轉(zhuǎn)換后的MSVL程序進(jìn)行建模、仿真和驗(yàn)證,從而間接的確保了 VHDL源程序的可靠性和安全性。


【發(fā)明內(nèi)容】

[0007]鑒于現(xiàn)有技術(shù)的不足,本發(fā)明旨在于提供一種由VHDL到MSVL的自動(dòng)轉(zhuǎn)換系統(tǒng),通過將VHDL語言自動(dòng)轉(zhuǎn)換成MSVL語言,再對MSVL語言在MSV解釋器下進(jìn)行仿真驗(yàn)證,進(jìn)而實(shí)現(xiàn)了對VHDL語言的程序進(jìn)行仿真驗(yàn)證,該轉(zhuǎn)換程序提供了一種新的驗(yàn)證VHDL的方法,即通過程序的轉(zhuǎn)換,將問題轉(zhuǎn)移到其等價(jià)的語言環(huán)境下,對轉(zhuǎn)換后的程序進(jìn)行仿真和驗(yàn)證。
[0008]為了實(shí)現(xiàn)上述目的,本發(fā)明采用的技術(shù)方案如下:一種硬件語言VHDL到MSVL的自動(dòng)轉(zhuǎn)換系統(tǒng),其能夠?qū)HDL語言程序文件轉(zhuǎn)換成MSVL語言程序文件,其特征在于:所述轉(zhuǎn)換系統(tǒng)包括,
[0009]文件分析模塊:設(shè)有文件分析器,所述文件分析器分析VHDL程序文件的頂層文件絕對路徑字符串,對這個(gè)字符串進(jìn)行分析,得到所有需要翻譯的文件,并分析文件之間的依賴關(guān)系,從而按照依賴關(guān)系決定翻譯的順序;
[0010]詞法分析模塊:設(shè)有詞法分析器,所述詞法分析器使用正則表達(dá)式對VHDL源程序進(jìn)行分析,識別源程序中的詞素,如關(guān)鍵字、數(shù)值、字符串、標(biāo)示符、運(yùn)算符、間隔符以及注釋符等,將其解析為記號流;
[0011]語法分析模塊:設(shè)有語法分析器,所述語法分析器通過語法文件構(gòu)造產(chǎn)生式來識別VHDL中的語法結(jié)構(gòu),并形成VHDL程序的語法樹;
[0012]信息存儲(chǔ)模塊:所述信息存儲(chǔ)模塊在構(gòu)造VHDL程序語法樹的過程中,對于VHDL程序中的變量、信號、常量等信息進(jìn)行存儲(chǔ),以便翻譯模塊進(jìn)行查詢和翻譯;
[0013]翻譯模塊:所述翻譯模塊通過在語法分析階段識別出的語法結(jié)構(gòu),對VHDL源程序的信息進(jìn)行有組織的訪問,并將各語句節(jié)點(diǎn)逐個(gè)提取出交予對應(yīng)的翻譯子程序處理,翻譯子程序根據(jù)每個(gè)語句節(jié)點(diǎn)的類型來確定翻譯規(guī)則;
[0014]翻譯結(jié)果字符串連接模塊:所述翻譯結(jié)果字符串連接模塊對翻譯模塊產(chǎn)生的字符串進(jìn)行添加、修改、合并,形成最終的翻譯結(jié)果字符串,并寫入文件。
[0015]在上述技術(shù)方案的基礎(chǔ)上,還包括出錯(cuò)處理模塊,所述在待翻譯的VHDL程序出現(xiàn)詞法錯(cuò)誤和語法錯(cuò)誤時(shí),能夠停止翻譯過程,并將出錯(cuò)原因輸出到指定文件中。
[0016]在上述技術(shù)方案的基礎(chǔ)上,將硬件語言VHDL轉(zhuǎn)換至MSVL語言的方法包括以下步驟:
[0017]第一步:傳入VHDL頂層文件的絕對路徑,通過頂層文件所在路徑,獲取將要被翻譯的所有文件,并將這些文件放入一個(gè)VHDL文件列表;
[0018]第二步:讀取VHDL文件列表中的文件,將VHDL源程序?qū)朐~法分析模塊,并將程序中的詞素轉(zhuǎn)換為記號流;其中,詞素包括VHDL中的關(guān)鍵字、運(yùn)算符、分隔符、變量名,字面3;和注釋符;
[0019]第三步:將所述記號流導(dǎo)入語法分析模塊,使用自下而上的分析方法對記號流進(jìn)行規(guī)約,從而識別VHDL中的語法結(jié)構(gòu);其中,語法結(jié)構(gòu)包括基本表達(dá)式、執(zhí)行語句、塊結(jié)構(gòu)、實(shí)體、結(jié)構(gòu)體、包頭、包體、子程序;
[0020]第四步:將步驟三得到的語句的語法結(jié)構(gòu)存儲(chǔ)成語法樹,所有語句的語法樹集中管理,形成語法樹集合,并且,將語法結(jié)構(gòu)中的變量信息和類型信息存儲(chǔ)到集合中;其中,語法樹以二叉樹的形式存儲(chǔ),變量信息存儲(chǔ)在變量集合中,類型信息存儲(chǔ)在類型集合中;其中,當(dāng)一個(gè)文件語法規(guī)約完成時(shí),需要在其中聲明的變量名和類型名前面加上實(shí)體名和結(jié)構(gòu)體名;
[0021]第五步:將所述語法樹集合作為輸入,每次提取一個(gè)語法樹結(jié)構(gòu)傳給翻譯程序進(jìn)行翻譯,翻譯程序根據(jù)語言轉(zhuǎn)換規(guī)則將VHDL結(jié)構(gòu)轉(zhuǎn)換成對應(yīng)的MSVL結(jié)構(gòu);
[0022]第六步:提取變量集合中的變量,翻譯成MSVL的變量聲明語句,并將變量聲明語句與第五步中翻譯程序轉(zhuǎn)換后各個(gè)部分的字符串進(jìn)行合并,生成MSVL程序。
[0023]在上述技術(shù)方案的基礎(chǔ)上,所述基本表達(dá)式包括算術(shù)表達(dá)式、邏輯表達(dá)式、關(guān)系表達(dá)式、符號表達(dá)式、屬性表達(dá)式。
[0024]在上述技術(shù)方案的基礎(chǔ)上,所述執(zhí)行語句包括順序語句和并行語句;其中,順序語句包括賦值語句、流程控制語句、wait語句、return語句、NULL語句、子程序調(diào)用語句;并行語句包括進(jìn)程語句、塊語句、并行信號賦值語句、并行過程調(diào)用語句、元件例化語句、生成語句。
[0025]在上述技術(shù)方案的基礎(chǔ)上,流程控制語句包括if語句、case語句、next語句、loop語句、exit語句。
[0026]在上述技術(shù)方案的基礎(chǔ)上,并行信號賦值語句包括簡單信號賦值語句,條件信號賦值語句和選擇信號賦值語句。
[0027]在上述技術(shù)方案的基礎(chǔ)上,子程序調(diào)用語句包括函數(shù)調(diào)用語句和過程調(diào)用語句。
[0028]在上述技術(shù)方案的基礎(chǔ)上,子程序包括過程和函數(shù)。
[0029]在上述技術(shù)方案的基礎(chǔ)上,所述塊結(jié)構(gòu)包括變量列表、結(jié)構(gòu)體語句塊、子程序定義、block塊、進(jìn)程塊。
[0030]在上述技術(shù)方案的基礎(chǔ)上,所述轉(zhuǎn)換規(guī)則包括對基本表達(dá)式、執(zhí)行語句、塊結(jié)構(gòu)、實(shí)體、結(jié)構(gòu)體、包頭、包體、子程序結(jié)構(gòu)轉(zhuǎn)換規(guī)則。
[0031]在上述技術(shù)方案的基礎(chǔ)上,所述基本表達(dá)式的轉(zhuǎn)換規(guī)則如下:
[0032]假設(shè)e代表一個(gè)原子表達(dá)式,X和y是基本表達(dá)式:
[0033]如果表達(dá)式為e,轉(zhuǎn)換為MSVL表達(dá)式返回對應(yīng)的e’ ;
[0034]如果X = y,轉(zhuǎn)換為MSVL語句x = y ;
[0035]如果表達(dá)式為x[+|_|*|/|M0D]y,并且x,y為十進(jìn)制數(shù),轉(zhuǎn)換為MSVL語句x[+|-|*l/l%]y;
[0036]如果表達(dá)式為X [+1 -1 * I / I MOD] y,并且x,y為二進(jìn)制串,轉(zhuǎn)換為MSVL的多條語句;
[0037]如果表達(dá)式為x[〈 I > I〈 = |> = I = I / = ]y,轉(zhuǎn)換為 MSVL 語句 x[〈 I > I〈 = I〉==I ! = Jy ;
[0038]如果表達(dá)式為X [# I REM] y,轉(zhuǎn)換為MSVL語句的函數(shù)調(diào)用結(jié)構(gòu);
[0039]如果表達(dá)式為:[NOTIABS] X,轉(zhuǎn)換為 MSVL 語句 Bit_not (x),ABS (x),其中 Bit_not,ABS是MSVL函數(shù);
[0040]如果表達(dá)式為X and y,當(dāng)這個(gè)表達(dá)式出現(xiàn)在條件語句中時(shí),轉(zhuǎn)換為MSVL語句xand y ;當(dāng)這個(gè)表達(dá)式出現(xiàn)在信號賦值語句中時(shí),轉(zhuǎn)換為MSVL的邏輯與;
[0041]如果表達(dá)式為X or y,當(dāng)這個(gè)表達(dá)式出現(xiàn)在條件語句中時(shí),轉(zhuǎn)換為MSVL語句X ory ;當(dāng)這個(gè)表達(dá)式出現(xiàn)在信號賦值語句中時(shí),轉(zhuǎn)換為MSVL的邏輯或;
[0042]如果表達(dá)式為X [SLLI SRL | SLA | SRA | ROL | ROR] y,轉(zhuǎn)換為MSVL語句的函數(shù)調(diào)用結(jié)構(gòu);
[0043]如果表達(dá)式為x&y,轉(zhuǎn)換為MSVL的多條語句結(jié)構(gòu),實(shí)現(xiàn)將x與y兩個(gè)一維數(shù)組合并為一個(gè)一維數(shù)組的功能;
[0044]如果表達(dá)式為(X),轉(zhuǎn)換為MSVL語句的(X);
[0045]如果表達(dá)式為邊沿信號,轉(zhuǎn)換為MSVL語句的比較結(jié)構(gòu);
[0046]如果表達(dá)式為X,y,轉(zhuǎn)換為MSVL語句的x,y ;
[0047]語句轉(zhuǎn)換規(guī)則如下:
[0048]語句由基本表達(dá)式、關(guān)鍵字與‘;’組成,假設(shè)exp是一個(gè)基本表達(dá)式,換轉(zhuǎn)函數(shù)為TrsltExpr (exp);
[0049]如果語句為exp ;,轉(zhuǎn)換為 TrsltExpr (exp);;
[0050]如果語句為expl〈 = exp2 ;,轉(zhuǎn)換為 TrsltExpr (expl): = TrsltExpr (exp2);;
[0051]如果語句為expl: = exp2 ;,轉(zhuǎn)換為 TrsltExpr (expl) < = = TrsltExpr (exp2) andskip ;;
[0052]如果為if_else語句,轉(zhuǎn)換為MSVL的if_else語句;
[0053]如果為loop語句,轉(zhuǎn)換為MSVL的while語句;
[0054]如果為case語句或select_with語句,轉(zhuǎn)換為MSVL的if_else結(jié)構(gòu);
[0055]如果為for語句,轉(zhuǎn)換為MSVL的while結(jié)構(gòu);
[0056]如果為NULL語句,轉(zhuǎn)換為MSVL的空語句;
[0057]如果為wait語句,轉(zhuǎn)換為MSVL的await結(jié)構(gòu);
[0058]如果為return語句,轉(zhuǎn)換為MSVL的賦值語句;
[0059]如果為斷言語句,轉(zhuǎn)換為MSVL的if_else結(jié)構(gòu);
[0060]如果為event/選擇語句,轉(zhuǎn)換為MSVL的if_else結(jié)構(gòu);
[0061]如果為原件例化語句,轉(zhuǎn)換為MSVL的函數(shù)調(diào)用語句;
[0062]如果為生成語句,轉(zhuǎn)換為MSVL的函數(shù)調(diào)用語句;
[0063]如果為進(jìn)程語句,轉(zhuǎn)換為MSVL的if結(jié)構(gòu);
[0064]如果為參數(shù)傳遞語句,并且是在實(shí)體調(diào)用中出現(xiàn),轉(zhuǎn)換為MSVL的參數(shù)傳遞;
[0065]如果為參數(shù)傳遞語句,并且是在數(shù)組初始化中出現(xiàn),轉(zhuǎn)換為MSVL的賦值語句;
[0066]如果為系統(tǒng)輸出語句,轉(zhuǎn)換為MSVL的output結(jié)構(gòu);
[0067]如果為系統(tǒng)輸入語句,轉(zhuǎn)換為MSVL的input結(jié)構(gòu);
[0068]如果為函數(shù)/過程調(diào)用語句,轉(zhuǎn)換為MSVL的函數(shù)調(diào)用結(jié)構(gòu);
[0069]如果為類型聲明/定義語句,轉(zhuǎn)換為MSVL的變量聲明/定義結(jié)構(gòu);
[0070]statement是一個(gè)語句,block是一個(gè)語句塊結(jié)構(gòu),它由多條語句組成,對語句塊結(jié)構(gòu)進(jìn)行轉(zhuǎn)換規(guī)則如下:
[0071]如果為進(jìn)程或子程序中的語句塊,轉(zhuǎn)換為MSVL的順序語句結(jié)構(gòu);如果為結(jié)構(gòu)體中的語句塊,轉(zhuǎn)換為MSVL的并行語句結(jié)構(gòu);
[0072]對包轉(zhuǎn)換規(guī)則如下:
[0073]包頭部分,只轉(zhuǎn)換信號和變量的聲明語句,直接轉(zhuǎn)換為MSVL的聲明語句;其中,如果聲明語句中有初始化,必須將初始化語句加在聲明語句之后;
[0074]包體部分主要為子程序的定義,將其直接轉(zhuǎn)換為MSVL的函數(shù);
[0075]對實(shí)體和結(jié)構(gòu)體進(jìn)行轉(zhuǎn)換規(guī)則如下:
[0076]如果這個(gè)實(shí)體為頂層實(shí)體,該實(shí)體和結(jié)構(gòu)體轉(zhuǎn)換為MSVL的frame結(jié)構(gòu);
[0077]如果這個(gè)實(shí)體為被調(diào)用實(shí)體,該實(shí)體和結(jié)構(gòu)體轉(zhuǎn)換為MSVL的函數(shù)結(jié)構(gòu)
[0078]本發(fā)明有益效果在于,將VHDL語言轉(zhuǎn)換成MSVL語言。VHDL程序轉(zhuǎn)換為MSVL程序后,模型構(gòu)造與性質(zhì)描述使用同一種語言,使得建模與驗(yàn)證在同一邏輯框架下進(jìn)行,方便地實(shí)現(xiàn)對VHDL語言程序間接的模型檢測。在轉(zhuǎn)換的過程中,通過制定不同語法結(jié)構(gòu)的轉(zhuǎn)換規(guī)則,并通過一些額外的輔助手段將VHDL程序轉(zhuǎn)換為了語義等價(jià)的MSVL程序,這樣就可以通過對等價(jià)的MSVL程序進(jìn)行仿真、建模和驗(yàn)證,來確保源VHDL程序的正確性。
[0079]其次,MSVL可用于性質(zhì)描述和系統(tǒng)描述,它是基于投影時(shí)序邏輯PTL,并集建模、仿真與驗(yàn)證為一體的時(shí)序邏輯程序設(shè)計(jì)語言。本發(fā)明通過將VHDL程序轉(zhuǎn)換為等價(jià)的MSVL程序,使得對源VHDL程序的仿真、建模和驗(yàn)證工作轉(zhuǎn)移到MSVL上,通過MSVL的固有性質(zhì)來進(jìn)行程序的仿真、建模和驗(yàn)證,從而確保了源VHDL程序的正確性。

【專利附圖】

【附圖說明】
[0080]圖1為本發(fā)明硬件語言VHDL到MSVL自動(dòng)轉(zhuǎn)換系統(tǒng)使用的流程示意圖;
[0081]圖2為VHDL語言程序詞法分析與語法分析的關(guān)系圖。

【具體實(shí)施方式】
[0082]下面將結(jié)合附圖對本發(fā)明作進(jìn)一步的描述。
[0083]如圖1、圖2所示,本發(fā)明為VHDL到MSVL的自動(dòng)轉(zhuǎn)換系統(tǒng),所述自動(dòng)轉(zhuǎn)換系統(tǒng)包括:
[0084]文件分析模塊:設(shè)有文件分析器,所述文件分析器分析VHDL程序文件的頂層文件參數(shù)字符串,對這個(gè)文件參數(shù)字符串進(jìn)行分析,得到所有需要翻譯的文件,并分析文件之間的依賴關(guān)系,從而按照依賴關(guān)系決定翻譯的順序,并生成一個(gè)待翻譯的VHDL源文件列表,對該列表中的文件按順序傳遞給詞法分析模塊;
[0085]詞法分析模塊:設(shè)有詞法分析器,所述詞法分析器使用正則表達(dá)式對VHDL源程序進(jìn)行分析,識別源程序中的詞素,如關(guān)鍵字、數(shù)值、字符串、標(biāo)示符、運(yùn)算符、間隔符以及注釋符等,將程序中的詞素轉(zhuǎn)換為記號流,并傳遞給后續(xù)語法分析模塊;
[0086]語法分析模塊:設(shè)有語法分析器,所述語法分析器通過語法文件構(gòu)造產(chǎn)生式來識別VHDL中的語法結(jié)構(gòu),并形成VHDL程序的語法樹;
[0087]信息存儲(chǔ)模塊:在構(gòu)造VHDL程序語法樹的過程中,對于變量、信號、常量等聲明信息需要另行存儲(chǔ),以便后期在翻譯模塊中進(jìn)行查詢和翻譯;
[0088]翻譯模塊:所述翻譯模塊通過在語法分析階段識別出的語法結(jié)構(gòu),對VHDL源程序的信息進(jìn)行有組織的訪問,并將各語句節(jié)點(diǎn)逐個(gè)提取出交予對應(yīng)的語句翻譯子程序處理,翻譯子程序根據(jù)每個(gè)語句節(jié)點(diǎn)的類型來確定翻譯規(guī)則,將VHDL語句翻譯成對應(yīng)的MSVL語句;
[0089]翻譯結(jié)果字符串連接模塊:其對翻譯模塊產(chǎn)生的MSVL語句字符串進(jìn)行添加、修改、合并,最終形成翻譯結(jié)果字符串,此字符串為可執(zhí)行的MSVL完整程序,并寫入文件。
[0090]在上述技術(shù)方案的基礎(chǔ)上,還包括出錯(cuò)處理模塊,其在待翻譯的VHDL程序出現(xiàn)詞法錯(cuò)誤和語法錯(cuò)誤時(shí),能夠停止翻譯過程,并將出錯(cuò)原因輸出到指定文件中。
[0091]需要說明的是,所述詞法分析器是基于LEX詞法生成器所生成的;所述語法分析器是基于BISON語法生成器所生成的。
[0092]硬件語言VHDL到MSVL語言的自動(dòng)轉(zhuǎn)換方法包括以下步驟:
[0093]第一步:傳入VHDL頂層文件的路徑和此頂層文件名,通過頂層文件所在路徑,獲取將要被翻譯的所有文件,文件分析模塊分析所有文件之間的依賴關(guān)系,并將這些文件按一定次序放入一個(gè)VHDL文件列表;
[0094]第二步:依次讀取VHDL文件列表中的文件,將VHDL源程序?qū)朐~法分析模塊,并將程序中的詞素轉(zhuǎn)換為記號流;其中,詞素包括VHDL中的關(guān)鍵字、運(yùn)算符、分隔符、變量名,字面3;和注釋符;
[0095]第三步:將所述記號流導(dǎo)入語法分析模塊,使用自下而上的分析方法對記號流進(jìn)行規(guī)約,從而識別VHDL中的語法結(jié)構(gòu);其中,語法結(jié)構(gòu)包括基本表達(dá)式、執(zhí)行語句、塊語句,實(shí)體、結(jié)構(gòu)體、包頭、包體、子程序;
[0096]第四步:將第三步得到的語句的語法結(jié)構(gòu)存儲(chǔ)成語法樹,所有語句的語法樹集中管理,形成語法樹集合,并且將語法結(jié)構(gòu)中的變量信息和類型信息存儲(chǔ)到集合中;其中,語法樹以二叉樹的形式存儲(chǔ),變量信息存儲(chǔ)在變量集合中,類型信息存儲(chǔ)在類型集合中;其中,當(dāng)一個(gè)文件語法規(guī)約完成時(shí),需要在其中聲明的變量名和類型名前面加上實(shí)體名和結(jié)構(gòu)體名,以防止不同文件中的變量名和類型名重復(fù);
[0097]第五步:將所述語法樹集合作為輸入,每次提取一個(gè)語法樹結(jié)構(gòu)傳給翻譯程序進(jìn)行翻譯,翻譯程序根據(jù)語言轉(zhuǎn)換規(guī)則將VHDL結(jié)構(gòu)轉(zhuǎn)換成對應(yīng)的MSVL結(jié)構(gòu);
[0098]第六步:將變量集合中的變量提取出來,翻譯成MSVL的變量聲明語句,并將轉(zhuǎn)換后各個(gè)部分的字符串進(jìn)行添加、修改、合并,生成最后的MSVL程序。
[0099]需要說明的是,所述子程序包括函數(shù)和過程。
[0100]需要說明的是,所述基本表達(dá)式包括簡單表達(dá)式、符號表達(dá)式、算術(shù)表達(dá)式、邏輯表達(dá)式、關(guān)系表達(dá)式、屬性表達(dá)式。
[0101]需要說明的是,所述執(zhí)行語句包括并行語句和順序語句,順序語句包括賦值語句、流程控制語句、wait語句、return語句、NULL語句、子程序調(diào)用語句;并行語句包括進(jìn)程語句、塊語句、并行信號賦值語句、并行過程調(diào)用語句、元件例化語句、生成語句。
[0102]需要說明的是,所述流程控制語句包括if語句、case語句、next語句、loop語句、exit語句。
[0103]需要說明的是,所述并行信號賦值語句包括條件信號賦值語句,選擇信號賦值語句。
[0104]需要說明的是,所述子程序調(diào)用語句包括函數(shù)調(diào)用語句和過程調(diào)用語句。
[0105]需要進(jìn)一步說明的是,所述表達(dá)式的轉(zhuǎn)換規(guī)則如下:
[0106]假設(shè)e代表一個(gè)原子表達(dá)式,X和y是基本表達(dá)式:
[0107]如果表達(dá)式內(nèi)容是e,轉(zhuǎn)換為MSVL表達(dá)式返回對應(yīng)的e’ ;
[0108]如果X = y,轉(zhuǎn)換為MSVL語句X = y ;
[0109]如果表達(dá)式內(nèi)容是x[+|_|*|/|M0D]y,并且X,y為十進(jìn)制數(shù),轉(zhuǎn)換為MSVL語句x[+|-|*l/l%]y;
[0110]如果表達(dá)式內(nèi)容是X[+|-|*|/|M0D]y,并且X,y為二進(jìn)制串,轉(zhuǎn)換為MSVL的多條語句;其中,先對二進(jìn)制串進(jìn)行十進(jìn)制轉(zhuǎn)換,然后用十進(jìn)制進(jìn)行表達(dá)式的運(yùn)算;
[0111]如果表達(dá)式內(nèi)容是x[〈 I > I〈 = |> = I = I/= ]y,轉(zhuǎn)換為MSVL語句x[〈|>|〈=> =I = I ! = Jy ;
[0112]如果表達(dá)式內(nèi)容是X [# I REM] y,轉(zhuǎn)換為MSVL語句的函數(shù)調(diào)用結(jié)構(gòu);
[0113]如果表達(dá)式內(nèi)容是not,ABS 是 MSVL 函數(shù);
[0114]如果表達(dá)式內(nèi)容是X and y,當(dāng)這個(gè)表達(dá)式出現(xiàn)在條件語句中時(shí),轉(zhuǎn)換為MSVL語句X and y;當(dāng)這個(gè)表達(dá)式出現(xiàn)在信號賦值語句中時(shí),轉(zhuǎn)換為MSVL的邏輯與;
[0115]如果表達(dá)式內(nèi)容是X or y,當(dāng)這個(gè)表達(dá)式出現(xiàn)在條件語句中時(shí),轉(zhuǎn)換為MSVL語句X or y;當(dāng)這個(gè)表達(dá)式出現(xiàn)在信號賦值語句中時(shí),轉(zhuǎn)換為MSVL的邏輯或;
[0116]如果表達(dá)式內(nèi)容是X [SLLI SRL | SLA | SRA | ROL | ROR] y,轉(zhuǎn)換為MSVL語句的函數(shù)調(diào)用結(jié)構(gòu);
[0117]如果表達(dá)式內(nèi)容是x&y,轉(zhuǎn)換為MSVL的多條語句結(jié)構(gòu),實(shí)現(xiàn)將x與y兩個(gè)一維數(shù)組合并為一個(gè)一維數(shù)組的功能;
[0118]如果表達(dá)式內(nèi)容是(X),轉(zhuǎn)換為MSVL語句的(X);
[0119]如果表達(dá)式內(nèi)容是邊沿信號,轉(zhuǎn)換為MSVL語句的比較結(jié)構(gòu);
[0120]如果表達(dá)式內(nèi)容是x,y,轉(zhuǎn)換為MSVL語句的x,y ;
[0121]語句轉(zhuǎn)換規(guī)則如下:
[0122]語句由基本表達(dá)式、關(guān)鍵字與‘;’組成,假設(shè)exp是一個(gè)表達(dá)式,換轉(zhuǎn)函數(shù)為TrsltExpr (exp);
[0123]如果語句為exp ;,轉(zhuǎn)換為 TrsltExpr (exp);;
[0124]如果語句為expl〈 = exp2 ;,轉(zhuǎn)換為 TrsltExpr (expl): = TrsltExpr (exp2);;
[0125]如果語句為expl: = exp2 ;,轉(zhuǎn)換為 TrsltExpr (expl) < = = TrsltExpr (exp2) andskip ;;
[0126]如果語句為if_else語句,轉(zhuǎn)換為MSVL的if_else語句;
[0127]如果語句為loop語句,轉(zhuǎn)換為MSVL的while語句;
[0128]如果語句為case語句、條件信號賦值語句或選擇信號賦值語句,轉(zhuǎn)換為MSVL的if_else 結(jié)構(gòu);
[0129]如果語句為for語句,轉(zhuǎn)換為MSVL的while結(jié)構(gòu);
[0130]如果語句為NULL語句,轉(zhuǎn)換為MSVL的空語句;
[0131]如果語句為wait語句,轉(zhuǎn)換為MSVL的await結(jié)構(gòu);
[0132]如果語句為return語句,轉(zhuǎn)換為MSVL的賦值語句;
[0133]如果語句為斷言語句,轉(zhuǎn)換為MSVL的條件語句;
[0134]如果語句為event/選擇語句,轉(zhuǎn)換為MSVL的條件語句;
[0135]如果語句為元件實(shí)例化語句,轉(zhuǎn)換為MSVL的函數(shù)調(diào)用語句;
[0136]如果語句為生成語句,轉(zhuǎn)換為MSVL的函數(shù)調(diào)用語句;
[0137]如果語句為進(jìn)程語句,轉(zhuǎn)換為MSVL的條件語句,其中,條件表達(dá)式為進(jìn)程中的敏感信號與輔助信號變量的不等式,這些不等式使用或運(yùn)算連接;
[0138]如果語句為參數(shù)傳遞語句,并且是在實(shí)體調(diào)用中出現(xiàn),轉(zhuǎn)換為MSVL的參數(shù)傳遞,其中,實(shí)參的順序必須按照聲明順序翻譯;
[0139]如果語句為參數(shù)傳遞語句,并且是在數(shù)組初始化中出現(xiàn),轉(zhuǎn)換為MSVL的賦值語句;
[0140]如果語句為系統(tǒng)輸出語句,轉(zhuǎn)換為MSVL的output結(jié)構(gòu);
[0141]如果語句為系統(tǒng)輸入語句,轉(zhuǎn)換為MSVL的input結(jié)構(gòu);
[0142]如果語句為函數(shù)/過程調(diào)用語句,轉(zhuǎn)換為MSVL的函數(shù)調(diào)用結(jié)構(gòu);
[0143]如果語句為類型聲明/定義語句,轉(zhuǎn)換為MSVL的變量聲明/定義結(jié)構(gòu);
[0144]statement是一個(gè)語句,block是一個(gè)語句塊結(jié)構(gòu),它由多條語句組成,對語句塊結(jié)構(gòu)進(jìn)行轉(zhuǎn)換規(guī)則如下:
[0145]如果語句為進(jìn)程或子程序中的語句塊,轉(zhuǎn)換為MSVL的順序語句結(jié)構(gòu);如果為結(jié)構(gòu)體中的語句塊,轉(zhuǎn)換為MSVL的并行語句結(jié)構(gòu);
[0146]對包轉(zhuǎn)換規(guī)則如下:
[0147]包頭部分,只轉(zhuǎn)換信號和變量的聲明語句,直接轉(zhuǎn)換為MSVL的聲明語句;其中,如果聲明語句中有初始化,必須將初始化語句加在聲明語句之后;
[0148]包體部分主要為子程序的定義,將其直接轉(zhuǎn)換為MSVL的函數(shù);
[0149]對實(shí)體和結(jié)構(gòu)體進(jìn)行轉(zhuǎn)換規(guī)則如下:
[0150]如果這個(gè)實(shí)體為頂層實(shí)體,該實(shí)體和結(jié)構(gòu)體轉(zhuǎn)換為MSVL的frame結(jié)構(gòu);
[0151]如果這個(gè)實(shí)體為被調(diào)用實(shí)體,該實(shí)體和結(jié)構(gòu)體轉(zhuǎn)換為MSVL的函數(shù)結(jié)構(gòu)。
【權(quán)利要求】
1.一種硬件語言VHDL到MSVL的自動(dòng)轉(zhuǎn)換系統(tǒng),其能夠?qū)HDL語言程序文件轉(zhuǎn)換成MSVL語言程序文件,其特征在于:所述轉(zhuǎn)換系統(tǒng)包括, 文件分析模塊:設(shè)有文件分析器,所述文件分析器分析VHDL程序文件的頂層文件絕對路徑字符串,對這個(gè)字符串進(jìn)行分析,得到所有需要翻譯的文件,并分析文件之間的依賴關(guān)系,從而按照依賴關(guān)系決定翻譯的順序; 詞法分析模塊:設(shè)有詞法分析器,所述詞法分析器使用正則表達(dá)式對VHDL源程序進(jìn)行分析,識別源程序中的詞素,如關(guān)鍵字、數(shù)值、字符串、標(biāo)示符、運(yùn)算符、間隔符以及注釋符等,將其解析為記號流; 語法分析模塊:設(shè)有語法分析器,所述語法分析器通過語法文件構(gòu)造產(chǎn)生式來識別VHDL中的語法結(jié)構(gòu),并形成VHDL程序的語法樹; 信息存儲(chǔ)模塊:所述信息存儲(chǔ)模塊在構(gòu)造VHDL程序語法樹的過程中,對于VHDL程序中的變量、信號、常量等信息進(jìn)行存儲(chǔ),以便翻譯模塊進(jìn)行查詢和翻譯; 翻譯模塊:所述翻譯模塊通過在語法分析階段識別出的語法結(jié)構(gòu),對VHDL源程序的信息進(jìn)行有組織的訪問,并將各語句節(jié)點(diǎn)逐個(gè)提取出交予對應(yīng)的翻譯子程序處理,翻譯子程序根據(jù)每個(gè)語句節(jié)點(diǎn)的類型來確定翻譯規(guī)則; 翻譯結(jié)果字符串連接模塊:所述翻譯結(jié)果字符串連接模塊對翻譯模塊產(chǎn)生的字符串進(jìn)行添加、修改、合并,形成最終的翻譯結(jié)果字符串,并寫入文件。
2.如權(quán)利要求1所述的一種硬件語言VHDL到MSVL的自動(dòng)轉(zhuǎn)換系統(tǒng),其特征在于:還包括出錯(cuò)處理模塊,所述在待翻譯的VHDL程序出現(xiàn)詞法錯(cuò)誤和語法錯(cuò)誤時(shí),能夠停止翻譯過程,并將出錯(cuò)原因輸出到指定文件中。
3.一種使用根據(jù)權(quán)利要求1或2任意一項(xiàng)所述的硬件語言VHDL到MSVL的自動(dòng)轉(zhuǎn)換系統(tǒng),將硬件語言VHDL轉(zhuǎn)換至MSVL語言的語言轉(zhuǎn)換方法,其特征在于:所述方法包括以下步驟, 第一步:傳入VHDL頂層文件的絕對路徑,通過頂層文件所在路徑,獲取將要被翻譯的所有文件,并將這些文件放入一個(gè)VHDL文件列表; 第二步:讀取VHDL文件列表中的文件,將VHDL源程序?qū)朐~法分析模塊,并將程序中的詞素轉(zhuǎn)換為記號流;其中,詞素包括VHDL中的關(guān)鍵字、運(yùn)算符、分隔符、變量名、字面量和注釋符; 第三步:將所述記號流導(dǎo)入語法分析模塊,使用自下而上的分析方法對記號流進(jìn)行規(guī)約,從而識別VHDL中的語法結(jié)構(gòu);其中,語法結(jié)構(gòu)包括基本表達(dá)式、執(zhí)行語句、塊結(jié)構(gòu)、實(shí)體、結(jié)構(gòu)體、包頭、包體和子程序; 第四步:將步驟三得到的語句的語法結(jié)構(gòu)存儲(chǔ)成語法樹,所有語句的語法樹集中管理,形成語法樹集合,并且,將語法結(jié)構(gòu)中的變量信息和類型信息存儲(chǔ)到集合中;其中,語法樹以二叉樹的形式存儲(chǔ),變量信息存儲(chǔ)在變量集合中,類型信息存儲(chǔ)在類型集合中;其中,當(dāng)一個(gè)文件語法規(guī)約完成時(shí),需要在其中聲明的變量名和類型名前面加上實(shí)體名和結(jié)構(gòu)體名; 第五步:將所述語法樹集合作為輸入,每次提取一個(gè)語法樹結(jié)構(gòu)傳給翻譯程序進(jìn)行翻譯,翻譯程序根據(jù)語言轉(zhuǎn)換規(guī)則將VHDL結(jié)構(gòu)轉(zhuǎn)換成對應(yīng)的MSVL結(jié)構(gòu); 第六步:提取變量集合中的變量,翻譯成MSVL的變量聲明語句,并將變量聲明語句與第五步中翻譯程序轉(zhuǎn)換后各個(gè)部分的字符串進(jìn)行合并,生成MSVL程序。
4.如權(quán)利要求3所述的語言轉(zhuǎn)換方法,其特征在于:所述基本表達(dá)式包括算術(shù)表達(dá)式、邏輯表達(dá)式、關(guān)系表達(dá)式、符號表達(dá)式、屬性表達(dá)式;所述執(zhí)行語句包括順序語句和并行語句;其中,順序語句包括賦值語句、流程控制語句、wait語句、return語句、NULL語句、子程序調(diào)用語句;并行語句包括進(jìn)程語句、塊語句、并行信號賦值語句、并行過程調(diào)用語句、元件例化語句、生成語句。
5.如權(quán)利要求4所述的語言轉(zhuǎn)換方法,其特征在于:所述流程控制語句包括if語句、case語句、next語句、loop語句、exit語句;所述并行信號賦值語句包括簡單信號賦值語句、條件信號賦值語句和選擇信號賦值語句;所述子程序調(diào)用語句包括函數(shù)調(diào)用語句和過程調(diào)用語句。
6.如權(quán)利要求3所述的語言轉(zhuǎn)換方法,其特征在于:所述子程序包括過程和函數(shù);所述塊結(jié)構(gòu)包括變量列表、結(jié)構(gòu)體語句塊、子程序定義、block塊、進(jìn)程塊;所述轉(zhuǎn)換規(guī)則包括對基本表達(dá)式、執(zhí)行語句、塊結(jié)構(gòu)、實(shí)體、結(jié)構(gòu)體、包頭、包體、子程序結(jié)構(gòu)轉(zhuǎn)換規(guī)則。
7.根據(jù)權(quán)利要求6所述的語言轉(zhuǎn)換方法,其特征在于:所述基本表達(dá)式的轉(zhuǎn)換規(guī)則如下, 假設(shè)e代表一個(gè)原子表達(dá)式,X和y是基本表達(dá)式: 如果表達(dá)式為e,轉(zhuǎn)換為MSVL表達(dá)式返回對應(yīng)的e’ ; 如果X = y,轉(zhuǎn)換為MSVL語句X = y ; 如果表達(dá)式為x[+卜|*|/|M0D]y,并且X,y為十進(jìn)制數(shù),轉(zhuǎn)換為MSVL語句x[+|-|*l/l%]y; 如果表達(dá)式為X [+1 -1 * I / I MOD] y,并且X,y為二進(jìn)制串,轉(zhuǎn)換為MSVL的多條語句; 如果表達(dá)式為 x[〈 I > I〈 = |> = I = I/= ]y,轉(zhuǎn)換為 MSVL 語句 x[〈|>|〈 = I〉= I =! = Jy ; 如果表達(dá)式為x[** I REM] y,轉(zhuǎn)換為MSVL語句的函數(shù)調(diào)用結(jié)構(gòu); 如果表達(dá)式為:[NOT IABS] X,轉(zhuǎn)換為 MSVL 語句 Bit_not (x),ABS (x),其中 Bit_not,ABS是MSVL函數(shù); 如果表達(dá)式為X and y,當(dāng)這個(gè)表達(dá)式出現(xiàn)在條件語句中時(shí),轉(zhuǎn)換為MSVL語句X and y ;當(dāng)這個(gè)表達(dá)式出現(xiàn)在信號賦值語句中時(shí),轉(zhuǎn)換為MSVL的邏輯與; 如果表達(dá)式為X or y,當(dāng)這個(gè)表達(dá)式出現(xiàn)在條件語句中時(shí),轉(zhuǎn)換為MSVL語句X or y ;當(dāng)這個(gè)表達(dá)式出現(xiàn)在信號賦值語句中時(shí),轉(zhuǎn)換為MSVL的邏輯或; 如果表達(dá)式為X [SLLI SRLI SLA | SRA | ROL | ROR] y,轉(zhuǎn)換為MSVL語句的函數(shù)調(diào)用結(jié)構(gòu);如果表達(dá)式為x&y,轉(zhuǎn)換為MSVL的多條語句結(jié)構(gòu),實(shí)現(xiàn)將X與y兩個(gè)一維數(shù)組合并為一個(gè)一維數(shù)組的功能; 如果表達(dá)式為(X),轉(zhuǎn)換為MSVL語句的(X); 如果表達(dá)式為邊沿信號,轉(zhuǎn)換為MSVL語句的比較結(jié)構(gòu); 如果表達(dá)式為X,1,轉(zhuǎn)換為MSVL語句的X,y ; 語句轉(zhuǎn)換規(guī)則如下: 語句由基本表達(dá)式、關(guān)鍵字與‘;’組成,假設(shè)exp是一個(gè)基本表達(dá)式,換轉(zhuǎn)函數(shù)為TrsltExpr (exp); 如果語句為exp ;,轉(zhuǎn)換為TrsltExpr (exp);; 如果語句為 expl〈 = exp2 ;,轉(zhuǎn)換為 TrsltExpr (expl): = TrsltExpr (exp2);; 如果語句為 expl: = exp2 ;,轉(zhuǎn)換為 TrsltExpr (expl)〈 = = TrsltExpr (exp2) andskip ;; 如果為if_else語句,轉(zhuǎn)換為MSVL的if_else語句; 如果為loop語句,轉(zhuǎn)換為MSVL的while語句; 如果為case語句或select_with語句,轉(zhuǎn)換為MSVL的if_else結(jié)構(gòu); 如果為for語句,轉(zhuǎn)換為MSVL的while結(jié)構(gòu); 如果為NULL語句,轉(zhuǎn)換為MSVL的空語句; 如果為wait語句,轉(zhuǎn)換為MSVL的await結(jié)構(gòu); 如果為return語句,轉(zhuǎn)換為MSVL的賦值語句; 如果為斷言語句,轉(zhuǎn)換為MSVL的if_else結(jié)構(gòu); 如果為event/選擇語句,轉(zhuǎn)換為MSVL的if_else結(jié)構(gòu); 如果為原件例化語句,轉(zhuǎn)換為MSVL的函數(shù)調(diào)用語句; 如果為生成語句,轉(zhuǎn)換為MSVL的函數(shù)調(diào)用語句; 如果為進(jìn)程語句,轉(zhuǎn)換為MSVL的if結(jié)構(gòu); 如果為參數(shù)傳遞語句,并且是在實(shí)體調(diào)用中出現(xiàn),轉(zhuǎn)換為MSVL的參數(shù)傳遞; 如果為參數(shù)傳遞語句,并且是在數(shù)組初始化中出現(xiàn),轉(zhuǎn)換為MSVL的賦值語句; 如果為系統(tǒng)輸出語句,轉(zhuǎn)換為MSVL的output結(jié)構(gòu); 如果為系統(tǒng)輸入語句,轉(zhuǎn)換為MSVL的input結(jié)構(gòu); 如果為函數(shù)/過程調(diào)用語句,轉(zhuǎn)換為MSVL的函數(shù)調(diào)用結(jié)構(gòu); 如果為類型聲明/定義語句,轉(zhuǎn)換為MSVL的變量聲明/定義結(jié)構(gòu)。
8.根據(jù)權(quán)利要求6所述的語言轉(zhuǎn)換方法,其特征在于:所述塊結(jié)構(gòu)的轉(zhuǎn)換規(guī)則如下, 如果為進(jìn)程或子程序中的語句塊,轉(zhuǎn)換為MSVL的順序語句結(jié)構(gòu);如果為結(jié)構(gòu)體中的語句塊,轉(zhuǎn)換為MSVL的并行語句結(jié)構(gòu)。
9.根據(jù)權(quán)利要求6所述的語言轉(zhuǎn)換方法,其特征在于:所述包頭和包體的轉(zhuǎn)換規(guī)則如下, 包頭部分,只轉(zhuǎn)換信號和變量的聲明語句,直接轉(zhuǎn)換為MSVL的聲明語句;其中,如果聲明語句中有初始化,必須將初始化語句加在聲明語句之后; 包體部分主要為子程序的定義,將其直接轉(zhuǎn)換為MSVL的函數(shù)。
10.根據(jù)權(quán)利要求6所述的語言轉(zhuǎn)換方法,其特征在于:所述實(shí)體和結(jié)構(gòu)體的轉(zhuǎn)換規(guī)則如下, 如果這個(gè)實(shí)體為頂層實(shí)體,該實(shí)體和結(jié)構(gòu)體轉(zhuǎn)換為MSVL的frame結(jié)構(gòu); 如果這個(gè)實(shí)體為被調(diào)用實(shí)體,該實(shí)體和結(jié)構(gòu)體轉(zhuǎn)換為MSVL的函數(shù)結(jié)構(gòu)。
【文檔編號】G06F9/45GK104503816SQ201410841253
【公開日】2015年4月8日 申請日期:2014年12月30日 優(yōu)先權(quán)日:2014年12月30日
【發(fā)明者】段振華, 張康, 田聰, 王小兵, 張南, 黃伯虎 申請人:西安電子科技大學(xué)
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會(huì)獲得點(diǎn)贊!
1