云题海 - 专业文章范例文档资料分享平台

当前位置:首页 > vhdl语言

vhdl语言

  • 62 次阅读
  • 3 次下载
  • 2025/7/10 20:33:37

PROCESS --进程

VARIABLE a: BIT; --在进程中定义变量a BEGIN

a :='0'; --给变量a赋值为0 END PROCESS; 2.信号赋值语句

信号赋值语句具有全局特征,不但可以使数据在设计实体内传递,还可以通过信号的赋值操作与其他实体进行数据交流。

信号赋值语句的语法格式如下:

目的信号名:< = 信号表达式(赋值源);

【例6-6】设计一个二输入与门电路,输入信号为a、b,输出信号为y。 ENTITY andg IS

PORT(a,b:IN BIT; y:OUT BIT); END andg;

ARCHITECTURE data OF andg IS BEGIN PROCESS BEGIN

y < = a AND b; --信号a、b与运算后,赋值给信号y END PROCESS; END data;

6.3.2 IF语句

IF语句是根据所指定的一种或多种条件来决定执行哪些语句的一种重要顺序语句,因此也可以说成是一种控制转向语句。一般有三种格式: (1)跳转控制。格式如下: IF 条件 THEN 顺序语句; END IF;

(2)二选一控制。格式如下: IF 条件 THEN 顺序语句; ELSE 顺序语句; END IF;

(3)多选择控制语句。格式如下: IF 条件 1 THEN 顺序语句1;

ELSIF 条件2 THEN 顺序语句2; ??;

ELSIF 条件n THEN 顺序语句n; ELSE 顺序语句 n+1; END IF;

注意:每个IF语句必须有一个对应的END IF语句 。 6.3.3 CASE语句

CASE语句和IF语句的功能有些类似,是一种多分支开关语句,可根据满足的条件直接选择多个顺序语句中的一个执行。CASE语句可读性好,很容易找出条件和动作的对应关系,经常用来描述总线、编码和译码等行为。CASE语句的格式如下: CASE 表达式 IS

WHEN 条件选择值1=> 顺序语句1; WHEN 条件选择值2=> 顺序语句2; WHEN 条件选择值3=> 顺序语句3; ?? ;

WHEN OTHERS => 顺序语句n; END CASE;

其中WHEN的条件选择值有以下几种形式: l 单个数值,如WHEN 3。

l 并列数值,如WHEN 1 | 2,表示取值1或者2。 l 数值选择范围,如WHEN(1 TO 3),表示取值为1、2、或者3。

l 其他取值情况,如WHEN OTHERS,常出现在END CASE之前,代表已给出的各条件选择值中未能列出的其他可能取值。

注意:语句中的=>不是运算符,只相当于THEN的作用 。 6.3.4 WAIT语句

进程在执行过程中总是处于两种状态:执行或挂起。进程中的敏感信号能够触发进程执行,WAIT语句也能起到与敏感信号同样的作用。

(1)无限等待。不设置停止挂起条件的表达式,表示永远挂起。格式如下: WAIT;

(2)等待敏感信号变化。格式如下: WAIT ON 信号名[,信号名?]; (3)等待条件满足。格式如下: WAIT UNTIL 布尔表达式; (4)超时等待。格式如下: WAIT FOR 时间表达式;

注意:已经列出敏感信号的进程不能使用任何形式的WAIT语句。 6.3.5 子程序

子程序是由一组顺序语句组成的, 可以在程序包、结构体和进程中定义,只有定义后才能被主程序调用,子程序将处理结果返回给主程序,主程序和子程序之间通过端口参数关联进行数据传送,其含义与其他高级语言相同。 VHDL中的子程序有两种类型:过程和函数。 1.过程(PROCEDURE)

过程的定义语句由两部分组成,即过程首和过程体。过程定义的格式为: PROCEDURE 过程名 参数列表 --过程首 PROCEDURE 过程名 参数列表 IS --过程体 说明部分; BEGIN 顺序语句

END 过程名;

调用过程语句的格式为:过程名 参数列表; 2.函数(FUNCTION)

函数语句分为两个部分:函数首和函数体。在进程和结构体中,函数首可以省略,而在程序包中,必须定义函数首,放在程序包的包首部分,而函数体放在包体部分。格式如下: FUNCTION 函数名(参数列表) --函数首 RETURN 数据类型名;

FUNCTION 函数名(参数列表) --函数体 RETURN 数据类型名IS 说明部分; BEGIN

顺序语句;

RETURN 返回变量; END 函数名;

调用函数语句的格式为: y <= 函数名(参数列表); 6.3.6 LOOP语句

LOOP语句可以使程序有规则地循环执行,循环次数取决于循环参数的取值范围。常用的循环语句有FOR和WHILE两种。 1.FOR循环

