📅  最后修改于: 2020-11-22 17:14:35             🧑  作者: Mango
VHDL代表超高速集成电路硬件描述语言。它是一种编程语言,用于通过数据流,行为和结构化样式对数字系统进行建模。该语言于1981年在VHSIC计划下首次为国防部(DoD)引入。
在VHDL中,实体用于描述硬件模块。可以使用以下方式描述实体:
让我们看看这些是什么?
它定义了硬件模块的名称,输入输出信号和模式。
语法–
entity entity_name is
Port declaration;
end entity_name;
实体声明应以“实体”开头,并以“结束”关键字结尾。方向将输入,输出或输入。
In | Port can be read |
Out | Port can be written |
Inout | Port can be read and written |
Buffer | Port can be read and written, it can have only one source. |
建筑–
可以使用结构,数据流,行为或混合样式来描述体系结构。
语法–
architecture architecture_name of entity_name
architecture_declarative_part;
begin
Statements;
end architecture_name;
在这里,我们应该指定要为其编写体系结构主体的实体名称。体系结构语句应位于’begin’和’énd’关键字内。体系结构声明性部分可以包含变量,常量或组件声明。
在这种建模方式中,使用并发(并行)信号表示通过实体的数据流。 VHDL中的并发语句是WHEN和GENERATE。
除了它们,仅使用运算符(AND,NOT,+,*,sll等)的赋值也可以用于构造代码。
最后,一种特殊的分配,称为BLOCK,也可以在这种代码中使用。
在并发代码中,可以使用以下内容-
在这种建模方式中,实体作为一组语句的行为按指定顺序顺序执行。只有放在PROCESS,FUNCTION或PROCEDURE中的语句是顺序的。
过程,功能和过程是顺序执行的唯一代码部分。
但是,总的来说,这些块中的任何一个仍然与放置在其外部的任何其他语句并发。
行为代码的一个重要方面是它不限于顺序逻辑。的确,有了它,我们可以构建时序电路以及组合电路。
行为语句是IF,WAIT,CASE和LOOP。变量也受到限制,它们应仅在顺序代码中使用。 VARIABLE永远不能是全局的,因此其值不能直接传递出去。
在此建模中,实体被描述为一组相互连接的组件。组件实例化语句是并发语句。因此,这些语句的顺序并不重要。建模的结构样式仅描述了组件的互连(被视为黑盒),并不暗示组件本身或它们共同表示的实体的任何行为。
在结构建模中,体系结构主体由两部分组成-声明部分(在关键字begin之前)和语句部分(在关键字begin之后)。
X | Y | Z |
---|---|---|
0 | 0 | 0 |
0 | 1 | 0 |
1 | 0 | 0 |
1 | 1 | 1 |
VHDL Code:
Library ieee;
use ieee.std_logic_1164.all;
entity and1 is
port(x,y:in bit ; z:out bit);
end and1;
architecture virat of and1 is
begin
z<=x and y;
end virat;
X | Y | Z |
---|---|---|
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 1 |
VHDL Code:
Library ieee;
use ieee.std_logic_1164.all;
entity or1 is
port(x,y:in bit ; z:out bit);
end or1;
architecture virat of or1 is
begin
z<=x or y;
end virat;
X | Y |
---|---|
0 | 1 |
1 | 0 |
VHDL Code:
Library ieee;
use ieee.std_logic_1164.all;
entity not1 is
port(x:in bit ; y:out bit);
end not1;
architecture virat of not1 is
begin
y<=not x;
end virat;
X | Y | z |
---|---|---|
0 | 0 | 1 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 0 |
VHDL Code:
Library ieee;
use ieee.std_logic_1164.all;
entity nand1 is
port(a,b:in bit ; c:out bit);
end nand1;
architecture virat of nand1 is
begin
c<=a nand b;
end virat;
X | Y | z |
---|---|---|
0 | 0 | 1 |
0 | 1 | 0 |
1 | 0 | 0 |
1 | 1 | 0 |
VHDL Code:
Library ieee;
use ieee.std_logic_1164.all;
entity nor1 is
port(a,b:in bit ; c:out bit);
end nor1;
architecture virat of nor1 is
begin
c<=a nor b;
end virat;
X | Y | Z |
---|---|---|
0 | 0 | 1 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 0 |
VHDL Code:
Library ieee;
use ieee.std_logic_1164.all;
entity xor1 is
port(a,b:in bit ; c:out bit);
end xor1;
architecture virat of xor1 is
begin
c<=a xor b;
end virat;
X | Y | Z |
---|---|---|
0 | 0 | 1 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 0 |
VHDL Code:
Library ieee;
use ieee.std_logic_1164.all;
entity xnor1 is
port(a,b:in bit ; c:out bit);
end xnor1;
architecture virat of xnor1 is
begin
c<=not(a xor b);
end virat;