VHDL

2024-09-17

VHDL(共10篇)

VHDL 篇1

1. 引言

VHDL语言是一种集设计、模拟、综合于一体的标准硬件描述语言, 它经过VHDL编译器的分析进行相应的语法及语义检查后, 转换为一种中间数据格式。中间数据格式是VHDL源描述的一种内部表示形式, 它能够保存完整的语义信息。每个设计单元以中间数据格式的形式独立存入设计库中, 作为后端的应用。对于不同的应用, 其相应的中间数据格式各有不同的, 但从目前的所使用的各种中间数据格式, 大部分都是基于属性表示的。所谓的属性表示就是VHDL语言中的所有结构都采用结构名和其属性来表示, 结构名指的是VHDL语言中的各种基本结构名, 如entity, architecture等;属性分为值属性和关联属性, 值属性表示的是一些结构的基本信息, 关联属性表示指向别的结点名或类名的指针, 表示该结点与其它结点的关联关系。属性表示的不是一种特定的数据结构, 而是一种抽象的数据类型, 这种抽象的数据类型是独立于各“后端”工具数据格式的特定要求。

2. 中间数据格式设计准则

对中间数据格式的设计, 本文考虑了以下几个准则:

(1) 基本的要求是能够充分反映VHDL作为硬件描述语言的特点, 完整地保存源程序的各种信息;其所具有的数据类型能反映VHDL源程序中所有词法、语法和静态语义的信息。

(2) 必须独立于各“后端”工具, 即尽可能地避免使用对于某一特定工具的中间数据格式的实现方法。

(3) 结构清晰, 层次分明, 逻辑关系和物理连接关系都要表示清楚。

(4) 有效性, 其本身必须能被有效的生成。

根据这几个准则, 本文中采用了有向无环图 (DAG) 作为其中间表示, 它是一种推广的树结构, 和语法树相比, 它以更紧凑的方式给出了同样的信息, 其中的结点可以有多个父结点, 从而允许表达式能够使用多次。

3. 中间数据格式的基本构成

一个完整的VHDL语言程序通常由设计库、设计单元和基本单元组成。设计库主要有IEEE、STD及用户库, 它们作为VHDL设计的最高层。设计单元能够独立的被分析, 并生成独立的中间数据单元保存在设计库中。而还有一些信号定义、过程语句及选择语句之类的单元则称为基本单元, 所有的设计单元都是由这些基本单元所构成。基于VHDL源程序这样的层次结构, 将VHDL元素划分为三种对象类型:库对象、设计对象及基本对象。库对象表示设计库, 设计对象表示设计单元, 而基本对象则表示了VHDL的其它所有的基本元素。在本文中, 一个完整的、被存储的中间数据格式单元是由一个设计对象和多个基本对象组成。在其有向无环图表示结构中, 顶点代表各种基本对象, 边表示各个对象之间的关联关系。

3.1 设计对象

设计单元是由库单元及上下文语句 (context clause) 所构成, VHDL语言包括五种库单元:实体定义 (entity declaration) 、包定义 (package declaration) 、配置定义 (configuration declaration) 、结构体 (architecture body) 和包实体 (package body) , 前三种称为主单元, 后两种称为次单元。因此也相应出现五种设计单元, 这些设计单元可独立的被分析, 所得到的中间数据格式文件存放在设计库中。设计对象类的定义如下:

其中, Type表示设计单元的类型, 如entity或architecture类型;pname表示主单元的名字;sname表示与之相关的次单元的名字, 在次单元生成中间数据格式时, 其中间数据文件名是由主单元名+次单元名组成。如主单元entity名为A1, 次单元architecture名为B1, 则次单元最终生成的中间数据文件名为A1_B1;path表示这个设计单元经分析后所存放的位置;spath表示这个设计单元属于哪个VHDL源文件;count表示这个设计单元共包含多少个基本对象;top是一个基本对象指针类型, 它指向这个设计单元中的唯一一个库单元, 是这个有向图的顶点, 也是这个设计单元的入口点;_extTable是一个线性表类型, 存储了这个设计单元的外部关联对象, 如次单元architecture可能关联到主单元entity中的端口声明对象;_mapTable存放这个设计单元的内部基本对象, 也是一个单向的线性链表, 每一个设计单元都有各自独立的maptable表。

3.2 基本对象[14]

在VHDL语言中间数据格式中, 除了设计单元和设计库外, 所有的VHDL结构都是由基本对象来表示的[7]。一个基本对象是由值属性和关联属性来描述。值属性表示了对象本身的一些基本信息, 其内容在对象产生时就已经确定, 不能被修改, 如名字、类型和所在行数等[8];关联属性所存储的是与这个对象相联系的对象指针, 把各个对象互相联系起来。在对象与对象之间存在两种关联, 一种是一对一的关联, 也就是一个对象只指向一个对象;另一种是一对多的关联, 一个对象指向多个对象, 这种情况下, 对应的多个对象用单链表存储[9]。利用这种关联属性, 可清晰的表示VHDL源程序中各种结构间的逻辑关系。

根据VHDL的语法, 共设计了27种基本对象, 每一种基本对象对应到VHDL中的一种基本结构, 它们分别作为有向图中的一个结点, 每一个结点又是一个记录, 它们的域表示由词法分析、语法分析和语义分析程序收集的信息[10]。其27种基本对象类型如图1所示, 标识符前面带有O的是基本对象类型, 其他的是基本类型下的子类型。如字面量又分为整型字面量 (L_integer) 、浮点型字面量 (L_float) 、字符串型字面量 (L_string) 、位字符串型字面量 (L_bit_string) 及空型 (L_null) 。在用C++开发时, 每一种基本对象都由一个类来实现, 其值属性和关联属性作为类的私有成员, 对这些域的处理函数作为类的成员函数。

4. 实例及其结果

下面是一个两输入与门实体部分的VHDL描述。

由前面可知, 名为“and_gate”的实体 (entity) 可以作为一个单独的设计单元被分析, 经VHDL词法、语法及语义分析完成后, 可得到该设计单元对应的中间数据格式。采用本文所提出的VHDL语言的中间数据格式结构, “and_gate”设计单元可被表示为图2所示的结构形式, 图的顶部表格中所描述的是该设计单元的基本信息, 它表明了这个设计单元的类型、名字、所处的位置, 还有就是通过分析后, 这个设计单元所包含的基本对象数目及设计单元的入口对象。这与前面所定义的设计对象类中的值属性和关联属性一一对应, 前面六个都是

值属性, 记录的都是整型或字符型值。“count”值为10, 表明此设计单元共包含有10个基本对象;“top”的内容为6, 表明该设计单元的库单元, 也就是其顶层结点是编号为6的对象, 在maptable表中可得出, 编号为6的对象是O_entity对象, 因此该指针指向基本对象O_entity。maptable域指向图中左边部分的maptable表, 它按顺序存储了该设计单元的所有基本对象。该设计单元涉及到一个外部连接, 也就是所有端口信号关联到STD库中的某一个类型对象, 因此extable表中存有一外部基本对象O_type。

图2的中间部分表示的是各基本对象之间的关联关系。粗线条粗箭头表示的是各基本对象之间的关联, 细线条细箭头表示该设计单元中所有的基本对象在maptable表中所存储位置, 各对象是以对象类型为关键字进行存储, 按VHDL源码分析的先后顺序将各种基本对象依次存储。

5. 结束语

本文介绍了一种基于属性表示方法的VHDL中间数据格式, 这种格式已经使用在VHDL分析器中, 并且这种中间数据格式已经作为某一项工程开发的基础, 经多种实例的验证, 有其自身的可用性和可行性。在分析过程中, 对VHDL中的某些结构还需进一步的优化, 以便其得到的结果更适用。

摘要:VHDL语言中间数据格式是VHDL设计环境的要求, 用来作为VHDL开发环境中各设计工具的一个公共数据界面。本文给出的是一种基于属性表示的中间数据格式, 是一种通用的VHDL中间数据表示方法, 采用有向无环图 (DAG) 作为其抽象结构, 它是一种推广的树结构。这种中间数据格式已经作为某一项工程开发的基础, 经多种实例的验证, 有其自身的可用性和可行性。

关键词:VHDL,中间数据格式,属性,有向无环图

参考文献

[1]李广军.VHDL实用教程.电子科技大学出版社.2000

[2]牛振东, 徐嵩杰, 刘明业.VHDL语言分析器的设计与实现.计算机学报, 1994, Vol.17, No.10:777-785

