ImageVerifierCode 换一换
格式:DOC , 页数:35 ,大小:267KB ,
资源ID:3254904      下载积分:10 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.docduoduo.com/d-3254904.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录   微博登录 

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(vhdl基本语法(简略共34页).doc)为本站会员(weiwoduzun)主动上传,道客多多仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知道客多多(发送邮件至docduoduo@163.com或直接QQ联系客服),我们立即给予删除!

vhdl基本语法(简略共34页).doc

1、VHDL 硬件描述语言1.1 VHDL 概述 1.1.1 VHDL 的特点 VHDL 语言作为一种标准的硬件描述语言,具有结构严谨、描述能力强的特点,由于VHDL 语言来源于 C、Fortran 等计算机高级语言,在 VHDL 语言中保留了部分高级语言的原语句,如 if 语句、子程序和函数等,便于阅读和应用。具体特点如下: 1. 支持从系统级到门级电路的描述,既支持自底向上(bottom-up)的设计也支持从顶向下(top-down)的设计,同时也支持 结构、行为和数据流三种形式的混合描述。 2. VHDL 的设计单元的基本组成部分是实体(entity)和结构体(architecture) ,

2、实体包含设计系统单元的输入和输出端口信息,结构体描述设计单元的组成和行为,便于各模块之间数据传送。利用单元(componet) 、块(block) 、过程(procure)和函数(function)等语句,用结构化层次化的描述方法,使复杂电路的设计更加简便。采用包的概念,便于标准设计文档资料的保存和广泛使用。 3. VHDL 语言有常数、信号和变量三种数据对象,每一个数据对象都要指定数据类型,VHDL的数据类型丰富,有数值数据类型和逻辑数据类型,有位型和位向量型。既支持预定义的数据类型,又支持自定义的数据类型,其定义的数据类型具有明确的物理意义,VHDL 是强类型语言。 4. 数字系统有组合电

3、路和时序电路,时序电路又分为同步和异步,电路的动作行为有并行和串行动作,VHDL 语言常用语句分为并行语句和顺序语句,完全能够描述复杂的电路结构和行为状态。 1.1.2 VHDL 语言的基本结构 VHDL 语言是数字电路的硬件描述语言,在语句结构上吸取了 Fortran 和 C 等计算机高级语言的语句,如 IF 语句、循环语句、函数和子程序等,只要具备高级语言的编程技能和数字逻辑电路的设计基础,就可以在较短的时间内学会 VHDL 语言。但是 VHDL 毕竟是一种描述数字电路的工业标准语言,该种语言的标识符号、数据类型、数据对象以及描述各种电路的语句形式和程序结构等方面具有特殊的规定,如果一开始

4、就介绍它的语法规定,会使初学者感到枯燥无味,不得要领。较好的办法是选取几个具有代表性的 VHDL 程序实例,先介绍整体的程序结构,再逐步介绍程序中的语法概念。 一个 VHDL 语言的设计程序描述的是一个电路单元,这个电路单元可以是一个门电路,或者是一个计数器,也可以是一个 CPU。一般情况下,一个完整的 VHDL 语言程序至少要包含程序包、实体和结构体三个部分。实体给出电路单元的外部输入输出接口信号和引脚信息,结构体给出了电路单元的内部结构和信号的行为特点, 程序包定义在设计结构体和实体中将用到的常数、数据类型、子程序和设计好的电路单元等。 一位全加器的逻辑表达式是: S=ABCi Co=AB

5、+ACi+BCi 全加器的 VHDL 程序的文件名称是 fulladder.VHD,其中 VHD 是 VHDL 程序的文件扩展名,程序如下: LIBRARY IEEE; -IEEE 标准库 USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_ARITH.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY fulladder IS - fulladder 是实体名称 PORT( A, B, Ci : IN STD_LOGIC; -定义输入 /输出信号 Co, S : OUT STD_LOGIC ); END ful

6、ladder; ARCHITECTURE addstr OF fulladder IS -addstr 是结构体名 BEGIN S ) of BIT; 使用位向量必须注明位宽,即数组的个数和排列顺序,位向量的数据要用双引号括起来。例如 “1010”,X “A8” 。其中 1010 是四位二进制数,用 X 表示双引号里的数是十六进制数。 例如: SIGNAL A :BIT_VECTOR (3 DOWNTO 0 ); A B 是关系运算,如果A=3,B=2,则 AB 关系成立,结果是布尔量 TRUE,否则结果为 FALSE。 VHDL 中,布尔数据类型的定义格式为: TYPE BOOLEAN IS

