数字系统与VHDL程序设计语言_第1页
数字系统与VHDL程序设计语言_第2页
数字系统与VHDL程序设计语言_第3页
数字系统与VHDL程序设计语言_第4页
数字系统与VHDL程序设计语言_第5页
已阅读5页,还剩95页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 课程简介课程简介 数字系统与数字系统与vhdl程序设计语言程序设计语言 引例引例 : vhdl原理原理 : 可可 编编 程程 逻逻 辑辑 器器 件件 串串 行行 口口 目目 标标 器器 件件 接接 口口 软软 件件 编编 程程 牛牛自自 动动 生生 产产 线线 牛牛罐罐头头 酸酸辣辣味味儿儿 五五香香味味儿儿 麻麻辣辣味味儿儿 计计算算机机控控制制系系统统 vhdl语言语言 非常高速硬件描述语言非常高速硬件描述语言, 也就是一种硬件也就是一种硬件(数字电路数字电路)设计语设计语 言言. 其其最大特点最大特点是对电路的行为与结构进行高度抽象化规范是对电路的行为与结构进行高度抽象化规范 化,并对

2、设计进行模拟验证与综合优化,使分析和设计高化,并对设计进行模拟验证与综合优化,使分析和设计高 度自动化。度自动化。 支持支持vhdl语言的软件平台语言的软件平台 max+plusii 由软件设计到硬件实现之间的媒介由软件设计到硬件实现之间的媒介 cpld / fpga (可编程器件可编程器件) 在在max+plusii编写编写vhdl程序程序 存盘存盘 (文件名为实体名文件名为实体名,后缀为后缀为 .vhd) 编译编译 软件仿真软件仿真 管脚安排管脚安排 下载下载 由由 软软 件件 设设 计计 到到 硬硬 件件 实实 现现 的的 流流 程程 基本顺序语句基本顺序语句 (1)process语句语

3、句 (2)if-else语句语句 (3)case-when语句语句 (4)null语句语句 (5)wait until语句语句 (6)变量赋值语句)变量赋值语句 (7)for-loop语句语句 (8)过程调用语句)过程调用语句 基本的并行语句基本的并行语句 (1)直接赋值语句)直接赋值语句 (2) process语句语句 (3)when-else (4)with-select-when (5)元件例化语句)元件例化语句 (6)for-generate 常用数字电路回顾常用数字电路回顾 (1)编码器 a a7 7 a a6 6 a a5 5 a a4 4 a a3 3 a a2 2 a a1 1

4、 a a0 0 e en n y y2 2 y y1 1 y y0 0 8 x 38 x 3 编 码 器 输入输入 信号信号 输出输出 信号信号 使能端口使能端口 注:注:en为为1时编码器工作时编码器工作 00010000000 10001000000 01000100000 11000010000 00100001000 10100000100 01100000010 11100000001 01201234567yyyaaaaaaaa 00010000000 10001000000 01000100000 11000010000 00100001000 10100000100 01100

5、000010 11100000001 01201234567yyyaaaaaaaa 00010000000 10001000000 01000100000 11000010000 00100001000 10100000100 01100000010 11100000001 01201234567yyyaaaaaaaa 00010000000 10001000000 01000100000 11000010000 00100001000 10100000100 01100000010 11100000001 01201234567yyyaaaaaaaa 00010000000 10001000

6、000 01000100000 11000010000 00100001000 10100000100 01100000010 11100000001 01201234567yyyaaaaaaaa 00010000000 10001000000 01000100000 11000010000 00100001000 10100000100 01100000010 11100000001 01201234567yyyaaaaaaaa 举例举例 参看参看ewb辅助电路辅助电路 (2)译码器 y3y2y1y0 1 11 11 10 0 1 11 10 01 1 1 10 01 11 1 0 01 1

7、1 11 1 a1a0 0 00 0 0 01 1 1 10 0 1 11 1 a1a0 00 01 10 11 y3y2y1y0 1110 1101 1011 0111 s 1 1 1 1 1 0 0 0 0 译码器译码器 1 12 23 34 45 56 67 78 8 1 16 61 15 5 1 14 41 13 3 1 12 2 1 11 11 10 0 9 9 v vc cc c y y0 0 y y1 1y y2 2 y y3 3 y y4 4 y y5 5 y y6 6 a a0 0 a a1 1 a a2 2s s3 3 s s2 2 s s1 1 y y7 7 g gn n

