VHDL硬件描述语言(二)VHDL程序的基本结构

一、基本结构

  1. 实体说明(entity):描述所设计的系统的外部接口部分
  2. 结构体(architecture):描述系统内部的结构和行为
  3. 程序包(package):存放各设计模块都能共享的数据类型、常数和子程序等
  4. 库(library):存放已经编译的实体、结构体、包集合和配置
  5. 配置:从库中选取所需要的单元组成系统设计的不同版本

二、常用格式

2.1实体说明

实体(ENTITY)是VHDL设计中最基本的组成部分之一。实体用于定义电路的输入/输出引脚,但并不描述电路的具体构造和实现的功能即描述实体的外部接口情况以及实体内的类属参数等。

2.1.1实体说明格式:

entity <实体名> is
    [generic(常数名 : 数据类型:设定值)]    --类属参数说明,“[]”表示可省略;
    port( 	端口名1 : 端口方向 端口类型;
    			端口名2 : 端口方向 端口类型;
				    				...
    			端口名n : 端口方向 端口类型   -- 最后一个没有分号
    );
end [entity] <实体名>;

注:

1)参数说明主要为设计实体指定参数,如端口宽度、器件延迟时间等;

2)端口说明描述的是设计实体和外部的接口,具体说就是对端口名称、端口模式和端口数据类型进行说明。

(1)端口名称:输入输出信号的名称,在实体中必须是唯一的。

(2)端口模式:说明信号的方向,有以下几种模式:

端口模式意义
in输入信号
out输出信号
inout双向信号
buffer输出信号 ,但可在内部反馈使用(缓冲)

注: buffer是inout的子集,但作输入用时,信号不是由外部驱动,而是 从输出反馈得到。
在这里插入图片描述

(3)端口数据类型:端口信号的取值类

明确地指定和严格地定义端口信号的取值类型是VHDL的重要特点

VHDL中常见的数据类型有以下几种:

数据类型简要说明
bit位类型,取值0、1 ,用于逻辑运算
bit_vector位向量类型,是BIT的组合,用于逻辑运算
integer整数类型,可用作循环的指针或常数
boolean布尔类型,取值FALSE(假)、TRUE(真)
std_logic工业标准的逻辑类型,取值0、1、X、Z等
std_logic_vector工业标准的逻辑向量类型,是STD_ LOGIC的组合

注:std_logic和std_logic_vector是ieee的预定义数据类型,使用时必须先打开ieee库。即:library ieee; use ieee.std_logic_1164.all;
std_logic是一个9值的逻辑:

U未初始化状态
X不定态
0逻辑0
1逻辑1
Z高阻态
W弱不定态
L弱0
H弱1
-无关态

2.1.2实体说明案例:

下面以RS触发器为例:

在这里插入图片描述

entity example is
	port(set: in bit;
		  reset: in bit;
		  q,qb: buffer bit
		  );
end example;

注:

  • 实体名要与文件名一致(使用软件时)
  • 端口说明括号中最后一句没有分号“;”

2.2结构体

结构体(Architecture )描述的是实体内部的逻辑功能。在电路上相当于器件的内部电路结构。

2.2.1结构体的基本格式:

ARCHITECTURE <结构体名> OF <实体名> IS
	[结构体说明部分]
	BEGIN
	<功能描述语句>
END [ARCHITECTURE] <结构体名>

注:

  1. OF后的实体名应与实体说明中的实体名一致
  2. 功能描述语句是结构体中的主要部分,用于描述所实现实体的功能四种不同类型的并行语句:
    (1)进程语句
    (2)信号赋值语句
    (3)信号赋值语句
    (4)元件例化语句
  3. 说明语句是对结构体的功能描述语句中将要用到的信号、数据类型、常数、元件、函数和过程等加以说明

2.2.2结构体的描述方式:

在VHDL中,允许设计人员采用不同的描述风格来进行设计实体中结构体的书写,结构体的描述方式通常有三种:行为描述方式、数据流描述方式和结构描述方式。
4. 行为描述方式
5. 对设计实体的数学模型的描述,其抽象程度最高。
6. 类似于高级编程语言,无需知道电路的具体结构。
7. 优点是只需描述输入与输出的行为,不关注具体的电路实现。
8. 数据流描述方式
9. 从信号到信号的数据流动的路径形式进行描述。
10. 设计人员对设计实体的功能实现要有一定的了解,有时还需对电路的具体结构有清楚的认识。
11. 优点是易于进行逻辑综合,综合效率较高。
12. 结构描述方式
13. 指在多层次的设计中,通过调用库中的元件或是已设计好的模块来完成实体功能的描述。
14. 结构描述方式只表示元件(或模块)和元件(或模块)之间的互连,就像网表一样。
15. 优点是可以将已有的设计成果用到当前的设计中去,因而大大提高设
计效率,对于可分解的大型设计,结构描述方式是首选方案。
注:也可以使用上述三种描述方式的组合来进行结构
体的描述,即混合描述方式

2.2.3结构体例子:

同样以RS触发器为例:
在这里插入图片描述
在这里插入图片描述

行为描述方式:
library ieee;
use ieee.std_logic_1164.all;

entity example is
	port(set: in bit;
		  reset: in bit;
		  q,qb: buffer bit
		  );
end example;

architecture behave of example is
begin
	process(set,reset)
		variable last_state:bit;
	begin
	if set-'1' and reset='1' then
		last_state:=last_state;
	elsif set-'0' and reset='1' then
		last_state:='1';
	elsif set-'1' and reset='0' then
		last_state:='0';	
	end if;
	q<=last_state;
	qb<=not(last_state);
	end process;
end behave;

注:

  1. 进程语句PROCESS: PROCESS(set, reset)
    • 括号中的set, reset信号称为敏感信号,是该进程的激活条件。
    • 只要set和reset信号有一个发生变化,该进程中的语句就会被顺序地执行一遍。
  2. 进程中的语句是顺序语句,它们之间不是并行关系,执行时是按书写的先后次序顺序执行的。
  3. 行为描述方式描述的是与硬件电路结构无关的算法关系,所以应该按算法的流程顺序执行。
数据流描述方式:
library ieee;
use ieee.std_logic_1164.all;

entity example is
	port(set: in bit;
		  reset: in bit;
		  q,qb: buffer bit
		  );
end example;

architecture behave of example is
 begin
	q <= not(qb and set);
	qb <= not(q and reset);
end behave;

注:q和qb两句信号赋值语句之间是并行的关系,即只要输人set和reset发生了变化,这两个语句就会同时被执行,产生相应的输出。

结构描述方式:
library ieee;
use ieee.std_logic_1164.all;

entity example is
	port(set: in bit;
		  reset: in bit;
		  q,qb: buffer bit
		  );
end example;

architecture behave of example is
component example
	port(a: in bit;
		  b: in bit;
		  c: out bit
		  );
end component;
begin
u1:example port map(a=>set,b=>qb,c=>q); 
u2:example port map(a => reset, b => q, c => qb);
end behave;


2.3库

VHDL的基本结构由前述的实体结构体组成,但实际中的VHDL程序除上述两个基本部分以外通常还包括另外三个部分:库、程序包和配置

2.3.1 库的定义

:主要用来存放已经编译的实体、结构体、程序包等;
VHDL库中的各个设计单元(实体、结构体、程序包和配置)都可以用作其他设计的资源,一个设计可以使用多个库中的设计单元。

2.3.2库的使用格式

(1)库说明语句格式:
library <库名>;

以library 开头,后面紧跟着设计中要使用的库的名字。库说明语句使该库对于设计可见。

(2)USE子句格式:
use <库名>.<程序包名>.all;
  • 库名是前面库说明语句中说明的库。
  • 程序包名是设计中要使用的库中的设计单元。
  • all表示使用程序包中的所有项目。

2.3.2库的例子

LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;

2.4程序包

程序包:主要用来存放各个设计都能共享的数据类型、子程序、常数和元件等;

