国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

針對FPGA的IDL—Verilog編譯器的設(shè)計與實現(xiàn)

2017-07-25 16:00吳湛王玲吳宇
現(xiàn)代電子技術(shù) 2017年14期

吳湛+王玲+吳宇

摘 要: 軟件通信體系結(jié)構(gòu)規(guī)范(SCA)規(guī)定采用CORBA中間件來實現(xiàn)運行在不同處理器上的波形組件之間的相互通信,然而目前缺少能夠有效支持FPGA上CORBA 中間件的IDL編譯器。為此設(shè)計實現(xiàn)了一種IDL?Verilog編譯器,該編譯器能夠支持用戶自定義的任意IDL文件,并根據(jù)FPGA波形組件功能需要,自動生成運行在FPGA上的ORB核心、FPGA組件框架代碼,從而真正實現(xiàn)FPGA組件與GPP組件的統(tǒng)一CORBA通信。介紹IDL?Verilog編譯器的整體結(jié)構(gòu),并對該編譯器的設(shè)計與實現(xiàn)進行詳細闡述,最后對編譯器進行測試。結(jié)果表明,該編譯器能夠正確解析IDL文件,并實現(xiàn)從IDL到Verilog語言的映射,自動生成的一系列目標文件使FPGA真正具備CORBA通信能力。

關(guān)鍵詞: 軟件通信體系結(jié)構(gòu); CORBA; FPGA; IDL編譯器

中圖分類號: TN915?34; TP314 文獻標識碼: A 文章編號: 1004?373X(2017)14?0018?05

Abstract: The software communications architecture (SCA) norm stipulates that the CORBA middleware should be used to realize intercommunication between the waveform components running in the different processors, but there is no IDL compiler which can support the CORBA middleware on FPGA effectively. Therefore, an IDL?Verilog compiler was designed, which can support any IDL files defined by users themselves, and generate the ORB core and FPGA component framework code running on FPGA automatically according to the functional requirements of FPGA components, so as to realize the CORBA communication between FPGA components and GPP components. The whole structure of IDL?Verilog compiler is introduced. The design and implementation of the compiler are expounded in detail. Some tests for the compiler were carried out. The results show that the IDL?Verilog compiler can parse the IDL files correctly, implement the mapping from IDL to Verilog language, and generate the target files automatically to make FPGA really have the ability of CORBA communication.

Keywords: software communication architecture; CORBA; FPGA; IDL compiler

0 引 言

軟件無線電(Software Defined Radio,SDR)是一種基于通用硬件平臺依靠軟件實現(xiàn)其功能的無線電通信技術(shù),其體系結(jié)構(gòu)是通過軟件通信體系架構(gòu)(Software Communication Architecture,SCA)來定義的[1?2]。SCA采用CORBA中間件來實現(xiàn)其所需的分布式計算環(huán)境[3?4],其硬件平臺通常包含通用處理器(GPP)、數(shù)字信號處理器(DSP)、可編程門陣列(FPGA)等。雖然CORBA(公共對象請求代理體系結(jié)構(gòu))中間件技術(shù)在GPP上已經(jīng)廣泛應(yīng)用,但在DSP,F(xiàn)PGA等專用處理器上實現(xiàn)起來較為困難,目前只有OIS公司開發(fā)的ORBexpress FPGA[5]和Prismtech公司開發(fā)的集成電路ORB(ICO)[6]實現(xiàn)了FPGA上的CORBA通信,但考慮到國防安全問題,不允許在我國軍事領(lǐng)域中使用[7]?;谝陨峡紤],為了實現(xiàn)FPGA上的CORBA通信,研發(fā)了支持FPGA處理器的CORBA中間件產(chǎn)品FPGA?ORB。

