数字逻辑新编.ppt

上传人:本田雅阁 文档编号:2904037 上传时间:2019-06-03 格式:PPT 页数:50 大小:314.52KB
返回 下载 相关 举报
数字逻辑新编.ppt_第1页
第1页 / 共50页
数字逻辑新编.ppt_第2页
第2页 / 共50页
数字逻辑新编.ppt_第3页
第3页 / 共50页
数字逻辑新编.ppt_第4页
第4页 / 共50页
数字逻辑新编.ppt_第5页
第5页 / 共50页
点击查看更多>>
资源描述

《数字逻辑新编.ppt》由会员分享,可在线阅读,更多相关《数字逻辑新编.ppt(50页珍藏版)》请在三一文库上搜索。

1、1/50,教学内容 数据对象、数据类型、运算符和表达式 常用顺序语句、并行语句 VHDL常用的库、程序包 教学重点 数据对象、数据类型、运算符和表达式 常用顺序语句、并行语句,本节教学内容及重点,2/50,VHDL标识符 基本标识符由字母、数字和下划线组成 第一个字符必须是字母 最后一个字符不能是下划线 不允许连续2个下划线 保留字(关键字)不能用于标识符 大小写等效,3.3 数据对象、数据类型、 运算符和表达式,3/50,VHDL标识符 有效的标识符 A_h_1 show_new_state COUNTER_A decode3_8 counter 非法的标识符 A%h_1 show-new-

2、state COUNTER_ T_ _1 3_8decoder IS DOWNTO,3.3 数据对象、数据类型、 运算符和表达式,4/50,3.3.1 数据对象,VHDL语言数据对象 常量(CONSTANT) 变量(VARIABLE) 信号(SIGNAL),5/50,常量(Constant) 固定值,不能在程序中被改变 增强程序的可读性,便于修改程序 在综合后,连接到电源和地 可在Library、Entity、Architecture、Process中进行定义,其有效范围也相应限定 常数的描述格式: CONSTANT 常量名:数据类型:=表达式 如:Constant data_bus_widt

3、h: integer := 8;,3.3.1 数据对象,6/50,变量(Variable) 临时数据,没有物理意义 只能在Process和Function中定义,并只在其内部有效 要使其全局有效,先转换为Signal 一旦赋值,立即生效 变量的描述格式: VARIABLE 变量名:数据类型 :=表达式 如:variable result : std_logic := 0;,3.3.1 数据对象,7/50,信号(Signals) 代表连线,Port也是一种信号 没有方向性,可给它赋值,也可当作输入 在Entity中和Architecture中定义 设定的初始值只是在仿真开始设定了一个起始值,在综

4、合时没有用。 信号的描述格式: SIGNAL 信号名:数据类型 :=初始值 signal count:bit_vector(3 downto 0):=“0011”;,3.3.1 数据对象,8/50,信号赋值语句格式 目标信号名=表达式; q=count; irq=0; aa=dx1; bb=dx2; s1=s2 AFTER 10ns,3.3.1 数据对象,9/50,信号与变量的区别,信号赋值可以有延迟时间,变量赋值无时间延迟 信号除当前值外还有许多相关值,如历史信息等,变量只有当前值 进程对信号敏感,对变量不敏感 信号可以是多个进程的全局信号,但变量只在定义它之后的顺序域可见 信号可以看作硬件

5、的一根连线,但变量无此对应关系 赋值的形式不同;声明的位置不同,10/50,信号与变量的区别,architecture rtl of start is signal count : integer range 0 to 7; begin process(clk) begin if (clkevent and clk=1) then count = count + 1; if(count=0) then carryout = 1; else carryout = 0; end if; end if; end process; end rtl;,architecture rtl of start

6、is begin process(clk) variable count : integer range 0 to 7; begin if (clkevent and clk=1) then count := count + 1; if(count=0) then carryout = 1; else carryout = 0; end if; end if; end process; end rtl;,11/50,VHDL标准数据类型 IEEE标准数据类型 用户自定义数据类型,3.3.2 数据类型,12/50,VHDL标准数据类型,13/50,VHDL标准数据类型,1、整数(INTEGER)

7、 范围:-2147483547-2147483646,用range限定数的范围,如:variable a: integer range 0 to 9; 2、实数(REAL) 范围:-1.0E38-1.0E38 (仿真器中可用,综合器不支持)书写时一定要有小数。如:1.0 8#43.6#e+4 3、位(BIT) 数字系统中,信号经常用位的值表示,位的值 用带单引号的1和0来表示。,14/50,VHDL标准数据类型,4、位矢量(BIT_VECTOR) 位矢量是用双引号括起来的一组位数据 如:“010101” 5、布尔量(BOOLEAN) 只有“真”和“假”两个状态,可以进行关系运算 6、字符(CH

