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之后)。

逻辑运算 - 与门

AND GATE
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;

波形

Waveforms AND

逻辑运算 - 或门

OR GATE
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;

波形

Waveforms OR

逻辑运算 - 非门

NOT GATE
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; 

波形

Waveforms Not

逻辑运算 - 与非门

NAND GATE
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; 

波形

Waveforms NAND

逻辑运算 - 或非门

NOR GATE
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; 

波形

Waveforms NOR

逻辑运算 - 异或门

XOR GATE
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;

波形

Waveforms 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 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;

波形

Waveforms X-NOR
广告