VHDL语法(二)

这篇具有很好参考价值的文章主要介绍了VHDL语法(二)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1,VHDL中可被赋值的对象

  VHDL中可以被赋值的对象有三种:signal,variable,constant。

  • signal即信号,它具有特定的物理意义,一般对应电路中特定的物理连线或存储单元。signal 在 architecture 语法声明与定义部分声明,在语句部分使用。声明语法如下:
signal <signal_name>:<type>:=<value>;	--有初始值
signal <signal_name>:<type>				--无初始值
//多个同类型信号的声明
signal <signal_name_list>:<type>;		--多个信号名之间用逗号隔开

  entity语法中port语法结构中的 in,out,buffer,inout 都是 signal 类型。library里的package语法中也可以声明signal。

  • variable 即变量,它不具有特定的物理含义,一般用来表示暂存某些值的载体。当要在程序中使用variable 变量,需要在 process 语法的敏感量列表与 begin 关键字之间声明一个 variable,然后就能在 process 的语句体中使用,声明语法如下:
variable<name>:<type>:=<value>; 	--有初始值
variable<name>:<type>;				--无初始值
//声明多个同类型变量
variable<variable_name_list>:<type>; -- 多个变量之间用逗号隔开

//function 和 procedure语法结构中也可以声明 variable.
  • constant 即常量,具有特定的物理意义,通常对应数字电路中的电源或地。constant能出现在所有 signal 和 variable 出现的场合中,声明语法如下:
constant <name>:<type>:=<value>;
//注:常量不能单独赋值,只能在声明的同时初始化

2,命名规则

  • 标识符中只能包含字符、数字和下划线;
  • 标识符必须以字符开头。

3,VHDL数据类型

  • std_logic:逻辑数据类型
signal a:std_logic;
a <= '1';
  • std_logic_vector:标准逻辑数组类型,也叫逻辑向量类型。
//定义3个位宽为3的数据
signal a,b,c:std_logic_vector(2 downto 0);
c <= a and b;

//逻辑向量的常数要用双引号括起来,并且逻辑向量的位宽必须大于1.
signal a:std_logic_vector(3 downto 0);
a <= B"1100";

//逻辑向量不支持十进制常数赋值,要用十进制常数对逻辑向量赋值,必须使用转换函数
a <= conv std_logic_vector(11,4);

//boolean 布尔代数类型,定义如下
type BOOLEAN is (FALSE,TRUE);

//bit 比特类型,也叫位类型
type BIT is('0','1');

//bit_vector 比特数组、位数组类型或比特向量。
type BIT_VECTOR is array (NATURAL range <>) of BIT;
  • 数值数据类型
    • integer 整数类型,一般用在entity中generic语法中定义的参数,for语句中的循环变量。但是integer不能按位访问。
    • real 实数类型,不常用;
    • signed & unsigned :有符号数和无符号数类型,一般直接用 std_logic_vector 替代。
  • 枚举数据类型 enum,一般用于状态机中的状态的定义,语法如下:
type <enum_type_name> is (<element1>,<other elements>);

//假如有两个状态机状态:idle  work
type myStateType is (idle,work);
signal stateBuf:myStateType;
myStateType <= work;
  • 数组数据类型array
//语法如下
type<array_type_name> is array(<index_range>) of <element_type>;

//定义一个共有8个元素的数组,且元素类型是32位逻辑向量
typearrayofVector32 is array(7 downto 0)of std_logic_vector(31 downto 0);
  • 记录数据类型record,定义如下
type <record_name is record
	<element_name>:<element_type>;
	<other elements>
end record;

type byteWord is record
	byte:std_logic_vector(7 downto 0);
	word:std_logic_vector(15 downto 0);
end record;
signal tmp:byteWord	

tmp.byte <=X"FO";
tmp,word<='1'&0"77007";
  • 子类型
    子类型的关键字是subtype,就是对已经存在的基本数据类型作一些范围限制,形成了新的一种数据类型。语法如下:
subtype <subtype_name is<type><range_definition>;

//例如,要定义一个大于或等于9小于或等于99的整数集合,可以这样描述:
subtypeingAnd99 is integer range 9 to 99;
  • 数据类型转换函数
conv_std_logic_vector(x,y)	integer、unsignedsigned转换为std_logic_vector

conv_integer (x)			std_logic_vector、unsignedsigned转换为integer

to_std_logic_vector(x)		bit_vector转换为std_logic_vector

to_bit_vector(x)			std_logic_vector转换为bit_vector

to_std_logic(x)				bit转换为std_1ogic

to_bit(x)					std_logic转换位bit
  • 数值类属性 :'left, 'right, 'low, 'high, 'length

    left表示数组的左边界;
    right表示数组的右边界;
    low表示数组的下边界;
    high表示数组的上边界;
    length表示数组的长度。文章来源地址https://www.toymoban.com/news/detail-464360.html

signal A:std_logic_vector(7 downto 0);
signal B:std_logic_vector(0 to 3);