8、d d c ct t7 74 41 13 38 8 一、由来 vhdl是是very high speed integrated circuit hardware description language (非常高速集成电路硬件描述语言) 的英文缩写。它是由美国国防部支持的一项研究计划,于 1983年创建,目的是以文字化方法描述电子电路与系统。至 今vhdl约有40年的发展历史,1987年,vhdl成为ieee标准, 即ieee1076标准,1993年修改为ieee1164标准,1996年, ieee又将电路合成的标准程序与规格加入到vhdl语言中,称 为1076.3标准。之后,又有1076.4

9、标准和1076.6标准。 第一章第一章 vhdl的程序结构和软件操作的程序结构和软件操作 1-1 vhdl程序的基本结构程序的基本结构 1-2软件操作软件操作max+plus的操作的操作 第一章第一章 vhdl的程序结构和软件操作的程序结构和软件操作 1-1 vhdl程序的基本结构程序的基本结构 (1)library和pachage的声明部分 作用:库(library)是用于存放预先编译好的程序包 (package),程序包中定义了数据集合体、逻 辑操作和元件等。主要是声明在设计或实体中 将用到的常数,数据类型,元件及子程序等。 使用格式:library 库名; use 库名. 程序包名. a

10、ll; (2)entity定义 作用:定义本设计的输入/出端口,即定义电路的外观, 即i/o接口的类型和数量使用格式: 端口名 :端口模式 数据类型;); entity 实体名 is end 实体名; port ( 端口名 :端口模式 数据类型; (3)architecture定义 作用:定义实体的实现。即电路的具体描述,说明电路执 行什么动作或实现功能。 architecture 结构体名 of 实体名 is begin 描述语句; end 结构体名; 在max+plus系统中有4个库能支持vhdl语言,它们分 别是std库、ieee库、altera库和lpm库。std库和ieee库 提供基

11、本的逻辑运算函数及数据类型转换函数等。ieee 库中的程序包std_logic_1164定义了std_logic和 std_logic_vector等数据类型。 a a b b y y 111 001 010 000 yba library ieee; use std.standard.all; entity and2 is port( a: in bit; b: in bit; y:out bit); end and2; -首先定义输入输出端口名字, 模式(mode),信号类型 -注意最后语句的分号在括号外 实体定义实体定义: architecture na of and2 is begin

12、 y=0 when a=0 and b= 0 else0 when a=1 and b = 0 else 0 when a=0 and b = 1 else 1; end na 结构体定义结构体定义: 端口模式有以下几种类型:in ;out;inout;buffer。 architecture nb of and2 is begin c =1 when a=1 and b = 1 else 0; end nb; 以上结构体表达何种电路?以上结构体表达何种电路? 一个实体可以有几个结构体,即结构体的定义可以有不同的形式 结论: 1-2软件操作软件操作max+plus的操作的操作 1-2-1 建立

13、和编写一个建立和编写一个vhdl语言的工程文件语言的工程文件 1-2-2 vhdl程序的编译程序的编译 1-2-3 vhdl语言程序的仿真语言程序的仿真 1-2-4 芯片的时序分析芯片的时序分析 1-2-5 安排芯片脚位安排芯片脚位 1-2软件操作软件操作max+plus的操作的操作 1.max+plus开发工具是美国altera公司自行设计的一种软 件工具,其全称为multiple array matrix and programmable logic user system。它具有原理图输入和文本输入(采用 硬件描述语言)两种输入手段,利用该工具所配备的编 辑、编译、仿真、综合、芯片编程等

14、功能,将设计电路 图或电路描述程序变成基本的逻辑单元写入到可编程的 芯片中(如fpga芯片),作成asic芯片。它是eda设 计中不可缺少的一种工具。 2. 软件安装 我们通过范例介绍:利用max+plus系统 (1)如何编写vhdl程序(使用text editor); (2)如何编译vhdl程序(使用compiler); (3)如何仿真验证vhdl程序(使用waveform editor,simulator); (4)如何进行芯片的时序分析(使用timing analyzer); (5)如何安排芯片脚位(使用floorplan editor); (6)如何下载程序至芯片(使用programm

15、er)。 1-2-1 建立和编写一个建立和编写一个vhdl语言的工程文件语言的工程文件 首先启动max+plus系统,启动后系统进入主菜单画面,在主菜单 上有5个选项,分别是:max+plus、file、assign、options和help。 (1)打开文本编辑器;用鼠标点击file选项,点击子菜单中的 new选项,接着屏幕会出现new的对话框。在对话框内有4 种编辑方式:图形编辑、符号编辑、文本编辑和波形编辑。 vhdl文件属于文本,那么应该选择文本编辑方式,点击 ok按钮,屏幕上将出现一个无名的编辑窗口,则系统进入 文本编辑状态。 (2)在编辑窗口中进行编辑输入,输入相应的描述语句。 (

16、3)存盘。(a 我们编辑的vhdl文件扩展名为vhd;b 保存的文 件名必须和所定义的实体名相同。c 文件存盘的目录不应是 根目录或桌面,建议存放在max2work或maxplus2目录,或 其子目录。) 以与门的设计为例讲述具体过程 1-2-2 vhdl程序的编译程序的编译 (1)若文件没有打开,需首先打开要编译的vhdl文件; (2)将目前的文件设置成工程文件;点击file选项,光标移到子菜单的 project项停留几秒钟,屏幕上会出现下一级菜单,点击set project to current file (3)打开编译器;点击主菜单max+plus/compiler选项,屏幕上就出现编译

17、 对话框。 (4)开始编译;完成了上述编译前的准备及必要的设置工作,点击编译对话框 中的start按钮,编译即开始。 以与门的设计为例讲述具体过程 1-2-3 vhdl语言程序的仿真语言程序的仿真 仿真是为了验证我们所编写的vhdl程序的功能是否正确。 (1)首先生成仿真波形文件 (a)打开波形编辑器;点击主菜单的max+plus/waveform editor选项,就 可在屏幕上显示波形编辑器窗口。在未输入信号名以前,整个窗口是空 白的。 (b)确定仿真持续时间(file/end time)。 (c)选则输入输出端口名; (d)编辑输入信号波形; (e)信号波形编辑完成后,需存盘为仿真使用,

18、信号波形编辑完成后,需存盘为仿真使用,文件名采取默认方式即可。 (2)打开仿真器;点击主菜单max+plussimulator项,此时弹出simulator 对话框。点击对话框的start按钮,仿真即开始。在仿真结束后打开仿真波 形文件(点击右下角的open scf按钮)即可以显示仿真结果。 (以与门的设计为例讲述具体过程 ) 1-2-4 芯片的时序分析芯片的时序分析 仿真结果从波形上来看,很难给出定量的信号延迟关系,这一点时序分析却能 直观地用表来进行显示。 (1)选择要下载的器件型号; (2)需要再编译一次。)需要再编译一次。 (点击主菜单的assign/device项得到device对话

19、框) (3)打开时序仿真器; (点击timing analyzer选项 ) (4)最后点击start按钮后,时序分析器开始启动。 (以与门的设计为例讲述具体过程 ) 1-2-5 安排芯片脚位安排芯片脚位 为了将程序下载到芯片,需安排芯片脚位。 (1)打开芯片脚位设置器; (max+plus/floorplan editor) (2)将实体定义的端口名字和下载芯片的管脚进行具体对应; (3)最后再进行一次编译。)最后再进行一次编译。 教学演示片 第二章第二章 vhdl语言要素语言要素 v vh hd dl l语语言言要要素素包包括括 数据对象数据对象 变量变量 信号信号 常数常数 数据类型数据类