FPGA?ORB中間件主要包括運行在FPGA處理器上的ORB核心、客戶端樁和服務(wù)器框架以及運行在PC機上的IDL?Verilog編譯器,其體系結(jié)構(gòu)如圖1所示。其中,ORB核心用于實現(xiàn)客戶端請求和服務(wù)器對象之間的連接,客戶端的ORB核心接收被調(diào)用操作的參數(shù)并將其組碼為網(wǎng)絡(luò)可接收的格式,服務(wù)器的ORB核心將來自網(wǎng)絡(luò)的操作參數(shù)解組,然后送給服務(wù)器來執(zhí)行所調(diào)用的操作??蛻舳藰队糜趯⒖蛻舳说恼埱缶幋a,通過客戶端的ORB發(fā)送到服務(wù)器,并把返回的結(jié)果解碼后送給客戶端。服務(wù)器框架負責(zé)把客戶端通過ORB發(fā)過來的請求解碼,通過對象操作實現(xiàn),然后把結(jié)果編碼后通過服務(wù)器ORB發(fā)送給客戶端??蛻舳苏{(diào)用的接口和服務(wù)器實現(xiàn)的接口是通過接口描述語言(Interface Definition Language,IDL)來定義的,但是與某一種具體編程語言不同,IDL 是一種純說明性語言,它只能夠給出該接口的定義和每個操作要求的參數(shù)而不牽涉到具體的實現(xiàn)[8?9],因此要用IDL?Verilog編譯器對IDL文件進行編譯,然后根據(jù)解析得到的IDL文件信息修改模板文件代碼,最后生成Verilog語言實現(xiàn)的ORB核心、客戶端樁和服務(wù)器框架??梢?,IDL?Verilog編譯器是FPGA?ORB的關(guān)鍵模塊,本文主要論述IDL?Verilog編譯器的設(shè)計與實現(xiàn)。

1 IDL?Verilog編譯器的設(shè)計與實現(xiàn)

本文設(shè)計的IDL?Verilog編譯器劃分為三個子系統(tǒng):參數(shù)解析子系統(tǒng)、編譯前端子系統(tǒng)、編譯后端子系統(tǒng),其具體結(jié)構(gòu)如圖2所示。其中,參數(shù)解析子系統(tǒng)用于完成對用戶編譯命令的解析,存儲編譯器控制信息;編譯前端子系統(tǒng)用于完成對輸入IDL文件的解析,并生成一棵抽象語法樹;編譯器后端子系統(tǒng)用于完成對編譯前端子系統(tǒng)生成的抽象語法樹的遍歷,并提取相關(guān)信息完成對輸入模板文件的修改,然后生成目標文件。這種設(shè)計方式帶來的好處是,可以保持參數(shù)解析子系統(tǒng)和編譯前端子系統(tǒng)的代碼不變,僅僅通過改變編譯后端子系統(tǒng)的代碼就可以實現(xiàn)針對不同處理器和開發(fā)語言的IDL編譯器,這樣就大大增強了IDL編譯器的通用性。下面分別對三個子系統(tǒng)進行詳細的闡述。

1.1 參數(shù)解析子系統(tǒng)

參數(shù)解析子系統(tǒng)的作用是通過解析處理用戶輸入的命令參數(shù)以獲取控制命令信息來實現(xiàn)對編譯器的控制。文中設(shè)計的IDL?Verilog編譯器需要輸入的命令參數(shù)包括:源文件名、包含文件路徑、輸出目標代碼文件路徑、模板文件路徑、參數(shù)傳遞文件路徑以及幫助查詢命令。

1.2 編譯前端子系統(tǒng)

編譯器前端子系統(tǒng)主要由預(yù)處理模塊、詞法分析模塊和語法分析模塊組成。下面分別對三個模塊進行詳細的闡述。

1.2.1 預(yù)處理模塊

預(yù)處理模塊的主要作用是對輸入的IDL文件進行預(yù)處理,以方便詞法分析模塊、語法分析模塊進行后續(xù)處理。其主要功能子模塊包括:源文件包含處理子模塊、宏定義處理子模塊和條件編譯處理子模塊。

(1) 源文件包含處理子模塊。源文件包含處理子模塊用來對源文件當中的“#include”語句進行解析,提取輸入源文件中的包含文件;然后以包含文件的絕對路徑作為輸入文件遞歸調(diào)用預(yù)處理模塊;最后按由外向內(nèi)和由前向后的原則存儲包含文件的絕對路徑。IDL?Verilog編譯器將按照存儲的包含文件的絕對路徑的先后順序?qū)ο嚓P(guān)文件逐一進行解析處理。

(2) 宏定義處理子模塊。宏定義處理子模塊用來對源文件和包含文件當中的“#define”語句進行解析,將宏定義中的宏名存儲,用于預(yù)處理模塊當中條件編譯的判斷處理,而并不進行宏定義替換。在語法解析模塊中,則會提取完整的宏定義信息,然后將基本數(shù)據(jù)類型的標識符和已存儲的有效宏名進行匹配,如果匹配成功,則將該標識符替換為宏定義的字符串。

(3) 條件編譯處理子模塊。條件編譯處理子模塊用來對源文件和包含文件當中的“#ifdef”,“#if defined”等語句進行解析,具體方法就是將參數(shù)解析模塊存儲的預(yù)定義變量名和預(yù)處理模塊存儲的宏名作為依據(jù),對條件編譯語句進行判斷,找出需要編譯的語句。

為了確保源文件和包含文件內(nèi)容的不變性,預(yù)處理模塊為每個源文件和包含文件都新建一個與之對應(yīng)的臨時文件。將預(yù)處理之后的源文件和包含文件存入與之對應(yīng)的臨時文件。詞法分析模塊、語法分析模塊對源文件和包含文件的后續(xù)處理就轉(zhuǎn)化為對臨時文件的解析。當所有解析處理結(jié)束之后,IDL?Verilog編譯器會刪除預(yù)處理模塊生成的臨時文件。

預(yù)處理模塊具體執(zhí)行流程圖如圖3所示。

1.2.2 詞法分析模塊

詞法分析模塊是 IDL?Verilog 編譯器前端子系統(tǒng)的關(guān)鍵模塊之一。該模塊按從左往右的順序?qū)υ次募M行掃描,在掃描的過程中會跳過空格和換行符并刪除注釋,將若干連續(xù)字符拼接成一個符合IDL語言的構(gòu)詞規(guī)則的標識符并提取,然后將提取的標識符交給語法分析模塊進行后續(xù)處理,其具體過程如圖4所示。

