标题 | 基于C、C++等高级编程语言开发电子系统设计自动化系统 |
范文 | 成彧 摘 要:当前电子系统设计自动化技术已广泛地应用于各个领域,随着科技的发展,对电子系统设计自动化的要求越来越高。针对传统电子系统设计自动化工具存在的一些缺陷,本研究通过高级编程语言实现了VHDL编程等工作的自动化,使用查找表存储所有常用的VHDL关键字,通过特定的函数统一编写所有VHDL程序的库和实体部分,使用线性链表存储系统中各个端口的属性,程序自动编制设计流程图,并将其通过特定的结构存储在计算机内存中,从而实现了VHDL程序的自动编辑。 关键词:电子系统;VHDL;编程自动化;高级编程语言;接口软件 中图分类号:TP311.51 文献标识码:A 1 引言(Introduction) EDA(Electronic Design Automation,电子设计自动化)是利用计算机软件进行工作,综合应用计算机技术、电子技术、信息处理和智能化等技术,实现电子产品自动化设计的一项新技术。随着科学技术的高速发展,电子系统的复杂性逐渐增加,对电子系统设计自动化程度的要求也越来越高。如何缩短电子产品设计周期、提高设计效率、提高系统性能、减少人力、物力支出、减少工作量、提高设计自动化水平是当前急需解决的问题。 EDA技术作为现代电子技术的核心,利用QuartusⅡ[1]、Max+PlusⅡ、NiosⅡ[2]、DSP Builder[3]等软件工具通过硬件描述语言进行设计,自动进行逻辑编译、逻辑化简、逻辑综合、仿真测试等,实现所设计的电子系统的功能。用于描述硬件电路的语言有多种,目前以VHDL[4]和Verilog HDL[5]为主。实现电子系统设计自动化要做的工作主要包括编辑输入、综合、适配、功能仿真、时序仿真、编程下载和硬件测试。传统电子系统设计自动化工具主要用文本输入、原理图输入、状态图输入和波形图输入这几种方法实现编辑输入。本文针对电子系统设计的复杂性和传统电子系统设计自动化工具存在的一些缺陷提出了几种新的设计方法,主要通过接口软件实现VHDL等硬件描述语言的自动编程和自动控制软件工具进行操作。 2 电子系统设计自动化的传统方法及其存在的缺 陷(The traditional method of electronic design automation and its disadvantages) 传统EDA设计的流程如图1所示。开发者采用自顶向下的设计方案。设计时开发者首先要分析项目的设计需求,确定设计方案并进行细化,对各个模块进行功能描述和结构设计,然后用VHDL等硬件描述语言对顶层电路和模块电路进行设计,再通过编译器形成标准的VHDL文件,进行综合产生网络表,最后对产生的网络表进行仿真、适配和编程下载转化为硬件电路并进行测试。 在进行VHDL编程时,除了可以手动输入程序代码, 还可以采用DSP Bulider中的Signal Compiler模块[6]、调用LPM元件或者使用IP核等方法自动编写代码,但这些方法存在一些缺陷。一方面,采用这些方法编写的代码结构复杂而且结构体部分一般没有具体的进程语句,要打开所有被调用的设计实体可能比较困难,不利于分析元器件的工作原理,可能会给后续的设计及硬件测试带来不利影响。另一方面,这些方法不能实现所有的功能模块设计,编程不够灵活。当进行一项新的模块电路设计时,所设计的功能单元的结构可能会因需求的变化发生变化,由于在不同的电路中该模块的工作方式可能不同,其VHDL代码可能有所变化[7]。考虑到在传统的设计软件中存储可变的功能模块设计方案具有一定难度,为了提高这些模块的可重用性,使其适用于不同的系统,需要将这些可变的设计方案包括可变的VHDL程序和各个元件之间的连接电路等以适当的方式存储在文件系统中,用高级编程语言进行编程从文件系统中读取信息并控制电子系统设计软件进行自动设计。除此以外,在进行VHDL编程时很有可能会出现一些重复的程序代码,所有VHDL程序中ENTITY(实体说明)部分的格式几乎都是一致的,而且一般情况下端口的模式和类型仅有“IN std_logic”“IN std_logic_vector”“OUT std_logic”和“OUT std_logic_vector”四种,程序中ARCHITECTURE(结构体)部分中也有可能出现一些重复的代码,举一个简单的例子:用VHDL程序设计一个10位十进制加法计数器,如果采用手动输入的方式进行编程,则需要将IF语句进行10次嵌套,这样做会使时间增加,降低开发效率,而且比较容易出错;如果用C、C++等高级语言编程操作VHDL文件进行自动编程,仅用一个for循环就可以自动编写出这些代码,可以节省时间,从而提高開发效率。另外,在进行VHDL编程时还有可能涉及到一系列数值运算,如果采用手动输入的方式则需要进行多次运算并将每次运算得到的结果写入程序,为了提高编程效率,需要运用高级编程语言自动进行运算并将结果输出到要编辑的程序中。 3 简单的应用实例(A simple example) 3.1 设计需求 (1)设输入系统时钟为1000Hz,利用VHDL语言设计一个分频器CNT1000,输出基准时钟为1Hz。 (2)设计一个四位十进制加法计数器CNT4D,具有同步使能和异步清零功能。 (3)设计一个四位七段数码译码器DECL7S,将四位十进制加法计数器的计数结果用四位七段数码管显示。 (4)将以上三部分内容结合,设计一个每秒加1的四位十进制计数器。 利用Visual Studio 2010开发环境用C语言自动编写VHDL程序并进行电路连接和设计仿真。 3.2 VHDL自动编程的一些基本原理和主要算法 在前面已经提到,VHDL程序中经常含有一些重复的代码。本实验程序用函数void edit Library And Entity(FILE*、Port*、Char*)统一编写所有VHDL程序的库和实体部分。开发VHDL自动编程软件时,需要考虑各个端口的一些属性,包括端口名称、端口类型、输入提示信息等,由于进行自动化编程时端口信息可能需要动态地添加或删除,可以使用一个链表对所有端口的属性进行存储,用结点存储信息,可将端口信息的数据结构定义如下: 3.3 实现VHDL自动编程的具体操作 首先打开QuartusⅡ 6.0软件新建一个项目“Example1”,然后新建一个VHDL文件“CNT1000.vhd”并保存,接下来打开一个已编辑好的实现VHDL编程自动化的程序并运行,如图2所示。 类似的也可以设计出四位七段数码译码器DECL7S,方法不再赘述。 最后新建一个Block Diagram/Schematic File文件,将以上三部分内容组合,如图9所示。 3.4 仿真结果 如图10所示,仿真结果表明所设计的功能与需求完全一致。当rest为高电平时计数清零;当en为高电平且rest为低电平时进行计数,clk每经过1000个上升沿计数器加1。 3.5 实验结论及分析 以上实验结果表明,使用高级语言编程软件可以进行自動化VHDL编程,这种设计方法至少可以自动设计一些简单的功能模块,提高设计的效率。 通常采用手动输入VHDL代码的方式进行编程效率较低,以适当的方式自动编程可提高编程效率,缩短系统开发周期。 4 实现电子系统设计自动化的一些重要方法和编程 技术(The key methods and programming technics to realize EDA) 4.1 用接口软件自动设计电子系统的一般方法 为了提高电子系统设计的自动化水平,需要用软件自动接口将手工作业部分变为自动,从而省去繁琐的硬件语言编程等工作。用软件自动接口实现电子系统自动化设计的流程如图11所示。 进行系统设计时,首先要分析设计需求,理解设计项目的任务、要求、指标和系统的应用领域、基本功能、工作原理等,然后确定总体设计方案并进行细化[8]。可以用计算机模拟人的思维对设计需求进行分析,确定设计方案并编制顶层和各个模块的设计流程图,需要应用一些机器学习、数据分析等人工智能领域的方法。为了使VHDL编程方便、快捷,需要在VHDL自动化编程系统的定义部分建立一个查找表,用于存储所有常用的VHDL关键字,程序代码如下: 在解析设计流程图中的信息时,可能需要应用一些人工智能技术,可以使用Lex、Yacc等词法分析工具辅助VHDL自动化编程系统对设计流程图中的信息进行分析[9]。在进行VHDL自动化编程之前,需要将设计流程图进行两次扫描。进行第一次扫描时先确定程序的框架结构和要设计的系统的端口信息、实体名、结构体名等信息,第二次扫描时进行VHDL自动化编程。 在VHDL编程结束之后,一般还需要进行图形输入设计,将各个功能单元通过电路进行连接。进行图形输入设计时也可以通过接口软件进行自动化设计,方法与VHDL自动化编程相似,程序自动打开Block Diagram/Schematic File文件修改内容可以按正确的方法将各个功能单元通过电路自动连接。此外,在进行图形输入设计时之前编辑的VHDL程序可能还需要修改,设计时还有可能出现一些功能相似但不完全相同的模块,例如需要进行计数并锁存结果,系统中可能存在多个若干位的十进制计数器和锁存器,这些计数器和锁存器的位数可能因需求的不同而不同。这种情况下如果用传统的设计工具则需要重新打开或新建多个VHDL程序文件,找到需要修改的所有代码进行修改,然后重新编译程序,再重新生成数字电路,操作很不方便。采用接口软件可以做出改进,在接口软件中可以用一个或多个界面模拟电子系统图形输入设计的环境并建立一个控制表,在控制表中显示选中的功能模块的信息,设计电路时可随时进行修改,模拟图形输入设计环境的界面如图12所示。 在模拟图形输入设计环境中,除了可以进行VHDL自动化编程、功能模块之间连接线路等操作外,还可以通过修改控制表中的内容自动修改VHDL程序,自动编译程序并生成数字电路在原来的位置显示。当检测到控制表中的内容发生变化时,调用fopen函数自动打开需要修改的VHDL程序文件,然后根据控制表中内容修改的位置和修改后的内容自动从VHDL程序中找出需要修改的代码并进行修改,再自动执行编译程序等操作。 由于在VHDL语言中有些指令并不常用,可以设计一个功能精简的编译系统进行编译,该系统是QuartusⅡ中VHDL编译系统的子集,设计时使用词法分析器对语法结构进行翻译,可使用哈希技术管理常用的VHDL指令集,并通过动态堆栈维护底层信息,缩小了编译系统的体积并提高了编译效率。 系统电路设计、编译、仿真结束之后,需要将系统的输入输出信号锁定在芯片的引脚上。为了提高开发效率,可将所有设计中常用的芯片及其各个引脚的信息存储在计算机中,锁定引脚时可以根据编译结果自动将信号与芯片引脚对应。 4.2 实现电子系统设计自动化的系统环境及对系统中尚 未实现的功能的讨论 众所周知,进行电子系统自动化设计既可以使用如Windows系列的通用计算机操作系统,也可以使用专用的操作系统。在进行程序编辑或电子系统设计时如果程序或系统的体积较大,可以在计算机上新建一个专用的启动模式,当计算机开机时如果进入专用模式其他进程几乎都不再运行,全部用于对程序进行编译、链接、运行等操作,可提高程序的执行效率。 在以上的电子系统自动化编程系统中还有几个功能尚未实现,例如如何在QuartusⅡ界面之外自动编译VHDL程序并生成数字电路,这将在后续工作中继续开发研究。 5 结论(Conclusion) 当前世界已进入信息化时代,EDA技术[10]已广泛应用于电子、机械、通信、航空航天、化工、矿产、生物、医学、军事等领域,对推动科学技术发展发挥着重要作用。实验证明,通过高级编程语言开发接口软件可以自动完成VHDL编程等工作,改善了硬件描述语言编程的复杂性,提高了电子系统设计的自动化水平。本文对此进行了初步探讨,但该自动化设计软件还存在一些未实现的功能和不完善的地方,需要通过进一步的研究提出一些新的设计方法。 参考文献(References) [1] LB Yao,XU Yong,M Pan.Design and Implementation of Taxi Billing System Based on FPGA[J].Electronic Design Engineering, 2011,27(6A):104-115. [2] HJ Liu,et al.Development of Frequency Variable Inverter Based on SOPC and NiosII[J].IEEE Transactions on Industry Applications,2012,49(5):2237-2243. [3] XL Hu,L Ding,ZG Zhang.The Design of Digital Filter Based on DSP Builder[J].Applied Mechanics & Materials, 2014:602-605;2641-2644. [4] 夏莉莉.浅议VHDL语言在电子设计自动化中的应用[J].信息安全与技术,2012(7):44-46. [5] TS Tan,BA Rosdi.Verilog HDL Simulator Technology:A Survey[J].Journal of Electronic Testing,2014,30(3):255-269. [6] 张志亮,赵刚,齐星刚.从Simulink模型自动生成VHDL代码——基于DSPBuilder的FPGA设计流程[J].现代电子技术,2004,23:4-6. [7] 王彩凤,李卫兵,卞丽.VHDL语言在电子设计中的应用[J].实验科学与技术,2014(4):65-67. [8] 朱新宇.电子设计自动化实验系统的开发与应用[D].北京邮电大学工程硕士学位论文,2012. [9] 齐星刚.VHDL编译器设计研究技术[D].四川大学硕士学位论文,2005. [10] 宋文斌.并行遗传算法在器件模型参数提取中的应用.软件 工程师,2012(4):45-47. 作者简介: 成 彧(1994-),男,本科,初级工程师.研究领域:軟件开发. |
随便看 |
|
科学优质学术资源、百科知识分享平台,免费提供知识科普、生活经验分享、中外学术论文、各类范文、学术文献、教学资料、学术期刊、会议、报纸、杂志、工具书等各类资源检索、在线阅读和软件app下载服务。