20、型 操作数操作数 运算操作符运算操作符 2.1 vhdl语言规则 数字型文字、字符串文字、标识符、下标名、段名 2-2 数据类型数据类型 数据类型分类:逻辑信号类型和数值信号类型数据类型分类:逻辑信号类型和数值信号类型。 2-2-1逻辑数据类型逻辑数据类型 (1)布尔代数()布尔代数(boolean)型)型 定义位置:在定义位置:在std库的库的standard程序包中进行定义。程序包中进行定义。 信号形式:信号形式:false,true (2)位()位(bit) 定义位置:在定义位置:在std库的库的standard程序包中进行定义。程序包中进行定义。 信号形式:信号形式:0,1 (低电位,

21、高电位(低电位,高电位 ) 编码器编码器 : a a7 7 a a6 6 a a5 5 a a4 4 a a3 3 a a2 2 a a1 1 a a0 0 e en n y y2 2 y y1 1 y y0 0 8 x 38 x 3 编 码 器 输入输入 信号信号 输出输出 信号信号 00010000000 10001000000 01000100000 11000010000 00100001000 10100000100 01100000010 11100000001 01201234567yyyaaaaaaaa 00010000000 10001000000 01000100000 1

22、1000010000 00100001000 10100000100 01100000010 11100000001 01201234567yyyaaaaaaaa 00010000000 10001000000 01000100000 11000010000 00100001000 10100000100 01100000010 11100000001 01201234567yyyaaaaaaaa 00010000000 10001000000 01000100000 11000010000 00100001000 10100000100 01100000010 11100000001 012

23、01234567yyyaaaaaaaa 00010000000 10001000000 01000100000 11000010000 00100001000 10100000100 01100000010 11100000001 01201234567yyyaaaaaaaa 00010000000 10001000000 01000100000 11000010000 00100001000 10100000100 01100000010 11100000001 01201234567yyyaaaaaaaa (3)位数组类型(bit_vector) 定义位置:在std库的standard程序

24、包中进行定义。 signal a: bit_vector(0 to 7); signal b: bit_vector(2 downto 0); a a7 7 a a6 6 a a5 5 a a4 4 a a3 3 a a2 2 a a1 1 a a0 0 e en n y y2 2 y y1 1 y y0 0 8 8 x x 3 3 编 码 器 输入输入 信号信号 输出输出 信号信号 a a7 7 a a6 6 a a5 5 a a4 4 a a3 3 a a2 2 a a1 1 a a0 0 e en n y y2 2 y y1 1 y y0 0 8 8 x x 3 3 编 码 器 (4)标

25、准逻辑型标准逻辑型(std_logic ) 定义位置:在ieee库的std_logic_1164程序包中进行定义 可以看出,这个“标准逻辑”信号定义,比“位即bit”信号对于数字逻辑 电路的 逻辑特性描述更完整、更真实。所以在vhdl的程序里,对于逻辑信号的定 义,通常都是采用这个“标准逻辑”信号形式。 使用这类数据信号,必须包含下面两条声明语句: library ieee; use ieee.std_logic_1164.all; (5)标准逻辑数组类型标准逻辑数组类型(std_logic_vector) 定义位置:在ieee库的std_logic_1164程序包中进行定义。 bit_vec

26、tor与与std_logic_vector的区别在于数组的的区别在于数组的 每一位前者为每一位前者为bit型(型(0,1)后者为)后者为std_logic型型 2-2-2 数值数据类型数值数据类型 (1)整数(integer) 定义位置:在std库的standard程序包中进行定义。即数值范 围为-231231。 (2)无符号(unsigned)和有符号(signed)类型 定义位置:有符号(signed)和无符号(unsigned)逻辑信号定义在 库ieee的程序包std_logic_arith中。 有符号类型数据代表有符号数值,即可以是正数,有符号类型数据代表有符号数值,即可以是正数,0,

27、负数;编,负数;编 译器将有符号数类型作为一个补码的二进制数,最左边的位为译器将有符号数类型作为一个补码的二进制数,最左边的位为 符号位。符号位。 无符号类型数据代表无符号数值,即代表无符号类型数据代表无符号数值,即代表0或正数;最左边的位或正数;最左边的位 为最高位。如:为最高位。如:unsigned(“0110”)代表代表 ;+6 + 10 unsigned(“1010”)代表代表 如:如:signed(“0110”)代表代表+6;signed(“1010”)代表代表 -2。 library ieee; use ieee.std_logic_1164.all; use ieee.std_l

28、ogic_arith.all; entity data is port(a,b: in unsigned(3 downto 0); -相应改为a,b: in signed(3 downto 0); c: out std_logic); end data; architecture m1 of data is begin c=1 when ab else 0; end m1; use ieee.std_logic_1164.all; ? use ieee.std_logic_arith.all; ? 列举a、b具体值 ? 当定义成无符号数据类型时,若当定义成无符号数据类型时,若a=”1000”,

29、b=0001a=”1000”,b=0001,即,即a=8a=8,b=1b=1则则 结果结果 另外:还有其他另外:还有其他positive ,natural,realpositive ,natural,real数据类型以及用户自定义数据数据类型以及用户自定义数据 类型等。这些数据类型各有类型等。这些数据类型各有 特点,以后用到再行讲解特点,以后用到再行讲解 c=1c=1 。 c=0c=0; 当定义成有符号数据类型时,若当定义成有符号数据类型时,若a=”1000”,b=0001a=”1000”,b=0001,a=-8a=-8,b=1b=1,则结果,则结果 2.3 vhdl数据对象数据对象 数据对象

30、(data objects): 凡是可以被赋予一个值的对象称为数据对象凡是可以被赋予一个值的对象称为数据对象, 数据对象用于传递信号。数据对象用于传递信号。 数据对象名数据对象名 数据对象类型数据对象类型 数据对象值的类型数据对象值的类型 2-3-1 信号信号 信号数据对象,代表电路内部传输线路线路,其在元件之间起互连作用信号数据对象,代表电路内部传输线路线路,其在元件之间起互连作用 信号数据对象的定义格式为: signal 信号名:数据类型信号名:数据类型:=设定值设定值; 如: signal a : std_logic_vector(3 down to 0) := “0000”; 注意:由

31、于注意:由于maxplus ii系统往往会忽略信号对象定义时所赋初始值,建议在结系统往往会忽略信号对象定义时所赋初始值,建议在结 构体中用赋值语句完成对信号的赋值。构体中用赋值语句完成对信号的赋值。 信号赋值语句的语法格式为: 目标信号名目标信号名=表达式(设定值);表达式(设定值); a = “1010” 2-3-2 变量变量 它用于对中间数据的临时存储,并不一定代表电路的某一组件。 变量数据对象的定义格式为:variable 变量名:数据类型:=设定值; 如:variable a: integer := 0; 变量赋值语句的语法格式为:目标变量名 := 表达式(设定值);表达式(设定值);

32、 注意:由于注意:由于maxplusiimaxplusii系统往往会忽略变量对象定义时所赋初始值,建议在结系统往往会忽略变量对象定义时所赋初始值,建议在结 构体中用赋值语句完成对变量的赋值。构体中用赋值语句完成对变量的赋值。 如: a := b+c; 常数的定义格式为:constant 常数名:数据类型 :=表达式; 如:constant d1: integer:=3; constant d2: std_logic_vector(d1 down to 0) := ”0000”; 注意:常数数据对象定义的同时进行赋值。赋值符号为注意:常数数据对象定义的同时进行赋值。赋值符号为 “:=” 2-3-

33、3 常数常数 2-3-4 信号、变量、信号、变量、常数对比常数对比 一、定义 signal a: std_logic; variable a: std_logic_vector(7 downto 0); constant a: integer :=6 ; 二、赋值及赋值时刻 a = “1010”;(延时) a := “1010”; (立刻) 三、定义区域 信号:实体、结构体、程序包 变量:进程、子程序 常数:实体、结构体、程序包、块、进程、子程序 四、适用范围 信号:实体、结构体、程序包 变量:定义了变量的进程、子程序的顺序语句中 常数:视其定义的位置而定 若常数定义在实体中,适用范围是实体所

34、对应的 有结构体。 若常数定义在结构体中,适用范围就是本结构体。 = =1 1 = =1 1 c c b b x x y y 执行结果为:执行结果为: x=c xor b, y=c xor b 执行结果为:执行结果为: x=c xor a, y=c xor b =1=1 =1=1 c c a a x x y y b b 练习: 1定义信号 a1,a2,a3,a4,a5,a6,a7,a8 其中每一位信号均为标准逻辑型 2. 定义信号b,其数据类型为标准逻辑型。 3.定义信号c,数据类型为整数型。 4. 给a、b赋值,其中a的值为11001101;b的值为0。 library ieee use i

35、eee.std_logic_1164.all signal a: std_logic_vector(1 to 8) signal b: std_logic signal c: integer library std use std.standard.all a=“11001101” b=0 2.4 vhdl 操作符 vhdl操作符:逻辑、算术、符号、关系操作符。操作符:逻辑、算术、符号、关系操作符。 2.4.1 逻辑运算符 一、分类及功能 and(与),or(或),not(非),nand(与非), nor(或非),xor(异或),xnor(同或)。 a ab b andandorornandn

36、andnornorxorxorxnorxnor输入输入 输出输出 运算运算 0 00 0 0 01 1 1 10 0 1 11 1 y1y1y2y2y3y3y4y4y5y5y6y6 0 0 0 0 0 0 1 1 0 0 1 1 1 1 1 1 1 1 1 1 1 1 0 0 1 1 0 0 0 0 0 0 0 0 1 1 1 1 0 0 1 1 0 0 0 0 1 1 二. 用法 1. 操作数的数据类型必须符合操作符的要求 能进行逻辑运算的数据类型:bit、bit_vector、boolean std_logic、std_logic_vector 例例 signal a,b,y: std_l

37、ogic; signal c,d,z: integer; y=a and b; z=c and d; 2. 表达式中有多个运算符时一般要加括号 表达式中有多个运算符时一般要加括号,但and、or、xnor除外 例例 signal a,b,c,d: std_logic_vector(3 downto 0); signal e,f,g,h: std_logic_vector(1 downto 0); d=a and b and c; d=a or b or c; d=a xnor b xnor c; h=e nor f nor g; h=(e nor f) nor g; 3. 运算符两侧的操作数要

38、对称 d=(e nor f) nor g; library ieee use ieee.std_logic_1164.all; entity liti is ; port(a,b,c,d: in std_logic; e : out std_logic); end liti ; achitecture aa1 of liti is begin e=(a and b) or tmp ; signal tmp : std_logic; tmp= c xor d ; end aa1 ; 1 1 11 end my1 ; architecture a1 of my1 begin m=(a = b) ;

39、 end a1; entity my1 is port(a,b : in bit_vector(0 to 3) m : out boolean ) ; architecture a1 of my1 begin m= b) ; end a1; 以上两程序最终所实现的硬件电路见课本以上两程序最终所实现的硬件电路见课本p78 end my1 ; 2.4.3 算术运算符 一、分类及功能一、分类及功能 求和运算符、求积运算符、符号运算符、混合运算符、移位运算符 二二. 运用运用 1.求和运算符 vhdl中的求和运算符包括加减运算和并置运算,操作 数的数据类型为整型。 例例1:variable a,b,c

