HI,欢迎来到云研学术,期刊咨询:130-7314-7102  订阅咨询:130-7314-7102 
0
首页 精品范文 vhdl语言

vhdl语言

时间:2023-05-30 08:53:01

vhdl语言

第1篇

【关键词】VHDL语言 电子设计 自动化应用

中图分类号:F407文献标识码: A

一、前言

近些年,随着电子技术及计算机技术的不断发展,使用原来的方法进行系统及芯片的设计已经不能满足要求了,需要具有更高效率的设计方法,运用VHDL语言进行电子设计就是在这种情况下开发的,而且被越来越广泛地应用到电子设计自动化中,显著地提高了开发效率及产品的可靠性。

二、电子设计自动化和VHDL语言概述

1、电子设计自动化概述。电子设计自动化又称为EDA技术,它是在上世纪70年代的集成电路技术茂盛发展下诞生的,与集成电路的复杂度是紧密相关的。在第一代电子设计自动化EDA中,其主要功能是进行图形编辑交互及设计规则检查,所要解决的问题是进行PCB布局布线或者晶体管级版图的设计;第二代电子自动化设计EDA系统,主要包括逻辑图的设计输入、逻辑综合、芯片布图、模拟验证及印刷电路的版布图等,随着集成电路尺寸越来越小、规模越来越大、速度及频率越来越高、设计越来越复杂,HDL的设计方案应运而生,随后具有描述语言的VHDL被提出来了。

2、VHDL语言概述。VHDL语言是指超高速集成电路的硬件描述语言,它是一种很快的电路设计工具,其功能主要包括电路合成、电路描述及电路仿真等电路设计工作。VHDL语言是由抽象及具体硬件级别进行描述的工业标准语言,它已经成为了一种通用硬件设计的交换媒介,很多工程软件供应商已经把VHDL语言当做了EDA或CAD软件的输入/输出标准,很多EDA厂商还提供了VHDL语言编译器,同时在方针工工具、布图工具及综合工具中对VHDL语言提供了支持。

三、VHDL语言的特点

1、VHDL语言具有较强的描述功能,能够对支持系统的行为级、门级及寄存器传输级这三个层次进行设计,和其它硬件描述语言相比,VHDL语言的行为描述能力更强,这种较强的行为描述力能够有效地避开具体器件结构。对大规模的电子系统的逻辑行为进行描述与设计,VHDL语言已经成为高层次设计中的核心,也是它成为了电子设计系统领域最好的硬件语言描述。

2、VHDL语言能够支持大规模的设计分解,及已有设计再利用,大规模的设计不可能有一个人独立地完成,需要多个项目共同的组成,VHDL语言中的设计实体概念、设计库概念、程序包概念为设计的分解及再利用提供了有力的支持。

3、VHDL语言具有较为丰富的模拟库函数及仿真语句。这使它能够在任何设计系统中,很早地就能对设计系统功能中的可行性进行查验,并随时可以对设计进行模拟仿真,将设计中的逻辑错误消除在组装前,由于大规模集成电路及应用多层的印刷技术器件组装完毕之后。很难进行修改,这就使得逻辑模拟变得不可缺少,运用逻辑模拟还能够减少成本缩短调试及设计周期。对于中小规模的集成电路,仅运用模拟就能够获得成功数字系统设计;而大规模集成电路,则需要运用逻辑模拟进行逻辑网络设计的检查与分析。逻辑模拟系统对于集成电路来说,是不可缺少的重要手段。

4、VHDL语言本身生命周期就较长,在VHDL语言设计中,并不包含和工艺相关的信息,其设计和最终工艺实现是无关的,能够使设计通过门级仿真之后,在用合适的工具映射到不同的工艺当中,当工艺进行更新时,就不需要进行原设计的修改了,仅改变映射工具就可以了,对于已经完成的设计,尤其是和工艺技术相关的参数可以运用VHDL语言所提供的类属进行描述,或者进行子程序功能的调用,可以在源程序不改变的情况下,仅修改类属的函数及参量就可以了,这样就可以改变电子设计的规模及结构了。当然在VHDL语言也有些不足之处,像没有WAIT语句、不能处理动态结构、不能等待时序等,但它整体还是有很多优点的,并为硬件设计带来了很大地方便,被很多用户所接受,也得到了很多厂商的有力支持。

四、电子设计自动化应用VHDL语言的开发流程

VHDL语言的开发流程主要为文本编辑、功能仿真、逻辑综合、布局布线、时序仿真及编程下载。其中文本编辑器能够进行VHDL语言环境的编辑,其文件保存为,功能仿真是指将文件调入VHDL的仿真软件中,并进行功能的仿真,对其逻辑功能进行检查以验证是否正确,也称为前仿真,对于那些相对简单的电子设计可以忽略这一步,在布线完成之后直接进行时序仿真:逻辑综合是指将文件进行逻辑综合并在设定的约束条件下进行综合。就是把语言综合成布尔表达式及信号连接关系,综合之后会生成,电子设计自动化的工业标准文件:布局布线则是将文件调到PLD厂家所提供的软件之中进行布局布线,这样就可以把已设计好的逻辑安放到PLD 内了;时序仿真是指利用布局布线时所获得的精确参数进行后仿真的验证:编程下载所指当确认方针没有错误后,就将文件储存到目标芯片中。

五、VHDL语言在电子设计自动化应用中的作用

VHDL语言在电子设计自动化中的应用,能够有效地打破传统硬件电路的设计界限,借助硬件的描述语言设计出与相关要求相符合的硬件系统,运用VHDL语言对电子设计自动化的应用,与C语言的语法类型是相似的,具有很好的可读性,掌握起来也较为简单,运用VHDL语言进行硬件电路的设计打破了原有地先画出电路的原理图,再进行元器件及实际电路定式的搭建,可以灵活地御用VHDL语言描述的硬件电路功能进行信号的连接和定时关系,在总体行为的设计一直到最终逻辑形成网络表的文件,对于每一步都要进行仿真的检查,在仿真结果分析中,能够发现电子自动化系统的设计中所存存在的问题,这样更有利于电子设计自动化应用的完整,并且其设计效率更高,时间周期更短,VHDL语言已经被广泛地应用在电子设计自动化中了。

六、VHDL 语言在电子设计自动化应用中所要注意的问题

1、文件名和实体名要相同,其后缀均为.Vhd,程序的存储路径不能有汉字出现,变量要放在结构体之中,变量并不是全局量,仅能在进程语句及子程序中进行使用。

2、关于顺序语句和并行语句问题,要把并行语句直接放人结构体里就可以了,而顺序语句就要放在process里了,虽然process自身是并行语句,但它的内部确是顺序语句。

3、在条件语句中,条件的覆盖是不完整的,综合器会把多余的锁存器引入进来,一定要对条件所覆盖的范围进行考虑,通常的处理方法是加上else语句进行条件补全,顶层的文件在进行存盘时,其文件名是不能和底层的文件名相同的。

七、结束语

随着电子技术和计算机技术的不断发展,电子产品也在迅速发展着,电子设计自动化技术改变了传统的数字系统设计方法及实现手段,而VHDL国际标准语言与电子设计自动化技术工具的结合,能够有效地降低设计的风险,缩短设计的时间周期,提高设计效率,随着VHDL语言在电子设计自动化的应用越来越广泛,并将会给硬件的设计领域带来很大的变革。

参考文献:

[1]王锁萍.电子设计自动化教程[M].成都:电子科技大学出版社,2000

[2]丁明威.李引新.黄培中.VHDL与电子自动化[J].计算机应用与研究,1999,13(1):24-25

[3]平.张振荣.VHDL编程与仿真[M].北京:人民邮电出版社,2000

[4]万军华.刘瑞通.基于VHDL的多功能数字闹钟设计[J].湖南理工学院学报(自然科学版),2011(01)

第2篇

关键词:教学改革 实践教学 VHDL语言

中图分类号:G642 文献标识码:A 文章编号:1674-098X(2015)09(a)-0117-02

VHDL语言[1-2](VHDL,VHSIC (Very High Speed Integrated Circuit)Hardware Description Language)是一种标准的数字系统硬件电路设计语言,于1983年由美国国防部(DOD) 为实现其高速集成电路计划发起创建的一种高速集成电路硬件描述语言,其目的是为了给数字电路的描述与模拟提供一个基本的标准。VHDL语言在1985年完成第一版,1987年成为IEEE标准(IEEE STD1076-1987),1993年增修为(IEEE STD1076-1993)标准。VHDL语言为高级硬件行为描述型语言,为所有可编程逻辑器件厂商(如Xilinx和Altera公司等)所支持,已成为电路设计人员和电子设计工程师必须掌握的工具语言。硬件逻辑设计技术[3]是电子信息类专业的重要专业课,该课程包括课堂理论教学和实验两个模块,其特点是软硬件结合,该课程的综合知识面宽及工程实践性强。电子信息类专业的学生掌握硬件逻辑设计能力无论是对学生完成毕业设计或工程创新,还是促进学生就业都有重要意义。因此,硬件逻辑设计的实践性教学在电子信息类专业实践教学中的地位日益显著,如何开设好VHDL语言及硬件逻辑设计是当前硬件设计语言课程中的一个非常重要的问题[4-6]。

1 教学目标

《VHDL语言及数字逻辑设计》课程属电子信息类专业技术类选修课,是将控制,仿真与芯片设计相结合的一门硬件设计语言。通过本课程的学习,使学生通过对VHDL语言及EDA技术的学习和实践训练,获得现代硬件数字逻辑设计的软件化设计方法,了解并初步掌握数字系统硬件电路设计领域的最新技术;通过有针对性、分层次、分阶段地实施实践教学,激发并调动学生创造性思维能力,强化学生的实践动手能力和创新能力,为学生在硬件逻辑设计领域的进一步深入探索和进行创新奠定工程基础,以及应用VHDL及EDA工具开发设计数字系统的基本方法及技术,为学生完成毕业设计及将来的工作等打下扎实的基础。

另外,本课程的教学难点是,一方面要把握学生的数字电路基础水平;另一方面要高度概括VHDL语言的专业课内容,深入浅出,还要照顾到彼此之间的联系,尤其是面向应用。因此,首先讲清楚确知学习VHDL语言的意义和FPGA的工作原理,并进一步讲清VHDL语言的基本结构和以及VHDL语言中主要描述语句的特点和用途,并设计一些基本逻辑电路实例,目的在于让学生熟悉VHDL语言的整个过程,能运用VHDL语言编程及进行仿真,并掌握其中的关键技术。这样便于学生进一步学习和理解VHDL语言的应用,增强学生在工作中的竞争能力,达到可以用VHDL语言设计数字逻辑电路和数字应用系统,并在CPLD/FPGA可编程逻辑器件上实现自己的设计。

2 教学内容

VHDL语言如今已经广泛被应用到FPGA/CPLD和ASIC中的设计。VHDL语言具有很强的电路描述和建模能力,能从多个层次对数字系统进行建模和描述,从而大大简化了硬件逻辑设计任务,提高了硬件设计效率和可靠性。而且VHDL语言具有与具体硬件电路无关和与硬件设计平台无关的特性,并具有良好的电路行为描述的能力,在语言易读性和层次化结构化设计方面表现了强大生命力和应用潜力。因此,我们选择VHDL语言作为这门课的课堂教学内容。