1.2.3 語法分析模塊

語法分析模塊采用“邊檢查、邊存儲、邊轉(zhuǎn)換”的方式來對輸入文件進行語法解析:每當語法分析模塊從輸入文件中檢查到一種語法成分時,則調(diào)用相對應(yīng)的語法解析函數(shù)對該語法成分進行解析;接著按照IDL語言的語法規(guī)則來對語法成分進行解析和檢查,并在解析和檢查過程中,將該語法成分的信息存儲;將Verilog語言不支持的函數(shù)參數(shù)類型轉(zhuǎn)換為基本數(shù)據(jù)類型,當函數(shù)參數(shù)類型為結(jié)構(gòu)體時,則將其按結(jié)構(gòu)體成員的數(shù)量拆分為基本數(shù)據(jù)類型,當函數(shù)參數(shù)類型為別名時,則將其與存儲的別名信息對比,找出其原始基本數(shù)據(jù)類型。其具體執(zhí)行流程圖如圖5所示。最終,一個IDL文件經(jīng)預(yù)處理模塊、詞法分析模塊和語法分析模塊會生成一棵抽象語法樹,該抽象語法樹存儲了完整的IDL文件信息[10]。每棵抽象語法樹可能包含十棵子樹,這十棵子樹分別存儲:包含文件信息、宏定義信息、常量信息、結(jié)構(gòu)體信息、別名信息、異常信息、枚舉信息、聯(lián)合信息、接口信息、模塊信息。

語法分析流程如下:

(1) 判斷文件是否結(jié)束,如果是則執(zhí)行第(6)步,否則繼續(xù)執(zhí)行第(2)步。

(2) 從文件中讀取一個字符串。

(3) 判斷該字符串是否為合法字符串,如果為合法字符串,則執(zhí)行第(4)步,否則執(zhí)行第(5)步。

