VHDL语言数据对象

VHDL语言学习笔记(一):数据对象
内容:本文主要介绍VHDL语言的三种主要数据对象,即常量(constant)、变量(variable)和信号(signal)。


文章目录

  • VHDL语言数据对象
  • 一、 常量
  • 二、变量
  • 三、信号
  • 总结

一、 常量

在VHDL程序中,一经定义数值就不再发生变化的量就是常量。在硬件物理意义上,其表示为硬件电路中的电源或地线。
常量可以在程序包、实体声明、结构体声明和语句的声明部分中进行声明,常量定义语句所允许的设计单元有实体、结构体、程序包、块、进程和子程序。不同部分声明的常量具有不同的作用范围。

常量声明的语言结构:

CONSTANT  常量名 [,  常量名...]  :  数据类型  :=  表达式;
  • “CONSTANT”是用来表示常量的保留字,用来声明一个常量;
  • “[]”中的内容表示可选项,即多个相同数据类型的常量可以一起声明;
  • 数据类型是对象所具有的类型;
  • 表达式用来对常量进行赋值,其赋值符号为“:=”。

常量声明示例:

CONSTANT    PI   :  REAL     := 3.14;
CONSTANT    NUM  :  INTEGER  := 6;
CONSTANT    DELAY  :  TIME   := 7ns;

注意:

  • 常量定以后不允许修改;
  • 使用时要注意常量的作用范围。

二、变量

变量是指在设计实体中值会发生变化的量。变量主要是对临时数据进行局部存储,只能在进程语句、过程语句和函数语句的声明部分中使用。变量的赋值是理想化的数据传输,是立即发生、不存在任何延时的行为。

变量声明结构:

VARIABLE    变量名 [, 变量名...]    : 数据类型  [:= 初始值]
  • “VARIABLE”是用来表示变量的保留字,用来声明一个变量;
  • “[:= 初始值]”用来对变量进行初始赋值操作,其中“:=”为赋值符号。

变量声明示例:

VARIABLE  vA : INTEGER  0 TO 15 ;  --声明了一个取值范围为0~15的整数类型变量
VARIABLE  vB, vC  : INTEGER :=2 ;  --声明了两个初始值为2的整数类型变量
VARIABLE  vC  : STD_LOGIC  := '1' ;  --声明了一个初始值为1的标准位逻辑类型变量

变量注意事项:

  • 变量为局部量,仅限于在定义了变量的进程、过程或子程序的顺序语句中使用;
  • 如果变量没有赋予初始值,那么它将取默认值,即指定的数据类型的最左值或最小值。

变量的赋值结构:

目标变量名 := 表达式;
  • 赋值语句右侧的“表达式”与目标变量必须为同一数据类型;
  • 表达式可以为运算表达式,也可以是一个数值;
  • 新变量值的获得是直接的、立即发生的;
  • 目标变量可以是单值变量,也可以是变量集合,如位矢量类型的变量。

变量赋值示例:

VARIABLE  vA, vB  : REAL ;  --定义了实数类型变量
VARIABLE  vC, vD  : STD_LOGIC_VECTOR (7 DOWNTO 0);  --定义了位矢量类型变量vA := 10.0 ;
vB := vA + 6 ;
vC := "11010101" ;
vD (0 TO 6) := vC (1 TO 7) ;  --段赋值

三、信号

信号时设计实体之间动态交换数据的一种手段,其物理意义类似于电路内部的连接线。信号可以看做是数值的容器,它不但可以容纳当前值,也可以保持历史值。

信号声明结构:

SIGNAL  信号名 [, 信号名...]  :  数据类型 [:= 初始值] ;

信号声明示例:

SIGNAL  sA : STD_LOGIC := '1' ;  --声明一个初始值为‘1’的标准逻辑信号
SIGNAL  sB : BIT ;  --声明了一个位信号
SIGNAL  sC : STD_LOGIC_VECTOR ( 15 DOWNTO 0 ) ;  --声明了一个标准位矢量信号

信号初始值的设置不是必需的,而且初始值仅在VHDL的行为仿真中有效。与变量相比,信号的硬件特性更明显,它具有全局性特性。比如,在程序包中定义的信号,对于所有调用此程序包的设计实体都是可见的;在实体中定义的信号,在其对应的结构体中都可见。
注意,在进程和子程序的顺序语句中不允许定义信号。

信号的赋值结构:

目标信号名 <= 表达式 ;

数据信号的传入可以设置延时,即便延时设置为0,目标信号的数据传入也不是零延时的。因此,符号"<="两边的数值并不一定总是一致的。
在进程中,允许同一个信号有不同驱动源,即同一个目标信号可以被多个表达式赋值,但是只有最后一个赋值语句会被执行。


