VHDL语法入门 (一) VHDL结构

本文介绍了VHDL语言的基础结构,包括库(如ieee库,std库,work库)的使用,实体(ENTITY)的端口定义,以及构造体(ARCHITECTURE)在描述电路功能中的作用。通过示例展示了如何声明库、定义输入/输出端口以及编写实现逻辑的代码。VHDL中的PROCESS用于描述时序电路,其内部代码按顺序执行,而整体与外部并发执行。
摘要由CSDN通过智能技术生成

前言

本文是本人在自学VHDL时进行的整理,学习教材为《VHDL数字电路设计教程》,若整理有误欢迎指正,若需要相关参考资料,可私信获取。

VHDL结构

一段完整的VHDL代码由库(LIBRARY)、实体(ENTITY)和构造体(ARCHITECTURE)构成,其中

  • 库(LIBRARY)列出当前设计中需要用到的所有库文件
  • 实体(ENTITY)给出了电路外部连接端口(PROTS)的定义
  • 构造体(ARCHITECTURE)描述电路实现的功能

库(LIBRARY)

库的基本组成部分如下图

VHDL中三个常用的库:ieee库,std库,work库

  • ieee库:主要包含一些定义数据类型的包集。
  • std库:VHDL设计环境的标准资源库,包括数据类型和输入/输出文本等内容。std库存放有包集Standard和textio。
  • work库:当前工作库,当前设计的所有代码都存放在work库中,使用work库不需要任何声明。

库的声明

LIBRARY library_name;
USE library_name.package_name.package_parts;

LIBRARY ieee;
USE ieee.std_logic_1164.all;

LIBRARY std;
USE std.standard.all;

LIBRARY work;
USE work.all;

std库和work库在程序中都是默认“可见”的,因此不需要对它们进行声明;只有ieee库在使用前需要进行明确的声明。

实体(ENTITY)

实体用于描述电路的所有输入/输出引脚,语法结构如下

ENTITY entity_name IS
    PORT(
        port_name:signal_mode signal_type;
        port_name:signal_mode signal_type;
        ...
    );
END entity_name;

端口的信号模式(signal_mode)有四种可选:

  • IN:单向输入
  • OUT:单向输出(该输出不能供电路内部使用)
  • INOUT:双向口
  • BUFFER:单向输出(该输出信号只能供电路内部使用)

信号的类型包括BIT,STD_LOGIC,INTEGER等,之后会介绍

例,描述一个与非门的端口

ENTITY nand_gate IS
    PORT(
        a,b:IN BIT;
        x:OUT BIT;
    )
END nand_gate;

 当输入输出有多个位时,在类型后面添加

例如,下图的多路选择器ENTITY如下

ENTITY mux IS
    PORT(
      a,b: IN STD_LOGIC_VECTOR(7 DOWNTO 0);
      sel: IN STD_LOGIC_VECTOR(1 DOWNTO 0);
      c: OUT STD_LOGIC_VECTOR(7 DOWNTO 0)      
    );
END mux;

构造体(ARCHITECHURE)

构造体用于描述实现电路行为和实现的功能,语法结构如下:

ARCHITECTURE architecture_name OF entity_name IS
    [declarations]
BEGIN
    (code)
END architecture_name;

构造体包含两个主要部分:

  • 声明(declaration),该部分是可选的,用于对信号和常量等进行声明;
  • 代码(code),用来描述电路的行为(功能)。

例,描述与非门逻辑

ARCHITECTURE myarch OF nand_gate IS
BEGIN
    x <= a NAND b;
END myarch

整体结构实例:

带有异步复位的D触发器

--库
LIBRARY ieee;
USE ieee.std_logic_1164.all;

--实体
ENTITY dff IS
    PORT(
        d,clk,rst:IN STD_LOGIC;
        q:OUT STD_LOCIG
    );
END dff;

--结构
ARCHITECTURE behavior OF dff IS    
BEGIN
    PROCESS(rst,clk) BEGIN    --PROCESS内部的代码是顺序执行的
        IF(rst = '1')THEN
            q<='0';
        ELSIF(clk`EVENT AND clk='1')THEN
            q<=d;
        END IF;
    END PROCESS;
END behavior;

“<=”操作符用来给信号(SIGNAL)赋值,而“:=”用来给变量(VARIABLE)赋值,默认情况下,ENTITY中所有的端口都是信号

尽管VHDL内部是并发执行的(相对于顺序执行的计算机而言),但是要实现时序电路(随时钟节拍一步步顺序工作的电路),必须使用顺序执行的代码PROCESS

PROCESS内部的代码是顺序执行的,但是PROCESS作为整体时与外部其他语句并发执行

注释行,当出现“--”时,表示后续文字为注释,直到该行结束。

VHDL不区分大小写

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值