《VHDL语言及硬件逻辑电路设计》课程内容的主要教学思路是,以VHDL硬件描述语言为硬件设计表达手段,以Xilinx公司的ISE软件为硬件设计开发工具,并以FPGA/CPLD可编程逻辑器件开发系统为教学实践平台,来实现学生对数字电路系统的开发设计,培养学生自顶而下的层次化设计思想,提高学生应用实践创新能力。

在教学内容上,删去了一些FPGA/CPLD可编程器件结构内容的过多讲解,重点讲解VHDL语言内容,并利用有限的课时补充了硬件逻辑电路设计方面的一些最新进展,以利于学生开阔视野和提高学习兴趣;针对VHDL语言语法丰富的特点,增加了大量课堂实例,并结合应用对VHDL语言中关键要点进行详细说明,便于学生理解和掌握VHDL课程内容;在开发软件方面以Xilinx公司的ISE软件作为平台,并针对硬件仿真,重点是让学生学会并熟练掌握用ISE软件进行数字系统仿真的基本过程和操作;在实践训练方面,精心设计了课堂练习/课后习题和配套实验,提高学生实践动手能力,从而达到良好的教学效果。

3 多层次式教学模式

《VHDL语言及硬件逻辑电路设计》课程是一门工程实践性很强的课程,我们提出以实践训练为主,边学边练的硬件逻辑设计教学模式,重点加大对学生实践能力、解决实际问题能力及团体合作精神等综合素质的培养,使“数字逻辑电路设计实践教学”在本科培养中发挥更重要的作用。在教学过程中,提出多层次的实践教学模式,通过大量的多层次实例教学让学生主动建构知识、增长技能、发展能力。

我们将《VHDL语言及硬件逻辑电路设计》课程的实践教学分为三个层次。

第一层次是课堂实验教学,这一阶段主要培养的是学生的主动学习能力,通过课堂实验练习使学生掌握和熟练使用开发工具,具备基本的硬件编程能力。课堂实验教学是针对教师在讲授理论内容后,对应设计相应知识内容的实验项目,并编写课堂实验指导书。在理论课部分内容方面,首先讲解VHDL语言的基本单元,如VHDL语言设计的基本单元、构成、子结构描述(元件说明,元件安装)等,在VHDL语言的数据类型方面,主要讲解VHDL语言的客体及分类、整数类型和数组类型,表达式与运算符;其次,介绍VHDL语言主要描述语句,如顺序描述语句和并发描述语句;最后介绍基本逻辑电路的设计,如组合逻辑电路的设计,时序电路的设计,存储器和有限状态机设计等。那么针对课程的理论内容,设计的实验主要有:(1)ISE工具的使用;(2)编码器和译码器等组合逻辑电路的设计;(3)有限状态机和计数器等时序电路的设计;(4)RAM和FIFO等存储器的设计。通过这些基础知识点的实验练习,能让学生较好的熟悉VHDL语言的基础知识和语句的基本应用,从而较好的掌握VHDL语言中的关键内容,加深了对VHDL语言知识点的感性认识和全面掌握,达到可以用VHDL语言设计数字逻辑电路和数字应用系统。在课堂上通过对算法实例的程序执行仿真模拟。

第二个层次是综合性设计实验,这一层次的实验要求学生已经掌握基本的VHDL语言知识并能综合地运用所学内容,主要培养学生动手实践能力、解决实际问题能力及团队合作能力。综合性设计实验以硬件开发板实验为主,主要包括跑马灯、VGA显示、波形发生器、通用异步收发器、SRAM接口设计等题目。在实验中,教师要求学生每4人为一组进行实践练习。在实验过程中,要求学生能上机编写代码并调试VHDL程序,每组学生对实验过程和实验结果进行分析和总结,并提交硬件实验报告。在实验课中,教师根据各个小组提交的实验报告,首先安排各小组进行实践动手经验交流,然后选择一些优秀小组中的代表上台做实验心得汇报,并现场进行问题分析和技术总结,加深了对VHDL语言中知识点的感性认识和全面掌握。通过这些活动,不但让学生熟悉了硬件设计的开发环境,提高了硬件设计编程技巧,而且还能激励学生主动学习VHDL语言的兴趣,提高学生的分析和解决实际问题的能力,并培养学生团体合作能力。

第三个层次是课程设计实验,这一阶段要求学生独立完成硬件工程课题的设计与实现,在强调学生独立设计实现的同时,更加注重学生综合能力的培养。课程设计题目采取开放式选题,可由教师提供背景明确和启发性强的题目,也可以由学生自主选择题目并提交相应的课程题目设计目标、任务和方法,经教师审核批准后作为课程设计题目。另外学生也可以根据个人兴趣选择不同类型的课程设计题目后,由学生自行拟定实验方案,查阅文献资料和编写VHDL程序,自主解决实验问题,并对对实验结果进行分析总结,撰写课程设计研究报告。通过这些课程设计实验设计,在培养学生自主学习及主动学习的同时,也锻炼学生的动手能力和表达能力。

4 结语

VHDL语言及数字逻辑设计课程是一门工程实践性很强的课程,通过有多层次地实施实践教学,充分发挥实践教学的优势,激发了学生的学习热情,强化学生的实践动手能力和创新能力,并培养学生独立思考、自主创新的学习习惯,取得了较好的教学效果。该实践教学体系遵循人才培养的客观规律,将多层次实验从简单到复杂、从基础实验练习到综合创新实验,贯穿于整个VHDL语言及数字逻辑设计课程学习过程,使学生在循序渐进的实践教学过程中成长。

参考文献

[1] 侯伯亨,顾新.VHDL硬件描述语言与数字逻辑电路设计[M].西安:西安电子科技大学出版社,2009.

[2] 谭会生,张昌凡,EDA技术及应用[M].西安:西安电子科技大学出版社,2011.

[3] 曾志廉,何清平,通用FPGA试验系统的设计与应用[J].计算机信息,2007(11):234-235.

[4] 叶波,赵倩.“集成电路系统设计”课程教学改革探讨[J].中国电力教育,2010(16):109-110.

第3篇

【关键词】数字频率计;VHDL;状态机

1.引言

数字频率计是通讯设备、计算机、电子产品等生产领域不可缺少的测量仪器。由于硬件设计的器件增加,使设计更加复杂,可靠性变差,延迟增加,测量误差变大。通过使用EDA技术对系统功能进行描述,运用VHDL语言,使系统简化,提高整体的性能和可靠性。采用VHDL编程设计的数字频率计,除了被测信号的整形部分,键输入和数码显示以外,其他都在一片FPGA上实现,从而让整个系统非常精简,让其具有灵活的现场更改性,在不改变硬件电路的基础上,进一步改进提高系统的性能,使数字频率计具有高速,精确度高,可靠性强,抗干扰等优点,为数字系统进一步的集成创造了条件[1]。

2.数字频率计的工作原理

频率测量方法中,常用的有直接测频法、倍频法和等精度测频法[2]。其中直接测频法是依据频率的含义把被测频率信号加到闸门的输入端,只有在闸门开通时间T(以ls计)内,被测(计数)的脉冲送到十进制计数器进行计数。直接测频法比其他两个方案更加简单方便可行,直接测频法虽然在低频段测量时误差较大,但在低频段我们可以采用直接测周法加测量,这样就可以提高测量精度了。直接周期测量法是用被测周期信号直接控制计数门控电路,使主门开放时间等于Tx,时标为Ts的脉冲在主门开放时间进入计数器。设在Tx期间计数值为N,可以根据Tx=N×Ts来算得被测信号周期。因此本文采用低频测周,高频测频的方法来提高精度,减小误差[3]。

3.主要功能模块的实现

该系统设计的控制器是由状态机实现,通过在不同测量档位,选择合理的时基信号频率降低误差,确定各状态转移条件和状态名,采用低频档位测周,高频档位测频的方法。20MHz晶振送入分频器,分出各档时基信号和其它模块所需的触发信号,分频器将各档时基信号传给状态机,同时待测信号进入状态机,状念机进行状态转换,将量程溢出信号和状态显示信号表征在发光二极管上。如图表1所示。

表1 频率量程状态

3.1 状态机模块

首先对系统复位,如果此时状态机的初始状态为Fl00k,若超量程信号送入状态机,则状态转换到FlM,如果仍有超量程信号则状态转换到F10M,如果仍有超量程信号则状态转换到F100M,如果还有超量程信号则状态转换到Overflow H产生高溢出信号;若欠量程信号送人状态机,则状态转换到P1ms,如果有超量程信号则状态转换到P10ms,如果仍有超量程信号则状态转换到P100ms,如果仍有超量程信号则状态转换到P1s,如果还有超量程则状态转换到OverflowL产生低溢出信号[4]。如图1所示。

3.2 计数器模块

在“待计数信号”的两个时钟周期内完成计数与控制信号(Over与Low)的传输,在量程合适的情况下,还将计数值输出。这两个时钟周期内,第1个时钟周期完成计数,第2个时钟周期完成控制信号的传输与计数值输出。这样做的好处是稳定,将计数与控制信号传输分开进行。避免了一些可能遇到的“时钟跳变”。但这种做法的缺点也很明显,那就是在测周期模式下,假如待测信号是1Hz的,那么系统可能需要2s(两个时钟周期)才能显示正确的数值。

3.3 十分频模块

由于1kHz~10kHz的信号无论用测频法还是测周期法都是不可行的,可以采用预分频的方法[5],将1kHz~10kHz的信号十分频,然后用测周期法测出周期,再计算出频率。

3.4 同步整形电路模块

通过同步整形电路处理外部的异步信号,超量程和欠量程。源程序如下:

library ieee;

use ieee.std_logic_1164.all;

entity SignalLatch is

4.系统的功能仿真和验证分析

据状态转换图,这里将状态机的程序分成两个进程,进程1完成状态转移过程,进程2控制各状态下的输出值如下图2所示,timecounter=clocktested为50KHz。为了方便观察,将数值改小,计数值大于100且小于或等于1000时输出!将clock1设为50K,clock2计数时钟设为5M,得出仿真如图3所示Result为100符合计数要求。如图4所示给clk1一个5KHz的频率,经过十分频后clk2输出0.5KHz,clk1的周期是0.2ms,经过十分频后是2ms.。同步整形电路仿真如图5所示。

由以上模块进行仿真得出了频率的测量。如图6、7、8所示。

图8

5.结论

采用此方法设计的数字频率计占用FPGA芯片资源较少,成本较低,减少了电路的尺寸,具有一定的参考实用价值。利用Quartus II平台进行了仿真和硬件测试,基本达到了设计的要求。系统具有较好可靠性,灵活性。

参考文献

[1]王本有,孟坚,苏守宝.一种基于FPGA的数字IC设计[J].电子技术.

[2]潘松,黄继业.EDA技术实用教程[M].北京:科学出版社,2010.

[3]黄任.AVR单片机与CPLD/FPGA综合应用入门[M].北京:北京航空航天大学出版社,2004.

[4]韩威,徐火生,方湘艳.EDA与集成电路工程设计[M].北京:科学出版社,2009.

[5]候伯亨,顾新.VHDL硬件描述语言与数字逻辑电路设计[M].西安电子科技大学出版社,2004:6.

