第三章 VHDL结构与要素

本文详细介绍了VHDL的基本结构,包括库、程序包和配置的使用,实体的声明,类属、端口和结构体的概念,以及端口模式的类型。此外,还涵盖了数据类型的分类,如标准逻辑位和矢量,以及自定义数据类型。同时,讨论了变量、常量和信号的区别,并列举了各种运算符的用法。
摘要由CSDN通过智能技术生成

目录

1 VHDL结构

1.1库,程序包和配置

1.2实体

1.2.1实体语句结构

1.2.1类属

1.2.2端口

1.2.3结构体

1.3端口模式

1.4数据类型

1.4.1IEEE预定义标准逻辑位与标准逻辑矢量

1.4.2其他预定义标准数据类型

1.4.3自行定义的数据类型

1.5数据对象

1.5.1信号的定义格式

1.5.2变量的定义格式

1.5.3常量的定义格式

1.5.4文件的定义格式

1.5.5计时器的定义格式

 1.5.6变量、常量和信号的比较

1.6操作符

1.6.1算术运算符

1.6.2逻辑运算符

1.6.3比较运算符

1.6.4位运算符

1.6.5其他运算符


1 VHDL结构

1.1库,程序包和配置

库的语句格式

LIBRARY 库名;

USE语句的两种常用格式

USE 库名.程序包名.项目名;

USE 库名.程序包名.ALL;

例:

LIBRARY  IEEE;

USE  IEEE.STD_LOGIC_1164.ALL;

USE  IEEE.STD_LOGIC_UNSIGNED.ALL;

USE  IEEE.STD_LOGIC_ARITH.ALL;

1.2实体

1.2.1实体语句结构

ENTITY  实体名  IS

【GENERIC(类属表);】

          PORT (端口表);

END 【ENTITY】实体名;

1.2.1类属

GENERIC (参数名:数据类型);

1.2.2端口

PORT (端口名:端口模式数据类型;

           端口名:端口模式数据类型);

1.2.3结构体

ARCHITECTURE  结构体 OF 实体名 IS
[说明语句;]
    BEGIN
        功能描述语句;
END 结构体名;

       

1.3端口模式

IN输入端口,单向输入,将数据通过改端口读入
OUT输出端口,单向输出,将数据从该端口输出
BUFFRE是具有读功能的输出端口,可以读出数据,该数据也可以写入,只有一个驱动源
INOUT输入输出双向端口,可以通过同一端口从电路内部读数据,从电路外,写入数据

1.4数据类型

布尔数据类型BOOLEAN
位数据类型BIT
位矢量数据类型BIT_VECTOR
整数数据类型INTEGER

1.4.1IEEE预定义标准逻辑位与标准逻辑矢量

标准逻辑位数据类型STD_LOGIC
标准逻辑矢量数据类型STD_LOGIC_VECTOR

1.4.2其他预定义标准数据类型

无符号数据类型UNSIGNED
有符号数据类型SIGNED
小整型SMALL INT

1.4.3自行定义的数据类型

枚举类型

type color_t is (red, green, blue, yellow);

数组类型

type bit_array is array (0 to 7) of std_logic;

1.5数据对象

信号SIGNAL信号可以与电路中的其他组件连接,并允许电路中的不同部分之间数据传输
变量VARIABLE

在VHDL代码中临时存储数据的数据对象。

变量只在其定义的过程或函数中可见,并在进程中不具备存储能力

常量CONSTANT

定义后不可更改其值的数据对象。

通常用于定义电路中的一些基本参数,如时钟周期、计数器位数

文件FILE

可用于读取和写入外部文件。

文件通常用于与外部环境交互

计时器TIMER

可用于向电路中添加基于时间的功能。

计时器可以帮助实现电路的时间同步和协调

1.5.1信号的定义格式

signal <signal_name> : <type>;

其中,<signal_name> 是信号的名称,可以根据需求命名。<type> 是信号的数据类型,可以是标准的数据类型,例如std_logicintegerboolean等,也可以是用户自定义的数据类型。以下是两个示例信号的定义格式:

signal clock : std_logic;
signal data_bus : std_logic_vector(7 downto 0);