8、ARACTER) 字符量通常用单引号括起来,对大小写敏感。A 与a不同。明确说明1是字符时: CHARACTER(1),15/50,VHDL标准数据类型,7、字符串(STRING) 字符串是双引号括起来的由字母、数字或、 %、$组成的一串字符。区分大小写。 如:“laksdklakld” “1010101010” 8、时间(TIME) 时间的单位:fs,ps,ns,ms,sec,min,hr 例:10 ns 整数数值和单位之间应有空格,16/50,VHDL标准数据类型,9、错误等级(SEVERITY LEVEL) 在VHDL仿真器中,错误等级用来表示系统的状态,共有4种:NOTE(注意)、ER

9、ROR(错误)、FAILURE(失败)、WARNING(警告) 10、自然数(NATURAL) 正整数(POSITIVE) 自然数是整数的一个子类型,包括0和正整数;正整数也是整数的一个子类型。,17/50,IEEE标准数据类型,在IEEE库的程序包std_logic_1164中定义了两个非常重要的数据类型: 1 、标准逻辑位(std_logic) 取值:0,1,Z,X,W,L,H等9种 注意:使用时必须大写,若用小写z表示取值 高阻是错误的,必须用大写Z。 2、标准逻辑矢量(Std_logic_vector) 标准一维数组,数组中每个元素的数据类型均为标准逻辑位类型。,Entity eqco

10、mp4 is Port(a, b: in std_logic_vector(3 downto 0); equal:out std_logic ); End eqcomp4;,18/50,IEEE标准数据类型,注 意: 1、在使用“std_logic”和“std_logic_vector”时,在程序中必须声明库及程序包说明语句,即LIBRARY IEEE和std_logic_1164.ALL这两句在程序中必不可少。 2、 std_logic有多个取值,与标准数据类型bit不同,在编程时应注意考虑全所有情况。,19/50,VHDL运算符 逻辑运算符 AND、OR、NAND、NOR、XOR、NOT

11、关系运算符 =、/=、= 算术运算符 +、-、*、/ 并置(连接)运算符 &,3.3.3 VHDL运算符与表达式,20/50,21/50,22/50,运算符优先级,3.3.3 VHDL运算符与表达式,23/50,注意:在C语言中逻辑运算有左右优先级顺序的规定,而在VHDL语言中,左右没有优先级差别。需加括号表示优先级。,如:X=a AND b OR c; - -错误 X=(a AND b) OR c;- -正确,但若一个逻辑表达式中只有“AND”,”OR”,”XOR”运算符,那么改变运算顺序将不会导致逻辑的改变。此时,括号可以省略。,逻辑运算符的使用,如: x=a AND b AND c AN

12、D d; x=a OR b OR c OR d; x=a XOR b XOR c;,24/50,注意:而在VHDL语言中,关系运算符= 也用于信号的赋值,要根据上下文判断符号= 是用于赋值还是小于等于。,关系运算符的使用,architecture rtl of start is signal count : integer range 0 to 7; begin process(clk) begin if (clkevent and clk=1) then count = count + 1; if(count=0) then carryout = 1; else carryout = 0;

13、end if; end if; end process; end rtl;,25/50,并置运算符“”用于位的连接。 并置运算可用于位的连接,形成位矢量; 并置运算符可用于矢量的连接,形成新的矢量; 并置运算可用于位和矢量的连接,形成新的矢量,SIGNAL a,b :STD_LOGIC_VECTOR( 3 DOWNTO 0); SIGNAL q :STD_LOGIC_VECTOR( 7 DOWNTO 0); q ab;,并置运算符的使用,SIGNAL a,b,c,d :STD_LOGIC; SIGNAL q :STD_LOGIC_VECTOR( 3 DOWNTO 0); q abcd;,26/

14、50,表达式 VHDL语言中的表达式与其他高级程序设计语 言非常相似,同样是由运算符将基本元素连接起 来的式子。 一个表达式,需要有两个要素:运算符和基 本元素。基本元素包括对象名、文字、函数调用 等的表达式。 例如:ab,b (6)b (5)b (4), (AB)*B+(A REM B),7 REM (2)等。,3.3.3 VHDL运算符与表达式,27/50,3.3.4 基本顺序描述语句,顺序语句: 每一条顺序语句的执行顺序都和它们的书写顺序基本一致。只能出现在进程和子程序中。,常用顺序语句 赋值语句 IF 语句 CASE 语句 (针对本门课程及教材列出的常用顺序语句),28/50,3.3.