第4篇

【关键词】EDA; VHDL;彩灯控制器;MAX+plusⅡ

0 引言

电子设计自动化(EDA)技术就是依赖功能强大的计算机,在EDA工具软件平台上,对以硬件描述语言VHDL为系统逻辑描述手段完成的设计文件,自动地完成逻辑优化和仿真测试,直至实现既定的电子线路系统功能[1]。由美国国防部主持开发的VHDL语言是一种可用于数字电路描述和综合的高级语言[2],如果结合VHDL语言仿真电路进行仿真和验证,可以尽早发现电路设计中的错误,从而缩短开发的周期,降低开发成本,提高系统的设计效率。

VHDL语言是目前应用最广泛的硬件描述语言之一。它是一种人和机器都能理解的高级语言,与具体的硬件电路没有关系,具有较高的易读性。它支持层次化结构设计,从系统整体要求出发,从上至下逐层设计直到最终生成器件,完成电路系统。一个完整的VHDL程序包括有库、包集合、实体、结构体,另外还有配置块[3]。它的最大特点是将一项工程设计分成了内部和外部,工程可以是目标系统、电路模块甚至一个元件。其中外部是系统的端口;内部则是不可视部分,其功能用程序设计好后可直接调用。

1 彩灯控制器的功能分析与设计

彩灯在生活中经常能够看到,并且给我们的生活增添了许多色彩。尤其在节假日,不仅闪烁着美丽耀眼的光芒,还能够烘托出节日的气氛。本文采用EDA技术,使用VHDL语言实现彩灯的控制。

在美国ALTERA公司的MAX+PLUSⅡ平台上,使用VHDL硬件描述语言实现的彩灯控制电路的设计如下:在电路中以1代表灯亮,以0代表灯灭,由0、1按不同的规律组合代表不同的灯光图案,同时使其选择不同的频率,从而实现多种图案多种频率的花样功能显示。彩灯控制器的元件,Y[15..0]是彩灯控制器的输出端。reset是彩灯控制器的复位信号输入端,当复位信号reset=‘1’时,彩灯状态会和s0相同;否则,当有时钟信号来临时,会根据程序设置显示出彩灯的亮灭状态。en是彩灯循环方式控制信号输入端,当en=‘0’时,彩灯自左边第一个灯和中间分别向右边循环闪烁;当en=‘1’时,彩灯自右边第一个灯和中间分别向左边循环闪烁;否则,彩灯会呈现熄灭状态。

2 彩灯控制器VHDL语言设计

3 仿真结果

利用MAXPLLUS2的原理图输入,以原理图的形式形成最后的十六路彩灯显示系统器件并且进行仿真。图1分别是彩灯自右边第一个灯和中间分别向左边循环闪烁,彩灯自左边第一个灯和中间分别向右边循环闪烁的仿真时序图(如图1)。

4 结束语

通过上述实验可知,本设计是可行的。仿真正确后通过下载电缆下载到CPLD/FPGA芯片上即可。芯片可以重复使用无数次。只要拥有计算机,配上相应的软件就可以随心所欲的改变彩灯的方式,而且不受时间的限制。

【参考文献】

[1]赵刚,编.EDA技术简明教程[M].成都:四川大学出版社,2004.

第5篇

关键词:数字逻辑;实验教学;实验课题设计;教学改革;VHDL

自20世纪90年代以来,随着电子科学技术的进步,大规模集成电路PLD芯片逐渐取代了数字系统中传统的分离元件和小规模集成电路。同时,数字系统和计算机系统的设计方法向“硬件设计软件化”转变。用硬件设计语言设计数字系统和计算机系统的技术日益成熟且越来越广泛地得到应用。虽然,高校数字逻辑课程的教学内容也有一些相应的调整,但是实验教学的改革往往明显落后。

数字逻辑是计算机科学与技术专业重要的基础课之一,也是学生感觉学习比较困难的课程之一。我校计算机专业的数字逻辑课程的实验教学过去一直是在实验箱上插接集成电路芯片和连接线的方式,实验内容以验证性实验为主,实验效果很不理想,实验教学与理论教学的衔接不好,没有真正起到“通过实验加深对理论知识的理解”和“理论与实际相结合”的作用。学生虽然在课堂上学习了VHDL编程并做了一些习题,但是并不知道究竟什么样的程序才是正确的,而要想知道VHDL程序是否正确的唯一方法是编译和仿真。为了提高数字逻辑课程的教学效果,并且与新增加的VHDL语言教学内容相呼应,笔者进行了数字逻辑课程的实验教学改革探索。通过“做中学”[1],使学生真正掌握用VHDL进行逻辑设计的方法。放弃在实验箱上插接集成电路芯片和连接线的方式,改变为在Quartus软件平台上用VHDL语言编程和仿真实验。从以验证性实验为主转变为以设计性实验为主,不仅使学生学到了最新的技术,而且为后继课程计算机组成原理的进一步教学改革奠定了基础。

1实验课题的设计

根据教学计划,本课程的实验为12学时,安排6个实验。除第1个实验是熟悉Quartus系统的使用外,其余5个实验都是设计性实验。

1.1设计思想

实验课题的设计是开展设计性实验教学必须妥善处理的关键问题之一。实验课题应该有合适的难度,使得大部分学生在现有基础上通过自己的分析和努力能够做出设计(不一定是完全正确的设计)。实验课题应该在本课程教学的重要知识点范围内,通过实验可以使学生更好地掌握相关知识点,实现理论教学与实验教学相辅相成。实验课题应该在书本或网络等其他信息源上没有现成的解答,学生必须自己进行分析设计才能得到解答。

在高度网络化和信息化的今天,各种教材、参考书和网络上已经有很多的VHDL语言程序的实例,为了保证学生是真正做设计,笔者在设计实验课题时也广泛查找了资料。有几个设想的课题就因为发现有相同的VHDL语言程序实例存在而被否定。最后确定的5个实验课题,到目前为止还没有发现有相同的VHDL语言程序实例。这5个实验课题包括2个组合逻辑设计实验课题和3个时序逻辑设计实验课题。实验课题的难度和复杂程度是逐渐增加的。除了基本实验外,还为少数学有余力的学生设计了选做题目。

1.2实验课题

1) 实验课题一。

设计一个代码转换逻辑电路。把7位的ASCII码转换成7段字符显示代码。能显示数字0~9,字母A、b、C、d、E、F、H、L、o、P、U、Γ和一些符号(-、_、=、┫、┣、、)等。用VHDL语言编程并仿真。

2) 实验课题二。

设计一个多功能的运算器,有控制信号M、S2、S1、S0。当M=1,在S2、S1、S0的控制下能完成两个1位二进制数A、B的以下算术运算:A加B,A加1,A加B和低位来的进位,B加1,A加 ,A加0,A加A,A加 加1。当M=0,作逻辑运算。在S2、S1、S0的控制下能完成两个1位二进制数A、B的以下逻辑运算:A+B,A•B, , , , , , ,等。用VHDL语言编程并仿真。

3) 实验课题三。

设计一个自动售饮料机的控制逻辑电路。该机器有一个投币口,每次只能投入1枚1元或5角的硬币。当投入了1元5角的硬币,机器自动给出1杯饮料。当投入了2元的硬币,机器在自动给出1杯饮料时,还找回1枚5角的硬币。

确定输入/输出变量、电路的状态并化简,做出状态转换图、状态转换表。在完成以上逻辑设计后,用VHDL语言编程并仿真。

4) 实验课题四。

用74HC163设计一个十九进制计数器。用VHDL层次结构设计方法设计程序并仿真,底层器件是74HC163。

完成以上题目后,还可以选做题:用74HC163设计一个余3码计数器。用VHDL层次结构设计方法设计程序并仿真,底层器件是74HC163。

5) 实验课题五。

实验课题五有两个题目,学生可以任选一个。

题目一:设计一个可控计数器,当控制信号S=0时,是五进制计数器,当控制信号S=1时,是十五进制计数器。设计出逻辑图。分别用两种不同的方法设计(行为描述,结构描述),用VHDL语言编程并仿真。

题目二:设计一个数字钟电路,要求能用7段数码管显示从0时0分0秒到23时59分59秒之间的所有时间。做出逻辑图。用VHDL语言编程并仿真。

2教学效果分析

实验课题一的目的是强化译码器、7段字符显示代码和ASCII码等知识点。学生可以参考书上的BCD码-7段字符显示译码器的VHDL程序做这个设计,但是要实现那些特殊符号的显示还是需要动脑筋的。实验结果显示,学生基本上都能做出数字和字母的显示代码设计,但是极少有能做出那些特殊符号的显示代码设计的。

实验课题二的目的是强化加法器、全加器、算术运算、进位和逻辑运算等知识点,并且考虑到与后继课程计算机组成原理的ALU等知识点教学的衔接。学生做设计时可以参考1位全加器的VHDL程序。很多学生在做实验之前认为这个题目很简单,只要用VHDL语言的算术运算符就可以了。开始做实验才发现根本不是那样,必须先推导出每个运算功能的逻辑表达式才能编程,而相当多的学生忘记了算术运算还有进位的逻辑表达式。这个实验确实达到了强化上述知识点的目的。

实验课题三的目的是强化状态机和Mealy型时序逻辑电路设计等知识点。学生做设计时可以参考状态机的VHDL程序。经过这个实验,大部分学生真正懂得了什么是状态机,时序逻辑电路是在时钟信号的作用下发生状态转变的,另外还有怎样确定有哪些状态和做状态化简。

实验课题四的目的是强化计数器、用集成计数器实现任意进制计数器和Moore型时序逻辑电路设计等知识点,也是学生第一次用VHDL结构描述的方法做设计。学生做设计时可以利用书上的74HC163的VHDL程序例子。通过这个实验学生进一步理解了触发器和计数器,掌握了用集成计数器实现任意进制计数器的方法和用VHDL结构描述做逻辑电路设计的基本方法。选做题是为少数学习好、能力强的学生准备的,使这部分学生有机会得到更多的训练和提高。选做题还可以使学生掌握余3码的概念,确实也有很少的几个学生完成了选做题。

实验课题二和实验课题三都是用行为描述的方法进行逻辑电路设计,比较容易掌握,实验成功率较高,而实验课题四要求用结构描述的方法做逻辑电路设计。在实验中间发现,相当多学生并没有理解结构描述的概念,也不知道应该怎样做。因此,实验课题五继续强化用结构描述的方法做逻辑电路设计。

实验课题五题目中的第一个,目的是巩固用集成计数器实现任意进制计数器和Mealy型时序逻辑电路设计等知识点。同时,也使学生进一步掌握用行为描述和结构描述进行设计的方法。虽然这个题目相对第二个题目要简单一些,但是由于要求分别用行为描述和结构描述两种方法进行设计,所以总的工作量比实验课题四要多。这两个题目中的第2个不仅难度更大、更复杂,而且其设计还要考虑如何仿真的问题,是一个有挑战性的题目。然而,选择这个题目的学生却出乎意料得多,而且有若干种不同的设计思想,既有用结构描述的也有用行为描述的。虽然在2个小时的时间内,几乎没有学生完全正确地完成这个高难度实验的设计和仿真,但是有个别学生在以后的几个星期里仍然继续探讨并最终正确地完成了这个实验。像数字钟这样的复杂实验,在过去想要用中小规模集成电路在实验箱上插接连线的方式完成是不可想象的,但是现在用Quartus系统上设计和仿真的方式却是可以完成的。

