当前位置:首页 > 技术学院 > 电子技术资源
[导读]VHDL 的注释以两个连字符“--”开始,到该行尾自动结束,不支持成块的注释语句。 VHDL设计实体的组成:库和程序包(Library,Package),实体(Entity),结构体(Architecture),配置(Configuration).

VHDL 的注释以两个连字符“--”开始,到该行尾自动结束,不支持成块的注释语句。

VHDL设计实体的组成:库和程序包(Library,Package),实体(Entity),结构体(Architecture),配置(Configuration).

--- VHDL Example

library ieee;

use ieee.std_logic_1164.all; --库声明

entity TONE is

port(A,B:in std_logic; --实体定义

C:out std_logic);

end TONE;

architecture EX of TONE is --结构体定义

begin

C<=A OR B;

end EX;

VHDL不区分大小写

1:实体的语句格式

ENTITY 实体名 IS

GENERIC(------); --可选

PORT(------);

END实体名;

类属说明的书写格式是:

GENERIC(常数名:数据类型:设定值;

常数名:数据类型:设定值);

端口语句的格式:

PORT(端口信号名:端口模式数据类型;

端口信号名:端口模式数据类型);

IN 输入

OUT 输出

INOUT 双向

BUFFER 缓冲

2.结构体

结构体的任务是:定义结构体中的各项内部使用元素,如数据类型(TYPE),常数(CONSTAND),信号(SIGNAL),元件(COMPONENT),过程(POCEDURE),变量(VARIABLE)和进程(PROCESS)等。通过VHDL语句描述实体所要求的具体行为和逻辑功能。描述各元件之间的连接。

结构体格式:

结构体名 OF 实体名IS

说明部分(可选,课用于对结构体中使用的信号等进行说明,这样做有利于提高程序的可读性)

BEGIN

功能描述语句法

END 结构体名称

VHDL内部是并发执行的,但是process内部的代码是顺序执行的。要实现时序电路,必须使用顺序执行代码。顺序执行代码可以同时实现组合逻辑电路和时序逻辑电路。

从本质上讲,VHDL代码是并发执行的。只有PROCESS,FUNCTION或者PROCEDURE内部的代码才是顺序执行的。值得注意的是,尽管这些模块中的代码是顺序执行的,但是当它们作为一个整体是,与其他模块之间又是并发的。IF,WAIT,CASE,LOOP语句都是顺序代码,用在PROCESS,FUNCTION和PROCEDURE内部。

我们将一系列的并发描述语句放在一个simple block中,目的仅仅是为了增强整个代码的可读性和可维护性。但是,一个特殊的例子是利用guarded BLOCK可以构造时序电路。

类属 GENERIC 参量是一种端口界面常数,常以一种说明的形式放在实体或块结构体前的说明部分。

类属参量以关键词 GENERIC 引导一个类属参量表,在表中提供时间参数或总线宽度等静态信息。

一般在结构体中,类属的应用与常数是一样的,例如:当用实体例化一个设计实体的器件时,可以用类属表中的参数项定制这个器件,如可以将一个实体的传输延迟,上升和下降延时等参数加到类属参数表中,然后根据这些参数进行定制,这对于系统仿真控制是十分方便的。其中的常数名是由设计者确定的类属常数名,数据类型通常取INTEGER 或TIME 等类型,设定值即为常数名所代表的数值,但需注意 VHDL 综合器仅支持数据类型为整数的类属值。

GENERIC详细描述见以下网址

http://hi.baidu.com/rebornlinlin/item/0caedc0f8b0a058e03ce1b5a

一个元件 component是一个结构完整的常用代码,(包括库声明、实体和结构体这些基本的组成部分)。然而如果将这些代码声明为component,就可以被其他电路调用,从而使代码具有了层次化的结构。

COMPONENT是已有元件在别的文件中已经定义,在此声明之后,你的程序里就可以用了

就比如我在设计文件中定义了一个实体

entity cnt6 is

port

(clr,en,clk :in std_logic;

q :out std_logic_vector(2 downto 0)

);

end entity;