[3]王兼明.V H D L中间数据格式及其设计库.计算机学报.1992, No.523:522-528

[4]Wilsey, P.A.Martin, D.E.Subramani, K.SAVANT/TyVIS/WARPED:components for the analysis and simulation of VHDL.Verilog HDL Conference and VHDL International Users Forum, 1998.IVC/VIUF, 195-201

[5]J.Willis, G.Peterson, A.Zamfirescu.Advanced Intermediate Representation with Extensibility (AIRE) .Proceedings of the Fall1996VHDL International User’s Forum1996

[6]Brown.M.“vhdl intermediate form standardization;process, issues and status”.publied by Design Automation Conference, 1992.EURO-VHDL'92, EURO-DAC'92.European7-10Sept.1992Page (s) :758–762.

[7]IEEE Standard VHDL Language Reference Manual.IEEE Std.1076-1999, IEEE1999.

[8]Charles N.Fischer, Richard J.LeBlanc, Jr.编译器构造-C语言描述.机械工业出版社.2005

[9]Doboli, A.;Vemuri, A.;A VHDL-AMS compiler and architecture generator for behavioral synthesis of analog systems Design.Automation and Test in Europe Conference and Exhibition1999.Proceedings9-12March1999Page (s) :338-345

[10]陈火旺刘春林.程序设计语言编译原理.国防工业出版社.1990

VHDL 篇2

具体要求

一、总体要求:

1. 本课程为专业必选考查类课程,以大作业加平时成绩的形式给定最终成绩。

2. 每班六个题目,每4-5为一组,自由组合,分工合作。10月26日上课

前请各班上交分组及组长情况表。

3. 所有作业需完成VHDL核心代码的设计,并采用QuartusII进行相关仿

真或平台实现,否则全组不及格。

4. 各小组推选一人于第十周(11月5日和9日)上讲台讲解题目设计思路、源代码分析、仿真结果及演示。

5. 各小组组长于11月30日前到老师处汇报题目的完成情况,并接受考核。

6. 每名同学于11月30日前提交一份大作业报告,并由班长统一送交老师。

二、大作业题目:

1. 频率计设计(平台实现)

1)

2)

3)

4)能对输入的方波信号频率进行采样; 采样频率范围为0~999999Hz,以1Hz为单位进行显示; 采用六个七段数码管显示当前采样的频率值; 本电路系统输入时钟为6MHz。

2. 方波发生器设计(仿真实现)

1)

2)

3)系统的输入时钟为6MHz; 系统输出频率为对系统时钟的1~32分频;(5位二进制输入); 系统输出频率的占空比可调,分为25%、50%、75%三档;(采用2位二进制

位输入控制)。

3. 竞赛抢答器设计(平台实现)

1)

2)抢答器的输入路数为8路;(8位二进制输入)当主持人宣布开始(按下某一键时为有效),抢答时当某一方先按下按键,其

他键则失效;

3)

4)

5)用1个七段数码管显示抢中的路编号; 系统复位键按下后,进行下一轮抢答; 系统的输入时钟为6MHz。

4. 交通灯控制系统设计(平台实现)

1)交叉路口为十字路口;

2)

3)每路口设直行、左转、右转的方向指示灯; 每个方向指示灯有三种颜色,即红、绿、黄三色。为简化设计,右转指示灯常

绿;黄灯闪动时间间隔为0。5S,持续时间自定义。

4)

5)每路口需用两个数码管显示允许通行或禁止通行的时间; 系统的输入时钟为6MHz。

5. 点阵字符显示控制器设计(仿真实现)

1)

2)

3)用16*16点阵的发光二极管显示字符; 可显示字符为0~9的数字字符与A~F英文字母; 输入为四位二进制矢量。

6. 万年历及电子钟设计(平台实现)

1)

2)

3)

4)能显示年、月、日、时、分、秒、星期,共需15个数码管; 年、月、日、时、分、星期均需可调; 系统默认时间为2000年01月01日00时00分00秒星期6; 系统输入时钟为6MHz。

三、大作业报告要求:

1. 题目功能分析;

2. 总体模块划分;

3. 代码实现;

4. 仿真结果;

5. 设计心得、体会;

6. 报告采用统一的A4封面,其中1、2、5项必须为手写,3、4项为打印。

7. 网络工程专业不再进行期末考试,期终成绩以作业测试、讲解、报告综

VHDL 篇3

关键词:BP神经网络;VHDL;模拟与仿真

一、人工神经理论基础

神经网络又被称为链接模型,其本身是模仿动物的神经网络,并根据其行为特征分布式进行算法数学模型处理。在计算机上,人们可以利用并行或者串行的模式模拟仿真,实现人们自身的神经网络模型算法。在特定应用情况下,进行神经网络研究的目标则是高性能专用的神经网络硬件。

神经元是人工神经网络的基本单元,具有一定的信息处理方面的能力。对于输入的内容,神经元可以简单进行处理,能根据学习规则做好加权求和,并根据权值来获取神经元的状态输出,以便对刺激进行处理。还可建立基于VHDL语言的神经网络元件库,它包括基本单元、控制单元两个部分。

二、 BP神经网络结构模型

BP神经网络由输入层、隐含层和输出层组成,相邻层之间的各个神经元实现全连接,每层各个神经元之间没有连接。

BP算法正向传播过程:输入信号从输入层输入,经过隐含层传向输出层。如果输出层的实际输出与期望输出一致,那么学习算法结束。基本控制单元用于建立隐含层和输出层的神经元,主要解决信号运算后权值存储问题,它主要包括加权乘法、神经元输入信号的累加、非线性激励函数的实现、权值存储等基本模块。

图1中xi代表第i个输入,wij代表输入i和神经元j之间的权值(weight),yj是第j个输出。如图1所示可以得到:

y1=f(x1.w11+x2.w21+x3.w31 ) 2-1

y2=f(x1.w11+x2.w22+x3.w32) 2-2

y3=f(x1.w11+x2.w23+x3.w33) 2-3

其中f( )是激化函数(如线性阈值的sigmoid函数等)。

三、神经网络模型与仿真

clk产生脉冲信号,输入端x1,x2,x3 分别置为011,100,101,权值初值设为0000,通过9个脉冲周期一次递增到1000,将权值与输入值进行运算,得出结果。在权值固定时,输出取决于输入,不同的输入得到不同的输出结果。而在权值变化时,输出就由输入和权值决定。

为了仿真的结果更直观,代码采用的每个神经元的3个输入信号以及权值的位宽都为4,且带有符号。权值共设了9个,采用9个时钟周期将权值移入值。模拟与仿真的结果如图2所示。

结果分析:模拟结果与结果一致,此仿真成功。

四、结语

基于VHDL编程实现简单神经网络的软件模拟与仿真,从算法的提出到模型的建立,完整地体现神经网络的可用性与优越性。文中所提的神经网络模型是对单个神经网络的模拟与仿真,以及基于二维数组的多个输入输出的大规模神经网络的模拟。由于VHDL语言编程的灵活性,可以将编程下载到芯片用硬件实现对神经网络的模拟,以提高系统运算的速度和可靠性。

参考文献:

[1]张青贵.人工神经网络导论[M].北京:中国水利水电出版社,2004.

VHDL中配置语句的基本用法 篇4

目前, 常用的HDL (硬件描述语言) 主要有VHDL、Verilog HDL、System Verilog和System C。其中VHDL在EDA设计中应用相当普遍, 也得到几乎所有主流EDA工具的支持。VHDL一个完整的、可综合的程序结构, 一般包括库 (library) 、程序包 (Package) 、实体 (entity) 、结构体 (structure) 和配置 (configuration) 。

配置是把元件具体安装到实体的最基本设计单元。在综合或仿真中, 可以利用配置语句为确定整个设计提供许多有用信息。例如, 对以元件例化的层次方式构成的VHDL设计实体, 就可以把配置语句的设置看成一个元件表, 以配置语句指定在顶层设计中的某一元件与一特定结构体相衔接, 或赋予特定属性。配置语句还能用于对元件端口连接进行重新安排等。

一般地, 配置语句的用法有默认配置法、元件配置法和实体-结构体对配置法三种。

2 默认配置法

默认配置是一种最简单形式的显式配置, 不含任何块语句和元件的模块用这种配置, 默认配置指定配置实体的配置名和为实体指定的结构体。其一般格式如下:

如前所述, 每个实体可以拥有多个结构体, 而每个结构体的地位是平行的, 在这种情况下, 可以用默认配置方式为实体指定一个结构体。

例1.为一个计数器 (实体名为“test1”) 建立两个配置, 分别把结构体“count_255”和“count_64K”指定给计数器“test1”。

上述两个配置语句为实体指定了两个结构体, 其中配置语句一的配置名为“small_count”, 指定的结构体为count_255, 即此配置语句实现实体的模为256的计数功能;配置语句二的配置名为“big_count”, 指定的结构体为count_64K, 即此配置语句实现实体的模为64K的计数功能。

3 元件配置法

在VHDL设计中, 通常会采用自顶向下的层次设计方法。一般而言, 高层电路会调用低层电路或元件。我们可以利用配置语句, 通过对被调元件指定一定功能的结构体, 从而使高层电路完成相应的功能目标。由于被调用元件可以指定不同的结构体, 相应地, 高层电路也能完成不同的功能。运用元件配置法, 需定义并配置好低层元件。

元件配置的格式如下:

一般地, 库名为WORK库。

例2.创建一个电路, 要求实现模为64K的计数功能。

(1) 先创建低层电路, 并进行配置, 如例1所示。

(2) 创建一个高层 (顶层) 电路, 并进行配置, 代码如下:

如果我们想实现模为256的计数器, 只需要将work.big_count改为work.small_count即可。

4 实体-结构体对配置法

此方法与元件配置法有些类似, 只是实体-结构体对配置法是直接为高层电路调用的低层元件指定具体结构体。其使用格式如下所示:

同样地, 库名一般为WORK库。

例3.创建一个电路, 要求实现模为256的计数功能。

(1) 先创建低层电路, 并进行配置, 如例1所示。

(2) 创建一个高层 (顶层) 电路 (代码与例2配置语句之前代码相同) , 且配置代码如下:

在上述配置语句中, 将高层实体test2的结构体behave指定为低层实体test1的结构体count_255的配置, 从而实现了模为256的计数器。很明显, 只要将上述语句中的“work.test1 (count_255) ”改为“work.test1 (count_64K) ”即可实现模为64K的计数器。

5 结语

配置主要为高层 (顶层) 设计实体指定结构体, 或为参与例化的元件实体指定所希望的结构体, 以层次方式来对元件例化作结构配置。实现的方法简单、实用和高效, 在运用以上三种方法时, 需要注意其用法与使用场合, 并搞清高层实体与低层实体及结构体之间的关系。

参考文献

[1]潘松, 黄继业.EDA技术实用教程 (第三版) [M].北京:科学出版社, 2006.

[2]邹道胜, 朱如琪.CPLD/FPGA与ASIC设计实践教程 (第二版) [M].北京:科学出版社, 2010.

[3]徐志军, 王金明, 尹廷辉.EDA技术与VHDL设计[M].北京:电子工业出版社, 2009.

VHDL 篇5

题目:八位数码管显示

专业班级:电气工程及其自动化102 姓

名:

周迎接

学 号:

20100344214

指导教师: 付广春

完成日期:2012年12月 27 日

目 录 引言…………………………………………………………………………2 2 总体设计方案………………………………………………………………2 2.1 输入引脚数目的计算……………………………………………………3 2.2 二进制转为十进制部分程序设计………………………………………3 2.3 数码管显示部分程序设计………………………………………………4 3 仿真显示……………………………………………………………………5 3.1 显示3仿真图……………………………………………………………5 3.2显示96的仿真图…………………………………………………………5 4 心得体会……………………………………………………………………6 参考文献………………………………………………………………………6 附录1…………………………………………………………………………7

摘要

随着当今社会电子技术的快速发展,单凭借硬件已不再能满足广大人民的需求,这时候软件就显示除了他们突出的优点。与其他编程语言相比,VHDL语言以其超强的硬件描述能力,良好的可读性和可移植性,以及其良好的用户自定义性受到了广大用户的青睐。VHDL语言在最近几年的发展及其迅猛,由此可以看出其用途已经变的越来越广泛。

一个VHDL程序由5个部分组成,包括实体(ENTITY)、结构体(architecture)、配置(coxnfiguration)、包(package)和库(library)。实体和结构体两大部分组成程序设计的最基本单元。图2.2表示的是一个VHDL 3 程序的基本组成。配置是用来从库中选择所需要的单元来组成该系统设计的不同规格的不同版本,VHDL和Verilog HDL已成为IEEE的标准语言,使用IEEE提供的版本。包是存放每个设计模块都能共享的设计类型、常数和子程序的集合体。库是用来存放已编译的实体、结构体、包和配置。在设计中可以使用ASIC芯片制造商提供的库,也可以使用由用户生成的IP库。

今天我所要设计的是基于VHDL语言的8位数码管显示电路,其要实现的功能是把输入的二进制数转换为对应的十进制数,并通过数码管显示出来。其过程大致可以分为通过程序将输入的二进制数先转换为对应的十进制数,然后再把对应的十进制数与数码管的管脚对应起来,使其显示在数码管上。关键词:二进制转为十进制 数码管显示 共阳数码管1 引言

VHDL 的英文全名是 Very-High-Speed Integrated Circuit Hardware Description Language,诞生于

1982 年。1987 年底,VHDL被美国国防部和IEEE确认为标准硬件描述语言。

VHDL主要用于描述数字系统的结构,行为,功能和接口。除了含有许多具有硬件特征的语句外,VHDL的语言形式和描述风格与句法是十分类似于一般的计算机高级语言。VHDL的程序结构特点是将一项工程设计,或称设计实体(可以是一个元件,一个电路模块或一个系统)分成外部(或称可视部分,及端口)和内部(或称不可视部分),既涉及实体的内部功能和算法完成部分。在对一个设计实体定义了外部界面后,一旦其内部开发完成后,其他的设计就可以直接调用这个实体。这种将设计实体分成内外部分的概念是VHDL系统设计的基本点。

VHDL 语言能够成为标准化的硬件描述语言并获得广泛应用,它自身必然具有很多其他硬件描述语言所不具备的优点。归纳起来,VHDL 语言主要具有以下优点:[1]

(1)VHDL 语言功能强大,设计方式多样

VHDL 语言具有强大的语言结构,只需采用简单明确的VHDL语言程序就可以描述十分复杂的硬件电路。同时,它还具有多层次的电路设计描述功能。此外,VHDL 语言能够同时支持同步电路、异步电路和随机电路的设计实现,这是其他硬件描述语言所不能比拟的。VHDL 语言设计方法灵活多样,既支持自顶向下的设计方式,也支持自底向上的设计方法; 既支持模块化设计方法,也支持层次化设计方法。

(2)VHDL 语言具有强大的硬件描述能力

VHDL 语言具有多层次的电路设计描述功能,既可描述系统级电路,也可以描述门级电路;描述方式既可以采用行为描述、寄存器传输描述或者结构描述,也可以采用三者的混合描述方式。同时,VHDL 语言也支持惯性延迟和传输延迟,这样可以准确地建立硬件电路的模型。VHDL 语言的强大描述能力还体现在它具有丰富的数据类型。VHDL 语言既支持标准定义的数据类型,也支持用户定义的数据类型,这样便会给硬件描述带来较大的自由度。

(3)VHDL 语言具有很强的移植能力

VHDL 语言很强的移植能力主要体现在: 对于同一个硬件电路的 VHDL 语言描述,它可以从一个模拟器移植到另一个模拟器上、从一个综合器移植到另一个综合器上或者从一个工作平台移植到另一个工作平台上去执行。

(4)VHDL 语言的设计描述与器件无关

采用 VHDL 语言描述硬件电路时,设计人员并不需要首先考虑选择进行设计的器件。这样做的好处是可以使设计人员集中精力进行电路设计的优化,而不需要考虑其他的问题。当硬件电路的设计描述完成以后,VHDL 语言允许采用多种不同的器件结构来实现。

(5)VHDL 语言程序易于共享和复用

VHDL 语言采用基于库的设计方法。在设计过程中,设计人员可以建立各种可再次利用的模块,一个大规模的硬件电路的设计不可能从门级电路开始一步步地进行设计,而是一些模块的累加。这些模块可以预先设计或者使用以前设计中的存档模块,将这些模块存放在库中,就可以在以后的设计中进行复用。

本次我所要设计的基于VHDL语言的八位数码管显示将充分体现它的部分优点。总体设计方案

