VHDL设计初步
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
66 第 3 章 VHD L 设计初步 二 、 信号 SIGNAL 信号类似元件内部的硬件连接线 ,是 V H D L 中最具有硬件特色的语 言要 SIG N A L 信号名 [ , 信号名 ] : 数据类型[ := 初始值] ; SIG N A L ac : std_ logic_ vector(4 DO W N T O 0) ; 信号 ac 为标准逻辑矢量型数据 , 位宽 5 , 降序排列 信号 ad 为位类型数据 , 初值取 0
包的区别仅在于前者考虑了符号数运算 , 而后者没有 。
那样用显示的库说明语句表达出来 。
V H DL 的每一项设计都自动将它们包含进去了 ,即 std 库的调用不必如 ieee 库 standard 程序包预定义了 boolean 、bit 、bit _ vector 、 integer 等 V H D L 综合器
3畅 1 VHDL 程序结构
实体和结构体两部分 。 2 变量的 与非 逻辑程序设计见[ 例 3畅 1畅 1] , 图 3畅 1畅 2 是用 Q uartus Ⅱ 生成的元件模块图 。 V H DL 程序设计的基本结构如图 3畅 1畅 1 所示 。 一段 V H D L 程序必须包括
图 3畅 1畅 1 VHDL 程序设计基本结构框图
⑤ 标准逻辑位类型 std_ logic : 是 bit 类型的扩展 , 除了“1 ” 和“ 0 ” 两种取值 , ⑥ 标准逻辑矢量类型 std_ logic_ vector : 是基于 std _ logic 的数组 ,使用时同
二 、 结构体 ARCHITECTURE 结构体作为实体的一部分 , 用于描述设计实体的逻辑行为 、数据流程 、组织 结构等 。 结构体的基本语句结构如下 : [ 说明语句 ; ] BEGIN [ 并行语句 ; ] A RC H I T EC T U RE 结构体名 O F 实体名 IS
一实体可有 多 个 设 计 方 案 ,因 此 可 有 多 个 结 构 体 ,但 每 个 结 构 体 的 取 名 不 能 重复 。 结构体中的说明语句是对该结构体内部将要用到的信号 、常数 、元件 、函数 和过程加以说明 。
O F 后面的实体名是与结构体对应的实体 ,也是 V H DL 程序的文件名 。 同
std 库是 V H D L 的标准库 , 包含 standard 和 tex tio 两个程序包 ,在应用中 ,
支持的数据类型 。 仅使用这些数据类型不必引用库说明语句 。 (3) w ork 库
3畅 2 VHDL 语言要素及规则 65
设计单元和程序包 。 w ork 库自动满足 V H D L 语言标准 ,在实际调用中也不必 以显示预先说明 。 四 、 配置 CONFIGURATION
(1) ieee 库
V H DL 程序设计中常用的库有 ieee 库 、std 库 、w ork 库 。
U SE 库名 畅 程序包名 畅 项目名 ;
arith 、std_ logic_ signed 、std_ lo gic_ unsigned 这 4 个程序包已足够 。
业标 准 的 程 序 包 。 一 般 开 发 FPG A / CPLD 使 用 std _ logic _ 1164 、std _ logic _ std_ lo gic_1164 是 ieee 库中最常用的程序包 。 它定义了满足工业标准的两 std_ lo gic_ arith 程序包在 std_ logic_1164 的基础上定义了 signed( 有符号数
实体名 、类属名和端口名 等 由 标 识 符 组 成 。 标 识 符 可 由 任 一 个 大 小 写 英 文字母 、任一个阿拉伯数字 和 下 划 线 组 合 而 成 。 标 识 符 的 第 一 个 字 符 必 须 是 英文字母 ,下划线的前后也 必 须 是 英 文 字 母 。 不 同 的 标 识 符 和 关 键 字 应 用 空 格隔开 。 类属表用于说明端口界面的常数参数 。 如果说类属表是实体与外界通信的 开多个不同的端口名 。 端口说明语句 POR T 的格式如下 : POR T ( 端口名表 : 端口模式 数据类型 ; { 端口名表 : 端口模式 数据类型}) ; 静态通道 , 那么端口表就是实体与外界通信的动态通道 。 端口名表用逗号“ , ”隔
3畅 1 VHD L 程序结构 63
(1) 端口模式 端口模式用于说明数据传递的方向 , 有输入 、 输出 、 缓冲 、 双向 4 种 : ② 输出模式 O U T : 仅允许数据从实体内部输出该端口 。 ① 输入模式 IN : 仅允许数据经该端口从实体外部输入到实体内部 。 ③ 缓冲模式 BU FFER : 允许数据从该端口输出的同时用于实体内部的反馈
译后都会变为蓝色 , 本书为了便于大家学习均采用大写字母表示 。 一 、 实体 ENTITY
实体说明用于描述本设计与外部电路接口的输入 、输出端口 。 实体说明的 基本语句结构如下 , [ ] 中的内容是可选项 : E N T I T Y 实体名 IS [ BEGIN [ GE N ERIC( 类属表) ; ] [ POR T ( 端口表) ; ] 实体语句 ; ]
图 3畅 1畅 2 与非逻辑 gate1 的模块图
62 第 3 章 VHD L 设计初步 [ 例 3畅 1畅 1] 用 V H DL 描述 与非 逻辑 。 E N T I T Y gate1 IS U SE ieee畅 std_ lo gic_1164畅 A L L ; y : O U T std_ logic) ; 结构体描述 LIBRA RY ieee ;
在标准的 V H D L 描述中 , 配置不是必需的语句 。
E ND 配置名 ;
END F OR ;
3畅 2 VHDL 语言要素及规则
3畅 2畅 1 数据对象
与其它高级语言一样 , 编写 V H D L 程序时也要遵循语言要素及语法规则 。 数据对 象 ( object ) 类 似 于 存 储 单 元 ,它 接 受 不 同 数 据 类 型 的 赋 值 。 在
ieee 库是 V H D L 设计中最常用的库 , 它包含 ieee 标准程序包和其它支持工
个数据类型 std_ logic 和 std_ logic_ vector , 并可完成位类型和标准逻辑位类型数 据间的转换 。
据类型) 、unsigned( 无符号数据类型 ) 、small_ int ( 小整型数据类型) ,并为其定义 了相关的算术运算符和数据类型转换函数 。 logic 型 、std_ logic_ vector 型数据间混合运算的 运算符和转换函数 。 两个程序 (2) std 库 std_ lo gic_ signed 和 std _ logic _ unsigned 程 序 包 重 载 了 在 integer 型 、std _
E ND [ A RC H I T EC T U RE] [ 结构体名] ;
64 第 3 章 VHD L 设计初步 结构体中的并行语句包含 4 种功能描述语句 : ① 信号赋值语句 : 用于将数据的处理结果向实体界面端口或结构体内部的 信号赋值 。 ② 进程语句 : 用于使用顺序语句 。 ③ 元件例化语句 : 用于对其它的设计实体作元件调用说明 ,并将此元件的 端口与其它元件 、 信号或高层次实体的界面端口进行连接 。 ④ 子程序调用语句 : 用于调用过程或函数 , 并将获得的结果向信号赋值 。 三 、 库 LIBRARY 库用于存放预 先 设 计 好 的 子 程 序 和 设 计 实 体 等 设 计 单 元 的 集 合 体 ( 程 序 包) , 存放编译通过的各种设计实体( 元件库程序包 ) 。 调用库信息的说明语句格 式如下 : LIBRA RY 库名 ;
w ork 库是用户的 V H D L 设计的现行工作库 ,用于存放用户设计和定义的
配置用于把特定的结构体关联到一个确定的实体 ,为较大的系统设计提供 管理和工程组织 。 配置语句的格式如下 : FOR 选配的结构体名 CO N FIG U RA T IO N 配置名 OF 实体名 IS
到, 功能相当 , 而信号更具有硬件特征 。 一 、 常数 CONSTANT
V H DL 中 , 数据对象有常数 、 信号 、 变量 3 类 。 常数和变量在软件语言中均能见
常数是指在 V H DL 程序中固定不变的数值 。 常数的说明格式如下 : 例如 : CO N S T A N T 常量名[ , 常量名 ] : 数据类型 := 表达式 ; CO N S T A N T ac :std_ logic_ vector := ″1011″ ; CO N S T A N T ad : integer := 15 ;
实体是一个 V H DL 程序的基本单元 , 由实体说明和结构体两部分组成 。
过, 生成的模块图元名就是程序的实体名 , 如图 3畅 1畅 2 所示 。
V H DL 程序的实 体 名 与 V H D L 程 序 的 文 件 名 相 同 。 一 旦 此 程 序 编 译 通
E ND [ EN T I T Y ] [ 实体名] ;
信号 。 反馈 。
④ 双向模式 IN O U T : 允许数据经该端口流入或流出实体 , 也允许用于内部
(2) 数据类型 型有 :
V H DL 要求只有相同数据类型的量才能相互传递和作用 。 常用的数 据类 ① 布尔类型 boolean : 只有“ false”( 假) 、 “ true”( 真) 两种取值 。 ③ 位矢量类型 bit _ vector : 是基于 bit 的数组 , 使用时需注明位宽 。 ② 位类型 bit : 取值只有“1 ” 和“ 0” 两种 , 可以参与逻辑运算 。
“/” 等算术运算 。 使用时需注意取值范围应与信号宽一致 。
④ 整数类型 integer : 代表正整数 、 负整数和零 ,可以实现 “ + ” 、“ - ” 、“ 倡 ” 、
ieee ; ” 和“ U SE ieee畅 std_ logic_1164畅 A L L ; ”。 样需要注明位宽 。
还定义了“ Z”( 高阻) 、“ X ”( 不 定 ) 等 7 种 取 值 。 使 用 时 需 调 用 语 句 “ LIBRA RY
库描述 实体描述
ቤተ መጻሕፍቲ ባይዱ
POR T ( a ,b : IN std_ logic ; E ND gate1 ; BEGIN
A RC H I T EC T U RE m 1 OF gate1 IS E ND m1 ;
y < = N O T ( a A ND b) ; V H DL 中的关键字可以用大写字母 ,也可以用小写字母 ,经 Q uartus Ⅱ 编
常量 ac 为标准逻辑矢量类型数据 , 取值 1011 常量 ad 为整数型数据 , 取值 15
常数的说明语句允许出现在设计单元的实体 、 结构体 、 程序包 、 块、 进程和子 程序 , 其使用范围取决于它被定义的位置 。 如果常数在程序包中被说明 , 则具有 程序的全局性 。 如果常数在实体 中被 说明 ,则 有效范 围 是实 体的 各个 结构 体 。 如果常数在结构体中被说明 , 则应用范围是该结构体 。 如果常数在进程中被说 明, 则只能用在这一进程 。
素 。 信号的说明格式如下 : 例如 :
信号的说明和使用范围是实体 、 结构体和程序包 , 不允许在进程和子程序中 说明 。 在结构体的并行语句中 , 同一信号不能多次被赋值 。 三 、 变量 VARIABLE 变量无直接的硬件对应物 。 为了实现程序的算法 ,常用变量引导载体临时 存储中间数据 。 变量的说明格式如下 : 例如 : V A RIABLE 变量名[ ; 变量名] : 数据类型 [ := 初始值] ; 变量 ac 为标准逻辑矢量型数据 , 位宽 5 , 升序排列