7、 (FALSE, TRUE); (6) 字符(CHARACTER)数据类型 在 STANDARD 程序包中预定义了 128 个 ASCII 码字符类型,字符类型用单引号括起来,如.A.,.b.,.1.等,与 VHDL 标识符不区分大小写不同,字符类型中的字符大小写是不同的,如.B. 和.b.不同。 (7) 字符串(STRING) 在 STANDARD 程序包中,字符串的定义是 : TYPE STRING is array (POSITIVE range ) of STD_LOGIC; TYPE SIGNED is array (NATURAL range ) OF std_logic; 没有具

8、体指出数组元素的下标范围,在程序中用信号说明语句指定。 例如: SIGNAL DAT : STD_LOGIC_VECTOR(3 DOWNTO 0); 限定性数组的下标的范围用整数指定,数组元素的下标可以是由低到高,如 0 TO 3,也可以是由高到低,如 7 DOWNTO 0,表示数组元素的个数和在数组中的排列方式。 例如: TYPE D IS ARRAY(0 TO 3)OF STD_LOGIC; TYPE A IS ARRAY(4 DOWNTO 1)OF BIT; 定义数组 D 是一维数组,由四个 STD_LOGIC 型元素组成,数组元素的排列顺序是 D(0),D(1),D(2),D(3)。A

9、 数组是由四个元素组成的 BIT 数据类型,数组元素的排列顺序是 A(4),A(3),A(2),A(1)。 小提示: 对于数组数据类型,可以给一组数据多个值一起赋值: 如上例: SIGNAL ARRAY1: D; BEGIN ARRAY1 大于 = 大于等于 移位运算符 SLL 逻辑左移 SLA 算术左移 SRL 逻辑右移 SRA 算术右移 ROL 逻辑循环左移 ROR 逻辑循环右移 符号运算符 + 正 - 负 连接运算符 Y, Z : OUT STD_LOGIC );END loga; ARCHITECTURE stra OF loga IS BEGIN Y 大于 = 大于或等于 0,BOO

10、LEAN型数据 TRUEFALSE。 在利用关系运算符对位向量数据进行比较时,比较过程是从左到右的顺序按位进行比较的,操作数的位宽可以不同,但有时会产生错误的结果。 如果 A、B 是 STD_LOGIC_VECTOR 数据类型, A = “1110”,B= “10110”,关系表达式AB 的比较结果是 TRUE,也就是说 AB。对于以上出现的错误可以利用STD_LOGIC_ARITH程序包中定义的数据类型 UNSIGNED 来解决,把要比较的操作数定义成 UNSIGNED 数据类型。 4移位运算符 VHDL93 标准中增加了六个移位运算符,分别是 SLL 逻辑左移, SRL 逻辑右移,SLA

11、算术左移,SRA 算术右移, ROL 逻辑循环左移,ROR 逻辑循环右移。移位运算符的格式是: 操作数名称 移位运算符 移位位数; 操作数的数据类型可以是 BIT_VECTOR、STD_LOGIC_VECTOR 等一维数组,也可以是INTEGER 型,移位位数必须是 INTEGER 型常数。 六条移位运算符所执行的操作如图 1-2-1 所示。 其中 SLL 是将位向量左移,右边移空位补零 。SLA 是将位向量左移,右边第一位的数值保持原值不变。 SRL 是将位向量右移,左边移空位补零。SRA 是将位向量右移,左边第一位的数值保持原值不变。ROR 和 ROL 是自循环移位方式。 例如 A.1.

12、OTHERS= .0.);- 表示判别性的整集内涵赋值, VEC 的第三位为 1,其余为 0 VEC2 (1 TO 2) 9 THEN -如果 binadd 大于 9,结果要调整 tmp := adj ; -方法是和加 6,否则,结果加 0。 ELSE tmp := 0 ; END IF ; result 语句方块 1 WHEN 信号值 2 = 语句方块 2 WHEN 信号值 3 = : WHEN OTHERS = 语句方块 N CASE-WHEN 语句的功能与 WITH-SELECT 语句的功能相似,都是通过选择信号 X 的值的变化来选择相应的操作。但两者之间不同的是: (1)CASE-WH

13、EN 语句必须放在进程中,而 WITH-SELECT 语句是并行语句必须放在进程外; (2)CASE-WHEN 语句根据选择信号的值,执行不同的语句方块,完成不同的功能。 而 WITH-SELECT 语句根据选择信号的值只能执行一个操作。 (3) 使用 CASE-WHEN 语句时,WHEN 语句中的信号值必须在选择信号的取值范围内, 如果 WHEN 语句中列举的信号值不能覆盖选择信号 S 的所有取值,就用关键字 OTHERS 表示未能列出的其他可能的取值。 例如采用 CASE-WHEN 实现的四选一数据选择器结构体: ARCHITECTURE archmux OF mux4 IS BEGIN