40、,d,e,f : integer range 0 to 255; a := b + c ; d := e f ; 例例2: signal a : std_logic_vector(4 to 0); signal b : std_logic_vector(2 to 0); signal c : std_logic_vector(1 to 0); a = b c 2. 移位运算符移位运算符 移位运算所对应的数据类型为一维数组,其中的元素维移位运算所对应的数据类型为一维数组,其中的元素维bit、boolean 例: variable a1 : std_logic_vector(3 to 0); a1

41、 := “1011”; a1 sll 1 ;a1= 0110 a1 sll 2 ;a1= 1100 a1 rol 1 ;a1= 0111 3. 其它其它 略略 二、应用二、应用 现在现在vhdlvhdl已成功地应用于已成功地应用于asicasic自动设计的模拟验证和综合优化自动设计的模拟验证和综合优化 等方面。等方面。vhdlvhdl是以文字的方式设计电路,在应用上,目前是以文字的方式设计电路,在应用上,目前vhdlvhdl 语言还仅限于数字电路的开发和设计。语言还仅限于数字电路的开发和设计。 三、三、vhdlvhdl和电路图设计方式比较和电路图设计方式比较 vhdlvhdl与电路图设计电路的

42、方式不同,主要有如下几方面与电路图设计电路的方式不同,主要有如下几方面 的优越性:的优越性: (1 1)易于修改;)易于修改; (2 2)设计能力更强;)设计能力更强; (3 3)vhdlvhdl语言很方便:独立于器件设计;相同的程序语言很方便:独立于器件设计;相同的程序 代码可以用于不同厂家生产的器件。代码可以用于不同厂家生产的器件。 vhdl vhdl 操作符复习回顾操作符复习回顾 一、逻辑运算符一、逻辑运算符 andand(与),(与),oror(或),(或),notnot(非),(非),nandnand(与非),(与非), nornor(或非),(或非),xorxor(异或),(异或)

