×
模拟电子 > 模拟电路设计 > 详情

数字电路设计的VHDL入门

发布时间:2022-03-18 发布时间:
|

本文介绍了一种硬件描述语言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’和‘-’。

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
基于二极管或者MOS管的反向保护电路设计