设计性实验比验证性实验的难度有明显提高,学生也要花更多的时间做预习、设计和写实验报告。在学习数字逻辑之前的各课程(物理、电路、模拟电子)实验都是验证性实验,大部分学生已经养成不做实验预习的习惯。在做第一个实验(熟悉Quartus系统)时就发现很多学生基本上是进了实验室才开始看实验指导。结果是两个小时过去了,一部分学生并没有掌握VHDL程序调试和仿真的基本方法,个别学生输入的源程序甚至连编译都没有通过。针对这个问题,我们采取了要求学生提前做实验预习,写出实验设计和程序才允许进实验室做实验的措施,并且在逐位点名时逐个检查实验预习。实验教学改革也在一定程度上调动了学生的积极性。

3结语

用VHDL语言设计组合逻辑电路和时序逻辑电路的方法与传统的用逻辑代数和逻辑图设计的方法有很大不同,特别是行为描述的方法很容易掌握。用软件工具对所做设计进行仿真以检验设计的正确性比在面包板上插接、连线、调试要方便容易,避免了接触不良造成的故障和连线错误损坏器件等问题,实验成功率高、消耗低。学生不仅要做逻辑设计,还要做仿真输入波形设计。仿真输出波形直观地表现了逻辑功能的正确与否。部分学生自己有计算机,可以提前做出设计并编程,在进入实验室后能够在比较短的时间里完成实验;也有一些学生由于设计错误,在实验室没有完成实验,是回去以后继续用自己的计算机改正程序、完成仿真的。

从实际教学效果看,上述实验课题的设计是成功的。大部分学生通过设计和实验都有不同程度的提高,基本上理解了有关的知识点,掌握了VHDL程序设计、调试和仿真方法。从后来的调查问卷的结果看,大部分学生认为数字逻辑实验“不是很难”(4个选项分别是太难、不是很难、很简单、不能理解),只有少数学生不喜欢这种设计性实验。

数字逻辑课程的实验教学改革探索取得了初步成功,今后还将继续改进,也希望与其他学校的教师交流教学改革的经验和教训,共同提高。

参考文献:

[1] 黎忠文,向兆山.“做中学”模式在计算机教学中的探索[J]. 计算机教育,2006(10):30-32.

Exploration of Experiment Teaching of Digital Logic

SHENG Jian-lun

(School of Computer, Qingdao Technological University, Qingdao 266033, China)

第6篇

【关键词】现代EDA技术教学内容改革

【中图分类号】G【文献标识码】A

【文章编号】0450-9889(2012)05C-Otqt3--OA

现代EDA技术是一门相对前沿和复杂的课程,该课程要求学生具备一定的嵌入式技术知识,而且课程的内容对学生的理解能力和知识的综合应用能力提出了较高的要求。在传统的现代EDA技术课程授课过程中,由于对课程的教学任务和目标不是很明确,因此在授课过程中往往是强调该课程的一些基本概念和基本原理的介绍。然而,从以往的教学经验进行统计分析发现,仅仅对学生进行一些相关概念和原理的介绍,远不能满足当前社会企业对EDA技术应用的需求。这就对现代EDA技术的教学内容及教学组织形式提出了新的要求。为此,本文将在现有的现代EDA技术课程教学内容及教学实施方案的基础上,对当前教学过程中存在的问题和不足进行深入分析,结合当前现代电子设计企业对EDA技术应用的需求,制定符合高职嵌入式专业学生基础条件的教学内容及组织形式,以提高高职院校学生掌握和应用现代EDA技术设计关键技术的能力。

一、传统的教学内容分析

现代EDA技术课程经过近年来的实践,已经形成了一套相对完整的教学内容及教学方法,是在传统的教学过程中现代EDA技术课程的教学内容及课时安排。在该表中同时也给出了对不同教学内容的教学要求。通过对传统的教学内容进行分析可以发现,在传统的教学内容中,占整个教学学时最多的一部分是VHDL程序开发部分。在实际的教学过程中,VHDL语言的教学内容分两个部分来开展,前半部分是VHDL语言的基础部分,主要介绍VHDL的常用语句、形式。在

在课程的教学内容中还包括FPGA开发简介、ISE开发环境介绍,以及电路仿真配置下载。从整个教学内容来看,传统的现代EDA技术课程中介绍的内容非常多,涉及的面也很广,在实际的教学过程中,学生也普遍反映该课程的信息量非常大,但是,现代EDA技术课程在实际教学后一阶段是VHDL程序开发的高级阶段,主要给学生介绍VHDL环境下的建模方法,以比较典型常用的门级建模、行为级建模、结构建模等三种方式分别阐述VHDL程序的开发方法和开发过程,这两部分的内容都开设了一定的实验教学时间。

过程中所取得的教学效果却并不是很理想。分析其原因,在于教学内容的课程设置上存在比较大的问题。虽然表l所给出的教学内容及课时安排,单纯从每一个章节来看似乎都是很有必要的,而且课时安排也很合理,但是纵观整个教学内容就可以发现,传统的教学过程中对教学内容更多的偏重于现代EDA技术中的相关核心知识的介绍,主要是给学生灌输EDA设计的一些基本概念和基本方法,在各个章节的知识内容中并没有形成一个有机的整体,更没有将所学习的这些知识与具体的实践应用结合起来,因此学生在学习过程中,越到课程后期越会发现学习非常枯燥,而且直到整个课程完成之后,也不能够体会EDA技术的设计理念,更不能够将所学习的知识与EDA的工程应相结合起来,造成了学生的学习效果与行业应用需求想脱离的现状。因此,对该课程的教学内容进行研究和分析之后需要针对所存在的问题,结合当前电子设计及嵌入式行业对EDA技术的实际应用需求情况,合理地对该课程的内容进行调整和优化,将整个教学的内容组织成一个整体,并把教学内容与提升学生实践应用能力紧密结合起来。

二、改革后的教学内容组成

针对目前在开展现代EDA技术课程教学过程中所存在的教学内容与提升学生能力不一致的现状,本文经过深入的调研分析,结合高职院校学生的基础条件以及今后就业过程中的岗位需求,对现代EDA技术课程的教学内容进行了彻底的改革与优化。整个改革过程中,所遵循的原则有:

第一,紧贴任职岗位需求,优化课程教学内容,提高内容的针对性。在传统的教学过程中,有相当一部分的教学时间是在给学生灌输EDA技术的相关概念和常识,而这些概念和常识在学生今后的任职岗位应用中,未必都会用得到。而对于那些不常用的概念和知识是完全没有必要在课堂上为学生反复介绍的。而学生在今后任职岗位中可能会用到的一些常用方法和技巧,以及一些工具软件的使用方法则应该在课程的教学内容中予以体现。

第二,增加实验教学的比重,提升学生动手实践的能力。在传统的现代EDA技术教学内容过程中,教学时间是50学时,其中实验占14学时,实验所占的学时比重偏少不足以提升学生的实践动手能力。因此,在对教学内容改革过程中,应该加大实验教学内容的比重。

第三,引入EDA设计的典型案例,加强理论知识与实际工程之间的结合程度,既让学生充分认识到所学习的知识在今后任职岗位中的具体应用情况,同时也提高了学生所学习知识与任职需求结合的紧密程度。在传统教学过程中,所介绍的内容都是教科书式的独立知识点介绍,没有将这些知识点与一个完整的EDA设计案例相结合起来。因此在对教学内容改革过程中,需要引入一系列的经典教学案。

首先,在开展EDA教学的基础部分,花了10个学时给学生介绍EDA技术的发展概论、VHDL语言的基础知识,以及ISE实验开发环境。相对传统的教学过程,变化最为突出的是VHDL语言基础部分的课时量大幅度减少,而且在VHDL语言设计部分没有安排专门的实验教学。这样设计的目的是尽可能减少学生对于基础知识的学习时间,也许学生通过4个学时的VHDL语言基础的学习不能够完全掌握VHDL语言的开发方法,但是后面还将会给学生介绍一系列EDA的开发例,让学生通过各种实际的教学案例,去体会EDA技术的应用方法和应用价值,提高学生学习EDA技术的兴趣和动力。

第7篇

(重庆师范大学涉外商贸学院,中国 重庆 401520)

【摘 要】随着计算机技术的飞速发展,EDA技术也有了巨大的发展,被广泛应用于电子、通信、医学、军事等各个领域。本文介绍了基于VHDL硬件描述语言设计彩灯控制器的思维与技巧,在MAX+plusⅡ开发工具软件中进行源文件的编辑、逻辑综合、适配、仿真及编程下载。仿真和验证的结果表明,该设计方法切实可行,该判决器具有一定的实际应用性。

关键词 EDA; VHDL;彩灯控制器;MAX+plusⅡ

基金项目:重庆师范大学涉外商贸学院校级科研项目(KY2014008)。

作者简介:周婷(1988—),重庆合川人,硕士研究生。

0 引言

电子设计自动化(EDA)技术就是依赖功能强大的计算机,在EDA工具软件平台上,对以硬件描述语言VHDL为系统逻辑描述手段完成的设计文件,自动地完成逻辑优化和仿真测试,直至实现既定的电子线路系统功能[1]。由美国国防部主持开发的VHDL语言是一种可用于数字电路描述和综合的高级语言[2],如果结合VHDL语言仿真电路进行仿真和验证,可以尽早发现电路设计中的错误,从而缩短开发的周期,降低开发成本,提高系统的设计效率。

VHDL语言是目前应用最广泛的硬件描述语言之一。它是一种人和机器都能理解的高级语言,与具体的硬件电路没有关系,具有较高的易读性。它支持层次化结构设计,从系统整体要求出发,从上至下逐层设计直到最终生成器件,完成电路系统。一个完整的VHDL程序包括有库、包集合、实体、结构体,另外还有配置块[3]。它的最大特点是将一项工程设计分成了内部和外部,工程可以是目标系统、电路模块甚至一个元件。其中外部是系统的端口;内部则是不可视部分,其功能用程序设计好后可直接调用。

1 彩灯控制器的功能分析与设计

彩灯在生活中经常能够看到,并且给我们的生活增添了许多色彩。尤其在节假日,不仅闪烁着美丽耀眼的光芒,还能够烘托出节日的气氛。本文采用EDA技术,使用VHDL语言实现彩灯的控制。

在美国ALTERA公司的MAX+PLUSⅡ平台上,使用VHDL硬件描述语言实现的彩灯控制电路的设计如下:在电路中以1代表灯亮,以0代表灯灭,由0、1按不同的规律组合代表不同的灯光图案,同时使其选择不同的频率,从而实现多种图案多种频率的花样功能显示。彩灯控制器的元件,Y[15..0]是彩灯控制器的输出端。reset是彩灯控制器的复位信号输入端,当复位信号reset=‘1’时,彩灯状态会和s0相同;否则,当有时钟信号来临时,会根据程序设置显示出彩灯的亮灭状态。en是彩灯循环方式控制信号输入端,当en=‘0’时,彩灯自左边第一个灯和中间分别向右边循环闪烁;当en=‘1’时,彩灯自右边第一个灯和中间分别向左边循环闪烁;否则,彩灯会呈现熄灭状态。