2.1 输入引脚数目的计算

因为题目要求数码管要能显示最大的八位十进制二进制数,所以对应的二进制表示的十进制数首先要大于99999999,即2的所有n次幂之和应该大于99999999,数码管才能显示出最大的八位十进制数,所以计算可得n的值最小为27,所以输入二进制数的引脚应该设为27个,其二进制数输入引脚图如图1所示

图1 二进制数输入引脚图

2.2 二进制转为十进制部分程序设计 二进制转为十进制的部分程序如下: architecture one of look is signal ai,bi,ci,ki,ei,fi,gi,hi:integer range 0 to 9;signal di:integer range 0 to 99999999;begin di<=conv_integer(d);2.3 数码管显示部分程序设计

2.3.1 程序中数码管的选择及显示的设置

在本设计中按照我的程序硬件所选用的应该为共阴极数码管,且当某一位数码管不需要显示数据时,统一设定其显示0,例如需要显示1时,八个数码管的显示为00000001。

2.3.2 数码管显示部分部分程序如下: …………

variable a,b,c,k,e,f,g,h:integer range 0 to 9;begin a:=di rem 10;7 b:=(di-a)rem 100;c:=(di-a-10*b)rem 1000;k:=(di-a-10*b-c*100)rem 10000;e:=(di-a-10*b-c*100)rem 100000;f:=(di-a-10*b-c*100-1000*e)rem 1000000;g:=(di-a-10*b-c*100-1000*e-10000*f)rem 10000000;h:=(di-a-10*b-c*100-1000*e-10000*f-100000*g)/10000000;ai<=a;bi<=b;ci<=c;ki<=k;ei<=e;fi<=f;gi<=g;hi<=h;end process;process(ai)begin case ai is

when 0=>led7s1(6 downto 0)<=“1000000”;

when 1=>led7s1(6 downto 0)<=“1111001”;

when 2=>led7s1(6 downto 0)<=“0100100”;

when 3=>led7s1(6 downto 0)<=“0110000”;

when 4=>led7s1(6 downto 0)<=“0011001”;8

when 5=>led7s1(6 downto 0)<=“0010010”;

when 6=>led7s1(6 downto 0)<=“0000010”;

when 7=>led7s1(6 downto 0)<=“1111000”;

when 8=>led7s1(6 downto 0)<=“0000000”;

when 9=>led7s1(6 downto 0)<=“0010000”;

when others=>led7s1(6 downto 0)<=“XXXXXXX”;end case;end process;…………

2.3.3 数码管显示部分引脚图

数码管显示部分部分引脚图如图2 所示

图 2 数码管显示部分部分引脚图

2.2.4 总体设计程序见附表1 3 仿真显示

3.1 显示“000000003”仿真图

显示数字“3”的仿真图如图3所示,因为根据程序所需数码管为共阳极数码管,所以数码管对应的“e”,“f”段应该为高电平,在本次设计中,即数码管的第5,6段为高电平,为了便于观察,仿真的各项周期均取10ns。

图3 显示“3”电路 3.2 显示“96”部分仿真图,如图4所示

图4 显示“96”仿真图 心得体会

通过这次的课程设计让我对VHDL语言以及电路设计的理论有了更加深入的了解,课程设计是培养学生综合运用所学知识,发现、提出、分析和解决实际问题,锻炼实践能力的重要环节,这次课程设计虽然很累,但我学到了不少东西,对软件的设计过程和方法有了更深入的了解。在课程设计过程中,我学到了很多人生的哲理,懂得怎么样去制定计划,怎么样去实现这个计划,并掌握了在执行过程中怎么样去克服心理上的不良情绪,黑夜过去了,我们收获的是黎明。在本次实践中,给我印象最为深刻的是在文件删除程序的编译过程中,先有我的各个子程序都已经编辑成功,那么这最后的程序就将是我成功的关键。

这次课程设计顺利完成了,在设计中遇到了很多问题,最后都是经过查阅相关的资料和在同学的帮助下,终于游逆而解。同时,在我学得到很多实用的知识,同时,对给过我帮助的所有同学再次表示忠心的感谢!

参考文献

【1】黄继业.EDA技术使用教程[M].北京:科学出版社,2010 【2】王云亮.电力电子技术[M].北京:电子工业出版社,2009 【3】康光华.电子技术基础[M].北京:高等教育出版社,2006

附录1 library ieee;12 use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use ieee.std_logic_arith.all;entity look is port(d:in std_logic_vector(26 downto 0);clk3:in std_logic;led7s1,led7s2,led7s3,led7s4,led7s5,led7s6,led7s7,led7s8:out std_logic_vector(6 downto 0));end;architecture one of look is signal ai,bi,ci,ki,ei,fi,gi,hi:integer range 0 to 9;signal di:integer range 0 to 99999999;begin di<=conv_integer(d);

process(di)variable a,b,c,k,e,f,g,h:integer range 0 to 9;begin a:=di rem 10;b:=(di-a)rem 100;c:=(di-a-10*b)rem 1000;k:=(di-a-10*b-c*100)rem 10000;e:=(di-a-10*b-c*100-k*1000)rem 100000;f:=(di-a-10*b-c*100-k*1000-10000*e)rem 1000000;g:=(di-a-10*b-c*100-k*1000-10000*e-100000*f)rem 10000000;h:=(di-a-10*b-c*100-k*1000-10000*e-100000*f-1000000*g)/10000000;ai<=a;bi<=b;ci<=c;ki<=k;ei<=e;fi<=f;gi<=g;hi<=h;end process;process(ai)begin case ai is

when 0=>led7s1(6 downto 0)<=“1000000”;

when 1=>led7s1(6 downto 0)<=“1111001”;13

when 2=>led7s1(6 downto 0)<=“0100100”;

when 3=>led7s1(6 downto 0)<=“0110000”;

when 4=>led7s1(6 downto 0)<=“0011001”;

when 5=>led7s1(6 downto 0)<=“0010010”;

when 6=>led7s1(6 downto 0)<=“0000010”;

when 7=>led7s1(6 downto 0)<=“1111000”;

when 8=>led7s1(6 downto 0)<=“0000000”;

when 9=>led7s1(6 downto 0)<=“0010000”;

when others=>led7s1(6 downto 0)<=“XXXXXXX”;end case;end process;process(bi)begin case bi is

when 0=>led7s2(6 downto 0)<=“1000000”;

when 1=>led7s2(6 downto 0)<=“1111001”;

when 2=>led7s2(6 downto 0)<=“0100100”;

when 3=>led7s2(6 downto 0)<=“0110000”;

when 4=>led7s2(6 downto 0)<=“0011001”;

when 5=>led7s2(6 downto 0)<=“0010010”;

when 6=>led7s2(6 downto 0)<=“0000010”;

when 7=>led7s2(6 downto 0)<=“1111000”;

when 8=>led7s2(6 downto 0)<=“0000000”;

when 9=>led7s2(6 downto 0)<=“0010000”;

when others=>led7s2(6 downto 0)<=“XXXXXXX”;end case;end process;process(ci)begin case ci is

when 0=>led7s3(6 downto 0)<=“1000000”;

when 1=>led7s3(6 downto 0)<=“1111001”;

when 2=>led7s3(6 downto 0)<=“0100100”;

when 3=>led7s3(6 downto 0)<=“0110000”;

when 4=>led7s3(6 downto 0)<=“0011001”;

when 5=>led7s3(6 downto 0)<=“0010010”;

when 6=>led7s3(6 downto 0)<=“0000010”;14

when 7=>led7s3(6 downto 0)<=“1111000”;

when 8=>led7s3(6 downto 0)<=“0000000”;

when 9=>led7s3(6 downto 0)<=“0010000”;

when others=>led7s3(6 downto 0)<=“XXXXXXX”;end case;end process;process(ki)begin case ki is

when 0=>led7s4(6 downto 0)<=“1000000”;

when 1=>led7s4(6 downto 0)<=“1111001”;

when 2=>led7s4(6 downto 0)<=“0100100”;

when 3=>led7s4(6 downto 0)<=“0110000”;

when 4=>led7s4(6 downto 0)<=“0011001”;

when 5=>led7s4(6 downto 0)<=“0010010”;

when 6=>led7s4(6 downto 0)<=“0000010”;

when 7=>led7s4(6 downto 0)<=“1111000”;

when 8=>led7s4(6 downto 0)<=“0000000”;