43、,xnorxnor(同或)。(同或)。 a ab b andandorornandnandnornorxorxorxnorxnor输入输入 输出输出 运算运算 0 00 0 0 01 1 1 10 0 1 11 1 y1y1y2y2y3y3y4y4y5y5y6y6 0 0 0 0 0 0 1 1 0 0 1 1 1 1 1 1 1 1 1 1 1 1 0 0 1 1 0 0 0 0 0 0 0 0 1 1 1 1 0 0 1 1 0 0 0 0 1 1 能进行逻辑运算的数据类型:能进行逻辑运算的数据类型:bitbit、bit_vectorbit_vector、booleanboolean st

44、d_logicstd_logic、std_logic_vectorstd_logic_vector 二、关系运算符二、关系运算符 = =(等于),(等于),/=/=(不等于),(不等于), (大于),(大于), = =(大于等于)。(大于等于)。 1.1.等于和不等于的操作对象可以是任何数据类型构成的操作数。等于和不等于的操作对象可以是任何数据类型构成的操作数。 2.2.其它关系运算符对数据类型有一定的限制。(整数,枚举型)其它关系运算符对数据类型有一定的限制。(整数,枚举型) 三、算术运算符三、算术运算符 求和运算符求和运算符、求积运算符、符号运算符、混合运算符、求积运算符、符号运算符、混合