15、4 基本顺序描述语句,1. 赋值语句 信号赋值语句 格式: 目的信号量=信号量表达式 例: a=b; 注意: 限定在进程、函数过程等顺序区域使用 进程结束时起作用 与小于等于的关系操作符的差别 赋值符号两边的变量及表达式的数据类型和长度必须保持一致,29/50,3.3.4 基本顺序描述语句,1. 赋值语句 变量赋值语句 格式: 目的变量:=表达式 例: c:=a+b; D:=3; 注意: 限定在进程、函数、过程等顺序区域使用 变量赋值无延时特性,立即生效 变量值具有局部性 赋值符号两边的变量及表达式的数据类型和长度必须保持一致,30/50,3.3.4 基本顺序描述语句,2. IF语句 格式一

16、IF 条件 THEN 顺序执行语句 END IF; 例:IF (a=1) THEN c=b; END IF;,31/50,3.3.4 基本顺序描述语句,2. IF语句 格式二 IF 条件 THEN 顺序执行语句 ELSE 顺序执行语句 END IF;,ARCHITECTURE rtl OF mux2 IS BEGIN PROCESS( a,b,sel) BEGIN IF ( sel = 1) THEN c = a; ELSE c = b; END IF; END PROCESS; END rtl;,32/50,3.3.4 基本顺序描述语句,2. IF语句 格式三 IF 条件 THEN 顺序执行

17、语句 ELSIF 条件 THEN 顺序执行语句 : ELSIF 条件 THEN 顺序执行语句 ELSE 顺序执行语句 END IF;,33/50,3.3.4 基本顺序描述语句,3. CASE语句 格式: CASE 表达式 IS WHEN 条件表达式=顺序处理语句; END CASE; 其中WHEN的条件表达式可以有4种形式: WHEN 值=顺序处理语句; WHEN 值|值|值|值=顺序处理语句; WHEN 值 TO 值=顺序处理语句; WHEN OTHERS=顺序处理语句;,LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY mux4 IS PO

18、RT(a,b,i0,i1,i2,i3:IN STD_LOGIC; q:OUT STD_LOGIC); END mux4; ARCHITECTURE mux4_behave OF mux4 IS SIGNAL sel:INTEGER RANGE 0 TO 3; BEGIN PROCESS(a,b,i0,i1,i2,i3) BEGIN selqqqq=i3; END CASE; END PROCESS; END mux4_behave ;,selqqqq=i3; END CASE;,34/50,3.3.5 基本并行描述语句,并行语句: 位于Process外面,同时执行,不分位置的先后顺序,常用并行

19、语句 进程语句 并行信号赋值语句 端口说明语句 (针对本门课程及教材列出的常用并行语句),35/50,1. 进程语句 在一个结构体中多个PROCESS语句可以同时并行的执行,该语句有如下特点: 可以和其它进程语句同时执行,并可以存取构造体和实体中所定义的信号 进程中的所有语句都按照顺序执行 为启动进程,在进程中必须包含敏感信号表 进程之间的通信是通过信号量来实现的,3.3.5 基本并行描述语句,36/50,1. 进程语句 格式: 进程名: PROCESS 敏感信号表 变量说明语句; BEGIN 顺序处理语句; END PROCESS 进程名;,3.3.5 基本并行描述语句,Architectu

20、re behavioral of eqcomp4 is begin comp: process (a,b) begin if a=b then equal = 1; else equal =0; end if; end process comp; end behavioral ;,37/50,2. 并行信号赋值语句 简单信号赋值语句 条件信号赋值语句 选择信号赋值语句,3.3.5 基本并行描述语句,38/50,2. 并行信号赋值语句 简单信号赋值语句 格式: 目的信号量=信号量表达式 例: a=b; q=c+d; 信号赋值语句在进程中使用是顺序语句,但是在进程外即在结构体中使用时为并发语句。,

21、3.3.5 基本并行描述语句,39/50,2. 并行信号赋值语句 条件信号赋值语句 格式: 目的信号量=表达式1 WHEN 条件1 ELSE 表达式2 WHEN 条件2 ELSE 表达式3 WHEN 条件3 ELSE : 表达式n;,3.3.5 基本并行描述语句,Signal a,b,c,d:std_logic; Signal w,x,y,z:std_logic; f = w when a=1 else x when b=1 else y when c=1 else z when d=1 else 0;,40/50,2. 并行信号赋值语句 选择信号赋值语句 格式: WITH 选择表达式 SEL

