当前位置:首页 > 技术学院 > 电子技术资源
[导读]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的通常应用是作逻辑组合、判决和转移。

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

9月2日消息,不造车的华为或将催生出更大的独角兽公司,随着阿维塔和赛力斯的入局,华为引望愈发显得引人瞩目。

关键字: 阿维塔 塞力斯 华为

加利福尼亚州圣克拉拉县2024年8月30日 /美通社/ -- 数字化转型技术解决方案公司Trianz今天宣布,该公司与Amazon Web Services (AWS)签订了...

关键字: AWS AN BSP 数字化

伦敦2024年8月29日 /美通社/ -- 英国汽车技术公司SODA.Auto推出其旗舰产品SODA V,这是全球首款涵盖汽车工程师从创意到认证的所有需求的工具,可用于创建软件定义汽车。 SODA V工具的开发耗时1.5...

关键字: 汽车 人工智能 智能驱动 BSP

北京2024年8月28日 /美通社/ -- 越来越多用户希望企业业务能7×24不间断运行,同时企业却面临越来越多业务中断的风险,如企业系统复杂性的增加,频繁的功能更新和发布等。如何确保业务连续性,提升韧性,成...

关键字: 亚马逊 解密 控制平面 BSP

8月30日消息,据媒体报道,腾讯和网易近期正在缩减他们对日本游戏市场的投资。

关键字: 腾讯 编码器 CPU

8月28日消息,今天上午,2024中国国际大数据产业博览会开幕式在贵阳举行,华为董事、质量流程IT总裁陶景文发表了演讲。

关键字: 华为 12nm EDA 半导体

8月28日消息,在2024中国国际大数据产业博览会上,华为常务董事、华为云CEO张平安发表演讲称,数字世界的话语权最终是由生态的繁荣决定的。

关键字: 华为 12nm 手机 卫星通信

要点: 有效应对环境变化,经营业绩稳中有升 落实提质增效举措,毛利润率延续升势 战略布局成效显著,战新业务引领增长 以科技创新为引领,提升企业核心竞争力 坚持高质量发展策略,塑强核心竞争优势...

关键字: 通信 BSP 电信运营商 数字经济

北京2024年8月27日 /美通社/ -- 8月21日,由中央广播电视总台与中国电影电视技术学会联合牵头组建的NVI技术创新联盟在BIRTV2024超高清全产业链发展研讨会上宣布正式成立。 活动现场 NVI技术创新联...

关键字: VI 传输协议 音频 BSP

北京2024年8月27日 /美通社/ -- 在8月23日举办的2024年长三角生态绿色一体化发展示范区联合招商会上,软通动力信息技术(集团)股份有限公司(以下简称"软通动力")与长三角投资(上海)有限...

关键字: BSP 信息技术
关闭
关闭