然后我要在测试文件中使用它,需要例化它,但首先要使用component对它进行声明。

architecture rtl of cnt6_tb is

component cnt6

port(

clr,en,clk :in std_logic;

q :out std_logic_vector(2 downto 0)

);

end component;

关于VHDL 的testbench 的编写,请参照以下网址,写的蛮好

http://blog.csdn.net/wangjun403/article/details/6246830

http://www.cnblogs.com/zlh840/archive/2011/07/08/2101504.html

ƒCOMPONENT语句

COMPONENT 元件名

【GENERIC 说明】;

PORT 说明;

END COMPONENT;

COMPONENT语句可以在

ARCHITECTURE,PACKAGE及BLOCK

的说明部分中使用

ƒCOMPONENT_INSTANT语句

标号名:元件名 PORT MAP(信号,•••)

该语句使得使用已有元件或模块成为

可能,该语句将元件或模块的端口信号

映射成为高层次电路中的信号。

ƒCOMPONENT_INSTANT语句

标号名:元件名 PORT MAP(信号,•••)

该语句使得使用已有元件或模块成为

可能,该语句将元件或模块的端口信号

映射成为高层次电路中的信号。

例:已有设计and2的端口说明如下

Port(a,b:in bit;

c:out bit);

元件调用

u1:and2 portmap(x,y,q);

u2: and2 port map(a=>x,b=>y,c=>q);

在输出信号没有连接的情况下,其对应

端口的描述可以忽略

程序包说明格式如下:

package 程序包名 is

说明语句;

end 程序包名;

程序包名:设计者自定义便于记忆的标识符

说明语句:包括各种类型的说明语句

程序包体

描述函数和过程功能的函数体与过程等的集合称程序包体

程序包说明中,定义了数据类型和子程序中的函数、过程说明,而程序包体中才具体地描述该函数、过程功能的语句和数据的赋值。

程序包体格式:

package body 程序包名 is

顺序语句;

end 程序包名;

程序包名:与程序包说明中的程序包名相同

顺序语句:描述函数、过程及其他功能的程序流

子程序——过程

VHDL中,所谓子程序指主程序调用它后能将处理结果返回主程序的程序模块。

VHDL语言中,子程序有两种类型,过程(procedure)和函数(function)。

他们的区别:

1、过程可具有多个返回值,而函数只能有一个

2、过程通常用来定义一个算法,而函数往往用来产生一个特定的值

3、过程中的参数可具有3种端口模式:in、out、inout,而函数中的参数只能具有一直端口模式:in

过程的书写结构

对于VHDL子程序来说,它通常包括子程序说明部分和子程序定义部分。

其中,子程序说明部分定义了其他设计调用子程序的接口;子程序定义部分则描述该子程序具体功能的实现。

因此,通常将子程序说明部分和子程序定义部分的书写结构分别介绍

在VHDL中,过程说明部分的书写结构:

procedure:过程名

(对象类型1 参数名1: 端口模式1 数据类型1;

对象类型2 参数名2:端口模式2 数据类型2;......);

其中对象类型、端口模式是可选项。

在VHDL语言中,过程定义部分

procedure 过程名

(对象类型1 参数名1: 端口模式1 数据类型1;

对象类型2 参数名2:端口模式2 数据类型2;......)is

过程说明部分;

begin

过程顺序语句部分;

end 过程名;

参数列表中:每个参数包括它的对象类型、参数名、端口模式以及数据类型

参数的对象类型包括:常量、信号、变量

参数名是用来表示参数的唯一标识

端口模式:包括in、out、inout

若过程中没有指明参数的对象类型,那么参数的对象类型将默认为一个变量

过程定义在程序包中的定义规则为:过程说明部分书写在程序包的说明部分,过程定义部分书写在程序包体部分

过程定义在结构体中:即将过程定义部分书写在结构体的说明部分,然后在结构体进程语句里调用

函数

函数包括:函数说明部分和函数定义部分

函数说明部分定义了主程序调用函数的接口

函数定义部分描述了该函数具体逻辑功能的实现

函数的书写结构

function 函数名