22、ECT 赋值目标信号=表达式1 WHEN 条件1, 表达式2 WHEN 条件2 , : 表达式n WHEN 条件n;,3.3.5 基本并行描述语句,Signal s : std_logic_vector(1 downto 0); Signal a,b,c,d,f : std_logic; With s select f = a when “00”, b when “01”, c when “10”, d when “11”, X when others;,41/50,2. 并行信号赋值语句 注意: 条件信号赋值语句When-else语句条件语句可以是一个简单的表达式 选择信号赋值语句With-

23、select-when则不能采用表达式作为条件 如: a = “0000” when state=idle and state=1 else “0001” when state=idle and state=0 else b when state=running and state=1 else a;,3.3.5 基本并行描述语句,42/50,3. 端口说明语句 PORT端口说明语句用于设计实体和外部电路的接口通道说明,包含对每一个接口通道的名称、模式和数据类型的说明。,3.3.5 基本并行描述语句,端口说明的一般格式为: PORT(端口名,端口名:端口模式 数据类型; 端口名,端口名:端口模

24、式 数据类型);,43/50,几种语句的比较,44/50,在利用VHDL进行工程设计中,预先定义好的数据类型、子程序等设计单元的集合体(程序包),或预先设计好的各种设计实体(元件库程序包)等信息汇集在一个或几个库中以供调用。可以把库看成是一种用来存储预先完成的程序包和数据集合体的仓库。 库(LIBRARY)的语句格式如下: LIBRARY 库名; 这一语句即相当于为其后的设计实体打开了以此库名命名的库,以便设计实体可以利用其中的程序包。如语句“LIBRARY IEEE;”表示打开IEEE库。,3.4 VHDL的库和包,库(LIBRARY),45/50,常用库,IEEE库 IEEE库是VHDL设

25、计中最为常见的库,它包含有IEEE标准的程序包和其他一些支持工业标准的程序包。IEEE库中的标准程序包主要包括STD_LOGIC_1164,NUMERIC_BIT和NUMERIC_STD等程序包。另外还包含了Synopsys 公司的STD_LOGIC_ARITH、STD_LOGIC_SIGNED和STD_LOGIC_UNSIGNED程序包。其中的STD_LOGIC_1164是最重要的最常用的程序包,大部分基于数字系统设计的程序包都是以此程序包中设定的标准为基础的。,3.4 VHDL的库和包,46/50,常用库,IEEE库 另外,在IEEE库中符合IEEE标准的程序包并非符合VHDL语言标准,如

26、STD_LOGIC_1164程序包。因此在使用VHDL设计实体的前面必须以显式表达出来。 例: LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL;,3.4 VHDL的库和包,47/50,程序包 (PACKAGE),为了使已定义的常数、数据类型、元件调用说明以 及子程序能被更多的VHDL设计实体访问和共享,可以将 它们收集在一个VHDL程序包中。多个程序包可以并入一 个VHDL库中,使之适用于更一般的访问和调用范围。这 一点对于大系统开发,多个或多组开发人员并行工作显得 尤为重要。,3.4 VHDL的库和包,48/50,常用程序包,STD_LOGIC_1164程

27、序包 它是IEEE库中最常用的程序包,是IEEE的标准程序包。其中包含了一些数据类型、子类型和函数的定义,这些定义将VHDL扩展为一个能描述多值逻辑(即除具有“0”和“1”以外还有其他的逻辑量,如高阻态“Z”、不定态“X”等)的硬件描述语言,很好地满足了实际数字系统的设计需求。 该程序包中用得最多和最广的是定义了满足工业标准的两个数据类型STD_LOGIC和STD_LOGIC_VECTOR,它们非常适合于FPGA/CPLD器件中多值逻辑设计结构。,3.4 VHDL的库和包,49/50,常用程序包,STANDARD程序包 这个程序包是STD库中的预编译程序包。定义了许多基本的数据类型、子类型和函数。它是VHDL标准程序包,实际应用中已隐性地打开了,故在设计单元的开头不必再用USE语句另作声明。,3.4 VHDL的库和包,50/50,本节内容 数据对象、数据类型、运算符和表达式 常用顺序语句、并行语句 VHDL常用的库、程序包 重点掌握 数据对象、数据类型、运算符和表达式 常用顺序语句、并行语句,课时小结,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1