计算机硬件实验-VHDL语言入门

CO002 Computer Hardware Experiments - Introduction to VHDL Language

Posted by Zaki on January 22, 2021

VHDL语言是一种用来电路设计的硬件描述语言。

VHDL

VHDL设计实体的组成:库和程序包(Library,Package),实体(Entity),结构体(Architecture),配置(Configuration).

“- -” 是注释,vhdl不区分大小写。

library ieee;
use ieee.std_logic_1164.all;

– 库名 .包名 .引用部分

– 以下两个库在程序中都是默认”包含”的,所以可以不写

   library standard;
   use std.standard.all;
   library work;
   use work.all;

–接下来是实体(entity)声明,相当于verilog里面的module声明

       entity D_NAND is 
       port (
            a,b,clk : IN  BIT;
            q       : OUT BIT
               );
       end D_NAND;
  • 可以看出有三个端口,ab是输入端口,c是输出端口,数据类型都是BIT.

  • 端口类型有四种:in(输入),out(输出),inout(双向引脚),buffer(反馈引脚)

  • 信号类型有比较多种,常见的有:BIT,STD_LOGIC,INTEGER等

VHDL 中,预先定义好的数据类型有多种:

     整数数据类型INTEGER,布尔数据类型BOOLEAN,
     标准逻辑位数据类型STD _LOGIC和位数据类型BIT。

BIT 数据类型的信号规定的取值范围是逻辑位‘0’和‘1’。

必须加单引号‘’,否则认为是整数数据类型INTEGER。

变量与信号

  • VHDL变量无延迟改变值

  • VHDL信号有一个相关的延迟

  • 一个信号在某个特定的时间点被赋予一个值,并保留该值直到它被赋予一个新的值。

  • 波形是一个随时间变化的数值序列。

  • 例如:in1 <= ‘0’,5 ns后为’1’,15 ns后为’0’。

  • 一个变量只有一个值,而一个信号有多个值/时间对。

  • 离散事件模拟器通过将时间提前到下一个事件,更新信号值,然后可能调度新事件来执行VHDL代码。

VHDL Logic Operators

# Generics

Generic Example

     entity abcd is generic ( 
    p_a : integer : = 2;    --p_a=2,整数类型
    p_b : integer : = 7 ); 
     port (
    A : out bit_vector(0 to p_a - 1); 
     F :inbit ); 
    End abcd; 

Architecture

结构体的任务是:定义结构体中的各项内部使用元素,如数据类型(TYPE),常数(CONSTAND),信号(SIGNAL),元件(COMPONENT),过程(POCEDURE),变量(VARIABLE)和进程(PROCESS)等。通过VHDL语句描述实体所要求的具体行为和逻辑功能。描述各元件之间的连接。

结构体(architecture)部分,用来描述电路功能.

    architecture d_a_b of D_NAND is 
       signal temp : BIT ;
    begin
      temp <= a nand b ;
      process (clk)
     begin 
       if(clk'event and clk = '1') 
          then q <= temp ;
       end if;
     end process;
    end d_a_b;
  • d_a_b是architecture的名字

  • 注意: <= 在这里是信号的赋值

  • nand是RTL级电路描述,与非

  • process是顺序执行语句,括号里面是敏感信号

  • 程序中,除了process之外,其它的都是并行在走的.相当于always

  • 在vhdl里面会分清楚触发process的事件,如代码便表示在时钟上升沿时触发if