FOR循环是一种已知循环次数的语句,其格式如下: [循环标号]:FOR 循环变量 IN 循环次数范围 LOOP 顺序语句;

END LOOP [循环标号]; 2.WHILE循环

WHILE循环是一种未知循环次数的语句,循环次数取决于条件表达式是否成立。其格式如下: [循环标号]:WHILE 条件表达式 LOOP 顺序语句;

END LOOP [循环标号]; 6.3.7 返回语句

返回语句是一段子程序结束后,返回主程序的控制语句,返回语句只能用在子程序中。其格式有两种: (1)RETURN;

(2)RETURN 表达式;

第一种格式语句只能用于过程,无条件地结束过程,不返回任何值;第二种格式语句只能用于函数,其表达式提供函数返回值,每一函数必须包含一个或多个返回语句,但在函数调用时只有一个返回语句能将返回值带回。 可见,RETURN语句在函数和过程中的使用是有区别的。过程中的RETURN语句不能含有表达式,而在函数中的RETURN语句必须含有一个表达式,同时RETURN语句也是结束函数执行的惟一条件。 6.4 VHDL的并行语句

并行语句是VHDL区别于传统软件描述语言最显著的一个方面。各种并行语句在结构体中是同时并发执行的,也就是说,只要某个信号发生变化,都会引起相应语句被执行而产生相应的输出,其执行顺序与书写顺序没有任何关系。在结构体中并行语句的位置如下: ARCHITECTURE 结构体名 OF 实体名 IS 说明语句; BEGIN

并行语句; END 结构体名;

在结构体中常用的并行语句有:并行信号赋值语句、进程语句、元件例化语句、块语句和生成语句等。 6.4.1 并行信号赋值语句

并行信号赋值语句有三种形式:简单信号赋值语句、条件信号赋值语句和选择信号赋值语句。其共同点是赋值目标必须都是信号,这三种语句与其他并行语句一样,在结构体内是同时执行的。 1.简单信号赋值语句

简单信号赋值语句的格式为:信号 < = 表达式; 2.条件信号赋值语句

条件信号赋值语句是一种并行信号赋值语句,可以根据不同的条件将不同的表达式值赋给目标信号。格式如下:

信号 <= 表达式1 WHEN 赋值条件1 ELSE 表达式2 WHEN 赋值条件2 ELSE ??

表达式n;

使用条件信号赋值语句时,应该注意以下几点:

(1)只有当条件满足时,才能将该条件前面的表达式的值赋给目标信号。

(2)对条件进行判断是有顺序的,位置靠前的条件具有较高的优先级,只有不满足本条件的时候才会去判断下一个条件。

(3)条件表达式的结果为布尔类型数值。 (4)最后一个表达式后面不含有WHEN子句。 (5)条件信号赋值语句允许条件重叠。 3.选择信号赋值语句

选择信号赋值语句是一种条件分支的并行语句,格式如下: WITH 选择选择表达式 SELECT

目标信号 < = 信号表达式1 WHEN 选择条件1,

信号表达式2 WHEN 选择条件2, ??,

信号表达式n WHEN 选择条件n; 使用选择信号赋值语句时,应该注意以下几点:

(1)只有当选择条件表达式的值符合某一选择条件时,才将该选择条件前面的信号表达式赋给目标信号。 (2)每一个信号表达式后面都含有WHEN子句。

(3)由于选择信号赋值语句是并发执行的,所以不能够在进程中使用。

(4)对选择条件的测试是同时进行的,语句将对所有的选择条件进行判断,而没有优先级之分。这时如果选择条件重叠,就有可能出现两个或两个以上的信号表达式赋给同一目标信号,这样就会引起信号冲突,因此不允许有选择条件重叠的情况。

(5)选择条件不允许出现涵盖不全的情况。如果选择条件不能涵盖选择条件表达式的所有值,就有可能出现选择条件表达式的值找不到与之符合的选择条件,这时编译将会给出错误信息。 注意:每条WHEN短句表示并列关系用逗号,最后一句用分号 。 6.4.2 块语句

块语句是一种并行语句的组合方式,可以使程序更加有层次、更加清晰。在物理意义上,一个块语句对应一个子电路;在逻辑电路图上,一个块语句对应一个子电路图。块语句的格式如下: 块标号:BLOCK 说明语句; BEGIN

并行语句; ??;

END BLOCK 块标号; 6.4.3 进程语句

一个结构体内可以包含多个进程语句,多个进程之间是同时执行的。进程语句本身是并行语句,但每个进程的内部则由一系列顺序语句构成。进程语句的格式如下: [进程名]:PROCESS(敏感信号表)

