VHDL概述及在描述数字电路时的结构

EDA/IC设计

1048人已加入

描述

  本文介绍了一种硬件描述语言VHDL,以及它在描述数字电路时的结构。我们还将介绍一些介绍性的示例电路描述,并讨论“std_logical”和“bit”数据类型之间的区别。

  VHDL是数字电路设计中常用的硬件描述语言之一。VHDL代表VHSIC硬件描述语言。反过来,VHSIC代表超高速集成电路。

  VHDL是1981年由美国国防部发起的。IBM和德州仪器等公司的合作导致VHDL于1985年发布了第一个版本。1984年,Xilinx发明了第一个FPGA,很快就在其产品中支持VHDL。从那时起,VHDL语言在数字电路设计、仿真和综合方面已经发展成为一种成熟的语言。

  在本文中,我们将简要讨论描述给定电路的VHDL代码的一般结构。通过一些介绍性示例,我们还将熟悉一些常用的数据类型、操作符等。

  数字电路

  VHDL的一般结构

  让我们考虑一个简单的数字电路,如图1所示。

  图1.一个简单的数字电路。

  此图显示有两个输入端口,a和b,以及输出端口out 1。图中显示输入和输出端口有一点宽。电路的功能是要和两个输入端,并将结果放在输出端口上。

  VHDL使用类似的描述;但是,它有自己的语法。例如,它使用以下代码行来描述该电路的输入和输出端口:

  1 entity circuit_1 is 2 Port ( a : in STD_LOGIC; 3 b : in STD_LOGIC; 4

  out1 : out STD_LOGIC); 5 end circuit_1;

  让我们分清这意味着什么,一行行。

  第1行:代码的第一行指定要描述的电路的任意名称。在关键字“实体”和“is”之间的“电路1”一词决定了该模块的名称。

  第2至第4行:这些线路指定电路的输入和输出端口。将这些线路与图1中的电路进行比较,我们发现该电路的端口及其特性列在关键字“port”之后。例如,第3行说我们有一个名为“b”的端口。此端口是一个输入,如冒号后面的关键字“in”所示。

  关键字“std_Logic”指定了什么?正如我们将在本文后面讨论的那样,std_Logic是VHDL中一种常用的数据类型。它可以用来描述一位数字信号。由于图1中的所有输入/输出端口都将传输1或0,因此我们可以对这些端口使用std_logicdata类型。

  第5行:这一行决定了“实体”语句的结尾。

  因此,代码的实体部分指定了1)要描述的电路的名称,2)电路的端口及其特性,即输入/输出和这些端口要传输的数据类型。代码的实体部分实际上描述了模块与其周围环境的接口。由讨论的“实体”语句指定的上述电路的特性如图1所示绿色。

  除了电路与环境的接口外,我们还需要描述电路的功能。在图1中,电路的功能是to和两个输入,并将结果放在输出端口上。为了描述电路的操作,VHDL增加了一个“体系结构”部分,并将其与实体语句定义的电路1相关联。描述该电路结构的vhdl代码如下

  6 architecture Behavioral of circuit_1 is 8 begin 9 out1

  第6行:这一行为下一行将要描述的体系结构命名为“行为”。这个名称介于关键字“Architecture”和“of”之间。它还将该体系结构与“电路1”相关联。换句话说,这种架构将描述“电路1”的操作。

  第8行:这指定了体系结构描述的开始。

  第9行第9行使用VHDL的语法来描述电路的操作。两个输入a和b的AND在括号内找到,并使用赋值运算符“《=”将结果分配给输出端口。

  第10行这指定了体系结构描述的结束。如前所述,这些代码行描述了电路的内部操作,这里是一个简单的门(如图1中蓝色所示)。

  把我们到目前为止讨论的内容放在一起,我们几乎完成了用VHDL描述“电路1”的工作。我们获得以下代码:

  1 entity circuit_1 is 2 Port ( a : in STD_LOGIC; 3 b : in STD_LOGIC; 4

  out1 : out STD_LOGIC); 5 end circuit_1; -

  6 architecture Behavioral of circuit_1 is 8 begin 9 out1

  但是,我们仍然需要增加几行代码。这些行将添加一个包含一些重要定义的库,包括数据类型和运算符的定义。库可以由几个包组成(参见下面的图2)。我们将不得不使一个给定库的所需包对设计可见。

  由于上面的示例使用数据类型“std_logal”,所以我们需要将“ieee”库中的包“std_logic1164”添加到代码中。注意,std_logicdata类型的逻辑运算符也在“std_logic1164”包中定义,否则我们必须使相应的包对代码可见。最后的代码是

  1 library ieee; 2 use ieee.std_logic_1164.all 3 entity circuit_1 is 4 Port ( a : in STD_LOGIC; 5

  b : in STD_LOGIC; 6 out1 : out STD_LOGIC); 7 end circuit_1; 8 architecture Behavioral of circuit_1 is 9 begin 10 out1

  在这里,我们创建了两条新的行来超越我们所创造的。第一行添加库“IEEE”,第二行指定此库中的包“std_logic1164”是必需的。因为“std_Logic”是一种常用的数据类型,所以我们几乎总是需要将“IEEE”库和“std_logic1164”包添加到VHDL代码中。

  。 。 。 。 。 。 。 。 。

  发明内容

  在本文中,我们讨论了VHDL是什么,它是如何构造的,并介绍了如何使用它来描述数字电路的一些例子。您现在应该更好地理解以下几点:

  代码的“实体”部分指定1)要描述的电路的名称和2)电路的端口;它建立模块与其周围环境之间的接口。

  代码的“体系结构”部分描述了电路的内部操作。

  VHDL库包含重要的定义,包括数据类型和操作符的定义。库本身可以由几个包组成。

  我们几乎总是需要将“IEEE”库和“std_logic1164”包添加到我们的VHDL代码中。

  在“std_Logic”数据类型的可能值中,我们通常使用‘0’、‘1’、‘Z’和‘-’。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分