HDL学习札记

您所在的位置:网站首页 VHDL中的操作符分为 HDL学习札记

HDL学习札记

2024-01-01 19:26| 来源: 网络整理| 查看: 265

VHDL代码结构

一段完整的VHDL代码的3个基本组成部分:库(LIBRARY)声明、实体(ENTITY)和构造体(ARCHITECTURE)。

VHDL代码基本单元

LIBRARY(库)声明:列出当前设计中需要用到的所有库文件,如ieee,std和work等。

ENTITY(实体):定义了电路的输入/输出引脚;给出了电路外部连接端口(PORTS)的定义;定义电路模块的外部属性。

ARCHITECTURE(构造体):所包含的代码描述了电路要实现的功能;内部的语句描述了电路所实现的功能。

​ 库是一些常用代码的集合,将电路设计中经常使用的一些代码存放到库中有利于设计的重用和代码共享。下图给出了库的典型结构。代码通常以FUNCTION(函数)、PROCEDURE(过程)或COMPONENT(元件)等标准形式存放在PACKAGE(包集)中,用户可以根据需要对其进行编译和使用。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FbP05kJN-1668149634177)(.\VHDL代码的基本组成.png)]

2.2库声明

IEEE(标准库)、STD(语言定义库),IEEE扩展库、VITAL(主要ASIC设计提供的一些仿真模型)、Work(临时库),存放用户设计所有相关的文件。

LIBRARY(库)的建立和使用有利于设计重用和代码共享,同时可以使代码结构更加清晰。

work 库是当前工作库,当前设计的所有代码都存放在work中,使用work库不需要进行任何声明。

包:

​ 定义公共属性(函数、常量、自定义数据类型、子类型),和C语言的头文件类似。

package package_name is 常量; 自定义数据类型; 子类型; 函数; end package_name ;

VHDL 允许用户在定义函数的时候,将函数的声明与函数的实现进行分离。

package body package_name is 函数实现; end package_name ;

函数声明在package中,实现在package body,当然可以将函数直接在package中实现。

自己定义的包存放在work库中;

预定义包: STD_LOGIC_1164

它是IEEE库中使用率较高的一个包,其中STD_LOGIC,STD_LOGIC_VECTER数据类型是设计中必须用到的数据类型。该包主要定义了一些数据类型,子类型以及函数。

STD_LOGIC_ARITH

数学相关的运算符号、数据类型等定义在这个包中(+、-、*、/……),

STD_LOGIC_SIGNEDSTD_LOGIC_USIGNED

这两个包主要是为了丰富STD_LOGIC_ARITH包,定义了这两个包,就可以不用定义STD_LOGIC_ARITH包了。

实体 entity add_m is -- 参数声明 Generic( constant a_WIDTH:STD_LOGIC_VECTOR:=7; -- 定义一个常量 ); -- 端口声明 port ( clk :in std_logic; -- 逻辑类型的 a, b:in std_logic_vector(7 downto 0) ; s,cout:out std_logic_vector(8 downto 0)); end add_m; 信号模式

signal_mode(端口信号)的模式有四种:IN,OUT,INOUT或者BUFFER。

IN,OUT :是单向引脚

INOUT:是双向引脚

OUT类型的端口是不能供电路内部使用的。

信号的类型包括:BIT、STD_LOGIC、INTEGER

BUFFER:该模式的引脚首先是一个输出引脚,但该输出信号可以供电路内部使用。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OwuhdZuS-1668149634178)(.\信号模式.png)]

结构体

描述电路模块的内部结构

architecture dataflow of add_m is -- 定义信号 -- 定义函数 -- 定义自定义数据类型 -- 调用某个模块的时候,先要例化元件,再在begin end 模块中调用 begin -- 例化模块 s


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3