when 9=>led7s4(6 downto 0)<=“0010000”;

when others=>led7s4(6 downto 0)<=“XXXXXXX”;end case;end process;process(ei)begin case ei is

when 0=>led7s5(6 downto 0)<=“1000000”;

when 1=>led7s5(6 downto 0)<=“1111001”;

when 2=>led7s5(6 downto 0)<=“0100100”;

when 3=>led7s5(6 downto 0)<=“0110000”;

when 4=>led7s5(6 downto 0)<=“0011001”;

when 5=>led7s5(6 downto 0)<=“0010010”;

when 6=>led7s5(6 downto 0)<=“0000010”;

when 7=>led7s5(6 downto 0)<=“1111000”;

when 8=>led7s5(6 downto 0)<=“0000000”;

when 9=>led7s5(6 downto 0)<=“0010000”;

when others=>led7s5(6 downto 0)<=“XXXXXXX”;end case;15 end process;process(fi)begin case fi is

when 0=>led7s6(6 downto 0)<=“1000000”;

when 1=>led7s6(6 downto 0)<=“1111001”;

when 2=>led7s6(6 downto 0)<=“0100100”;

when 3=>led7s6(6 downto 0)<=“0110000”;

when 4=>led7s6(6 downto 0)<=“0011001”;

when 5=>led7s6(6 downto 0)<=“0010010”;

when 6=>led7s6(6 downto 0)<=“0000010”;

when 7=>led7s6(6 downto 0)<=“1111000”;

when 8=>led7s6(6 downto 0)<=“0000000”;

when 9=>led7s6(6 downto 0)<=“0010000”;

when others=>led7s6(6 downto 0)<=“XXXXXXX”;end case;end process;process(gi)begin case gi is

when 0=>led7s7(6 downto 0)<=“1000000”;

when 1=>led7s7(6 downto 0)<=“1111001”;

when 2=>led7s7(6 downto 0)<=“0100100”;

when 3=>led7s7(6 downto 0)<=“0110000”;

when 4=>led7s7(6 downto 0)<=“0011001”;

when 5=>led7s7(6 downto 0)<=“0010010”;

when 6=>led7s7(6 downto 0)<=“0000010”;

when 7=>led7s7(6 downto 0)<=“1111000”;

when 8=>led7s7(6 downto 0)<=“0000000”;

when 9=>led7s7(6 downto 0)<=“0010000”;

when others=>led7s7(6 downto 0)<=“XXXXXXX”;end case;end process;process(hi)begin case hi is

when 0=>led7s8(6 downto 0)<=“1000000”;16

when 1=>led7s8(6 downto 0)<=“1111001”;

when 2=>led7s8(6 downto 0)<=“0100100”;

when 3=>led7s8(6 downto 0)<=“0110000”;

when 4=>led7s8(6 downto 0)<=“0011001”;

when 5=>led7s8(6 downto 0)<=“0010010”;

when 6=>led7s8(6 downto 0)<=“0000010”;

when 7=>led7s8(6 downto 0)<=“1111000”;

when 8=>led7s8(6 downto 0)<=“0000000”;

when 9=>led7s8(6 downto 0)<=“0010000”;

一种VHDL语言代码重用的方法 篇6

随着可编程逻辑器件技术的发展,芯片的性能越来越强、规模越来越大、开发的周期越来越长,使得器件应用正面临一系列新的问题:设计质量难以控制,设计成本也越来越高。IP(Intelligence Property)技术解决了当今芯片设计业所面临的难题。设计者可以重复使用已经设计并经过验证的IP核,将精力集中于系统顶层及关键功能模块的设计上,从而提高产品整体性能和个性化特性,加快了设计效率。

如何才能提高IP核的重复使用率,使设计资源更好地集中起来加以利用,是可编程逻辑器件应用面临的另一个问题。在VHDL(VHSIC Hardware Description Language)语言中,库(LIBRARY)文件很好地解决了这个问题。库文件是专门用于存放预先编译好的程序包(PACKAGE)和数据集合体,这些设计单元可用作其他VHDL描述的资源。用户编写的设计单元既可以访问多个设计库,又可以加入到设计库中,被其他单元所访问。此外,库的使用能够实现层次化设计和功能模块化设计方法,有利于使复杂设计具有更清晰的结构。

1 库组成

在VHDL中,常用的库有IEEE、STD、WORK、用户库等。库文件常用的语句为元件(COMPONENT)和子程序(过程和函数),为了使程序包能够被编译,元件和子程序必须被添加到被称为包集合的程序包中。用户库是用户定义库的简称,是由用户自己创建并定义的库。设计者可以把自己开发的非标准包集合和实体等汇集成在一起定义成一个库,作为对VHDL标准库的补充。用户将需要重复使用的代码以元件和子程序的形式放到包集合中,编译到目标库中,生成用户库,供其它设计单元调用。在设计中要使用某个程序包中的内容时,用USE语句即可打开该程序包。

2 库构件说明

2.1 包集合

在用户库中,包集合放置的是用户自己定义的元件、函数、过程。包集合包括包头和包体两部分。包头用来声明包中的类型、元件和子程序;而包体则用来存放说明中的元件源代码和子程序。程序包声明单元的语法格式为:

说明语句

END[程序包名];

其中说明语句为:USE语句、类型定义、常量定义、元件声明、子程序声明及信号声明等。程序包体单元的的语法格式为:

说明语句

END[程序包名];

2.2 元件

用户库通过元件定义的方式,将一些设计好的电路单元纳入,其他设计体则通过元件实例化的方法调用这些元件,使得元件与其他设计实体中的端口相连接,从而为当前设计实体引入低一级的设计层次设计。

2.2.1 元件定义

元件定义语句放在包集合的包头中,指出包集合所包含的具体元件,元件源代码可以独立编译,不需要纳入包集合中。元器件定义语句的语法格式为:

COMPONENT元件名IS

GENERIC(常量、参数列表);

PORT(元件端口列表);

END COMPONET;

其中,常量、参数列表与元件源代码实体中的GENERIC部分相同;元件端口列表,与元件源代码实体中的PORT部分相同。

2.2.2 元件调用

元件调用称为元件实例化,在元件实例化过程中有位置映射和名称映射两种方法可以实现。

位置映射中参数、端口信号名称在顺序、端口状态和数据类型上必须和元件源代码保持一致,各个参数、端口意义取决于它的位置。位置映射元件实例化语句的语法格式为:

COMPONENT元件名(

GENERIC MAP(常量、参数列表)

PORT MAP(元件端口列表));

名称映射用符号“=>”连接元件参数、端口和结构体之间的参数、端口。名称映射元件实例化语句的语法格式为:

COMPONENT元件名(

GENERIC MAP(元件源程序常量列表=>常量值)

元件源程序参数列表=>参数量值)

PORT MAP(元件端口列表=>信号名称));

其中,左边列出元件源代码中参数、端口名称,右边列出调用代码中对应的参数值、端口信号名称。左右两边的数值、信号名称可以不相同,语句中位置顺序可以任意。

2.3 子程序

VHDL中的子程序有过程(PROCEDURE)及函数(FUNCTION)两类,主程序和子程序之间通过端口参数列表位置关联方式进行数据传送,子程序可以被多次调用完成重复性的任务。子程序包含子程序声明和主体两部分,子程序声明必须要在包头中,子程序主体则放在包体中。

2.3.1 函数

函数通常用来实现数据类型转换、逻辑运算、算术运算类型的代码共享和重用,即输入若干参数,通过函数运算求值,最后直接返回一个值。函数应用分为建立和调用两个过程。

1)函数建立

函数分为函数声明和函数主体体,函数声明是包集合与函数的接口界面,放在包集合的包头部分,而函数主体应放在包集合的包体内。函数声明首语句的语法格式为:

FUNCTION函数名(参数列表)RETURN数据类型;

其中,参数列表中为参数名、参数类别及数据类型,函数的参数为信号或常数,默认情况为常数。

函数体语句的语法格式为:

FUNCTION函数名(参数列表)RETURN数据类型IS

[子程序声明部分;]

BEGIN

顺序语句;

END函数名;

其中,在RETURN后面的数据类型为函数返回值的类型;子程序声明项用来说明函数体内引用的对象和过程;顺序语句就是函数体,用来定义函数的功能。

2)函数的调用

函数可以单独构成表达式,或者作为表达式的一部分调用。函数调用语句的语法格式为:

函数名(参数列表);

2.3.2 过程

过程的作用是传递信息,即通过参数进行调用代码和过程代码的信息传递。其中参数需说明类别、类型及传递方向。

1)过程建立

过程分为声明和过程主体,声明应放在包集合的包头部分,过程定义的主体代码应放在包集合的包体内。

过程声明的语法格式为:

PROCEDURE过程名(参数列表);

其中,参数声列表指明了输入、输出端口的数目和类型。

参数声明的语法格式为:

[数据类型参数名:模式]

其中,参数可以有任意多个;参数模式有in、out、inout、buffer形式;参数类型,可以是常数、信号、变量,“in”默认为常数,“out”和“inout”默认为“变量”,若需要将“out”和“inout”作为信号使用,则在过程参数定义时必须指明是信号。

过程定义的语法格式为:

PROCEDURE过程名(参数列表)IS

[子程序声明部分];

BEGIN

顺序语句;

END[PROCEDURE][过程名];

2)过程的调用

过程的调用是一条语句,调用时通过其接口返回0个或多个值。过程可以直接调用,也可以在其他语句中调用。过程调用语句的语法格式为:

过程名(参数);

在过程语句执行结束后,如没有特别说明,输出和输入输出参数将按变量对待将值传递给调用者的变量。如果调用者需要输出和输入输出作为信号使用,则在过程参数定义时要指明是信号。

3 库的调用

使用库之前,首先需要对库进行声明。经过声明之后,在设计中就可以调用库中的代码了。用户库声明的语法格式:

LIBRARY库名;

USE库名.程序包名.包集合名;

4 结束语

用户库是VHDL语言中非常重要的代码分割、共享、重用的方法,只要将重用的代码按功能特性以元件、函数、过程形式构建成可重用部件放置在包集合内,经过编译后生成用户库文件,在后续编码过程中通过库声明即可调用用户库。

用户库的使用可以使代码结构更加清晰,并且库中的代码通常要经过严格的测试和优化,利用用户库进行电路设计,可以在FPGA等可编程逻辑器件中达到最优的性能和最低的逻辑资源使用率,以保证电路的性能和质量。因而,能在降低开发成本、缩短开发周期的同时提高了设计可靠性。

参考文献

[1]孙晓东.FPGA软件设计[J].电脑编程技巧与维护,2010(12):5-6.

[2]李冰,吴金,魏同立.基于可重构核的FPGA电路设计[J].固体电子学研究与进展,2003,1(23):108-109.

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

VHDL 篇7

关键词:LCD1602,VHDL,时序

0 引言

液晶显示模块是一种将液晶显示器件、连接件、集成电路、PCB线路板、背光源、结构件装配在一起的组件,称为“LCD Module”,在各种电子系统中作为显示输出十分常见。根据液晶显示器件的显示方式,液晶显示模块分为三类:数显(字段式)液晶显示模块、点阵字符型液晶显示模块、点阵图形液晶显示模块[1]。本设计中使用的是一种常见的16列2行的点阵字符型液晶显示模块,即LCD1602。VHDL是一种流行的硬件描述语言,广泛地应用于基于CPLD/FPGA的数字系统设计之中。本文结合某一常见的1602液晶显示模块,运用VHDL语言采用循序渐进的思路,完成了相关的控制及显示输出,揭示常用的硬件模块的资料阅读方法及其应用的基本思路。

1 LCD1602原理

字符型液晶显示模块是由字符型液晶显示屏LCD,控制驱动主电路HD44780/KS0066及其扩展驱动电路HD44100或与其兼容的IC,电阻、电容元件结构件等装配在PCB板上而成。通常有14条引脚线或16条引脚线的LCD,后者多出来的2条线是背光电源线VCC(15脚)和地线GND(16脚),其控制原理与14脚的LCD完全一样。引脚定义如表一所示[2,3]。

HD44780内置了DDRAM、CGROM和CGRA-M。DDRAM即显示数据RAM,用来寄存待显示的字符代码,共80个字节,其地址和屏幕的对应关系如表二所示。

在LCD的某一特定位置显示某一特定字符,一般要遵循“先指定地址,后写入内容”的原则。若要在LCD上显示一串连续的字符,并不需要每次写字符码之前都指定一次地址,液晶控制模块中的地址计数器AC(Address Counter)负责记录写入DDRAM数据的地址,或从DDRAM读出数据的地址,它能根据用户的指令自动进行自动加一与自动减一。

LCD1602操作共11条指令,如表三所示[2,3]:

本设计使用的液晶模块的初始化时序[3]如图一所示。

2 LCD1602显示输出控制的VDHL设计

2.1 按时序顺序操作

8位LCD模块初始化的顺序要求解读如下:(1)上电;等待至少40ms;(2)功能设定;等待至少39us;(3)功能设定;等待至少37us;(4)显示开关设定;等待至少37us;(5)清屏;等待至少1.53ms;(6)进入模式设定;(7)初始化结束,指定地址;(8)上步地址处写入需要显示的字符在ASCI码表中对应的地址。

根据上述顺序要求,本设计实现在指定位置显示指定字符,以在屏幕第一行第一、二个位置依次显示字符A、B;在屏幕第二行第一、二个位置依次显示字符C、D。主要程序如下:

本设计中,要达到时序操作的时间要求,时钟采用50M晶振分频得到1HZ作为LCD_CLK,这样每个时钟周期为1秒,远大于表三以及图一中所规定的时间,可以满足要求;同时,为了方便起见,将LCD_RS对应于LCD_Data的最高位,与LCD_Data的其他8位同时赋值。

2.2 设计状态机

本设计完成A,B,C,…,O共16个字符在屏幕上依次显示的效果。根据前述8位LCD模块初始化的顺序要求,设置LCD控制的7个状态,分别为set_clear、set_function、set_disp、set_entry,set_ddram、write_cgram、write_LCD_Data。按照LCD初始化的时序要求,状态转换如图二所示。

主要程序如下:

根据不同的设计需要,状态机可以设计得更为详细,状态转换过程更为细致。

2.3 作为其他设计显示模块

为了作为其他设计的显示模块使用,增加其可重复使用性,可在上述Process之前定义函数char_to_integer。该函数主要功能是将ASCII码表中的字符转换为8位的整型数据,在需要时将该8位给LCD_Data赋值即可。

该函数能根据需要显示的内容数据格式进行转换,例如需要显示字符B,在相应的Process中写入以下命令即可:

3 结束语

本文描述了基于VHDL对基本的硬件模块LCD1602实现控制的基本方法,循序渐进地完成各种显示输出的要求。经过下载验证,均可正确运行。本方法思路清晰,便于理解,方便修改与扩充,也可作为控制其他硬件模块的参考。

参考文献

[1]刘福奇.FPGA嵌入式项目开发实战[M].北京:电子工业出版社,2009.

[2]周建春.基于单片机和PC串口通信的温度采集系统设计[D].苏州:苏州大学,2010.

VHDL程序设计的教学研究 篇8

1 上好绪论课, 比较法突出VHDL设计优势

研究发现, 从开始学习一门课程到课程学习完毕, 不少学生不知道为何学习该课程, 也不明白该课程有何用。因此, 整个教学过程变为灌输式教育, 不能充分调动学生的学习积极性。在课程开始时, 学生会有这样的疑问:“VHDL是什么?可以用来干什么?”绪论是教学的重要开端, 教师应精心设计教学, 将学生的疑问转化为学习的兴趣。 (4) 比较法, 是上好绪论课培养学生兴趣的重要手段。例如:首先, 用传统的方法设计一个二路分配器, 设计过程为: (1) 画真值表; (2) 写表达式, 画电路图; (3) 选择器件; (4) 焊接电路; (5) 调试;其次, 采用VHDL进行设计, 一段小程序即可实现。通过比较法教学, 学生很容易发现利用VHDL进行系统的设计比用传统方法进行设计更容易, 具有多个方面的优势, 同时学生对VHDL的涵义以及该课程用途也有了初步的了解。如此, 才能调动学生学习VHDL的主观能动性, 这是学生学好一门课程的基础。

2 教学内容的组织, 纵向深入, 注重培养实践能力

VHDL程序设计的实施根据学习的进度, 可以分成三个阶段, 其授课内容也从三个方面展开, 并突出实践性。