(4) 判斷字符串,如果字符串為函數(shù),則調(diào)用函數(shù)解析接口進行函數(shù)信息提取和存儲,并將函數(shù)參數(shù)的數(shù)據(jù)類型轉(zhuǎn)換為基本數(shù)據(jù)類型存儲,然后返回第(1)步繼續(xù)執(zhí)行;如果字符串為文件包含、屬性、異常和用戶定義的數(shù)據(jù)類型(宏定義、別名、常量、結(jié)構(gòu)、枚舉、聯(lián)合),則調(diào)用相應(yīng)的解析函數(shù),完成相應(yīng)信息的提取和存儲,然后返回第(1)步繼續(xù)執(zhí)行;如果字符串為接口,則提取接口名和繼承接口信息并存儲,然后返回第(1)步繼續(xù)執(zhí)行;如果字符串為模塊,則提取并存儲模塊名,然后返回第(1)步繼續(xù)執(zhí)行;如果字符串不是上面提到的任一字符串,則返回第(1)步繼續(xù)執(zhí)行。

(5) 報告錯誤文件名字、錯誤行數(shù)和錯誤類型。

(6) 結(jié)束。

1.3 編譯后端子系統(tǒng)

編譯后端子系統(tǒng)主要包括目標代碼生成模塊。目標代碼生成模塊是IDL?Verilog編譯器最后一個關(guān)鍵模塊。這一模塊的主要作用是通過遍歷語法分析模塊生成的抽象語法樹來提取接口信息,然后根據(jù)提取的信息完成對模板文件的修改來生成目標文件。

為了方便生成目標代碼,本文為每一個需要更改的FPGA?ORB模板文件內(nèi)容都做了注釋標記,目標文件生成函數(shù)會從抽象語法樹中提取相應(yīng)信息對模板文件中的標記內(nèi)容進行修改,并生成目標文件,這樣就大大減少了目標代碼生成模塊的工作量。生成的目標文件按功能可以劃分為:ORB模塊、IOR解析模塊、選擇器模塊、客戶端樁模塊、服務(wù)器框架模塊、組件接口模塊,其結(jié)構(gòu)如圖6所示。

(1) ORB模塊。該模塊主要用于GIOP報文頭、請求報文頭、應(yīng)答報文頭的解析和封裝。

(2) IOR解析模塊。該模塊用于解析應(yīng)答報文中的對象引用(IOR),獲取相應(yīng)的對象密鑰(objectkey)。

(3) 選擇器模塊。該模塊為選擇器模塊,用于報文發(fā)送和接收選擇。

(4) 客戶端樁模塊。該模塊包含多個客戶端樁子模塊,其數(shù)量與組件端口數(shù)量相同,其主要作用是對請求報文中的函數(shù)參數(shù)進行封裝以及對應(yīng)答報文中的函數(shù)參數(shù)進行解析。

(5) 服務(wù)器框架模塊。該模塊包含多個服務(wù)器框架模子模塊,其數(shù)量與組件端口數(shù)量相同,其主要作用是對請求報文中的函數(shù)參數(shù)進行解析以及對應(yīng)答報文中的函數(shù)參數(shù)進行封裝。

(6) 組件接口模塊。該模塊采用硬件抽象層(HAL)的接口規(guī)范[11],其主要作用是實現(xiàn)FPGA組件端口和FPGA?ORB之間的數(shù)據(jù)傳遞。

2 IDL?Verilog編譯器測試

本文對IDL?Verilog編譯器的測試主要分為本地測試和CORBA通信測試兩個方面。

(1) IDL?Verilog編譯器本地測試。IDL?Verilog編譯器本地測試主要是測試IDL?Verilog編譯器對IDL文件的解析處理能力。因為輸入的IDL文件是無法窮舉的,本文采用了等價類測試的方法來測試[12]。通過將輸入的文件中的語句劃分成能夠覆蓋IDL語法各種情況的等價類,并對每個等價類完成了測試。由于各等價類的測試步驟相同,本文僅選用了一個測試用例來介紹本地測試的過程。測試的IDL文件test.idl如圖7所示,該IDL文件經(jīng)IDL?Verilog編譯器編譯之后生成的目標文件如表1所示。測試表明,IDL?Verilog編譯器能夠?qū)崿F(xiàn)對輸入IDL文件的正確解析,并成功生成目標文件。

(2) CORBA通信測試。CORBA通信測試主要是測試表1中的目標文件能否配合的FPGA?ORB實現(xiàn)FPGA上的CORBA通信。