2 彩灯控制器VHDL语言设计

十六路彩灯显示系统控制器的主要VHDL语言程序代码如下所示:

library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_arith.all;

use ieee.std_logic_unsigned.all;

entity colorlamp is

port(clk,reset,en:in std_logic;

y:out std_logic_vector(15 downto 0));

end;

architecture beha of colorlamp is

type states is (s0,s1,s2,s3,s4,s5,s6,s7);

signal st:states;

signal yn:std_logic_vector(15 downto 0);

begin

one:process(clk,reset)

begin

if reset=&acute;1&acute; then st <= s0;

elsif clk&acute;event and clk=&acute;1&acute; then

case st is

when s0 => st <= s1;

when s1 => st <= s2;

when s2 => st <= s3;

when s3 => st <= s4;

when s4 => st <= s5;

when s5 => st <= s6;

when s6 => st <= s7;

when s7 => st <= s0;

when others => st <= s0;

end case;

end if;

end process one;

two:process(st,en,clk)

begin

case st is

when s0 =>

if en=&acute;0&acute; then yn <= "1000000010000000";

elsif en=&acute;1&acute; then yn <= "1000000010000000";

else yn <= "0000000000000000";

end if;

when s1 =>

if en=&acute;0&acute; then yn <= "0100000001000000";

elsif en=&acute;1&acute; then yn <= "0000000100000001";

else yn<= "0000000000000000";

end if;

when s2 =>

if en=&acute;0&acute; then yn <= "0010000000100000";

elsif en=&acute;1&acute; then yn <= "0000001000000010";

else yn <= "0000000000000000";

end if;

when s3 =>

if en=&acute;0&acute; then yn <= "0001000000010000";

elsif en=&acute;1&acute; then yn<= "0000010000000100";

else yn<= "0000000000000000";

end if;

when s4 =>

if en=&acute;0&acute; then yn<= "0000100000001000";

elsif en=&acute;1&acute; then yn <="0000100000001000";

else yn <= "0000000000000000";

end if;

when s5 =>

if en=&acute;0&acute; then yn <= "0000010000000100";

elsif en=&acute;1&acute; then yn<= "0001000000010000";

else yn<= "0000000000000000";

end if;

when s6 =>

if en=&acute;0&acute; then yn <= "0000001000000010";

elsif en=&acute;1&acute; then yn<="0010000000100000";

else yn <= "0000000000000000";

end if;

when s7 =>

if en=&acute;0&acute; then yn <= "0000000100000001";

elsif en=&acute;1&acute; then yn<="0100000001000000";

else yn <= "0000000000000000";

end if;

when others => yn <= "0000000000000000";

end case ;

if clk&acute;event and clk=&acute;1&acute; then y<= yn ;

end if;

end process two;

end beha;

3 仿真结果

利用MAXPLLUS2的原理图输入,以原理图的形式形成最后的十六路彩灯显示系统器件并且进行仿真。图1分别是彩灯自右边第一个灯和中间分别向左边循环闪烁,彩灯自左边第一个灯和中间分别向右边循环闪烁的仿真时序图(如图1)。

4 结束语

通过上述实验可知,本设计是可行的。仿真正确后通过下载电缆下载到CPLD/FPGA芯片上即可。芯片可以重复使用无数次。只要拥有计算机,配上相应的软件就可以随心所欲的改变彩灯的方式,而且不受时间的限制。

参考文献

[1]赵刚,编.EDA技术简明教程[M].成都:四川大学出版社,2004.

[2]宋文好,等.数字电路的VHDL综合技术[J].现代计算机,2001(111):22-25.

第8篇

关键词: 硬件描述语言 verilog HDL VHDL

1.引言

数字电子技术是电气信息类专业一门重要的技术基础课程,既具有一定的理论性,同时作为一门技术课程又有相当强的实践性。因此,我们必须为理论的讲述配置一定的实验项目。目前实验项目的组织有两种途径:一是采用原来传统的小规模(SSI)或中规模集成电路(MSI)为单元构建实验项目;二是以大规模(LSI)可编程CPLD/FPGA芯片为平台,利用专门的硬件描述语言来实现。

2.现状与需求

目前,在许多本科院校的数字电子技术课程实验教学和数字电路的设计中,仍采用传统的小规模(SSI)或中规模集成电路(MSI)为单元来构建和设计。这种思路已经不能适应教学和行业发展趋势的需要。它主要有如下几个方面的原因:一是实验室必须为每一个实验项目独立地准备实验器材,而且要保证实验元件的正确性和可靠性,这是一件很费时费力的工作,同时一旦有学生操作失误,芯片就有可能烧坏,从而浪费资源;二是目前的大学生电子设计大赛所设计的数字系统设计和一些接口电路已经涉及和要求掌握在大规模和超大规模可编程芯片基础上设计复杂的数字电路;三是目前随着微电子技术和计算机技术的飞速发展,工程中已经广泛采用以CPLD/FPGA为基础设计数字集成电路,用软件的方法设计硬件电路已经是行业的需要。

为此,有必要在课堂教学中引入硬件描述语言用以设计数字集成电路,并设置相应的实验项目以掌握硬件描述语言和熟悉相关开发工具。

3.硬件描述语言在数字电路设计中的应用

3.1硬件描述语言简介[1]

一般的硬件描述语言可以在三个层面上描述电路,其层次由低到高依次为门电路级、RTL级和行为级。任何一种硬件描述语言都要转换成门电路级才能被布线器所接受。综合的方向是由高到底:行为级RTL级门电路级。

3.2硬件描述语言分类及主要差异

目前主流的描述语言有Verilog HDL和VHDL两种,各有特点和优势。Verilog HDL更适合RTL和门电路的描述,是一种较为低级的语言。其综合过程只要经过RTL级门电路级,故较为容易控制电路资源,常用在专业的集成电路设计上。而VHDL语言则更适合行为级和RTL级的描述,因此其综合过程通常要经过行为级RTL级门电路级的转换。[2]

同时,Verilog HDL语言具有C语言的描述风格,是一种较为容易掌握的语言。VHDL语言入门较难,但熟悉后设计效率比Verilog HDL要高。

3.3硬件描述语言在数字电路设计中的应用举例

译码器是数字电路中应用最为广泛的中规模集成电路,常用于设计接口电路和扩展I/O口。下面是用VHDL语言来描述一个3―8译码器的例子。[3]

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;―IEEE库说明

ENTITY decoder IS

PORT(A:IN STD_LOGIC_VECTOR(2 DOWNTO 0);―实体说明,输入三位地址,高电平有效

S:IN STD_LOGIC;―使能信号,高电平有效

Y:OUT STD_LOGIC_VECTOR(7 DOWNTO 0));―输出八个译码信号,高电平有效

END decoder;

ARCHITECTURE arch OF decoder IS―结构体描述

SIGNAL SEL:STD_LOGIC_VECTOR(3 DOWNTO 0);―敏感列表

BEGIN

SEL(0)<=S;

SEL(1)<=A(0);

SEL(2)<=A(1);

SEL(3)<=A(2);

WITH SEL SELECT

Y<="00000001"WHEN"0001",―功能描述

"00000010"WHEN"0011",

"00000100"WHEN"0101",

"00001000"WHEN"0111",

"00010000"WHEN"1001",

"00100000"WHEN"1011",

"01000000"WHEN"1101",

"10000000"WHEN"1111",

"11111111"WHEN ORTHERS,

END arch;

译码器种类繁多,输入输出电平有效值要求高低不同,在此我们只需稍改功能描述中的取值即可,非常方便。因此修改教学内容是非常方便的。不难看出内部结构比较复杂的译码器用VHDL语言描述就显得非常简洁易懂。其实一般较为复杂的器件比较适合用VHDL来描述,在RTL级和行为级上进行描述。

D触发器是时序电路的基础,是数字系统的基本单元。下面是利用Verilog HDL描述一个异步复位的D触发器。

module DFF(q,qb,d,clk,clr);模块名和端口列表

output q,qb;//端口输入输出说明,输出端q和反相qb

input d,clk,clr;//数据输入端d,时钟端clk和复位端clr

reg q;端口类型说明

wire qb,d,clk,clr;

assign qb=!q;//互非输出

always @(posedge clk or negedge clr)//异步复位时的敏感表

if(!clr)

q<=0;//低电平复位信号有效是清零

else

q<=d;

endmodule

将敏感列表稍加改动即可变为同步复位的D触发器。像触发器这样的时序器件用Verilog HDL描述是比较方便的。Verilog HDL语言对一些电气特性、时延特性的描述有非常强大的描述能力。

4.结论

以可编程器件为基础,利用硬件描述语言进行数字集成电路设计已经是业界不可避免的发展趋势。这不仅优化了教学资源和设计环境,而且提高了设计效率,对切实提高学生动手能力和适应市场以及技术发展的要求起着重要作用。

参考文献:

[1]潘松,王国栋.VHDL实用教程[M].成都:电子科技大学出版社,2000.

[2]夏宇闻.复杂数字电路与系统的Verilog HDL设计技术[M].北京航空航天大学出版社,2002.

第9篇

关键词:FPGA;VHDL;变量和信号

中图分类号:TP31 文献标识码:A 文章编号:1009-3044(2014)01-0219-04

1 概述

随着EDA技术的发展,越来越多的航天产品中开始使用FPGA器件, FPGA设计中使用的硬件语言VHDL语言由于发展的较早,语法严格,非常适合大规模系统的设计,被航天产品设计师广泛应用。

变量和信号是VHDL语言中最为常用和最重要的两种数据对象,在电路设计中正确应用变量和信号是成功完成电路设计的重要因素。在对航天型号FPGA产品的评测过程中发现,设计师在使用VHDL语言时会对变量和信号的使用把握不准确,导致一些不必要的问题发生。因此,深入研究VHDL中变量和信号的基本特性和应用特点十分重要,对于提高FPGA的设计效率有着重要的意义。

2 变量和信号的主要区别

信号、变量和常量是VHDL中常用的2类数据对象。变量非常接近软件高级语言中的变量、而信号则具备更多的硬件特征,能对应硬件电路中的实际连线,是VHDL语言所特有的。信号和变量的用法和区别主要体现在以下几个方面。

1)变量是一个局部量,只能在进程和子程序中声明和使用。信号是一个全局量,使用和定义范围是实体、结构体和程序包,它具有全局性特征。例如,在实体中定义的信号可以被该实体中所有的进程使用。因此,信号可以作为信息交流通道在不同进程之间传递信息。

2)变量和信号的赋值语句不同,前者为“:=”,后者为“

3)进程中的敏感列表中可以有信号,不能有变量。

4)变量的赋值不存在延时,是立即发生的,而信号赋值都是有延时的。在一个进程中,如果对同一个信号多次赋值,仅最后一次赋值是有效的,如果对一个变量进行多次赋值,那么每次赋值都是有效的,变量的值在再次赋值之前一直保持不变。

结合以下的几个例子我们可以体会到变量和信号在赋值时的不同之处。在程序1中,由于信号赋值有延时,即进程结束时赋新值,所以结果是a和b 的值互换;而程序2中,由于变量赋值是立即更新的,所以结果是a和b的值均为b。

程序1:

architecture xinhao_arch of xinhao is

signal a,b : std_logic; ―信号

begin

process (a,b)

begin

a

b

end process;

end xinhao_arch ;

程序2:

architecture bianliang_arch of bianliang is

begin

process

variable a,b : std_logic;―变量

begin

a := b;

b := a;

end process;

end bianliang_arch ;

程序3和程序4是将输入信号din用信号赋值和变量赋值的方法分别赋值给输出信号dout。我们分别比较两种情况下的区别。

程序3:

entity xh is

port(

din : in std_logic;―输入信号

clk : in std_logic;―时钟信号

dout : out std_logic 输出信号

);

end xh;

architecture xh_a of xh is

signal da,db: std_logic;―信号

begin

process(clk)

begin

if rising_edge(clk) then

da

db

end if;

end process ;

dout

end xh_a;

在程序3中,由于信号的赋值不是即时的,输入端口din的值在赋给输出端口dout时经过了2个时钟延时,所以它由2个D触发器构成,如图1和图2。

程序4:

entity bl is

port(

din : in std_logic;

clk : in std_logic;

dout : out std_logic

);

end bl;

architecture bl_b of bl is

begin

process(clk)

variable da,db: std_logic;―变量

begin

if rising_edge(clk) then

da := din;

db := da;

dout

end if;

end process ;

end bl_b;

程序4中,由于变量的赋值是即时的,相当于把输入端口din的的值赋给输出端口dout,所以它由一个D触发器构成,如图3、图4。

3 变量和信号赋初值技巧

在FPGA设计中,复位时赋予各个信号初值是很有必要的,否则可能出现不定态。在给变量和信号定义的时候虽然可以赋初值,但应该注意的是,这个初始值只是对于行为级仿真来说有用 , 综合器在综合时会忽略这些信息。

在某型号FPGA产品测试时发现设计师使用多个变量信号,并对这些变量信号赋初始值,前仿真结果正确,但后仿真中观测的信号为不定值,无法顺利进行后仿真。程序部分代码如下:

process(clk)

variable en : std_logic := '0';

variable cnt : std_logic_vector(1 downto 0) := (others =>'0');

begin

if rising_edge(clk) then

cnt := cnt + (clk2 and en);

en := not clk2

end if;

end process;

波形见下图5

分析其原因:在定义变量en和cnt时直接给其赋初始值并不能生效,这是因为综合过程中综合器将略去所有变量的初始值,因此变量en和cnt在后仿真中为不确定态,从而使得后仿真无法顺利进行。

为了实现对变量en和cnt赋初值,需要对程序进行如下修改。修改后仿真波形见下图6,后仿真结果正确。

process(clk)

variable en : std_logic;

variable cnt : std_logic_vector(1 downto 0);

begin

if rising_edge(clk) then

if reset = '0' then ― reset为全局复位信号

cnt := (others=>'0');

en := '0';

else

cnt := cnt + (clk2 and en);

en := not clk2;

end if;

end if;

end process;

由此可见,信号和变量应该避免在定义时初始化赋值。而改由在相应的位置(如复位处)进行初始化。因此,无论是在仿真还是综合时,都建议使用这样的方法(在复位处)进行初始化。

4 变量和信号使用特点

在实际编程中,我们要结合变量和信号有各自的区别和优缺点在不同的情况下进行选择使用,尤其注意以下几个几点:

1)变量可以用来实现一些复杂的算法,也可以进行建模。对于仿真来说,使用变量一般可以提高程序的仿真速度,缩短测试周期,但在有的仿真器中也存在无法直接观测变量波形和变化值,使得仿真过程复杂化。

2)变量赋值虽然是无延时的,但变量的操作综合后容易在硬件上产生较大的延时,这是因为对变量的操作往往被综合成为组合逻辑。而信号更接近于硬件,综合后一般对应成触发器,能很好的控制硬件上的延时。因此,从这个意义上讲使用信号能提高设计的速度。

3)变量由于其有效范围只是局限在它所在的进程之中,因此要将变量的值传输到进程之外的话必须要先传输给信号,利用信号的全局特性进行信息传递。因此,程序中如果大量使用变量就必须同时定义若干个相关信号,在多个进程之间传递大量的信息十分的不方便,也大大降低了程序的可读性。而信号不存在这样的缺点,因此在实际设计中应尽量使用信号进行内部信息传递。

5 结束语

通过上面的讨论可知,在FPGA设计中,要特别注意信号和变量的区别和使用特点,灵活掌握信号和变量的使用技巧,提高设计效率。

参考文献:

[1] 侯伯亨,顾新.VHDL硬件描述语言与数字逻辑电路设计[M].西安电子科技大学出版社,1999.

第10篇

引 言

随着计算机与微电子技术的发展,电子设计自动化EDA(Electronic Design Automation)和可编程逻辑器件PLD(Programmable Logic Device)的发展都非常迅速,熟练地利用EDA软件进行PLD器件开发已成为电子工程师必须掌握的基本技能。先进的EDA工具已经从传统的自下而上的设计方法改变为自顶向下的设计方法,以硬件描述语言HDL(Hardware Description Language)来描述系统级设计,并支持系统仿真和高层综合。ASIC(Application Specific Integrated Circuit)的设计与制造,电子工程师在实验室就可以完成,这都得益于PLD器件的出现及功能强大的EDA软件的支持。现在应用最广泛的高密度PLD器件主要是现场可编程门阵列FPGA(Field Programmable Gate Array)和复杂可编程逻辑器件CPLD(Complex Programmable Logic Device)。

EDA软件方面,大体可以分为两类:

① PLD器件厂商提供的EDA工具。较著名的如:Altera公司的 Max+plus II和Quartus II、Xilinx公司的Foundation Series、Latice-Vantis公司的ispEXERT System。

② 第三方专业软件公司提供的EDA工具。常用的综合工具软件有:Synopsys公司的FPGA Compiler II、Exemplar Logic公司的LeonardoSpectrum、Synplicity公司的Synplify。第三方工具软件是对CPLD/FPGA生产厂家开发软件的补充和优化,如通常认为Max+plus II和Quartus II对VHDL/Verilog HDL逻辑综合能力不强,如果采用专用的HDL工具进行逻辑综合,会有效地提高综合质量。

1 PLD器件的开发

CPLD/FPGA设计越来越复杂,使用硬件描述语言设计可编程逻辑电路已经成为大势所趋,目前最主要的硬件描述语言是:VHDL(Very High Speed Integrated Circuit HDL)和Verilog HDL。两种语言都已被确定为IEEE标准。

用VHDL/Verilog HDL语言开发可编程逻辑电路的完整流程为:

① 文本编辑。用任何文本编辑器都可以,但通常在专用的HDL编辑环境中进行。因为专业的集成开发环境通常提供各种结构模板,并且可以自定义各种要素(例如关键字、字符串、注释等)的色彩显示,提高可读性,提高输入效率。

② 功能仿真。将文件调入HDL仿真软件进行功能仿真,检查逻辑功能是否正确。

③ 逻辑优化与综合。将源文件调入逻辑综合软件进行逻辑分析处理,即将高层次描述(行为或数据流级描述)转化为低层次的网表输出(寄存器与门级描述),逻辑综合软件会生成EDIF(Electronic Design Interchange Format)格式的EDA工业标准文件。这步在PLD开发过程中最为关键,影响综合质量的因素有两个,即代码质量和综合软件性能。

④ 适配与分割。如果整个设计超出器件的宏单元或I/O单元资源,可以将设计划分到多片同系列的器件中。

⑤ 装配或布局布线。将EDIF文件调入PLD厂家提供的软件中进行装配(对于CPLD)或布局布线(对于FPGA),即将设计好的逻辑写入CPLD/FPGA器件中。

⑥ 时序仿真。即延时仿真,由于不同器件、不同布局布线,给延时造成的影响不同,因此对系统进行时序仿真,检验设计性能,消除竞争冒险是必不可少的步骤。

利用VHDL语言进行PLD设计开发的基本流程如图1所示。如果选用Altera公司CPLD器件作为目标器件,上述过程可以在Altera公司提供的 Max+plus II或Quartus II集成开发环境中完成,但如果选用专用的EDA综合工具作为补充,完成逻辑优化与综合,设计质量会更好。第三方综合软件的主要功能就是对HDL语言的源文件进行逻辑综合,生成.edf的EDA工业标准文件,然后在PLD厂家提供的开发软件中调入.edf文件,进行编译、仿真、器件编程等过程,最终完成整个设计。针对Altera公司CPLD器件,我们选用Quartus II + LeonardoSpectrum的EDA组合开发方式,更重要的是,广大学习爱好者可以在www.altera.com网站免费获得。下面对两款软件作简要介绍。

2 Quartus II软件的应用

Quartus II是Altera公司的第四代可编程逻辑器件集成开发环境,提供从设计输入到器件编程的全部功能。 Quartus II可以产生并识别EDIF网表文件、VHDL网表文件和Verilog HDL网表文件,为其它EDA工具提供了方便的接口;可以在Quartus II集成环境中自动运行其它EDA工具。

利用Quartus II软件的开发流程可概括为以下几步:设计输入、设计编译、设计定时分析、设计仿真和器件编程。

(1)设计输入

Quartus II软件在File菜单中提供"New Project Wizard…"向导,引导设计者完成项目的创建。当设计者需要向项目中添加新的VHDL文件时,可以通过"New"选项选择添加。

(2)设计编译

Quartus II编译器完成的功能有:检查设计错误、对逻辑进行综合、提取定时信息、在指定的Altera系列器件中进行适配分割,产生的输出文件将用于设计仿真、定时分析及器件编程。

图4 LeonardoSpectrum软件Advanced FlowTabs界面

① 首先确定软件处于Compile Mode,可以通过Processing菜单进行选择。

② 在Processing菜单中选择Compiler Settings项,如图2所示。可以进行器件选择、模式设定、综合和适配选项设定及设计验证等。

③ 单击Processing菜单下的"Start Compilation" 项,开始编译过程。

④ 查看编译结果。如图3所示,我们可以得到详细的编译报告。

(3)设计定时分析

单击Project菜单下的"Timing Settings…"选项,可以方便地完成时间参数的设定。Quartus II软件的定时分析功能在编译过程结束之后自动运行,并在编译报告的Timing Analyses文件夹中显示,如图3所示。其中我们可以得到最高频率fmax、输入寄存器的建立时间tSU、引脚到引脚延迟tPD、输出寄存器时钟到输出的延迟tCO和输入保持时间tH等时间参数的详细报告,从中可以清楚地判定是否达到系统的定时要求。

(4)设计仿真

Quartus II软件允许设计者使用基于文本的向量文件(.vec)作为仿真器的激励,也可以在Quartus II软件的波形编辑器中产生向量波形文件(.vwf)作为仿真器的激励。波形编辑方式与MAX+PLUS II软件的操作相似。在Processing菜单下选择"Simulate Mode"选项进入仿真模式,选择"Simulator Settings…"对话框进行仿真设置。在这里可以选择激励文件、仿真模式(功能仿真或时序仿真)等,单击"Run Simulator "即开始仿真过程。

(5)器件编程