在VHDL中,设计的实体说明和结构体中定义的数据类型、子程序说明、属性说明和元件说明等部分只能在该设计实体中使用,而对于其他设计实体是不可见的。为减少重复定义工作,VHDL提出了程序包的概念,用来存放能够共享的数据类型、子程序说明、属性说明和元件说明等。

2.4.1程序包的组成

(1)程序包说明部分:

主要对数据类型、子程序、常量和元件等进行说明。

PACKAGE 程序包名 IS 
程序包说明语句
END 程序包名;
(2)程序包体部分:

用来规定程序包的实际功能。

PACKAGE BODY 程序包名 IS -- 程序包体
程序包体说明语句以及包体内容
END 程序包名;

2.4.2程序包案例

程序包说明

PACKAGE example IS
TYPE alu_op IS (add, sub, mul, div, eq, gt, lt);
CONSTANT pi: REAL := 3.14159265;
delay1: TIME; 
COMPONENT nand2 
PORT (a,b:in bit; c: out bit);
END COMPONENT;
FUNCTION mean (a,b,c: real) RETURN REAL; 
END example;

程序包体

PACKAGE BODY example IS
CONSTANT delay1: TIME:= 15ns;
FUNCTION mean (a,b,c: real) RETURN real IS 
BEGIN
RETURN (a + b +c )/3.0; 
END mean;
END example;

2.5 配置

当对实体进行仿真时可为同一实体配置不同的结构体以比较其差别;为例化的各元件实体配置指定的结构体,从而形成一个所希望的例化元件层次构成的设计实体。
配置语句的一般格式