45、运算符、移位运算符移位运算符 vhdl vhdl中的求和运算符包括加减运算和并置运算,中的求和运算符包括加减运算和并置运算,操作数的数据类型操作数的数据类型 为整型。为整型。 signal a : std_logic_vector(4 downto 0); signal b : std_logic_vector(2 downto 0); signal c : std_logic_vector(1 downto 0); b2b2 b1b1 b0b0 b:b: c1c1 c0c0 c:c: b c b2b2 b1b1 b0b0 b:b: c1c1 c0c0 :c:c b2b2 b1b1 b0b0

46、c1c1 c0c0 a = b c a4a4 a3a3 a2a2 a1a1 a0a0a:a: a:a:b b2 2 b b1 1 b b0 0 c c1 1 c c0 0 variable a : std_logic_vector(6 downto 0); a := “10110001”; 1 10 01 11 10 00 00 01 1 a:a: a sll 1 ; 1 10 01 11 10 00 00 01 1 a:a: 0 0 1 1 0 01 11 10 00 00 01 1 a:a: 0 0 a rol 1 ; 1 1 0 01 11 10 00 00 01 1 a:a: 1 1

47、第三章 vhdl顺序语句 一、顺序语句概念 顺序语句的特点是,每一条顺序语句的执行顺序执行顺序是与它们的书写顺书写顺 序序基本一致的。顺序语句只能出现在进程(process)和子程序中, 子程序包括函数(function)和过程(procedure)。 二、种类 进程语句 赋值语句 流程控制语句 等待语句 子程序调用语句 返回语句 空操作语句 3.1 进程语句进程语句 (process 语句)语句) a ab bc c a ab bc ca a a ab bc cb b abcabcc c abccba 0 0 0 0 输入信号发生变化时,电路启动进行计算输入信号发生变化时,电路启动进行计算

