EDA/IC设计
本文介绍了一种硬件描述语言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’和‘-’。
全部0条评论
快来发表一下你的评论吧 !