设计者可以将配置数据通过MasterBlaster或ByteBlasterMV通信电缆下载到器件当中,通过被动串行配置模式或JTAG模式对器件进行配置编程,还可以在JTAG模式下给多个器件进行编程。利用Quartus II软件给器件编程或配置时,首先需要打开编程器(在New菜单选项中选择打开Chain Description File),在编程器中可以进行编程模式设置(Mode下拉框)、硬件配置(Programming Hardware对话框)及编程文件选择(Add File…按钮),将以上配置存盘产生.cdf文件,其中存储了器件的名称、器件的设计及硬件设置等编程信息。当以上过程正确无误后,单击Start按钮即可开始对器件进行编程配置。

3 LeonardoSpectrum软件的应用

LeonardoSpectrum是Mentor Graphics的子公司Exemplar Logic的专业VHDL/Verilog HDL综合软件,简单易用,可控性较强,可以在LeonardoSpectrum中综合优化并产生EDIF文件,作为QuartusII的编译输入。该软件有三种逻辑综合方式:Synthesis Wizard(综合向导)、Quick Setup(快速完成)、Advanced FlowTabs(详细流程)方式。三种方式完成的功能基本相同。Synthesis Wizard方式最简单,Advanced FlowTabs方式则最全面,该方式有六个选项单,如图4所示,分别完成以下功能:器件选择、设计文件输入、约束条件指定、优化选择、输出网表文件设置及选择调用布局布线工具。

以上每步操作都提供相应的帮助,简单明了。需要注意的是,在输入设计文件时要正确排列文件的次序,将底层文件放在前面,顶层文件放到后面,这样LeonardoSpectrum软件才能正确地建立数据信息库。综合完成后,可以将输出网表文件 (.EDF)作为MAX+PLUS II或Quartus II的设计输入文件,再完成编译、仿真、定时分析和器件编程等步骤,完成整个系统的设计过程。

(A)(B)(C)(D)

4 VHDL编码方式对综合质量的影响

VHDL语言支持全部的仿真功能,但并不是全部可综合的。VHDL程序的许多硬件描述和仿真结构没有对应的数字电路来实现,还有些描述在理论上可以映射为对应的数字电路,但是却不能保证其精确性,比如延时模型。随着综合算法技术水平的提高,针对某些寄存器传输级RTL(Register Transfer Level)电路描述可以进行有效的优化,但是对于更普遍的电路描述这还不够,因此综合结果是否满足给定的时间约束条件和面积约束条件,还取决于VHDL编码方式。下面给出几点经验,相信对提高综合质量有所帮助与启发。

(1)资源共享

例如下面的两段代码中,(A)需要2个加法器,而完成同样的功能,略做修改;(B)只需要1个加法器,有效地减少了使用面积。

适当地利用圆括号进行重新组合,有时也可以实现资源的共享。如下面两段代码(C)和(D),(D)中输入信号b和c即可实现加法器的共享。

(2)使用带范围限制的整数

在VHDL中无约束整数的范围是-2147483647~+2147483647。这意味着至少需要32位来表示,但通常这会造成资源的浪费,有些综合软件会自动优化,但所消耗的时间是相当可观的。因此,如果不需要全范围的整型数据,最好指定范围,例如:

signal small_int : integer range 255 downto 0 ;

small_int在本例中只需要8位,而不是32位,有效地节约了器件面积。

(3)使用宏模块

当在VHDL中使用算术逻辑、关系逻辑等通用逻辑结构时,多数EDA开发软件及专用综合工具通常包含针对特定工艺的优化宏模块供我们选择,从功能上可分为时序电路宏模块、运算电路宏模块和存储器宏模块,具有很高的执行效率,使得综合结果面积更小、频率更高、所需编译时间更短。当然,它们是针对特定工艺的,这将使VHDL程序依赖于具体的器件系列,影响移植性。

(E)(F)

(4)高级设计优化

上述几种方法是在没有改变其功能性的情况下进行综合优化的,有时候我们可以在不妨碍设计规格约束的前提下,稍微改变其功能,来提高综合效率,参考下面两个例子(E)和(F)。

在(E)中,综合工具建立递增计数器和完整的比较器;在(F)中,综合工具建立递减计数器和对于常数零的比较器。由于和常数作比较更易于实现,且占用逻辑单元更少,因此(F)程序更高效。

另外,由于综合工具只能支持VHDL的子集,为保证在综合前后的仿真保持相同,以下语句在综合中应该避免使用:

避免使用 wait for xx ns,这种语句不会被综合为实际的电路元件;

避免使用after xx ns,在综合工具进行综合时,会忽略after语句;

避免在信号和变量声明时赋初值,因为大部分综合工具会忽略初始化语句,如果使用初始化语句,那么综合的结果和仿真的结果将会产生差异。

第11篇

(赤峰学院 物理与电子信息工程学院,内蒙古 赤峰 024000)

摘要:本文利用QuartusⅡ集成开发环境来完成译码器、LCD、流水灯等电路的设计,以FPGA实验开发板为运行载体,FPGA开发板FA280核心器件为Altera CycloneⅡ系列的EP2C8Q208,通过开发板上的USB Blaster将程序下载到开发板,实现VHDL硬件语言设计的译码器、LCD及数码管显示接口电路的运行显示.

关键词 :QuartusⅡ;译码器;显示接口

中图分类号:G642文献标识码:A文章编号:1673-260X(2015)05-0059-02

1 引言

在信息时代的今天,科技飞速发展,电子产品更新换代迅速,传统的设计方法再也不能满足市场需求,因此EDA技术在一些电子领域取得了惊人的成绩.当然,紧随科技脚步的高校自然也不会落后,由此EDA技术便在电子信息类专业中发展起来了.但传统的授课方式,让我们只能在课堂上通过老师的讲解来接触到EDA技术,抽象的知识让学生很难去深入理解和探索,这样理论与实践相结合就显得尤为重要了.EDA是将计算机技术应用到电子电路设计中,在QuartusⅡ环境中,运用输入原理图或硬件语言进行编译与仿真的技术.在开发板上可以实现数码管、LCD、流水灯、蜂鸣器等显示和发声的效果.

2 EDA教学实验开发板概述

本文用到的实验板是FPGA开发板FA280,FA280板载有SDRAM,flash以及USB Blaster下载线电路.利用QuartusⅡ集成开发环境来完成前期设计,以FPGA实验开发板为运行载体,来完成VHDL、Verilog HDL等一些硬件语言的运行显示.

FPGA开发板FA280,其核心器件为Altera CycloneⅡ系列的EP2C8Q208,是包含192个引脚,其中I/O口有183个,板载存储器包括SDRAM HY57V641620和Bytes,FLASH AM29LV320,存储空间分别为8M和4MBytes.SDRAM与系统总线速度同步,可避免不必要的等待周期.

接口包括:PS2接口、VGA接口、RS232串口、USB下载接口.开发板具有USB Blaster下载线电路,插上USB线即可进行下载,通过拨动USB下载接口开关选择JTAG或AS下载方式.

显示设备包括6位7段红光数码管,8位绿色LED发光二极管,LCD1602和LCD12864显示屏接口插座.

复位电路由一个复位按键和一个复位芯片组成的,可以将电路恢复到起始状态(相当于清零按钮).复位芯片为MAX811R,可将输出脉冲宽度为140ms、门限为2.63V的低电平有效复位脉冲信号提供给FA280.

电源部分包括1117-3.3和1117-1.2各一片,从功能板分别引入3.3V和1.2V的直流电源作为EP2C8的核心电源电压,并在核心板上加入滤波电容,以确保芯片和电源系统的稳定性.

其他还包括一个蜂鸣器、4位独立按键、电源插座和开关、SD卡座、扩展总线(GPIO)和有源晶振.

3 EDA技术的应用软件及开发流程

3.1 硬件描述语言VHDL

高级硬件描述语言VHDL已成为IEEE标准,适用于行为级和RTL级的描述,最适于描述电路行为,并在设计时可以不了解电路的结构细节.VHDL主要用于描述数字系统的结构、行为、功能和接口,其设计的基本点是将设计实体分成内、外部分.完整的VHDL程序要包含库、程序包、实体、构造体和配置等部分,它的描述语句和常用语句都有其固定的格式,并且有自己的语法,不允许不同类型的数据在表达式中自由组合.

3.2 开发流程

QuartusⅡ作为一个综合性的开发平台,可以完成多种功能的实现.QuartusⅡ的设计流程:首先输入HDL等形式的设计文本,接着根据设计要求设定编译方式和策略,然后进行设计校验(仿真和定时分析),最后进行编程与验证(将编程文件配置到PLD中).设计过程中,如果出现错误,则回到设计输入阶段改错,然后重复以上步骤.

设计输入:设计输入可以用HDL方式或原理图录入方式.一般可以使用原理图来设计最顶层,将整个设计的结构描述清楚,具体实现各模块时用HDL.对于HDL方式的设计输入,可以采用Verilog和VHDL,我们这里采用VHDL语言来实现.

综合:综合工具将设计转换成包含逻辑单元和逻辑单元间连接的网表文件.

功能仿真:对已经综合的电路的功能进行验证,功能仿真不涉及任何时序方面的内容.

配置:将综合产生的网络表中的逻辑单元映射到CPLD/FPGA器件中的LE,这里还包含器件中LE间连接和路由的选择.

时序分析和时序仿真:通过分析配置后的电路各个路径上的传输延时,获得电路的性能情况.这里的时序仿真将结合器件时间参数,与前面的功能仿真不同,功能仿真只关注与源程序的逻辑是否正确.

编程:在CPLD/FPGA器件内实现设计,包括逻辑单元和逻辑单元间的连接.

在做一个设计时,通常要对功能进行模块划分,每个模块对应一个源文件,用一个唯一的顶层文件将这些模块源文件组合起来,形成一个整体设计.顶层文件完成模块的例化工作,顶层文件可以用HDL语言编写,也可以用原理图的方式.

4 译码器与显示接口电路设计

4.1 3线-8线译码器

3线-8线译码器的仿真过程:运行Quartus II软件,建立工程项目,工程命名为lq.建立一个VHDL文件,命名为lq,文件后缀为.vhd,再将程序写入并保存,然后编译,确保没有错误后进行仿真,周期设为100ns.将输入端A2、A1、A0三位二进制代码按照真值表设定好;S_0、S_1、S_2为控制输入端,当s_0 and (not s_1)and (not s_2)为1时,译码器工作,当它为0时,译码器全为高电平;输出端Z-n7到Z-n0.在对端口进行设定,将A2、A1、A0和总控制端S设定为K1、K2、K3、K4四位独立按键作为输入端,其端口依次为I/O74、I/O72、I/O75、I/O76.输出端Z-n7~Z-n0对应的是LED8~LED1,其端口依次是I/O181、I/O175、I/O171、I/O169、I/O170、I/O173、I/O180、I/O182.设定好之后,再次进行编译仿真,没有错误即可进行配置,可以实现输入四位二进制代码,按照其原意翻译成相应的输出信号,体现在LED灯上.仿真波形如图1所示.

4.2 LCD显示

