VLSI 设计 - VHDL 简介
VHDL 代表超高速集成电路硬件描述语言。它是一种编程语言,用于通过数据流、行为和结构建模风格对数字系统进行建模。该语言于 1981 年首次为国防部 (DoD) 的 VHSIC 计划引入。
描述设计
在 VHDL 中,实体用于描述硬件模块。可以使用以下方式描述实体:
- 实体声明
- 架构
- 配置
- 包声明
- 包主体
让我们看看这些是什么?
实体声明
它定义硬件模块的名称、输入输出信号和模式。
语法 −
entity entity_name is Port declaration; end entity_name;
实体声明应以"entity"关键字开头并以"end"关键字结尾。方向将是输入、输出或输入输出。
In | 端口可读 |
Out | 端口可写 |
Inout | 端口可读可写 |
Buffer | 端口可读可写,但只能有一个源。 |
架构 −
架构可以用结构、数据流、行为或混合风格来描述。
语法 −
architecture architecture_name of entity_name architecture_declarative_part; begin Statements; end architecture_name;
在这里,我们应该指定要为其编写架构主体的实体名称。架构语句应位于"begin"和"énd"关键字内。架构声明部分可能包含变量、常量或组件声明。
数据流建模
在这种建模风格中,通过实体的数据流使用并发(并行)信号来表达。 VHDL 中的并发语句是 WHEN 和 GENERATE。
除此之外,仅使用运算符(AND、NOT、+、*、sll 等)的赋值也可用于构造代码。
最后,在这种代码中还可以使用一种称为 BLOCK 的特殊赋值。
在并发代码中,可以使用以下内容 −
- 运算符
- WHEN 语句(WHEN/ELSE 或 WITH/SELECT/WHEN);
- GENERATE 语句;
- BLOCK 语句
行为建模
在这种建模风格中,作为语句集的实体的行为按指定的顺序依次执行。只有 PROCESS、FUNCTION 或 PROCEDURE 内部的语句才是顺序执行的。
PROCESSES、FUNCTIONS 和 PROCEDURES 是唯一按顺序执行的代码部分。
但是,作为一个整体,这些块中的任何一个仍然与放置在其外部的任何其他语句并发。
行为代码的一个重要方面是它不仅限于顺序逻辑。事实上,有了它,我们可以构建顺序电路以及组合电路。
行为语句包括 IF、WAIT、CASE 和 LOOP。VARIABLES 也受到限制,它们应该只在顺序代码中使用。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;
波形
逻辑操作 – NOR 门
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;
波形
逻辑运算 – XOR 门
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-NOR 门
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;