(对象类型1 参数名1; in 数据类型1;

对象类型2 参数名2; in 数据类型2;......) return 数据类型;

其中对象类型和端口模式in是可选项

函数定义部分书写结构

function 函数名

(对象类型1 参数名1; in 数据类型1;

对象类型2 参数名2; in 数据类型2;......) return 数据类型is

函数说明部分:

begin

函数顺序语句部分;

return(参数值);

end 函数名;

函数参数的对象类型只能包括常量和信号:参数的端口模式只能是in,因此参数端口模式可以省略。

函数的返回值只能有一个。

函数定义在程序包中:函数说明部分书写在程序包说明部分,函数定义部分书写在程序包体部分。如果需要使用程序包中定义的函数,那么只需要通过use语句使其对设计实体可见。

函数定义在结构体中:只需将函数定义部分书写在结构体说明部分即可。然后在结构体中调用这个函数。

function内是不允许加入进程process的。函数function的通常应用是作逻辑组合、判决和转移。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

摘要:针对原来简单的EDA技术在实际应用中存在的问题,提出了一种基于VHDL语言的作息时间控制器设计方法,对分频模块、时间调整模块、计数器模块以及显示模块这4个功能模块的设计进行了详细分析。

关键字: EDA VHDL语言 作息时间控制器

摘要:针对原来简单的EDA技术在实际应用中存在的问题,提出了一种基于VHDL语言的作息时间控制器设计方法,对分频模块、时间调整模块、计数器模块以及显示模块这4个功能模块的设计进行了详细分析。

关键字: VHDL语言 Quartus—II 作息时间控制器

21ic讯 近日,航天科工304所申报的两项可编程逻辑器件软件国家军用标准《军用可编程逻辑器件软件编程语言安全子集 VHDL语言篇》、《军用可编程逻辑器件软件文档编制规范》成功获得总装立项批复。本次新立项的国军标

关键字: 可编程逻辑器件 软件 VHDL语言 编程语言

VHDL中的标识符可以是常数、变量、信号、端口、子程序或参数的名字。使用标识符要遵守如下法则:&middot;标识符由字母(A&hellip;Z;a&hellip;z)、数字和下划线字符组成。&...

关键字: VHDL语言 应用实例 信号 进程

杜志传,郑建立(上海理工大学 医疗器械与食品学院 上海 200093)0 引 言VHDL(Very High Speed Integrated Circuit Hardware Description Language...

关键字: CPLD FPGA VHDL语言 电路优化

VHDL(Very High Speed Integrated Circuit Hardware Description Language)是IEEE工业标准硬件描述语言,是随着可编程逻辑器件(PLD)的发展而发展起来...

关键字: 电路优化 CPLD FPGA VHDL语言

本文提出一种表决式单片机多机冗余设计方案。该方案不同于中央系统的多机冗余设计。大规模系统冗余大多采用完善而复杂的机间通讯协议实现系统重构,不太注重系统的实时性。本方案结构简单,易于实现,具有极强的实时

关键字: 单片机 控制模块 VHDL语言 LOGIC

 随着集成电路技术的不断进步,数字化应用逐渐普及,在数字通信、电力系统自动化等方面越来越多地运用了数字锁相环。它的好处在于免去了模拟器件的繁琐,而且成本低、易实现、省资源。本文综合以上考虑,在一片FPGA

关键字: 全数字锁相环 VHDL语言 BSP 脉冲

摘 要:伪随机序列发生器是序列密码设计中的重要环节,FCSR是其中一类重要思想。本文介绍了FCSR的特性和产生方法,并用VHDL语言予以实现,给出FCSR序列的主程序和仿真波形,最后指出需要注意的问题。关键词:进位移

关键字: CSR VHDL语言 BSP IP

作为一个菜鸟我很愿意分享下我做的一些小东西,记得一年前好像少几天吧,看记录是2009年5月19日我用51单片机做数字钟的情景,那个时候用汇编,焦头烂额,做了三天,还请教了老师。哎,现在都已经用C了,而且重心已经

关键字: FPGA 数字钟设计 VHDL语言 SE
关闭
关闭