欢迎大家来到IT世界,在知识的湖畔探索吧!
VHDL简介
作为FPGA高级编程语言的VHDL,由于具有多方面的优势,比如:覆盖面广、描述能力强、可读性好、生命周期长且与硬件工艺无关、可扩展性强、移植性强等,所以应用比较广泛。
VHDL(VHSIC Hardware Description Language)是指VHSIC硬件描述语言。
VHSIC(Very High Speed Integrated Circuit)是指超速集成电路。
今天主要就VHDL语言中的一些数据类型做一个整理与讲解,有些数据类型可能跟其它编程语言大同小异,很好理解,但是有些数据类型却是VHDL语言特有的,理解起来也是比较困难的,希望通过这篇文章,能把VHDL所涉及到的数据类型都讲清楚。
VHDL中的数据类型
一、VHDL标准包中预定义数据类型
在VHDL的标准程序包(STANDARD)中定义好了,我们在使用过程中,已经被自动包含在VHDL源文件中,不再需要我们通过USE语句像调用其它程包一样显式调用一次。
主要有以下几种:
- 布尔:(Boolean)
TYPE BOOLEAN IS (FALSE,TRUE);
欢迎大家来到IT世界,在知识的湖畔探索吧!
布尔类型数据取值只有False和True,不是数值,不能运算,只能用于关系运算符。
- 位: (Bit)
欢迎大家来到IT世界,在知识的湖畔探索吧!TYPE BIT IS ('0','1');
位的取值只有2个,0和1,主要用于逻辑运算。
- 位矢量: (Bit_Vector)
TYPE BIT_VECTOR IS ARRAY(Natural range<>) OF BIT;
位矢量是基于位(Bit)类型的数组,可以理解为有很多Bit组成的数组,也主要用于逻辑运算,下面举例说明。
欢迎大家来到IT世界,在知识的湖畔探索吧!Signal x:Bit_Vector(0 to 7); Signal y:Bit_Vector(7 Downto 0);
- 字符:(Character)
TYPE CHARACTER IS (NUL,SON,STX,...'','!',..);
字符要用单引号 ” 引起来,并且还区分大小写。
- 字符串: (String)
Variable string_var:String(1 to 7); string_var:="A B C D";
字符串是用双引号引起来的,也是区分大小写的。
- 整数: (Integer)
可以使用32位有符号的二进制数表示,范围为-(2^31-1)~(2^31-1),定义方式例如:
Variable a:integer range -63 to 63;
在实际应用中,VHDL仿真器将Integer作为有符号数处理,但是综合时将其作为无符号数处理。
并且要求使用RANGE为所定义的整数限定范围,以便根据此范围来决定表示该变量或者信号的二进制位数。
- 实数: (Real)
实数只能用于仿真,不能用于综合,取值范围为-1.0E38~+1.0E38。
- 时间: (Time)
该数据类型是一个FPGA中特有的数据类型,是一个物理量数据,完整的包括两部分,并且要用至少一个空格进行隔开,并且仅用于仿真不能综合。
单位有:fs,ps,ns,us,ms,sec,min,hr
例子:
constant delay:TIME:=25 ns;
- 错误等级: (Severity Level)
TYPE Severity_level IS(NOTE、WARNING、ERROR、FAILURE);
2、IEEE预定义标准逻辑位与矢量
- 标准逻辑位(Std_Logic)
主要有九种,俗称九段逻辑。
U: Uninitialized; X: Forcing Unkown;
0: Forcing 0;1: Forcing 1;
Z: High Impedance; W: Weak Unknown
L: Weak 0; H: Weak 1; -: Don’t care
值得注意的是:以上九种数据类型中,能够在器件中综合的只有四种,是”-,0,1,Z”。
- 标准逻辑位矢量(Std_Logic_Vector)
标准逻辑位矢量是基于Std_Logic类型的数组;
我们在使用Std_Logic和Std_Logic_Vector时要调用IEEE库中的Std_Logic_1164程序包。调用方法为:
USE ieee.std_logic_1164.all;
用户自定义数据类型
用户自定义格式如下所示:
Type 数据类型名is数据类型定义of基本数据类型;
数组:
type value_type is array (127 downto 0) of integer; type matrix_type is array(0 to15,0 to31) of std_logic;
枚举类型:
type states is(idle,decision,read,write); type boolean is(false,true); type bit is('0','1');
用户自定义子类型
定义格式为:
Subtype子类型名 is 基本数据类型定义 range 约束范围
例如:
subtype digit is integer range 0 to 9;
总结
VHDL语言中的基本数据类型就讲完了,下面总结一下,标准包中默认的数据类型有9种,使用的时候不需要使用USE来说明,默认会加载的,而IEEE.Logic_1164中定义的主要有2种,并且使用的时候需要使用USE来说明。最后一种数据类型是用户自定义数据类型以及子类型。
感谢您的阅读,更多关于FPGA学习内容以及其它学习问题请关注我,有问题请留言讨论。
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/18236.html