在第一个示例中,clock是一个标准类型的信号,其数据类型为std_logic。在第二个示例中,data_bus是一个自定义类型的信号,其数据类型为std_logic_vector,长度为8位(即7至0)。注意,信号的定义只用于指定其名称和数据类型,在创建电路之前,需要将信号与其他组件连接起来才能使用。

1.5.2变量的定义格式

variable <variable_name> : <type> := <initial_value>;

其中,<variable_name> 是变量的名称,可以根据需求命名。<type> 是变量的数据类型,可以是标准的数据类型,也可以是用户自定义的数据类型。<initial_value> 是变量的初始值,可以省略。

以下是两个示例变量的定义格式:

variable count : integer := 0;
variable temp : std_logic_vector(7 downto 0);

在第一个示例中,count是一个整型变量,其初始值为0。

在第二个示例中,temp是一个自定义类型的变量,其数据类型为std_logic_vector,长度为8位(即7至0)。

在VHDL中,变量定义的作用域仅限于定义它的过程或函数,它们不能用于连接其他电路组件。相比之下,信号的作用域可以是整个电路,并通过连接和传输实现跨组件使用。

1.5.3常量的定义格式

constant <constant_name> : <type> := <value>;

其中,<constant_name> 是常量的名称,可以根据需求命名。<type> 是常量的数据类型,可以是标准数据类型,也可以是用户自定义的数据类型。<value> 是常量的值。例如,

constant pi : real := 3.1415;

1.5.4文件的定义格式

file <file_name> : <file_type> is "<file_path>";

其中,<file_name> 是文件的名称,可以根据需求命名。<file_type> 是文件的类型,通常是textline. "<file_path>" 是文件在计算机中的路径,可以是相对路径或绝对路径。例如:

file log_file : text is "logs/my_log_file.txt";

在此示例中,log_file是文件的名称,text是文件的类型。文件名为my_log_file.txt,位于logs文件夹下。文件用于记录模拟器或程序运行过程中的数据。

文件通常用于与外部环境(如计算机文件系统)进行交互,而不是数字电路本身。文件的读取和写入可以通过使用readwrite等相关操作来实现。

1.5.5计时器的定义格式

signal <timer_name> : <type> := <initial_value>;

其中,<timer_name> 是计时器的名称,可以根据需求命名。<type> 是计时器的数据类型,通常是无符号整数 (unsigned) 或整数 (integer)。<initial_value> 是计时器的初始值,其单位可以是秒、微秒或时钟周期。

以下是一个示例计时器的定义格式:

signal timer : unsigned(31 downto 0) := (others => '0');

在此示例中,timer是一个无符号整数类型的计时器,其初始值为0。

计时器通常需要与其他电路组件(如时钟产生器或状态机)以及其他计时器一起使用,以实现复杂的时间控制功能。

 1.5.6变量、常量和信号的比较

变量常量信号

变量在过程中声明,具有局部作用域。

常量在程序中声明,具有全局作用域。

信号是需要在电路中定义。

变量可以被多次赋值。变量的值可以被修改。常量的值不能被修改。信号的值可以被修改。
变量在过程执行完毕后失效。常量在程序执行过程中一直存在。信号的值在赋值后不会立即更新电路中的值,而是产生一个事件,需要等待下一次模拟才会更新。
变量在VHDL中常用于过程中的临时存储数据或计算结果。常量在VHDL中常用于存储不变的数据或常用的值,例如数字常量、字符常量等。信号在VHDL中常用于表示电路中的输入、输出、中间信号等。

1.6操作符

1.6.1算术运算符

加运算符+
减法运算符-
乘法运算符*
除法运算符/
取模运算符mod

1.6.2逻辑运算符

与运算符and
或运算符or
非运算符not
异或运算符xor

1.6.3比较运算符

等于=
不等于/=
大于>
小于<
大于等于>=
小于等于<=

1.6.4位运算符

位与运算符&
位或运算符|
位非运算符not
位异或运算符xor
左移运算符sll
右移运算符srl

1.6.5其他运算符

连接运算符&
范围运算符to
数组索引运算符()
符号运算符+

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

凉辰梦凡星

你的鼓励将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值