首先, 初步阶段, VHDL语法的初步教学, EDA开发软件的熟悉。教学内容主要介绍VHDL技术及相关基础知识, 可编程逻辑器件 (CPLD/FPGA) 的内部结构, 着重对VHDL语言进行介绍, 包括程序基本结构, 语言要素等, 并详细介绍Altera公司MAXPLUSⅡ软件。实践主要任务是让学生熟悉VHDL的开发软件MAX+plusⅡ的使用, 并完成一些原理图输入设计的简单实验, 了解VHDL的特点, 为后面的深入学习与应用打下坚实的基础。

其次, 基础教学阶段, 熟悉实验装置。让学生在EDA实验装置上完成一些基础实验, 主要为验证性实验。这部分实验大多为示例实验, 学生只需读懂实验程序再完成少许的修改即可。通过这些基础实验, 主要目的是使学生掌握VHDL设计流程以及开发方法, 进而掌握可编程逻辑器件 (FPGA/CPLD) 的特点及其硬件接口的使用。掌握VHDL程序设计的基本结构以及程序的编译、仿真、引脚锁定和下载等方法。总之, 这部分教学的主要实践任务就是让学生对基本的开发过程能熟练掌握。

最后, 提高阶段, 开展综合实验和创新实验。一方面锻炼学生在VHDL综合实验平台上完成综合实验, 另一方面学生可自行在VHDL综合实验装置上进行创新实验。如:乒乓球游戏控制器, 乐曲演奏器, 出租车计费器等设计, 学生可以用原理图和VHDL程序设计相结合的方法, 自行在VHDL综合实验装置上进行创新实验。EDA (VHDL) 综合实验装置还具有扩展口, 学生可做一些小模块与实验装置进行连接, 完成更多更强大的功能。如此, 可以提高学生灵活运用VHDL进行设计和开发的能力, 真正做到学以致用。

3 发挥网络教学优势

VHDL课程不仅仅是一门语言, 其既要讲解VHDL语言的一些语法规则, 又要重视程序设计、系统开发及实现。因此, 单一的课堂教学并不能真正很好地完成教学任务。当前日益成熟的网络教学正是对课堂教学很好的补充。教师可以通过网络面对每一个学生, 真正实现因材施教;学生也可通过网络这个平台, 获得更多的信息和交流, 从而得到更大的提高。网络课堂中可设置“课程简介”“教学资源”“在线课堂”“电子作业答疑”“师生互动”“最新动态”“论坛”等多个栏目, 既充分满足学生学习和交流的需要, 又可使教师充分掌握学生的情况, 因材施教。其中, “论坛”栏目, 可以给学生提供一个没有时间和空间界限的讨论空间, 学生在论坛中相互讨论和学习, 解决问题, 甚至组成团队开发实际系统。

4 实践技能考核

现行的考试体系中, 大多是由笔试来决定学生水平的高低。实践方面的实验作为平时成绩, 只占总成绩的很少部分。如此的考核机制, 使得学生只重视理论而忽视了实验实践。许多学生只是在临近考试时, 突击死背课本来获得好成绩。VHDL课程的实践性很强, 要求学生灵活运用且有很强的实践动手能力, 如果考试体系仅重视理论学习, 则无法真正达到教学目的。因此, 为了加强学生的实践能力, 可以将课时一半安排多媒体授课, 一半在实验室进行授课。成绩考核以技能考核为主, 期终理论考试为辅, 最终进行综合成绩评价。成绩宜由三部分组成:平时成绩 (出勤、作业及实验) 占25%+理论考试成绩占25%+实践技能测试成绩占50%。

5 结论

VHDL程序设计是一门涉及面广、实践性和应用性很强的技术应用型课程。如果没有学生主观能动的参与, 要想将这门课程教好是很难的。本文从课堂导入、教学内容、网络教学手段、考核方式等方面, 对VHDL程序设计课程的教学进行探讨, 提高学生能动性和实践能力。当然, 可编程逻辑器件是不断更新的, VHDL程序设计的教学内容也要相应地不断调整, 教学方法和方式也需不断改进, 这样才能培养出适应时代发展的合格人才。

摘要:在简要介绍VHDL语言特点的基础上, 就如何激发学生的学习兴趣, 培养其实践动手能力, 提出了四个方面的改革建议。主要从课堂导入、教学内容、网络教学以及考核方式四个方面进行论述。

关键词:VHDL,绪论课,网络教学,实践

参考文献

①潘松, 黄继业.EDA技术实用教程 (第3版) [M].北京:科学出版社, 2006.

②卢毅, 赖杰.VHDL与数字电路设计[M].北京:科学出版社, 2001.

③方怡冰.算术运算的VHDL描述方法探讨[J].电气电子教学学报, 2007 (2) :92-94.

VHDL 篇9

在计算机结构里, 加、减、乘、除是常被用到的运算, 本文提出以超高速集成电路硬件描述语言 (VHDL) 来描述硬件, 建立一个基于VHDL的智能测试模块, 进行两个运算元做相乘的运算。两个二进位数相乘如十进位数相乘一样, 图1为四位元做手动计算乘法运算图。首先由右至左逐次检查乘数位元是否为1, 如为1, 将被乘数移至适当的位置, 如为0, 将0放置在适当位置。其次将所有移位被乘数求和即为所得积, 此积应为八位元。图为乘法中硬件的运算情形[1], 利用多重加法器来完成, 即每一步中一个四位元加法器可用来计算其新的部分乘积。由于进行计算时, 最不重要位元在连续加法中并不受到影响, 因此他们可直接放到最后乘积中。

2 乘法智能测试模块制作概念

现在我们可以运用最简单且直观的方式来完成所需要的硬件电路描述, 所以在往后的程序中我们使用ANDGATE来做部分乘积的运算, 使用全加器来计算部分乘积的最后结果。

下面为全加器的代数式:

其中, A、B分别代表两个输入运算元;Cin为前一个位元所做的加法进位;S为相加后的结果;Cout为相加后的进位, 也就是连接至下一个全加器的Cin。这两个代数式是全加器中的内部运作, 通过全加器的运算能将所有的部分乘积相加, 以得到我们所要的乘积。

本研究使用MAX+plus II10.0软件, 以VHDL编辑动作内容, 编辑过程分述如下: (1) 开启新档并将其存成mul8_8v。 (2) 指定模块名称与文档相同, 可将File里的Project Name定为mul8_8v。 (3) 程序库宣告, 在“VHDLTemplate”对话框选取“Library Clause”与“Use Clause”。 (4) 更改程序库名称, 改为使用“IEEE”Library的“std_logic_1164.ALL”。 (5) 插入样本, 从VHDLTemplate中选取“Entity Declaration”。 (6) 将__ENTITY_Name IS中的Name改为与文档名称相同。 (7) 设定脚位名称, 将A、B设为IN的变量, 并设定数据型态为STD_LOGIC_VECTOR (7downto0) ;设M为OUT的变量, 数据型态为STD_LOGIC_VECTOR (15downto0) 。 (8) 在信号宣告区宣告一个名为temp1的信号, 数据型态为STD_LOGIC_VECTOR (7downto0) ;一个名为temp2的信号, 数据型态为STD_LOGIC_VECTOR (8downto0) ;一个名为temp3的信号, 数据型态为STD_LOGIC_VECTOR (9downto0) ;一个名为temp4的信号, 数据型态为STD_LOGIC_VECTOR (10downto0) 。以此类推由于输入为8位元, 会得到8列位移的乘积, 所以信号宣告要设到temp8。在BEGIN与END间插入八个“Conditition Signa Assignment”的样本。 (9) 指定设计组件, 选择FLEX8000系列的“EPF8282ALC84-4”。 (10) 进行组译, 完成后进入波形编译, 选取“Waveform Editor”, 选取输入A、B与输出M。 (11) 输入A、B变量进行模拟, 并验算结果是否有误。 (12) 规划脚位及下载程序。完成以上步骤, 即完成8位元乘法智能测试模块。

3 模拟计算结果分析

接下来我们计算二进制模拟测试结果, 把所有跟1相乘的数值加起来, 就可以知道它是多少。至于16位元的二进制则以此类推, 扩展到256、512、1024····到33568。在MAX+plus II软体虽也有转换的设置 (如图3所示) , 但若在程序里设错或是多设位元时, 就会出错, 所以也必须要具备这些相关知识。

4 结论