LCD的仿真过程:运行Quartus II软件,建立工程项目,工程命名为lcd1602.建立一个VHDL文件,命名为lcd1602,文件后缀为.vhd,再将程序写入并保存,然后编译,确保没有错误后进行仿真.先进行端口说明,输入端为:start - 启动显示、cmd - 命令、dat_i - 等显示的字符数据、clk - 时钟、rst - 复位信号(低电平有效).输出端为:lcd_e - lcd1602使能、lcd_rw - lcd1602读取有效、lcd_di - lcd1602数据/命令选择信号、lcd_dat - lcd1602数据、ok .完成对lcd1602的驱动,使lcd1602初始化,并显示字符.

然后以同样步骤建立名为lcddemo_ctrl的工程,到编译仿真.再进行端口说明,输入端为:ack -接收数据方已确认(上升沿有效)、init_ok-显示屏初始化完成、clk-时钟输入、rst-复位信号输入.输出端为:stb-输出数据通知信号,上升沿有效、dat-输出数据.还要对列出文本文件的内容进行设定(参考),就可以完成在lcd1602上显示两行字符“made by liu qin”.当然也可以显示其他内容,根据AsciI字符表编辑想要显示的代码,便可显示想要的字符.

4.3 流水灯

流水灯的设计主要由三个模块和一个顶层文件组成,其模块划分及功能说明如表1、表2:

FA280开发板硬件具有8位LED,为低电平驱动方式,即低电平点亮高电平熄灭.

本实验中实现以提供低电平方式点亮8个LED中的某一个或多个,其点亮模式代表了数据0~9和A~F,两次点亮的时间间隔为1s,以15s的周期循环重复.流水灯点亮方案如表2.流水灯显示仿真过程是对三个模块和一个顶层文件进行编译仿真,具体操作步骤如上两个实例.运行Quartus II软件,分别建立工程项目、VHDL文件,再将程序写入并保存,然后编译,确保没有错误后进行仿真.并对各模块的端口进行说明,实现其具体功能,完成流水灯的显示.

5 结语

本设计应用QuartusⅡ 9.0软件,采用VHDL语言,按照开发流程完成3线-8线译码器、LCD和流水灯的设计,得到相应的仿真波形并下载到实验开发板上观察显示实验结果.这个过程让学生熟悉了EDA技术和实验开发板的功能,及相关软件的应用.

参考文献:

〔1〕廖超平,EDA技术与VHDL实用教程.高等教育出版社,2007.

〔2〕闫石.数字电子技术基础.高等教育出版社,2006.

〔3〕汪国强.华成英,EDA技术与应用.电子工业出版社,2005.

〔4〕侯伯亨.VHDL硬件描述语言与数字逻辑电路设计.西安电子科技大学出版社,2009.

〔5〕潘松.EDA技术与应用.清华大学出版社,2005.

第12篇

关键词: Python; FPGA; 软硬件协同设计; 硬件加速

中图分类号: TN911?34; TP391.9 文献标识码: A 文章编号: 1004?373X(2013)08?0076?03

0 引 言

现代系统设计许多都是由C/C++,Python等高级语言来完成,而且这些系统越来越复杂,涉及到的算法的运算量也越来越大,许多算法需要用硬件实现来满足算法的实时性要求。FPGA是一种可编程的逻辑器件,它具有便于修改,调试,并能并行地完成大量的运算,从而提高算法的实时性,并且随着硬件制造水平不断地提高,FPGA的资源越来越大,工作频率也越来越高,使得能在其上面完成的算法也越来越复杂。但是传统的软硬件分开设计的方法由于软硬件设计者采用不同的设计语言,存在软硬件设计者之间难以沟通导致设计周期长等问题,这种设计方法已不能满足快速地增长的市场要求,如何将这些系统设计中的算法快速转换为相应的硬件来实现,需要新的软硬件协同设计方法。当前基于C/C++的软硬件协同设计,有一个SystemC标准化组织一直致力于这个工作[1],也有少量商业化工具例如Synopsys公司Synphony C Compiler和 Calypto Design Systems公司的Catapult SL Synthesis可以将C/C++算法转换为相应的硬件[2?3]。Python是一种简单易学并且功能强大的编程语言,有许多算法是由Python来实现,而且这些算法很多是免费、开源的,和C/C++类似需要如何完成基于Python的软硬件协同设计[4]。

1 基于Python的软硬件协同设计发展

由于Python的强大的软硬件描述能力,近年来许多研究者在Python的软硬件协同设计方面进行了许多研究,其中Logaras E提出了一种称为SysPy (System Python)可以使用Python来描述硬件并将其自动转换为VHDL[5],Zhang mi采用PDSDL(Dynamic System Description Language)来进行系统建模和校验并可将系统转换为Verilog的硬件描述[6],特别是Decaluwe J提出一种称为MyHDL的Python扩展包来进行软硬件协同设计[7],Villar J I采用MyHDL完成了一个接口设计实例[8]。这些开发工具各自具有自己的一些特点,但是他们有一点是相同,就是采用Python来进行软硬件协同设计。下面以MyHDL为例介绍基于Python的软硬件协同设计。

2 基于Python的MyHDL包简介

MyHDL采用Python扩展包的形式使其能支持硬件设计和仿真并在仿真结果符合要求后可将软件算法自动转换为相应的采用Verilog或VHDL硬件描述,由于MyHDL包是基于Python的硬件扩展,下面主要对MyHDL硬件方面的一些主要特点做简要介绍[9]。

2.1 数据类型

标准Python的int类型已经具有许多硬件设计所需要特征,但是在硬件设计中由于包含许多位操作和处理,MyHDL设计了intbv类,提供索引和切片操作来支持位的操作和处理。

2.2 模块,端口和信号

在MyHDL采用函数来对硬件的模块进行建模,MyHDL也有信号对象,类似于VHDL语言的信号,采用信号作为函数的参数来定义模块的端口。

2.3 发生器

发生器是MyHDL的一个关键概念,用来建立并发性模型,对应于Verilog的always块或者VHDL的进程。

2.4 自动转换

在一定限制条件下, MyHDL使用toVerilog() 或者 toVHDL()函数将MyHDL设计自动转换为相应的Verilog或者 VHDL代码,如果符合MyHDL可综合子集的要求,就可使用MyHDL完成可硬件综和的代码并在FPGA上实现。

2.5 仿真

MyHDL通过Cosimulation对象使其能支持仿真,对于自动转换的Verilog代码或者VHDL代码,MyHDL还可作为硬件校验语言来对转换后的Verilog或VHDL进行协同仿真和校验。

3 采用MyHDL的硬件设计优点

Verilog和VHDL是当前的主流硬件设计语言,但是使用基于Python的MyHDL作为硬件设计也具有许多优点[10]使得其可以作为设计者特别是硬件设计的初学者另外一种较好的选择。

3.1 MyHDL使用成本低

MyHDL是免费的并且开源,在使用MyHDL设计的工具链中同样可以使用大量的免费工具比如ICArus,IVERILOG仿真工具,GTKWAVE查看仿真波形,从而可以减少设计成本。

3.2 在硬件设计中使用先进的软件开发技术

由于Python本身是一种软件开发语言,现代软件开发的先进方法比如快速应用开发,测试驱动开发都在Python上得以体现,由于硬件描述语言的硬件设计和软件开发具有一定的相似性,采用MyHDL可以使用最新的软件开发技术。

3.3 软硬件设计可以采用同样的开发环境

Python是算法实现的一种理想的语言,很多算法都由Python实现,通常算法的软硬件实现由不同工程师来实现,软件工程师使用Python,硬件工程师使用通用的硬件描述语言,例如Verilog或VHDL, 硬件工程师和软件工程师之间存在一条鸿沟,而采用MyHDL,就可以在同一个Python环境实现算法设计,仿真和校验。

3.4 其他优点

对于没有一定硬件设计经验的设计者,通常采用Verilog设计会混淆阻塞和非阻塞赋值,不清楚Verilog的符号运算,采用VHDL进行设计又不理解VHDL的信号概念,会觉得VHDL的类型和位宽转换很繁琐,但是如果采用基于Python的MyHDL包作为设计语言,这些都将不成为问题。

4 基于Python的软硬件设计流程

在现代系统设计中,软件工程师采用Python等高级语言,而硬件系统设计多采用Verilog,VHDL硬件描述语言,在如何将Python描述的软件映射为相应的硬件上,软硬件开发者之间的交流存在一道天然的鸿沟,而采用Python来进行软硬件协同设计就可以解决这一个问题,基于Python的软硬件协同设计的流程如图1所示。

首先采用Python进行系统设计,然后根据系统性能要求进行软硬件划分,对于系统性能要求比较高的部分采用Python的MyHDL扩展包的形式来由硬件实现,同时采用Python来编写硬件测试平台。测试仿真如果不符合系统设计要求可以重新进行软硬件划分,如果测试仿真结果不正确,可重新修改。仿真通过后可以用MyHDL扩展包自动将Python转换为Verilog代码,这时的Python测试平台无需修改还可以与转换后的Verilog代码一起进行混合仿真,如果仿真通过就可以进行硬件的综合,下载,测试阶段,这与传统的硬件设计过程相同。

5 结 语

从上面分析可以看出基于Python的MyHDL既是一种软硬件协同设计方法,同时其也是Python的扩展包,使得整个开发过程仅使用一种Python语言,并可以很方便地将一个软件算法快速地转换为其相应的硬件实现,从而完成一个软硬件系统设计。由于Python目前的可综合子集的限制和其本身还处在发展阶段,基于Python的软硬件设计还主要用于系统的建模方面,将其用于芯片设计的应用还不是很多,有研究者比较过MyHDL与传统硬件设计语言的实现,对于小规模的应用优势不是很明显。但是随着现代系统的算法越来越复杂性,系统规模也不断增大,相对于传统的软硬件设计方法采用Python来进行软硬件协同设计的优势就会体现出来,系统设计、仿真、校验的速度会大大提高,采用Python进行系统设计的产品能更快地进入市场。随着基于Python系统设计方法和工具的发展,基于Python的软硬件协同设计方法将会有广泛的应用前景。

参考文献

[1] Intel IT Center. SystemC Version 2.3 user guide [EB/OL]. [2012?07?25]. http:///downloads/standards/systemc.

[2] Synopsys. High level synthesis with Synphony C compiler [EB/OL]. [2012?08?20]. http:///Systems/BlockDesign/HLS/Pages/default.aspx.

[3] Calypto Design Systems. Catapult product family overview [EB/OL]. [2012?10?20]. http:///products/catapult/catapult_overview.

[4] Python Software Foundation. Python documentation (Python 2.7) [EB/OL]. [2012?06?10]. http: //.

[5] LOGARAS E, MANOLAKOS E S. SysPy: using Python for processor-centric SoC design [C]// 2010 17th IEEE International Conference on Electronics, Circuits, and Systems (ICECS). Athens, Greece: IEEE, 2010: 762?765.

[6] ZHANG Mi, TU Shi-liang, CHAI Zhi-lei. PDSDL: a dynamic system description language [C]// ISOCC '08. International SoC Design Conference. Busan, Korea: ISOCC, 2008: 204?209.

[7] DECALUWE J. MyHDL: a Python-based hardware description language [J]. Linux Journal, 2004, 127(10): 5?10.

[8] VILLAR J I, JUAN J, BELLIDO M J, et al. Python as a hardware description language: a case study [C]// 2011 VII Southern Conference on Programmable Logic (SPL). Cordoba, Argentina: [s.n.], 2011: 117?122.

相关文章