VHDL的数据对象(学习笔记1)
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)相关推荐
- React学习:路由定义及传参、数据复用-学习笔记
文章目录 React学习:路由定义及传参.数据复用-学习笔记 在React中使用react-router-dom路由 简单例子 路由定义及传参 React学习:路由定义及传参.数据复用-学习笔记 在R ...
- 大数据业务学习笔记_学习业务成为一名出色的数据科学家
大数据业务学习笔记 意见 (Opinion) A lot of aspiring Data Scientists think what they need to become a Data Scien ...
- python气象数据可视化学习笔记6——利用python地图库cnmaps绘制地图填色图并白化
文章目录 1. 效果图 2. cnmaps简介及安装 2.1 写在前面 2.2 cnmaps简介和安装 3. 导入库 4. 定义绘图函数 4.1 使用get_adm_maps返回地图边界 4.2 ax ...
- 大数据HiveSQL学习笔记三-查询基础语法以及常用函数
大数据HiveSQL学习笔记三-查询基础语法以及常用函数 一.基础语法 1.SELECT -列名- FROM -表名- WHERE -筛选条件- 如:需要根据城市,性别找出匹配的10个用户 user_ ...
- ECharts数据可视化学习笔记和应用
ECharts数据可视化学习笔记和应用 一.概念 二.Echarts使用 使用步骤 三.Echarts-基础配置 四.柱状图图表1 五.柱状图图表2 六.折线图1 七.折线图2 八.饼状图1 九.饼形 ...
- C++常函数和常对象学习笔记
C++常函数和常对象学习笔记 一.友元的概述 二.友元的语法 三.友元类 3.1 通过传入参数来访问类的私有成员 3.2 通过类内指针来访问类的私有成员 四.类的友元成员函数 五.友元类的注意 一.友 ...
- redis基础命令和数据操作命令学习笔记
redis基础命令和数据操作命令学习笔记 基础命令 安装成功后,redis的启动命令:先修改配置文件.将服务改成默认运行.然后以配置文件启动服务 redis-server config/redis-c ...
- 大数据 -- kafka学习笔记:知识点整理(部分转载)
一 为什么需要消息系统 1.解耦 允许你独立的扩展或修改两边的处理过程,只要确保它们遵守同样的接口约束. 2.冗余 消息队列把数据进行持久化直到它们已经被完全处理,通过这一方式规避了数据丢失风险.许多 ...
- 数据清洗之数据统计-学习笔记
学习笔记:数据的统计 import pandas as pd import numpy as np import os os.chdir(r'F:\CSDN\课程内容\代码和数据') #在线杂货店订单 ...
最新文章
- 360起诉山东卫视或有利于杜绝有偿新闻
- html用emmt写菜单,前端开发工具Emmet的介绍
- Riot美术师经验分享:好设计是改出来的
- eclipse插件安装的方法
- nosql简答什么是最终一致性_NoSql的三大基石:CAP理论BASE最终一致性
- Google浏览器中的开发工具.
- cmd如何默认以管理身份运行
- workbench透明设置_ansys workbench模型能透明显示吗?非常感谢
- GDS 的Tide配置(使用spring)
- 苹果mac三维动画设计渲染软件:Cinema 4D R20 (c4d r20)
- CodeRush For .Net 使用-------使用标签
- 那些通宵加班的年轻人
- 单片机应用系统设计技术——智能温控器
- MPMoviePlayerController 电影播放器—备用
- 计算机信息技术在生活中的应用实例,电子信息技术在生活中的应用与发展
- 文件名中不能包含的字符有哪些?
- SAP物料凭证中的凭证类型交易/事件
- 计算机平面设计会学cad吗,请问学建筑与室内设计哪样好是不是都要学CAD
- WSO2 WSF/CPP--WSDL简介
- macOS 10.14 安装lazarus 开发环境
热门文章
- jsoncpp 构造空数组
- C++ - 模板函数须要类型转换时使用友元(friend)模板函数
- 【hibernate框架】一对多(多对一)双向CRUD-关于delete2
- FJ集团企业级邮件服务器构建方案
- ASP.NET 2.0 解决了 Code-Behind 需要控件声明同步的问题
- Apache Common常用jar包
- SpringBoot @EnableAutoConfiguration注解
- 【收藏】GeoMesa-HBase原理篇——写入过程
- Linux sed替换内容中有空格解决办法
- vue-element-admin文档gitee地址