VHDL对于电路的设计可以从很高阶的方式写起, 也可从低阶的方式写起, 像是电路图 (即schematics) 也可以完成我们所需的工作, 但电路太复杂时就不适宜。在位元数少的两运算元相乘的乘法智能测试模块设计中, 先写出其布林方程式, 其次利用VHDL程序写法使用基本逻辑运算子将布林方程式描述出来也可用类似手动运算相乘乘法智能测试模块结构利用VHDL程序写法。由此可看出本研究所设计的智能测试模块有一定的实用性。

参考文献

[1]戴丹丹.基于FPGA浮点运算器的研究[D].内蒙古大学, 2012.

VHDL实验教学的研究与探索 篇10

关键词:VHDL语言,实验兴趣,CPLD/FPGA

随着电子技术的飞速发展, 越来越多的高速处理电路采用CPLD/FPGA来设计。由于其高速度、高可靠性、高集成度等优点已经被广泛应用在工业自动化控制, 智能仪器仪表, 数据采集、通讯、数字图象处理等领域, 已成为现代工业领域中不可缺少的重要角色, 所以学习硬件描述语言程序设计已成为电子信息类学生必选课之一。

在VHDL学习中, 理论与实践是紧密联系, 相辅相成的, 用理论来指导实践, 用实践来加强理论。在教学中, 实验课占据很大的比例是非常重要的, 因此在实验教学中如何激发学生的实验兴趣, 将实验教学过程设计成为一个愉快的学习过程, 发展学生动手能力, 培养学生学习兴趣, 值得我们深入研究。

一、VHDL语言的主要特点

VHDL语言最早由美国国防部提出的。用VHDL语言进行数字逻辑电路和数字系统的设计, 是电子电路设计方法上的一次革命性变革。与传统设计方法相比, VHDL描述电路行为的算法有很多优点: (1) 设计层次较高、用于较复杂的计算时, 能尽早发现存在的问题, 缩短设计周期。; (2) 独立实现, 修改方便, 系统硬件描述能力强; (3) 可读性好, 有利于交流, 适合于文档保存; (4) VHDL语言标准、规范、移植性强; (5) VHDL类型众多而且支持用户自定义类型, 支持自顶而下的设计方法和多种电路的设计。

VHDL代码与一般计算机程序代码的异同:计算机程序是按CPU的时钟节拍顺序工作的, 而VHDL是硬件描述语言的简称, 它与计算机程序代码有本质的区别, 它是硬件的描述, 而硬件是并行工作的, 不过VHDL语言也借鉴了计算机程序语言的部分功能。

二、妨碍学生实验兴趣发展的原因分析

1.实验课的内容与形式不能很好地调动学生的学习积极性。

学生最感兴趣的是那些有所了解却又非完全已知、能够引起思考的东西, 而教材中的实验大多具有已知程序、已知实验结果的特点, 实验时只需查找代码后输入即可, 很容易流于重复与枯燥。

2.实验课与考试内容脱节。

由于实验课的内容在考试时很难体现或是体现很少, 因此, 学生将大部分精力与时间用于理论课学习。上实验时, 心中无数, 只求机械地模仿教师的操作过程以完成实验, 很少考虑实验原理、实验中出现的各种问题等, 不能主动地学习和思考。长此以往, 实验也就失去了培养学生动手能力的意义。

3.教师的教育、教学思想和策略不当。

不少学生在做实验时小心翼翼、缩手缩脚, 不敢大胆实验, 害怕自己一不小心把实验仪器给弄坏了, 所以在实验时采取避而远之的态度, 在实验课上不能全身心地投入学习, 抱着不求有功, 但求无过的态度。教师在实验中应以身示范, 鼓励学生按照实验规则做实验, 不要担心损坏实验仪器, 使学生放下思想包袱。培养学生的自信心和勇于探索的精神。

三、如何激发学生的实验学习兴趣

兴趣是激发学生深入探索的动力源泉, 因此培养学生的学习兴趣是我们实验教学之中的重中之重, CPLD/FPGA实验不仅能看到实验现象及结果, 而且能与实际生活相联系。

1.发挥教师的引导作用。

在CPLD/FPGA实验教学中, 要着重引导学生有目标、有重点地进行训练, 既重视硬件描述能力的培养, 又注意养成科学思维方法。在实验教学中, 教师要积极引导, 使学生从内心体验到他们亲自动手实践而带来的喜悦和成就感。有意识、有目的地激发和培养学生持久的认知兴趣, 使之不仅成为上好实验课的动力, 也能成为促进学生心理品质良好发展的重要因素。

2.对学生采取分层教学及个性化教学的方式。

由于在实验过程中因学生的素质和接受能力的不同, 如果采用相同的题目会造成有的学生来不及做而有的学生无事可做的情况, 因此除做好规定实验外, 还可对部分学生增加探索性实验, 综合性设计实验等, 以多种方式来培养学生的实验兴趣。

3.注重培养学生的思维能力及严谨的实验态度。

由于CPLD/FPGA的灵活性较强, 可以根据实际条件设立一些无现成教材, 学生可自由发挥的实验题目, 这样可以培养学生以科学的思维方式来观察和独立地分析实验中出现的问题, 既有利于激发学生的学习兴趣又有利于加深对理论的理解。同时, 在CPLD/FPGA实验中会由于诸多原因 (如源代码错误, 或是目标代码错误, 接线错误, 等等) 造成学生在实验中不能获得预期的结果, 这时一定要引导学生自己独立地分析失败原因, 以培养学生独立思维的能力和严谨认真的实验态度。

4.重视教师专业业务能力的锻炼。

CPLD/FPGA在各个领域得到了的广泛应用。而我们的教师更多的是从学校走进学校, 未经过业务上的实践或实践较少。所以实验教师更应走出去, 接触较为先进的一线工厂实际, 锻炼自己的业务能力。

四、对现有CPLD/FPGA实验的一些改革设想

1.改革实验教学内容。

(1) 设计实验内容时注意其可比性。例如, 在学习运用VHDL语言描述硬件电路时, 由于这种语言不仅具有硬件特性而且还具有软件特性, 所以在学习时可以对比以前学过的C语言来理解其硬件描述思路。 (2) 设置必做实验和选做实验项目, 给学有余力的学生发挥创造性和个性特长的条件。例如, 在三相步进电机驱动实验中, 可将实验设计成三相三拍驱动和三相六拍驱动。 (3) 鼓励、引导学生提出不同的设计方案和解题途径, 并能从中优选最佳方案和途径。

2.改革教学方法。

(1) 明确实验课的地位和目的, 增强实验教学的趣味性, 让学生重视实验课, 变“要我学”为“我要学”。 (2) 突出学生的主体地位。实验课教学要精讲多练, 在教师的有效引导和组织下, 以学生独立活动为主, 教师教授为辅。

3.重视发挥实验课的实践作用。

CPLD/FPGA有着广泛的社会应用。把实验课堂与社会课堂结合起来, 组织课外参观见习、技术创新等活动, 既拓展了学生的创新精神, 培养了创新能力, 又能使学生毕业后, 适应未来的工作打下坚实的基础。

4.改革教学实验设备。

现在, 大多数学校的CPLD/FPGA实验设备都是从各个公司购买的成套的实验箱, 这种设备在一定程度上能够锻炼学生的硬件描述能力而无法锻炼学生的硬件配置和芯片内部资源运用能力。因为从公司购买的成套实验设备, 我们只能按照开发人员预先设定的实验电路进行实验, 而且没有硬件设计图纸, 我们对器件之间的接口, 硬件之间的信号传递无从了解。因此, 我们有必要自制一些CPLD/FPGA实验设备, 通过自制的CPLD/FPGA实验设备讲解硬件描述和芯片资源分配, 不仅能使学生在硬件语言描述方面而且还能使学生在硬件电路设计方面以及芯片资源分配等方面得到实践的锻炼, 使学生在CPLD/FPGA应用方面得到质的提高, 为以后工作中应用CPLD/FPGA打下坚实的基础。

总之, 在实验教学中, 只要我们教师怀着高度的责任感, 注意探索实验教学的规律, 启迪学生的学习兴趣, 营造一种轻松、和谐的教育氛围, 便能为培养学生的动手能力、创造力、思维能力等方面创造有利的条件, 从而使知识与能力同步增长, 把素质教育落到实处。

参考文献

[1]潘松, 王国栋.VHDL实用教程.电子科技大学出版社, 2001, 7.

【VHDL】推荐阅读:

上一篇:现代水墨技法下一篇:电大教育与实践教学

本站热搜

    相关推荐