立足于實驗室的測試條件,搭建一個如圖8所示的測試平臺。該測試平臺主要由GPP和FPGA組成,其中,GPP主要用來運行核心框架和GPP波形組件A,F(xiàn)PGA用來運行FPGA波形組件B。GPP采用 TAO進行CORBA通信,F(xiàn)PGA采用表1中目標文件組成的FPGA?ORB進行CORBA通信,GPP ORB與FPGA ORB之間實際通過ELBC總線相連。

測試平臺的通信過程如圖9所示,上電之后,F(xiàn)PGA組件B也能像GPP組件A一樣通過FPGA?ORB向核心框架中的域管理器進行注冊,然后域管理器對組件A進行初始化、端口連接和參數(shù)配置以完成整個波形組件的初始化;最后組件A和組件B可以通過各自的中間件向?qū)Ψ桨l(fā)送函數(shù)調(diào)用請求,并返回調(diào)用結(jié)果。測試表明,IDL?Verilog編譯器生成的目標文件成功地實現(xiàn)了FPGA與GPP之間的CORBA通信。

3 結(jié) 語

本文根據(jù)IDL語言的語法規(guī)則,使用C語言實現(xiàn)了IDL?Verilog編譯器。該編譯器采用模塊化的設(shè)計方法,將整個編譯器按功能劃分為不同的子模塊,可以通過改變其子模塊實現(xiàn)不同的語言映射,大大提高了IDL編譯器的通用性。同時該編譯器生成的目標文件能夠正確完成IDL語言到Verilog語言的映射。IDL?Verilog編譯器目前已經(jīng)調(diào)試通過,并作為FPGA?ORB重要組成部分實現(xiàn)了FPGA上CORBA通信。

參考文獻

[1] JOHNSON C R, Jr, SETHARES W A.軟件無線電[M].北京:機械工業(yè)出版社,2008.

[2] 粟欣,許希斌.軟件無線電原理與技術(shù)[M].北京:人民郵電出版社,2010.

[3] 崔小鵬,胡中豫,張豪.SCA中CORBA與硬件抽象層技術(shù)研究[J].現(xiàn)代電子技術(shù),2011,34(6):32?35.

[4] 李雅萍,楊尚森,李陽.CORBA技術(shù)在SCA系統(tǒng)中的應(yīng)用[J].計算機工程與設(shè)計,2008,29(16):4200?4203.

[5] BECKWITH W, DELLER S, GTHOMPSON J. Hardware communications infrastructure supporting location transparency and dynamic partial reconfiguration: US 2008/0229326 A1 [P]. 2008?09?18.

[6] Prismtech. Prismtech openfusion CORBA products [EB/OL]. [2013?12?10]. http://www.prismtech.com/sectionitem.

[7] 高宏偉.SCA系統(tǒng)中針對FPGA處理器的中間件關(guān)鍵技術(shù)研究與實現(xiàn)[D].長沙:國防科技大學(xué),2011.

[8] HENNING Michi, VINOSKI Steve.基于C++ CORBA高級編程[M].北京:清華大學(xué)出版社,2007.

[9] 韋樂平.CORBA語言映射[M].北京:電子工業(yè)出版社,2001.

[10] AHO A V.編譯原理[M].北京:機械工業(yè)出版社,2009.

[11] 王金波.基于SCA的硬件抽象層連接設(shè)計及其在DSP/FPGA上的實現(xiàn)[D].長沙:國防科技大學(xué),2005.

[12] 李穎,胡明.基于C語言實現(xiàn)的IDL編譯器[J].計算機技術(shù)與發(fā)展,2013,23(3):5?9.

阜阳市| 德安县| 台山市| 大渡口区| 济源市| 光泽县| 阿拉善左旗| 阿拉善盟| 西乌| 奉新县| 肥乡县| 清丰县| 云南省| 镇巴县| 香港| 阿图什市| 黄冈市| 大邑县| 忻城县| 寿光市| 凤凰县| 齐河县| 河间市| 西和县| 永宁县| 嘉祥县| 江阴市| 康保县| 中江县| 多伦县| 谢通门县| 嘉祥县| 若尔盖县| 嵊泗县| 永仁县| 沈阳市| 河池市| 红河县| 八宿县| 常德市| 青岛市|