总结

本文信息源自数据和网络。

VHDL的数据对象(学习笔记1)相关推荐

  1. React学习:路由定义及传参、数据复用-学习笔记

    文章目录 React学习:路由定义及传参.数据复用-学习笔记 在React中使用react-router-dom路由 简单例子 路由定义及传参 React学习:路由定义及传参.数据复用-学习笔记 在R ...

  2. 大数据业务学习笔记_学习业务成为一名出色的数据科学家

    大数据业务学习笔记 意见 (Opinion) A lot of aspiring Data Scientists think what they need to become a Data Scien ...

  3. python气象数据可视化学习笔记6——利用python地图库cnmaps绘制地图填色图并白化

    文章目录 1. 效果图 2. cnmaps简介及安装 2.1 写在前面 2.2 cnmaps简介和安装 3. 导入库 4. 定义绘图函数 4.1 使用get_adm_maps返回地图边界 4.2 ax ...

  4. 大数据HiveSQL学习笔记三-查询基础语法以及常用函数

    大数据HiveSQL学习笔记三-查询基础语法以及常用函数 一.基础语法 1.SELECT -列名- FROM -表名- WHERE -筛选条件- 如:需要根据城市,性别找出匹配的10个用户 user_ ...

  5. ECharts数据可视化学习笔记和应用

    ECharts数据可视化学习笔记和应用 一.概念 二.Echarts使用 使用步骤 三.Echarts-基础配置 四.柱状图图表1 五.柱状图图表2 六.折线图1 七.折线图2 八.饼状图1 九.饼形 ...

  6. C++常函数和常对象学习笔记

    C++常函数和常对象学习笔记 一.友元的概述 二.友元的语法 三.友元类 3.1 通过传入参数来访问类的私有成员 3.2 通过类内指针来访问类的私有成员 四.类的友元成员函数 五.友元类的注意 一.友 ...

  7. redis基础命令和数据操作命令学习笔记

    redis基础命令和数据操作命令学习笔记 基础命令 安装成功后,redis的启动命令:先修改配置文件.将服务改成默认运行.然后以配置文件启动服务 redis-server config/redis-c ...

  8. 大数据 -- kafka学习笔记:知识点整理(部分转载)

    一 为什么需要消息系统 1.解耦 允许你独立的扩展或修改两边的处理过程,只要确保它们遵守同样的接口约束. 2.冗余 消息队列把数据进行持久化直到它们已经被完全处理,通过这一方式规避了数据丢失风险.许多 ...

  9. 数据清洗之数据统计-学习笔记

    学习笔记:数据的统计 import pandas as pd import numpy as np import os os.chdir(r'F:\CSDN\课程内容\代码和数据') #在线杂货店订单 ...

最新文章

  1. 360起诉山东卫视或有利于杜绝有偿新闻
  2. html用emmt写菜单,前端开发工具Emmet的介绍
  3. Riot美术师经验分享:好设计是改出来的
  4. eclipse插件安装的方法
  5. nosql简答什么是最终一致性_NoSql的三大基石:CAP理论BASE最终一致性
  6. Google浏览器中的开发工具.
  7. cmd如何默认以管理身份运行
  8. workbench透明设置_ansys workbench模型能透明显示吗?非常感谢
  9. GDS 的Tide配置(使用spring)
  10. 苹果mac三维动画设计渲染软件:Cinema 4D R20 (c4d r20)
  11. CodeRush For .Net 使用-------使用标签
  12. 那些通宵加班的年轻人
  13. 单片机应用系统设计技术——智能温控器
  14. MPMoviePlayerController 电影播放器—备用
  15. 计算机信息技术在生活中的应用实例,电子信息技术在生活中的应用与发展
  16. 文件名中不能包含的字符有哪些?
  17. SAP物料凭证中的凭证类型交易/事件
  18. 计算机平面设计会学cad吗,请问学建筑与室内设计哪样好是不是都要学CAD
  19. WSO2 WSF/CPP--WSDL简介
  20. macOS 10.14 安装lazarus 开发环境

热门文章

  1. jsoncpp 构造空数组
  2. C++ - 模板函数须要类型转换时使用友元(friend)模板函数
  3. 【hibernate框架】一对多(多对一)双向CRUD-关于delete2
  4. FJ集团企业级邮件服务器构建方案
  5. ASP.NET 2.0 解决了 Code-Behind 需要控件声明同步的问题
  6. Apache Common常用jar包
  7. SpringBoot @EnableAutoConfiguration注解
  8. 【收藏】GeoMesa-HBase原理篇——写入过程
  9. Linux sed替换内容中有空格解决办法
  10. vue-element-admin文档gitee地址