48、a a b b c c y y1 1 y y2 2 y y3 3 y y4 4 y y v进程语句是由顺序语句构成的,通过信号与结构体其余部分进行信进程语句是由顺序语句构成的,通过信号与结构体其余部分进行信 息交流,在进程中有一个敏感信号列表,表中列出的任何信号的改息交流,在进程中有一个敏感信号列表,表中列出的任何信号的改 变都将启动进程,执行进程内相应的顺序语句。进程语句是将并行变都将启动进程,执行进程内相应的顺序语句。进程语句是将并行 语句和顺序语句区分开来的标志之一。语句和顺序语句区分开来的标志之一。 语法格式: 进程标号: process (敏感信号列表) variable decla

49、rations -变量声明变量声明 begin 顺序语句; end process process label; process(sel,x1,x2) begin f=x1; if sel=1 then f=x2; end if; end process; process(sel,x1,x2) begin if sel=1 then f=x2; end if; f=x1; end process; 在第二个进程中,无论什么情况,在第二个进程中,无论什么情况,f=x1,而在第一个进程中,而在第一个进程中, 只有信号只有信号sel /=1时,时,f=x1。因此,语句的排列顺序很重要,会。因此,语句

50、的排列顺序很重要,会 影响信号的输出结果。影响信号的输出结果。 3.2 赋值语句赋值语句 赋值语句包括变量赋值语句和信号赋值语句,前者的赋值是立刻发生的,赋值语句包括变量赋值语句和信号赋值语句,前者的赋值是立刻发生的, 后者的赋值发生在一个进程结束的时刻,并延时进行。后者的赋值发生在一个进程结束的时刻,并延时进行。 变量赋值目标变量赋值目标 := 赋值源赋值源 信号赋值目标信号赋值目标 = 赋值源赋值源 在同一进程中,同一信号赋值目标有多个赋值源时,信号赋值目标获在同一进程中,同一信号赋值目标有多个赋值源时,信号赋值目标获 得的是最后一个赋值源的值,其前面相同的赋值目标不做任何变化。得的是最后

51、一个赋值源的值,其前面相同的赋值目标不做任何变化。 注:注: 3.2.1 信号和变量赋值信号和变量赋值 signal s1,s2 : std_logic ; signal sec : std_logic_vector(0 to 7); process (s1 , s2) variable v1,v2 : std_logic; begin v1 := 1; v2 := 1 ; s1 = 1; s2 = 1; sec(0) = v1; sec(1) = v2; sec(2) = s1; sec(3) = s2; v1 : = 0; v2 : = 0; s2 = 0; sec(4) = v1; se

52、c(5) = v2; sec(6) = s1; sec(7) = s2; end process “ 0100 0111 ” 3.2.2 信号和变量赋值举例信号和变量赋值举例 1. 标识符赋值目标标识符赋值目标 variable a , b : std_logic; signal c : std_logic_vector(1 to 4); a: = 1; b: = 0; c =“1100”; c(3) =1; 注:注: 一位值用单引号,多位值用双引号一位值用单引号,多位值用双引号 2. 段赋值段赋值 signal c : std_logic_vector(1 to 4); c(1 to 2)