14、PROCESS(S, A0, A1, A2, A3) BEGIN CASE S IS WHEN “00” = y y y y : PROCESS 进程说明区:说明用于该进程的常数,变量和子程序。 BEGIN 变量和信号赋值语句 顺序语句 END PROCESS ; (1)每个进程语句结构都可以取一个进程名称,但进程语句的名称是可以选用的。进程语句从 PROCESS 开始至 END PROCESS 结束。进程中的敏感信号表(sensitivity list)只能是进程中使用的一些信号,而不能是进程中的变量。当敏感信号表中的某个信号的值发生变化时,立即启动进程语句,将进程中的顺序语句按顺序循环执行

15、,直到敏感信号表中的信号值稳定不变为止。也可以用 WAIT 语句来启动进程。 (2)在进程说明部分能定义常数、变量和子程序等,但不能在进程内部定义信号,信号只能在结构体说明部分定义。 (3)在进程中的语句是顺序语句,包括信号赋值语句、变量赋值语句、IF 语句、CASE语句和 LOOP 语句等 用 PROCESS 语句描述的计数器的程序如下: PROCESS(CLK, Rd) -进程(敏感信号表) BEGIN IF (Rd=.0.) THEN Q ”连接元件端口和设计电路的端口,如上例 U1 中, PORT MAP 列出的端口信号名称是 A(1),B(1),C(0),C(1) 和 S(1),PO

16、RT MAP 语句可以写成如下形式: U1: Fulladder PORT MAP (A=A(1), B=B(1), Ci=C(1), Co=C(2), S=S(1); 这时,各个端口的意义取决于端口的名称,与位置无关。 元件例化语句与 BLOCK 语句一样属于并行语句,但是元件和元件例化在设计项目中是分层次的,每个元件就是一个独立的设计实体,这样就可以把一个复杂的设计实体划分成多个简单的元件来设计。 1.4.3 生成(GENERATE)语句 生成语句是一种循环语句,具有复制电路的功能。当设计一个由多个相同单元模块组成的电路时,就可以用生成语句来描述。生成语句有 FOR-GENERATE 和

17、IF-GENERATE 两种形式,分别说明如下: (1)FOR-GENERATE 语句格式为: 标号:FOR 循环变量 IN 取值范围 GENERATE 并行语句 END GENERATE 标号; FOR-GENERATE 语句与 FOR-LOOP 语句不同,FOR-GENERATE 中所列的语句是并行信号赋值语句、元件例化、块语句和子程序等并行语句。循环变量是一个局部变量,其取值范围可以选择递增和递减两种形式,如 0 TO 5 和 3 DOWNTO 1 等。生成语句所复制的单元模块是按照一定的顺序排列的,而单元模块之间的关系却是并行的。所以生成语句属于并行语句。 例 1-4-2 用 FOR-

18、GENERATE 语句实现四位全加器的程序设计如下: LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_ARITH.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY adder4 IS PORT( A, B : IN STD_LOGIC_VECTOR(3 DOWNTO 0); Ci : IN STD_LOGIC; S : OUT STD_LOGIC_VECTOR(3 DOWNTO 0); C : BUFFER STD_LOGIC_VECTOR(4 DOWNTO 0) ); END

19、adder4; ARCHITECTURE a OF adder4 IS COMPONENT fulladder PORT ( A, B, Ci : IN STD_LOGIC; Co, S : OUT STD_LOGIC); END COMPONENT; BEGIN C(0) = Ci; gen1: FOR I IN 0 TO 3 GENERATE addx: fulladder PORT MAP (A(I),B(I),C(I),C(I+1),S(I); -产生四位串行全加器 END GENERATE ; END a; 例 1-4-3 用生成语句描述用四个 D 触发器组成一个四位移位寄存器,电路

20、图如图 1-4-2 所示。D 触发器用元件定义和元件例化语句调用。元件名称是 dff1,用 VHDL 描述的 D 触发器的程序参见例 1-3-4,程序的文件名是 dff1.VHD。 图 1-4-2 四位移位寄存器 四位移位寄存器的文件名为 shift.VHD,内容如下: LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_ARITH.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY shift IS PORT( DIN, CLK : IN STD_LOGIC; DOUT : OUT STD_LOGIC; Q : BUFFER STD_LOGIC_VECTOR(3 DOWNTO 0) ); END shift;

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报