进程说明; --说明用于该进程的常数,变量和子程序 BEGIN

变量和信号赋值语句; 顺序语句;

END PROCESS [进程名];

进程语句的主要特点归纳如下:

(1)同一结构体中的各个进程之间是并发执行的,并且都可以使用实体说明和结构体中所定义的信号;而同一进程中的描述语句则是顺序执行的,并且在进程中只能设置顺序语句。

(2)为启动进程,进程的结构中必须至少包含一个敏感信号或包含一个WAIT语句,但是在一个进程中不能同时存在敏感信号和WAIT语句。

(3)一个结构体中的各个进程之间可以通过信号或共享变量来进行通信,但任一进程的进程说明部分不允许定义信号和共享变量。

(4)进程语句是VHDL中的重要的建模语句,进程语句不但可以被综合器所支持,而且进程的建模方式直接影响仿真和综合的结果。

6.4.4 元件声明语句和元件例化语句

元件声明语句和元件例化语句就是在一个结构体中定义元件和实现元件调用的两条语句,元件声明语句放在结构体的ARCHITECTURE和BEGIN之间,指出该结构体调用哪一个具体的元件。元件例化语句是指元件的调用,语句中的PORT MAP是端口映射的意思,表示结构体与元件端口之间交换数据的方式(元件调用时要进行数据交换)。两种语句的格式如下:

(1)元件声明语句(COMPONET)格式如下: COMPONET 元件名

PORT 元件端口说明 (与该元件源程序实体中的PORT部分相同) END COMPONET;

(2)元件例化语句(PORT MAP)格式如下:

例化名:元件名 PORT MAP(元件端口对应关系列表); 当采用PORT MAP语句进行元件端口信号映射时,信号之间有位置映射和名称映射两种映射(关联)方式。 l 位置映射:就是被调用元件端口说明中信号的书写顺序及位置和PORT MAP语句中实际信号的书写顺序及位置一一对应。例如某元件的端口说明为:PORT(a,b:IN BIT;c:OUT BIT);调用该元件时可使用:com1:u1 PORT MAP(n1,n2,m);显然n1对应a,n2对应b,m对应c,com1是例化名,u1是元件名。

l 名称映射:该映射就是将库中已有的模块的端口名称赋予设计中的信号名。上例可改为:com1:u1 PORT MAP(a => n1,b => n2,c => m); 6.4.5 生成语句

生成语句是一种循环语句,具有复制电路的功能。当设计一个由多个相同单元模块组成的电路时,利用生成语句复制一组完全相同的并行组件或设计单元电路结构,避免多段相同结构的重复书写,以简化设计。生成语句有FOR工作模式和IF工作模式两种。 1.FOR工作模式的生成语句

FOR工作模式常常用来进行重复结构的描述,格式如下: [生成标号:] FOR 循环变量 IN 取值范围 GENERATE 并行语句;

END GENERATE [生成标号]; 2.IF工作模式的生成语句

IF工作模式的生成语句常用来描述带有条件选择的结构。格式如下: [生成标号:] IF 条件 GENERATE 并行语句;

END GENERATE [生成标号];

FOR工作模式生成语句常用来进行重复结构的描述,其循环变量是一个局部变量,取值范围可以选择递增和递减两种形式;IF工作模式生成语句主要用于描述含有例外情况的结构,如边界处发生的特殊情况。该语句中只有IF条件为TURE时,才执行结构体内部的语句。由于两种工作模式各有特点,因此在实际的硬件数字电路设计中,两种工作模式常常可以同时使用。

搜索更多关于: vhdl语言 的文档
  • 收藏
  • 违规举报
  • 版权认领
下载文档10.00 元 加入VIP免费下载
推荐下载
本文作者:...

共分享92篇相关文档

文档简介:

PROCESS --进程 VARIABLE a: BIT; --在进程中定义变量a BEGIN a :='0'; --给变量a赋值为0 END PROCESS; 2.信号赋值语句 信号赋值语句具有全局特征,不但可以使数据在设计实体内传递,还可以通过信号的赋值操作与其他实体进行数据交流。 信号赋值语句的语法格式如下: 目的信号名:< = 信号表达式(赋值源); 【例6-6】设计一个二输入与门电路,输入信号为a、b,输出信号为y。 ENTITY andg IS PORT(a,b:IN BIT; y:OUT BIT); END an

× 游客快捷下载通道(下载后可以自由复制和排版)
单篇付费下载
限时特价:10 元/份 原价:20元
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:fanwen365 QQ:370150219
Copyright © 云题海 All Rights Reserved. 苏ICP备16052595号-3 网站地图 客服QQ:370150219 邮箱:370150219@qq.com