53、=10; c(1 to 4) =1010; 3. 块赋值块赋值 signal a,b,c,d : std_logic; signal s : std_logic_vector(1 to 4); s = “0100” ; (a,b,c,d) 3, f=4, g(1)=2, g(2)=1); 名称关联名称关联 结果:结果: h的值为的值为 1010 3.3 流程控制语句流程控制语句 3.3.1 if语句语句 语法格式:语法格式: if expression then statement; elsif expression then statement; elsif then statement;

54、else statement; end if; 根 据 条 件 进 行 相 应 赋 值 操 作 例例1: a1a1a2a2y y 0 00 0 0 01 1 1 10 0 1 11 1 d0d0 d1d1 d2d2 d3d3 a1a1 a2a2 d0d0d1d1d2d2d3d3 y y 四选一数四选一数 据选择器据选择器 process(a) begin if a=”00” then f=d0; elsif a=”01” then f=d1; elsif a=”10” then f=d2; else fb ) then outb ) then out= 1; else out=0; end i

55、f; 三、第三种三、第三种if语句语句 语法格式:语法格式: if 条件句条件句 then 顺序语句顺序语句; elsif 条件句条件句 then 顺序语句顺序语句; elsif 条件语句条件语句then 顺序语句顺序语句; else 顺序语句顺序语句; end if; 语 句 格 式 例题例题1: signal a,b,c,p1,p2,z : bit; if (p1=1) then z =a; elsif (p2=0) then z = b; else z = c; end if; ? 选择方式选择方式 p p1 1p p2 2z z 0 00 0 0 01 1 1 10 0 1 11 1

56、c b a a 画线部分意思:画线部分意思:elsif (p1=0 and p2=0)注注 例题例题2:8线线3线优先编码器线优先编码器 编编 码码 器器 i i0 0 i i1 1 i i2 2 i i3 3 i i4 4 i i5 5 i i6 6 i i7 7 y y2 2 y y1 1 y y3 3 i7 7 i6 6 i5 5 i4 4 i3 3 i2 2 i1 1 i0 0 y3 y3 y2 y2 y1 y1 1 11 11 11 1 0 01 11 11 10 0 0 00 01 11 10 01 1 0 00 00 01 11 10 00 0 0 00 00 00 01 10

57、01 11 1 0 00 00 00 00 01 10 01 10 0 0 00 00 00 00 00 01 10 00 01 1 0 00 00 00 00 00 00 01 10 00 00 0 library ieee ; use ieee.std_logic_1164.all; entity coder is port(i : in std_logic_vector(0 to 7) y: out std_logic_vector(1 to 3); end coder ; 编编 码码 器器 i i0 0 i i1 1 i i2 2 i i3 3 i i4 4 i i5 5 i i6 6

58、 i i7 7 y y2 2 y y1 1 y y3 3 实实 体体 设设 计计 功能:设计元件外观功能:设计元件外观 architecture a1 or coder is begin if (i(7)=1) then y=“111”; elsif (i(6)=1) then y=“110”; elsif (i(5)=1) then y=“101”; elsif (i(4)=1) then y=“100”; elsif (i(3)=1) then y=“011”; elsif (i(2)=1) then y=“010”; elsif (i(1)=1) then y=“001”; else y

59、=“000”; a7 a7 a6 a6 a5 a5 a4 a4 a3 a3 a2 a2 a1 a1 a0 a0 y3 y3 y2 y2 y1 y1 1 11 11 11 1 0 01 11 11 10 0 0 00 01 11 10 01 1 0 00 00 01 11 10 00 0 0 00 00 00 01 10 01 11 1 0 00 00 00 00 01 10 01 10 0 0 00 00 00 00 00 01 10 00 01 1 0 00 00 00 00 00 00 01 10 00 00 0 end a1; 结结 构构 体体 设设 计计 功能:描述输入和输出之间的逻辑关系功能:描述输入和输出之间的逻辑关系 end if; 练习题:练习题: 设计一个设计一个3线线8线译码器线译码器 a1 a2 a3 y7 y6 y5 y4 y3 y2 y1 y0 00000000001 00100000010 01000000100 01100001000 10000010000 10100100000 11001000000 11110000000 a a 1 1 a a 2 2 a a 3 3 y y 1 1 y y 2 2 y

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论