- VLSI设计教程
- VLSI设计 - 首页
- VLSI设计 - 数字系统
- VLSI设计 - FPGA技术
- VLSI设计 - MOS晶体管
- VLSI设计 - MOS反相器
- 组合MOS逻辑电路
- 时序MOS逻辑电路
- VHDL编程
- VHDL - 简介
- VHDL - 组合电路
- VHDL - 时序电路
- Verilog
- Verilog - 简介
- 行为建模与时序
- VLSI设计实用资源
- VLSI设计 - 快速指南
- VLSI设计 - 有用资源
- VLSI设计 - 讨论
VLSI设计 - VHDL简介
VHDL代表超高速集成电路硬件描述语言。它是一种编程语言,用于通过数据流、行为和结构建模风格来模拟数字系统。该语言于1981年首次为国防部(DoD)在VHSIC计划下引入。
描述设计
在VHDL中,实体用于描述硬件模块。实体可以使用以下方式描述:
- 实体声明
- 体系结构
- 配置
- 程序包声明
- 程序包主体
让我们看看这些是什么?
实体声明
它定义了硬件模块的名称、输入输出信号和模式。
语法 -
entity entity_name is Port declaration; end entity_name;
实体声明应以“entity”开头,以“end”结尾。方向将是输入、输出或双向。
输入 | 端口可以读取 |
输出 | 端口可以写入 |
双向 | 端口可以读取和写入 |
缓冲 | 端口可以读取和写入,它只能有一个源。 |
体系结构 -
体系结构可以使用结构化、数据流、行为或混合风格来描述。
语法 -
architecture architecture_name of entity_name architecture_declarative_part; begin Statements; end architecture_name;
在这里,我们应该指定我们要为其编写体系结构主体的实体名称。体系结构语句应位于“begin”和“end”关键字之间。体系结构声明部分可能包含变量、常量或组件声明。
数据流建模
在这种建模风格中,数据通过实体的流动使用并发(并行)信号来表示。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。变量也受到限制,它们应该仅用于顺序代码中。变量永远不能是全局的,因此它的值不能直接传递出去。
结构建模
在这种建模中,实体被描述为一组互连的组件。组件实例化语句是并发语句。因此,这些语句的顺序并不重要。结构化建模风格仅描述组件的互连(视为黑盒),而不暗示组件本身或它们共同表示的实体的任何行为。
在结构建模中,体系结构主体由两部分组成 - 声明部分(在关键字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;