CONFIGURATION <配置名> OF <实体名> IS
FOR <选配结构体名>
END FOR;
END [<配置名>]
  • 6
    点赞
  • 52
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
Verilog HDL 硬件描述语言 目 录 译者序 前言 第1章 简介 1 1.1 什么是Verilog HDL? 1 1.2 历史 1 1.3 主要能力 1 第2章 HDL指南 4 2.1 模块 4 2.2 时延 5 2.3 数据流描述方式 5 2.4 行为描述方式 6 2.5 结构化描述形式 8 2.6 混合设计描述方式 9 2.7 设计模拟 10 第3章 Verilog语言要素 14 3.1 标识符 14 3.2 注释 14 3.3 格式 14 3.4 系统任务和函数 15 3.5 编译指令 15 3.5.1 `define和`undef 15 3.5.2 `ifdef、`else 和`endif 16 3.5.3 `default_nettype 16 3.5.4 `include 16 3.5.5 `resetall 16 3.5.6 `timescale 16 3.5.7 `unconnected_drive和 `nounconnected_drive 18 3.5.8 `celldefine 和 `endcelldefine 18 3.6 值集合 18 3.6.1 整型数 18 3.6.2 实数 19 3.6.3 字符串 20 3.7 数据类型 20 3.7.1 线网类型 20 3.7.2 未说明的线网 23 3.7.3 向量和标量线网 23 3.7.4 寄存器类型 23 3.8 参数 26 第4章 表达式 28 4.1 操作数 28 4.1.1 常数 28 4.1.2 参数 29 4.1.3 线网 29 4.1.4 寄存器 29 4.1.5 位选择 29 4.1.6 部分选择 29 4.1.7 存储器单元 30 4.1.8 函数调用 30 4.2 操作符 30 4.2.1 算术操作符 31 4.2.2 关系操作符 33 4.2.3 相等关系操作符 33 4.2.4 逻辑操作符 34 4.2.5 按位操作符 35 4.2.6 归约操作符 36 4.2.7 移位操作符 36 4.2.8 条件操作符 37 4.2.9 连接和复制操作 37 4.3 表达式种类 38 第5章 门电平模型化 39 5.1 内置基本门 39 5.2 多输入门 39 5.3 多输出门 41 5.4 三态门 41 5.5 上拉、下拉电阻 42 5.6 MOS开关 42 5.7 双向开关 44 5.8 门时延 44 5.9 实例数组 45 5.10 隐式线网 45 5.11 简单示例 46 5.12 2-4解码器举例 46 5.13 主从触发器举例 47 5.14 奇偶电路 47 第6章 用户定义的原语 49 6.1 UDP的定义 49 6.2 组合电路UDP 49 6.3 时序电路UDP 50 6.3.1 初始化状态寄存器 50 6.3.2 电平触发的时序电路UDP 50 6.3.3 边沿触发的时序电路UDP 51 6.3.4 边沿触发和电平触发的混合行为 51 6.4 另一实例 52 6.5 表项汇总 52 第7章 数据流模型化 54 7.1 连续赋值语句 54 7.2 举例 55 7.3 线网说明赋值 55 7.4 时延 55 7.5 线网时延 57 7.6 举例 57 7.6.1 主从触发器 57 7.6.2 数值比较器 58 第8章 行为建模 59 8.1 过程结构 59 8.1.1 initial 语句 59 8.1.2 always语句 61 8.1.3 两类语句在模块中的使用 62 8.2 时序控制 63 8.2.1 时延控制 63 8.2.2 事件控制 64 8.3 语句块 65 8.3.1 顺序语句块 66 8.3.2 并行语句块 67 8.4 过程性赋值 68 8.4.1 语句内部时延 69 8.4.2 阻塞性过程赋值 70 8.4.3 非阻塞性过程赋值 71 8.4.4 连续赋值与过程赋值的比较 72 8.5 if 语句 73 8.6 case语句 74 8.7 循环语句 76 8.7.1 forever 循环语句 76 8.7.2 repeat 循环语句 76 8.7.3 while 循环语句 77 8.7.4 for 循环语句 77 8.8 过程性连续赋值 78 8.8.1 赋值—重新赋值 78 8.8.2 force与release 79 8.9 握手协议实例 80 第9章 结构建模 83 9.1 模块 83 9.2 端口 83 9.3 模块实例语句 83 9.3.1 悬空端口 84 9.3.2 不同的端口长度 85 9.3.3 模块参数值 85 9.4 外部端口 87 9.5 举例 89 第10章 其他论题 91 10.1 任务 91 10.1.1 任务定义 91 10.1.2 任务调用 92 10.2 函数 93 10.2.1 函数说明部分 93 10.2.2 函数调用 94 10.3 系统任务和系统函数 95 10.3.1 显示任务 95 10.3.2 文件输入/输出任务 97 10.3.3 时间标度任务 99 10.3.4 模拟控制任务 99 10.3.5 定时校验任务 100 10.3.6 模拟时间函数 101 10.3.7 变换函数 102 10.3.8 概率分布函数 102 10.4 禁止语句 103 10.5 命名事件 104 10.6 结构描述方式和行为描述方式的 混合使用 106 10.7 层次路径名 107 10.8 共享任务和函数 108 10.9 值变转储文件 110 10.9.1 举例 111 10.9.2 VCD文件格式 112 10.10 指定程序块 113 10.11 强度 114 10.11.1 驱动强度 114 10.11.2 电荷强度 115 10.12 竞争状态 116 第11章 验证 118 11.1 编写测试验证程序 118 11.2 波形产生 118 11.2.1 值序列 118 11.2.2 重复模式 119 11.3 测试验证程序实例 123 11.3.1 解码器 123 11.3.2 触发器 124 11.4 从文本文件中读取向量 126 11.5 向文本文件中写入向量 127 11.6 其他实例 128 11.6.1 时钟分频器 128 11.6.2 阶乘设计 130 11.6.3 时序检测器 132 第12章 建模实例 136 12.1 简单元件建模 136 12.2 建模的不同方式 138 12.3 时延建模 139 12.4 条件操作建模 141 12.5 同步时序逻辑建模 142 12.6 通用移位寄存器 145 12.7 状态机建模 145 12.8 交互状态机 147 12.9 Moore有限状态机建模 150 12.10 Mealy型有限状态机建模 151 12.11 简化的21点程序 153 附录 语法参考 157 参考文献 172
第1例 带控制端口的加法器 第2例 无控制端口的加法器 第3例 乘法器 第4例 比较器 第5例 路选择器 第6例 寄存器 第7例 移位寄存器 第8例 综合单元库 第9例 七值逻辑与基本数据类型 第10例 函数 第11例 七值逻辑线或分辨函数 第12例 转换函数 第13例 左移函数 第14例 七值逻辑程序包 第15例 四输入多路器 第16例 目标选择器 第17例 奇偶校验器 第18例 映射单元库及其使用举 第19例 循环边界常数化测试 第20例 保护保留字 第21例 进程死锁 第22例 振荡与死锁 第23例 振荡电路 第24例 分辨信号与分辨函数 第25例 信号驱动源 第26例 属性TRANSACTION和分辨信号 第27例 块保护及属性EVENT, 第28例 形式参数属性的测试 第29例 进程和并发语句 第30例 信号发送与接收 第31例 中断处理优先机制建模 第32例 过程限定 第33例 整数比较器及其测试 第34例 数据总线的读写 第35例 基于总线的数据通道 第36例 基于多路器的数据通道 第37例 四值逻辑函数 第38例 四值逻辑向量按位或运算 第39例 生成语句描述规则结构 第40例 带类属的译码器描述 第41例 带类属的测试平台 第42例 行为与结构的混合描述 第43例 四位移位寄存器 第44例 寄存/计数器 第45例 顺序过程调用 第46例 VHDL中generic缺省值的使用 第47例 无输入元件的模拟 第48例 测试激励向量的编写 第49例 delta延迟例释 第50例 惯性延迟分析 第51例 传输延迟驱动优先 第52例 多倍(次)分频器 第53例 三位计数器与测试平台 第54例 分秒计数显示器的行为描述6 第55例 地址计数器 第56例 指令预读计数器 第57例 加.c减.c乘指令的译码和操作 第58例 2-4译码器结构描述 第59例 2-4译码器行为描述 第60例 转换函数在元件例示中的应用 第61例 基于同一基类型的两分辨类型的赋值相容问题 第62例 最大公约数的计算 第63例 最大公约数七段显示器编码 第64例 交通灯控制器 第65例 空调系统有限状态自动机 第66例 FIR滤波器 第67例 五阶椭圆滤波器 第68例 闹钟系统的控制 第69例 闹钟系统的译码 第70例 闹钟系统的移位寄存器 第71例 闹钟系统的闹钟寄存器和时间计数器 第72例 闹钟系统的显示驱动器 第73例 闹钟系统的分频器 第74例 闹钟系统的整体组装 第75例 存储器 第76例 电机转速控制器 第77例 神经元计算机 第78例ccAm2901四位微处理器的ALU输入 第79例ccAm2901四位微处理器的ALU 第80例ccAm2901四位微处理器的RAM 第81例ccAm2901四位微处理器的寄存器 第82例ccAm2901四位微处理器的输出与移位 第83例ccAm2910四位微程序控制器中的多路选择器 第84例ccAm2910四位微程序控制器中的计数器/寄存器 第85例ccAm2910四位微程序控制器的指令计数器 第86例ccAm2910四位微程序控制器的堆栈 第87例 Am2910四位微程序控制器的指令译码器 第88例 可控制计数器 第89例 四位超前进位加法器 第90例 实现窗口搜索算法的并行系统(1)——协同处理器 第91例 实现窗口搜索算法的并行系统(2)——序列存储器 第92例 实现窗口搜索算法的并行系统(3)——字符串存储器 第93例 实现窗口搜索算法的并行系统(4)——顶层控制器 第94例 MB86901流水线行为描述组成框架 第95例 MB86901寄存器文件管理的描述 第96例 MB86901内ALU的行为描述 第97例 移位指令的行为描述 第98例 单周期指令的描述 第99例 多周期指令的描述 第100例 MB86901流水线行为模型
基于VHDL语言电子琴的设计 简易电子琴的设计 摘 要 本系统是采用EDA技术设计的一个简易的八音符电子琴,该系统基于计算机中时钟分频器的原理,采用自顶向下的设计方法来实现,它可以通过按键输入来控制音响。系统由乐曲自动演奏模块、音调发生模块和数控分频模块三个部分组成。系统实现是用硬件描述语言VHDL按模块化方式进行设计,然后进行编程、时序仿真、整合。本系统功能比较齐全,有一定的使用价值。 关键字 电子琴;EDA;VHDL;音调发生; 1 引 言 我们生活在一个信息时代,各种电子产品层出不穷,作为一个计算机专业的学生,了解这些电子产品的基本组成和设计原理是十分必要的,我们学习的是计算机组成的理论知识,而课程设计正是对我们学习的理论的实践与巩固。本设计主要介绍的是一个用超高速硬件描述语言VHDL设计的一个具有若干功能的简易电子琴,其理论基础来源于计算机组成原理的时钟分频器。 1.1 设计的目的 本次设计的目的就是在掌握计算机组成原理理论的基础上,了解EDA技术,掌握VHDL硬件描述语言的设计方法和思想,通过学习的VHDL语言结合电子电路的设计知识理论联系实际,掌握所学的课程知识,例如本课程设计就是基于所学的计算机原理中的时钟分频器和定时器的基础之上的,通过本课程设计,达到巩固和综合运用计算机原理中的知识,理论联系实际,巩固所学理论知识,并且提高自己通过所学理论分析、解决计算机实际问题的能力。 1.2 设计的基本内容 基于MAX+PLUS平台,运用VHDL语言对简易电子琴的各个模块进行设计,并使用EDA 工具对各模块进行仿真验证。本设计包含如下三个模块:乐曲自动演奏模块,音调发生模块,数控分频模块,最后把各个模块整合后,通过电路的输入输出对应关系连接起来。 2 EDA、VHDL简介 2.1 EDA技术 EDA技术是在电子CAD技术基础上发展起来的计算机软件系统,是指以计算机为工作平台,融合了应用电子技术、计算机技术、信息处理及智能化技术的最新成果,进行电子产品的自动设计。 利用EDA工具,电子设计师可以从概念、算法、协议等开始设计电子系统,大量工作可以通过计算机完成,并可以将电子产品从电路设计、性能分析到设计出IC版图或PCB版图的整个过程的计算机上自动处理完成。现在对EDA的概念或范畴用得很宽。包括在机械、电子、通信、航空航天、化工、矿产、生物、医学、军事等各个领域,都有EDA的应用。目前EDA技术已在各大公司、企事业单位和科研教学部门广泛使用。例如在飞机制造过程中,从设计、性能测试及特性分析直到飞行模拟,都可能涉及到EDA技术。本文所指的EDA技术,主要针对电子电路设计、PCB设计和IC设计。 2.2 硬件描述语言——VHDL 2.2.1 VHDL的简介 VHDL是一种用来描述数字逻辑系统的“编程语言”它的全名是Very-High-Speed Integrated Circuit HardwareDescription Language。它源于美国政府于1980年开始启动的超高速集成电路计划,VHDL主要用于描述数字系统的结构,行为,功能和接口。除了含有许多具有硬件特征的语句外,VHDL的语言形式和描述风格与句法是十分类似于一般的计算机高级语言。VHDL程序结构特点是将一项工程设计,或称设计实体(可以是一个元件,一个电路模块或一个系统)分成外部(或称可是部分,及端口)和内部(或称不可视部分),既涉及实体的内部功能和算法完成部分。在对一个设计实体定义了外部界面后,一旦其内部开发完成后,其他的设计就可以直接调用这个实体。这种将设计实体分成内外部分的概念是VHDL系统设计的基本点。应用VHDL进行工程设计的优点是多方面的。VHDL的应用必将成为当前以及未来EDA解决方案的核心,更是整个电子逻辑系统设计的核心。 2.2.2 VHDL语言的特点 (1)VHDL具有更强的行为描述能力,从而决定了他成为系统设计领域最佳的硬件描述语言。强大的行为描述能力是避开具体的器件结构,从逻辑行为上描述和设计大规模电子系统的重要保证。 (2)VHDL语句的行为描述能力和程序结构决定了他具有支持大规模设计的分解和已有设计的再利用功能。符合市场需求的大规模系统高效,高速的完成必须有多人甚至多个代发组共同并行工作才能实现。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

dtge

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值