A'left =7;A'right =0;A low =0;A high=7;A length=8;
B'left =0;B'right =3;B'low =0;B'high=3;B'length=4;
  • signal 属性 :'event属性是一个针对信号量的属性,它是附着在信号量上,而不是信号的类型上的。它
    的值为布尔型,如果刚好有事件发生在该属性所附着的信号上,则其取值为Ture,否则为False。有事件发生,对于FPGA中的信号来说,其实就是值改变。

到了这里,关于VHDL语法(二)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 使用maven打包时如何跳过test,有三种方式

    方式一 针对spring项目: 针对springboot:  方式二(通用 ): 方式三(通用): mvn package -DskipTests=true -DskipTests=true,不执行测试用例,但编译测试用例类生成相应的class文件至 target/test-classes 下。   mvn package -Dmaven.test.skip=true -Dmaven.test.skip=true,不执行测试用例,也不编译测试

    2024年02月13日
    浏览(41)
  • 云计算,主要有三种服务模式:IaaS、PaaS、SaaS的区别

    云计算,主要有三种服务模式,它们分别是IaaS、PaaS、SaaS,那么他们之间到底有什么区别和联系呢?今天数合宙就带大家一探究竟。 01 云计算服务类型介绍 云计算服务:指可以拿来作为服务、提供使⽤的云计算产品。包括云主机,云空间,云开发,云测试和综合类产品等。

    2024年02月01日
    浏览(56)
  • 标记垃圾,有三种色彩:四千长文带你深入了解三色标记算法

    🔭 嗨,您好 👋 我是 vnjohn,在互联网企业担任 Java 开发,CSDN 优质创作者 📖 推荐专栏:Spring、MySQL、Nacos、Java,后续其他专栏会持续优化更新迭代 🌲文章所在专栏:JVM 🤔 我当前正在学习微服务领域、云原生领域、消息中间件等架构、原理知识 💬 向我询问任何您想要的

    2024年02月13日
    浏览(41)
  • 大家都说Java有三种创建线程的方式!并发编程中的惊天骗局!

    在Java中,创建线程是一项非常重要的任务。线程是一种轻量级的子进程,可以并行执行,使得程序的执行效率得到提高。Java提供了多种方式来创建线程,但许多人都认为Java有三种创建线程的方式,它们分别是 继承Thread类、实现Runnable接口和使用线程池。 但是,你们知道吗?

    2024年02月08日
    浏览(71)
  • 荣耀magicbook重装系统后,指纹不能录入的情况,有三种解决办法,完美解决问题。

    有些小伙伴用了很多年的荣耀的笔记本还没坏,但是用着很卡,就想着重装windows系统,系统是重装完了,但是发现指纹录入不上了,就像下面这样,手指放在感应器上也不管用。 本人电脑是2018年买的,已经是过了保修期了,咨询了客服,检测是不需要自己掏钱的,但是如果

    2024年02月02日
    浏览(40)
  • 全局变量可不可以定义在可被多个.C⽂件包含的头⽂件中?为什么?

            全局变量可不可以定义在可被多个.C⽂件包含的头⽂件中?为什么?         全局变量可以定义在可被多个 .C 文件包含的头文件中。         在 C 语言中,头文件通常用于声明函数、变量、结构体等,以供多个 .C 文件共享。当你将全局变量定义在头文件中

    2024年01月18日
    浏览(50)
  • VHDL语法(二)

    1,VHDL中可被赋值的对象   VHDL中可以被赋值的对象有三种:signal,variable,constant。 signal即信号,它具有特定的物理意义,一般对应电路中特定的物理连线或存储单元。signal 在 architecture 语法声明与定义部分声明,在语句部分使用。声明语法如下:   entity语法中port语法结构

    2024年02月06日
    浏览(72)
  • VHDL的基本语法(一)

    1 实体 Entity:描述所设计的系统的外部接口信号,定义电路设计中所有的输入和输出端口 2 结构体 Architecture:描述系统内部的结构和行为 3 包集合 package:存放各设模块能共享的数据类型、常数和子程序等; 4 配置 configuration:指定实体所对应的结构体 5 库 library:存放已经编

    2024年02月16日
    浏览(38)
  • Verilog的三种描述方式(结构化描述、数据流描述、行为级描述对电路功能的描述有三种方式:结构化描述、数据流描述、行为级描述

    Verilog的三种描述方式(结构化描述、数据流描述、行为级描述对电路功能的描述有三种方式:结构化描述、数据流描述、行为级描述。三种描述方式抽象级别不同,各有优缺点,相辅相成,需要配合使用。 目录 一、结构化描述 1、概念 2、特点 3、示例 真值表: 电路抽象:

    2024年02月04日
    浏览(67)
  • 超详细-Vivado配置Sublime+Sublime实现VHDL语法实时检查

    目录 一、前言 二、准备工作 三、Vivado配置Sublime 3.1 Vivado配置Sublime 3.2 环境变量添加 3.3 环境变量验证 3.4 Vivado设置 3.5 配置验证 3.6 解决Vivado配置失败问题 四、Sublime配置 4.1 Sublime安装Package Control 4.2 Sublime安装VHDL插件 4.3 语法检查工具插件SublimeLinter-contrib-xvhdl 4.4 结果验证

    2024年02月10日
    浏览(91)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包