eda第3章VHDL编程基础.ppt

上传人:san****019 文档编号:17196439 上传时间:2020-11-14 格式:PPT 页数:161 大小:1.42MB
收藏 版权申诉 举报 下载
eda第3章VHDL编程基础.ppt_第1页
第1页 / 共161页
eda第3章VHDL编程基础.ppt_第2页
第2页 / 共161页
eda第3章VHDL编程基础.ppt_第3页
第3页 / 共161页
资源描述:

《eda第3章VHDL编程基础.ppt》由会员分享,可在线阅读,更多相关《eda第3章VHDL编程基础.ppt(161页珍藏版)》请在装配图网上搜索。

1、第 3章 VHDL编程基础 沈阳农业大学信息与电气工程学院 第 3章 VHDL编程基础 3.4 VHDL顺序语句 3.5 VHDL并行语句 第 3章 VHDL编程基础 沈阳农业大学信息与电气工程学院 3.4 VHDL顺序语句 VHDL语句: 顺序语句 (Sequentia Statements) 并行语句 (Concurrent Statements) 第 3章 VHDL编程基础 沈阳农业大学信息与电气工程学院 顺序语句包括: * EXIT 语句 * 赋值语句 * IF 语句 * CASE 语句 * LOOP 语句 * NEXT 语句 * NULL 语句( 空操作语句) * RETURN 语句

2、( 返回语句) *子程序调用语句 * WAIT 语句( 等待语句) 转 向 控 制 语 句 第 3章 VHDL编程基础 沈阳农业大学信息与电气工程学院 顺序语句只能出现在进程 (Process)和 子程序中。 在 VHDL中,一个进程是由一系列顺 序语句构成的,而进程本身属并行语句。 子程序本身并无顺序和并行语句之分。 第 3章 VHDL编程基础 沈阳农业大学信息与电气工程学院 PROCESS语句格式 : 进程标号 : PROCESS ( 敏感信号表 ) IS 进程说明部分 ; BEGIN 顺序描述语句; END PROCESS 进程标号 ; 启动条件 说明数据类型、 子程序、变量等 It i

3、s important that the sensitivity list includes all signals that might cause an output to change. 第 3章 VHDL编程基础 沈阳农业大学信息与电气工程学院 3.4.1 赋值语句 赋值语句有两种: 信号赋值语句 ( Signal Assignment) 变量赋值语句 ( Variable Assignment) 第 3章 VHDL编程基础 沈阳农业大学信息与电气工程学院 1 信号和变量赋值 变量赋值与信号赋值的区别在于: 变量是一个局部量,只局限于进程内或子程 序。变量赋值是立即发生。 信号是全局量

4、,代表硬件连接线。赋值总有 延时性。 第 3章 VHDL编程基础 沈阳农业大学信息与电气工程学院 语法格式如下: 变量 赋值目标 := 赋值源; 信号 赋值目标 = 赋值源; 第 3章 VHDL编程基础 沈阳农业大学信息与电气工程学院 【 例 3.4.1】 SIGNAL S1, S2: STD_LOGIC; SIGNAL SVEC : STD_LOGIC_VECTOR(0 TO 7); . PROCESS ( S1, S2 ) IS VARIABLE V1, V2: STD_LOGIC; 信号 进 程 变量 敏感信号表 第 3章 VHDL编程基础 沈阳农业大学信息与电气工程学院 BEGIN V

5、1 := 1; V2 := 1; S1 = 1; S2 = 1; SVEC(0) = V1; SVEC(1) = V2; SVEC(2) = S1; SVEC(3) = S2; 变量赋值 信号赋值 第 3章 VHDL编程基础 沈阳农业大学信息与电气工程学院 V1 := 0; V2 := 0; S2 = 0; SVEC(4) = V1; SVEC(5) = V2; SVEC(6) = S1; SVEC(7) = S2; END PROCESS; 结果: SVEC = ? 结果: SVEC=“11100010” S2两次赋值 第 3章 VHDL编程基础 沈阳农业大学信息与电气工程学院 2 赋值目标

6、 赋值语句中的赋值目标有四种类型 。 1) 标识符赋值目标及数组单元素赋值目标 标识符 赋值目标是以简单的标识符作为被赋值的 信号或变量名 。 数组单元素 赋值目标的表达形式为: 数组类信号或变量名 (下标名 ) 例如: V1, V2, S1, S2, SVEC(0), SVEC(5)等 第 3章 VHDL编程基础 沈阳农业大学信息与电气工程学院 2) 段下标元素赋值目标及集合块赋值目标 段下标 元素赋值目标的表达形式为: 数组类信号或变量名 (下标 1 TO/DOWNTO 下标 2) 例如: SVEC ( 0 TO 3) = “1110”; SVEC ( 4 TO 6) = “001”; S

7、VEC ( 7 ) = 0; 第 3章 VHDL编程基础 沈阳农业大学信息与电气工程学院 集合块 赋值目标是以一个集合的方式来赋值。 位置关联赋值方式 名字关联赋值方式 第 3章 VHDL编程基础 沈阳农业大学信息与电气工程学院 【 例 】 SIGNAL A, B, C, D : STD_LOGIC; SIGNAL S: STD_LOGIC_VECTOR( 1 TO 4); . VARIABLE E, F : STD_LOGIC; VARIABLE G : STD_LOGIC_VECTOR(1 TO 2 ); VARIABLE H : STD_LOGIC_VECTOR(1 TO 4 ); 第

8、3章 VHDL编程基础 沈阳农业大学信息与电气工程学院 S = (0, 1, 0, 0) ; (A, B, C, D) E, 4=F, 2 =G(1), 1=G(2) ) := H; 位置关联 方式赋值 名字关联 方式赋值 S=“0100” 结果: A =0; B =1; C =0 ; D =0; G(2) := H(1) ; G(1) := H(2) ; E := H(3) ; F := H(4) ; 第 3章 VHDL编程基础 沈阳农业大学信息与电气工程学院 3.4.2 转向控制语句 转向控制语句共有五种: IF 语句 CASE 语句 LOOP语句 NEXT 语句 EXIT 语句 第 3章

9、 VHDL编程基础 沈阳农业大学信息与电气工程学院 IF 条件句 THEN 顺序语句; ELSIF 条件句 THEN 顺序语句 ; ELSE 顺序语句 ; END IF; 1 IF语句 IF语句是一种条件语句,它根据语句中所设 置的一种或多种条件,有选择地执行指定的顺序 语句,其语句结构如下: 第 3章 VHDL编程基础 沈阳农业大学信息与电气工程学院 例 1 用 IF_THEN 语句描述一个 D触发器 。 数据输入端: D ; 时钟输入端: CLK ; 输出端: Q 。 第 3章 VHDL编程基础 沈阳农业大学信息与电气工程学院 -VHDL of dff LIBRARY IEEE; USE

10、IEEE.STD_LOGIC_1164.ALL; ENTITY dff_1 IS PORT( d, clk: IN STD_LOGIC; q: OUT STD_LOGIC); END dff_1; 库说明 程序包 说明 实 体 第 3章 VHDL编程基础 沈阳农业大学信息与电气工程学院 ARCHITECTURE str OF dff_1 IS BEGIN PROCESS ( clk ) BEGIN IF (clk EVENT AND clk =1) THEN q = d; END IF; END PROCESS; END str; clk的上升沿 结 构 体 进程 不完全描述构 成 D触发器

11、第 3章 VHDL编程基础 沈阳农业大学信息与电气工程学院 波形仿真: q=d, clk上升沿有效 第 3章 VHDL编程基础 沈阳农业大学信息与电气工程学院 例 2 用 IF_THEN 语句描述一个 D锁存器。 ARCHITECTURE rtl OF latch_1 IS BEGIN PROCESS ( clk ,d ) BEGIN IF clk =1 THEN q = d; END IF; END PROCESS; END rtl; 敏感信号表 锁存器与触 发器的区别 第 3章 VHDL编程基础 沈阳农业大学信息与电气工程学院 波形仿真: q=d, clk=1期间有效 第 3章 VHDL编

12、程基础 沈阳农业大学信息与电气工程学院 【 例 3】 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY EXAMPLE IS PORT (A, B, C: IN BOOLEAN; OUTPUT: OUT BOOLEAN); END ENTITY EXAMPLE; 第 3章 VHDL编程基础 沈阳农业大学信息与电气工程学院 ARCHITECTURE ART OF EXAMPLE IS BEGIN PROCESS( A, B, C ) IS VARIABLE N: BOOLEAN; BEGIN IF A THEN N := B; ELSE N:=C

13、; END IF; OUTPUT =N; END PROCESS; END ART; 敏感信号表 变量说明位置 变量是局部量,借 助信号带出进程 第 3章 VHDL编程基础 沈阳农业大学信息与电气工程学院 例 3对应的硬件电路如图所示 。 C A B O U T P U T 结果: CAABO U TP U T 第 3章 VHDL编程基础 沈阳农业大学信息与电气工程学院 【 例 3】 也可这样描述 。 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY EXAMPLE IS PORT (A, B, C: IN BIT; OUTPUT: OUT B

14、IT); END EXAMPLE; 第 3章 VHDL编程基础 沈阳农业大学信息与电气工程学院 ARCHITECTURE ART OF EXAMPLE IS SIGNAL T1, T2: BIT; BEGIN T1 = A AND B; T2 = NOT(A) AND C; OUTPUT = T1 OR T2; END ART; 中间信号 CAABO U TP U T 第 3章 VHDL编程基础 沈阳农业大学信息与电气工程学院 P1 P2 B C B A S B A S A Z M U X 2 1M U X 2 1 例 4 描述一个由两个 2选 1 数选器构成的电路 。 第 3章 VHDL编程

15、基础 沈阳农业大学信息与电气工程学院 -VHDL of 2mux LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY mux21_2 IS PORT( a,b,c,p1,p2 :IN STD_LOGIC; z :OUT STD_LOGIC); END mux21_2; 接口界面描述 第 3章 VHDL编程基础 沈阳农业大学信息与电气工程学院 ARCHITECTURE rt OF mux21_2 IS BEGIN PROCESS ( a,b,c,p1,p2 ) IS BEGIN IF ( p1=1 ) THEN z = a; ELSIF ( p2=

16、0 ) THEN z = b; ELSE z = c; END IF; END PROCESS; END rt; p1=1 p1=0 p2=0 p2=1 第 3章 VHDL编程基础 沈阳农业大学信息与电气工程学院 波形仿真: p1=1, z=a p1=0, p2=0, 则 z=b p1=0, p2=1, 则 z=c 第 3章 VHDL编程基础 沈阳农业大学信息与电气工程学院 例 5 描述 8线 3线优先编码器 优 先 级 别 SR:输入 8线,低电平有效,其中 SR( 7)权限最高。 SC:输出 3线,反码输出。 高 第 3章 VHDL编程基础 沈阳农业大学信息与电气工程学院 真值表: SR(

17、7) SR(6) SR(5) SR(4) SR(3) SR(2) SR(1) SR(0) SC(2) SC(1) SC(0) 0 0 0 0 1 0 0 0 1 1 1 0 0 1 0 1 1 1 0 0 1 1 1 1 1 1 0 1 0 0 1 1 1 1 1 0 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 x 0 1 1 1 1 0 1 第 3章 VHDL编程基础 沈阳农业大学信息与电气工程学院 【 例 5】 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY CODER IS PORT ( SR: IN STD_L

18、OGIC_VECTOR(0 TO 7); SC: OUT STD_LOGIC_VECTOR(0 TO 2); END ENTITY CODER; ARCHITECTURE ART OF CODER IS BEGIN 均设 为位 矢量 第 3章 VHDL编程基础 沈阳农业大学信息与电气工程学院 PROCESS ( SR ) IS BEGIN IF (SR(7)=0) THEN SC=“000”; ELSIF (SR(6)=0) THEN SC =“100”; ELSIF (SR (1)=0) THEN SC =“011”; ELSE SC 顺序语句 1; WHEN 选择值 2 = 顺序语句 2;

19、 WHEN OTHERS =顺序语句 n+1; END CASE; the n 第 3章 VHDL编程基础 沈阳农业大学信息与电气工程学院 IF 语句一般用于分支少的情况,执行逐项比较; CASE 语句一般用于分支多的情况,执行更接近 并行方式,次序并不重要。 CASE选择值: ( 1)单个数值,如 2; ( 2)数值选择范围,如( 2 TO 4); ( 3)并列数值,如 3 5; ( 4)混合方式。 第 3章 VHDL编程基础 沈阳农业大学信息与电气工程学院 使用 CASE语句需注意以下几点: (1) 选择值必须在表达式的取值范围内 。 (2) CASE语句中的条件必须穷举,不能重复。 不能

20、穷举的条件用 others表示。 (3) CASE语句中每一条语句的选择只能出现一 次 , 不能有相同选择值的条件语句出现 。 (4) CASE语句中至少要包含一个条件语句 。 第 3章 VHDL编程基础 沈阳农业大学信息与电气工程学院 【 例 1】 用 CASE语句描述 4选 1多路选择器 。 S1 S2 C B A D C A B D S2 S1 Z 第 3章 VHDL编程基础 沈阳农业大学信息与电气工程学院 S1 S2 Z 0 0 A 0 1 B 1 0 C 1 1 D 4:1MUX真值表: 第 3章 VHDL编程基础 沈阳农业大学信息与电气工程学院 LIBRARY IEEE; USE

21、IEEE.STD_LOGIC_1164.ALL; ENTITY MUX41 IS PORT( S1, S2: IN STD_LOGIC; A, B, C, D: IN STD_LOGIC; Z: OUT STD_LOGIC); END ENTITY MUX41; 接口界面 S1 S2 C B A D C A B D S2 S1 Z 第 3章 VHDL编程基础 沈阳农业大学信息与电气工程学院 ARCHITECTURE ART OF MUX41 IS SIGNAL S : STD_LOGIC_VECTOR (1 DOWNTO 0); BEGIN S Z Z Z ZZ=X; END CASE; EN

22、D PROCESS; END ARCHITECTURE ART; S1 S2 Z 0 0 A 0 1 B 1 0 C 1 1 D 第 3章 VHDL编程基础 沈阳农业大学信息与电气工程学院 例 2 描述一个 4选 1数选器 , 实现下表功能 。 S(4,3,2,1) 输出 0 Z1 = 1 1、 3 Z2 = 1 2、 4、 5、 6、 7 Z3 = 1 8 15 Z4 = 1 第 3章 VHDL编程基础 沈阳农业大学信息与电气工程学院 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY MUX41 IS PORT( S4, S3, S2, S1

23、: IN STD_LOGIC; Z4, Z3, Z2, Z1: OUT STD_LOGIC); END ENTITY MUX41; 4个输入 4个输出 第 3章 VHDL编程基础 沈阳农业大学信息与电气工程学院 ARCHITECTURE ART OF MUX41 IS SIGNAL T:STD_LOGIC_VECTOR(3 DOWNTO 0); SIGNAL temp: integer range 0 to 15; BEGIN Ttemptemptemptemp=0; END CASE; 二进 制与 十进 制的 转换 第 3章 VHDL编程基础 沈阳农业大学信息与电气工程学院 Z1=0; Z2

24、=0; Z3=0; Z4 Z1 Z2 Z3 Z4=1; END CASE; END PROCESS; END ARCHITECTURE ART; 赋予初始值 TEMP 输出 0 Z1 = 1 1、 3 Z2 = 1 2、 4、 5、 6、 7 Z3 = 1 8 15 Z4 = 1 第 3章 VHDL编程基础 沈阳农业大学信息与电气工程学院 3. LOOP语句 实现迭代的循环语句 。 主要形式: FOR _ LOOP :用于循环变量已知 WHILE _ LOOP :用于循环变量未知 第 3章 VHDL编程基础 沈阳农业大学信息与电气工程学院 FOR _ LOOP书写格式: 标号 : FOR 循环

25、变量 IN 取值范围 LOOP END LOOP 标号 ; WHILE _ LOOP书写格式: 标号 : WHILE 条件 LOOP 顺序处理语句 ; END LOOP 标号 ; Maxplus不支持 WHILE_LOOP语句。 第 3章 VHDL编程基础 沈阳农业大学信息与电气工程学院 【 例 1】 用 VHDL描述一个 8位奇偶校验逻辑电路。 利用异或操作实现。 例: 0 0 1 1 0 0 0 1 0 初值 终值 1 1 0 0 0 0 0 0 第 3章 VHDL编程基础 沈阳农业大学信息与电气工程学院 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL;

26、 ENTITY P_CHECK IS PORT ( A: IN STD_LOGIC_VECTOR (7 DOWNTO 0); Y: OUT STD_LOGIC); END P_CHECK; 8位输入 第 3章 VHDL编程基础 沈阳农业大学信息与电气工程学院 ARCHITECTURE ART OF P_CHECK IS - SIGNAL TMP: STD_LOGIC; BEGIN PROCESS (A) IS VARIABLE tmp: STD_LOGIC; BEGIN 注意信号和变 量的申明位置 第 3章 VHDL编程基础 沈阳农业大学信息与电气工程学院 TMP :=0; FOR N IN

27、0 TO 7 LOOP TMP :=TMP XOR A(N); END LOOP; Y= TMP; END PROCESS; END ARCHITECTURE ART; 赋初值 不能用 信号? 变量是局部量,借 助信号带出进程 第 3章 VHDL编程基础 沈阳农业大学信息与电气工程学院 仿真波形: 输入奇数个 1, 输出为 1。 输入偶数个 1, 输出为 0。 第 3章 VHDL编程基础 沈阳农业大学信息与电气工程学院 【 例 2】 利用 LOOP语句中的循环变量简化同类顺序语 句的表达式的使用 。 SIGNAL A,B,C: STD_LOGIC_VECTOR(1 TO 3); FOR N I

28、N 1 TO 3 LOOP A(N) = B(N) AND C(N); END LOOP; 能用信号? 相当于执行 3次操作: A(1)=B(1) AND C(1); A(2)=B(2) AND C(2); A(3)=B(3) AND C(3); 可以 第 3章 VHDL编程基础 沈阳农业大学信息与电气工程学院 LOOP语句中的跳转语句: NEXT 语句 EXIT 语句 第 3章 VHDL编程基础 沈阳农业大学信息与电气工程学院 4 NEXT 语句 语句格式: NEXT LOOP 标号 WHEN 条件表达式 ; 当 LOOP 标号缺省时 , 则无条件终止当前的循 环 , 跳回到本次循环 LOO

29、P语句开始处 , 开始下一 次循环;否则跳转到指定标号的 LOOP语句开始处 , 重新开始执行循环操作 。 若 WHEN子句出现并且条件表达式的值为 TRUE, 则进入跳转操作 , 否则继续向下执行 。 第 3章 VHDL编程基础 沈阳农业大学信息与电气工程学院 【 例 1】 L1: FOR CNT IN 1 TO 8 LOOP S1: A(CNT):=0; NEXT WHEN (B=C); S2 : A(CNT+8):=0; END LOOP L1; 若 B=C,则返回到 L1; 若 BC,则执行 S2语句。 第 3章 VHDL编程基础 沈阳农业大学信息与电气工程学院 5 EXIT语句 语句

30、格式如下: EXIT LOOP 标号 WHEN 条件表达式 ; EXIT与 NEXT 语句的格式和操作功能非常相 似 , 惟一的区别是: NEXT语句是跳向 LOOP 语句的 起始点 ; EXIT语句则是跳向 LOOP语句的 终点 。 第 3章 VHDL编程基础 沈阳农业大学信息与电气工程学院 【 例 1】 SIGNAL A,B: STD_LOGIC_VECTOR(1 DOWNTO 0); SIGNAL A_LESS _B: BOOLEAN; A_LESS_THEN_B = FLASE; FOR I IN 1 DOWNTO 0 LOOP IF ( A(I)=1 AND B(I)=0 ) THE

31、N A_LESS_B B 结果明确, 退出 LOOP 第 3章 VHDL编程基础 沈阳农业大学信息与电气工程学院 ELSIF (A(I)=0 AND B(I)=1) THEN A_LESS_B = TRUE; EXIT; ELSE NULL; END IF; END LOOP; -当 I=1时返回 LOOP语句继续比较 AB 第 3章 VHDL编程基础 沈阳农业大学信息与电气工程学院 3.4.3 WAIT 语句 在 进程中 (包括过程中 ),当执行到 WAIT 语句时,程序将被挂起 (Suspension),直到满 足条件后,将重新开始执行程序。 在 PROCESS中,不能同时有敏感信号表和

32、wait 语句。 如: PROCESS (A, B, C) IS BEGIN END PROCESS; 敏感信号表 第 3章 VHDL编程基础 沈阳农业大学信息与电气工程学院 WAIT语句的格式: WAIT ON 信号表 UNTIL 条件表达式 FOR 时间表达式 ; 单独的 WAIT,即未设置停止挂起条件,表 示永远挂起。 第 3章 VHDL编程基础 沈阳农业大学信息与电气工程学院 “WAIT ON 信号表 ” 称为敏感信号等待语句 。 如: WAIT ON S1, S2; 程序执行到此被挂起 , 直到 S1, S2有其一 变化 , 结束挂起 , 再次启动进程 。 第 3章 VHDL编程基础

33、 沈阳农业大学信息与电气工程学院 process (a,b) begin y = a and b; end process; process begin y = a and b; wait on a, b; end process; 等同于 书写位置不同 第 3章 VHDL编程基础 沈阳农业大学信息与电气工程学院 “WAIT UNTIL 条件表达式 ” 称为条件等待语句 。 程序执行到此被挂起 , 直到条件表达式为真时 , 结束挂起 , 再次启动进程 。 第 3章 VHDL编程基础 沈阳农业大学信息与电气工程学院 WAIT UNTIL语句三种表达方式: WAIT UNTIL 信号 =VALUE

34、; - WAIT UNTIL 信号 EVENT AND 信号 =VALUE ; - WAIT UNTIL NOT 信号 STABLE AND 信号 =VALUE; - 第 3章 VHDL编程基础 沈阳农业大学信息与电气工程学院 如果设 clock为时钟信号输入端 , 以下四种方式都 是描述时钟上升沿: WAIT UNTIL clock =1; WAIT UNTIL RISING_EDGE( clock ); WAIT UNTIL NOT clockSTABLE AND clock=1; WAIT UNTIL clockEVENT AND clock=1 ; 第 3章 VHDL编程基础 沈阳农业

35、大学信息与电气工程学院 例:描述一个 D触发器。 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY DFF_2 IS PORT ( d, clk :IN STD_LOGIC; q :OUT STD_LOGIC); END ENTITY DFF_2; 第 3章 VHDL编程基础 沈阳农业大学信息与电气工程学院 ARCHITECTURE two OF dff_2 IS BEGIN PROCESS IS BEGIN WAIT UNTIL clkEVENT AND clk=1 ; q = d; END PROCESS; END two; 没有敏感信号表

36、 在进程中使用 第 3章 VHDL编程基础 沈阳农业大学信息与电气工程学院 ARCHITECTURE two OF dff_2 IS BEGIN PROCESS( clk ) BEGIN IF clkEVENT AND clk=1 THEN q 实参表达式 , 形参名 =实参表达式 ) ; 其中,括号中的实参表达式称为实参,它可以是 一个具体的数值,也可以是一个标识符,是当前调用 程序中过程形参的接受体。 第 3章 VHDL编程基础 沈阳农业大学信息与电气工程学院 【 例 3.4.24】 PACKAGE DATA_TYPES IS TYPE DTYPE1 IS RANGE 0 TO 3; TY

37、PE DTYPE2 IS ARRAY(1 TO 3) OF DTYPE1; END PACKAGE DATA_TYPES; USE WORK . DATA_TYPES . ALL; 定义程序包 打开已定义的程序包 两位二进制的整数 几位? 第 3章 VHDL编程基础 沈阳农业大学信息与电气工程学院 ENTITY SORT IS PORT( SR: IN DTYPE2; SC: OUT DTYPE2); END SORT; ARCHITECTURE ART OF SORT IS BEGIN PROCESS (SR) IS 第 3章 VHDL编程基础 沈阳农业大学信息与电气工程学院 PROCEDU

38、RE SWAP( DATA: INOUT DTYPE2; LOW, HIGH: IN INTEGER ) IS VARIABLE V1: DTYPE1; BEGIN IF ( DATA(LOW)DATA(HIGH) THEN V1:=DATA(LOW); DATA(LOW):=DATA(HIGH); DATA(HIGH):=V1; END IF; END PROCEDURE SWAP; 形参 排序 过程 第 3章 VHDL编程基础 沈阳农业大学信息与电气工程学院 VARIABLE V2: DTYPE2; BEGIN V2:=SR; SWAP(V2, 1, 2); SWAP(V2, 2, 3);

39、 SWAP(V2, 1, 2); SC=V2; END PROCESS; END ART; 过程调用 第 3章 VHDL编程基础 沈阳农业大学信息与电气工程学院 波形仿真: 排序后高位永 远最大 第 3章 VHDL编程基础 沈阳农业大学信息与电气工程学院 2 函数调用 函数调用与过程调用是十分相似的 , 不同 之处是 , 调用函数将返还一个指定数据类型的 值 , 函数的参量只能是输入值 。 第 3章 VHDL编程基础 沈阳农业大学信息与电气工程学院 LIBRARY IEEE; ENTITY func_26 IS PORT ( a, b, c : IN bit; dout : OUT bit);

40、 END func_26; 第 3章 VHDL编程基础 沈阳农业大学信息与电气工程学院 ARCHITECTURE one OF func_26 IS FUNCTION opt (x,y,z:bit) RETURN bit IS BEGIN RETURN (x XOR y XOR z); END OPT; BEGIN dout TMP := REGA AND REGB; WHEN “101”= TMP := REGA OR REGB; WHEN “110”= TMP := NOT REGA; WHEN OTHERS = NULL; END CASE; 排除不用的条件 第 3章 VHDL编程基础

41、沈阳农业大学信息与电气工程学院 【 例 3.4.33】 TYPE ARRY1 ARRAY (0 TO 7) OF BIT; VARIABLE WTH1: INTEGER; WTH1 := ARRY1LENGTH; 4) 数组属性 LENGTH WTH1=8 第 3章 VHDL编程基础 沈阳农业大学信息与电气工程学院 3.5 VHDL并行语句 并行语句结构是最具 VHDL特色的。 在 VHDL中,并行语句在结构体中的执行 是 同步进行 的,或者说是 并行运行 的,其执行 方式与书写的顺序无关。 在执行中,并行语句之间可以有信息往来, 也可以是互为独立、互不相关、异步运行的 (如 多时钟情况 )。

42、 第 3章 VHDL编程基础 沈阳农业大学信息与电气工程学院 图 3.13 结构体中的并行语句模块 生 成 语 句 条 件 信 号 赋 值 语 句 元 件 例 化 语 句 并 行 信 号 赋 值 语 句 块 语 句 进 程 语 句 并 行 过 程 调 用 语 句 信号信号 信号 信号 信号 信号 A R C H I T E C T U R E E N D A R C H I T E C T U R E 第 3章 VHDL编程基础 沈阳农业大学信息与电气工程学院 并行语句主要有七种: 信号赋值语句 (CONCURRENT SIGNAL ASSIGNMENTS) 进程语句 (PROCESS) 块语

43、句 (BLOCK) 条件信号赋值语句 (CONDITION SIGNAL ASSIGNMENTS) 选择信号赋值语句 (SELECTED SIGNAL ASSIGNMENTS) 元件例化语句 (COMPONENT INSTANTIATIONS) 生成语句 (GENERATE) 并行过程调用语句 (CONCURRENT PROCEDURE CALLS) 第 3章 VHDL编程基础 沈阳农业大学信息与电气工程学院 并行语句在结构体中的使用格式如下: ARCHITECTURE 结构体名 OF 实体名 IS 说明语句; BEGIN 并行语句; END ARCHITECTURE 结构体名; 第 3章 V

44、HDL编程基础 沈阳农业大学信息与电气工程学院 3.5.1 进程语句 PROCESS是最具 VHDL语言特色的语 句,具有并行和顺序行为的双重性。 进程语句是一种并发处理语句,在一 个结构体中 多个进程之间 是 并发 关系 , 即同 时处理。而每一个进程的 内部 却是 顺序 语 句来构成的。 第 3章 VHDL编程基础 沈阳农业大学信息与电气工程学院 1 PROCESS语句格式 进程标号 : PROCESS (敏感信号参数表 ) IS 进程说明部分 ; BEGIN 顺序描述语句; END PROCESS 进程标号 ; 启动条件 说明数据类型、 子程序、变量等 第 3章 VHDL编程基础 沈阳农

45、业大学信息与电气工程学院 2 PROCESS 组成 PROCESS语句结构是由三个部分组成 : (1) 进程说明部分 主要定义一些 局部量 ,可包 括数据类型、常数、属性、子程序等。但需注意, 在进程说明部分中 不允许定义信号和共享变量 。 第 3章 VHDL编程基础 沈阳农业大学信息与电气工程学院 (2) 顺序描述语句部分 可分为 : 信号赋值语句 变量赋值语句 进程启动语句: WAIT语句 。 子程序调用语句 顺序描述语句 :包括 IF、 CASE、 LOOP和 NULL语句等 。 进程跳出语句:包括 NEXT和 EXIT语句 。 第 3章 VHDL编程基础 沈阳农业大学信息与电气工程学院

46、 (3) 敏感信号参数表 需列出 启动本进程的输 入信号名 (当有 WAIT语句时例外 )。 It is important that the sensitivity list includes all signals that might cause an output to change. 第 3章 VHDL编程基础 沈阳农业大学信息与电气工程学院 【 例 3.5.2】 SIGNAL CNT4: INTEGER RANGE 0 TO 15; PROCESS (CLK, CLEAR, STOP) IS BEGIN IF CLEAR=0 THEN CNT4=0; ELSIF CLKEVENT

47、AND CLK=1 THEN IF STOP=0 THEN CNT4=CNT4+1; END IF; END IF; END PROCESS; 敏感信号表 异步清零 判断时钟 上升沿 加 1计数 第 3章 VHDL编程基础 沈阳农业大学信息与电气工程学院 补充上面计数器程序: LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY count_2 IS PORT( clk, clear, stop : IN STD_LOGIC; qout : out integer range 0 to 15); END count_2 ; ARCHITECTURE

48、 one OF count_2 IS qout=cnt4; END one; 整数需界 定范围 第 3章 VHDL编程基础 沈阳农业大学信息与电气工程学院 波形仿真: 异步 清零 ? 计满 归零 第 3章 VHDL编程基础 沈阳农业大学信息与电气工程学院 3 进程设计要点 (1) 进程中只能设置顺序语句 。 (2) 进程的激活必须由敏感信号表或 WAIT语句。 (3) 结构体中多个进程之间的通信是通过传递 信号 和共享变量值来实现的。 (4) 进程是重要的建模工具。 第 3章 VHDL编程基础 沈阳农业大学信息与电气工程学院 【 例 3.5.3】 LIBRARY IEEE; USE IEEE.

49、STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY CNT10 IS PORT ( CLR: IN STD_LOGIC; IN1: IN STD_LOGIC_VECTOR(3 DOWNTO 0); OUT1: OUT STD_LOGIC_VECTOR ( 3 DOWNTO 0 ) ); END ENTITY CNT10; ? 第 3章 VHDL编程基础 沈阳农业大学信息与电气工程学院 ARCHITECTURE ART OF CNT10 IS BEGIN PROCESS (IN1, CLR) IS BEGIN IF (CLR=

50、1 OR IN1= 1001) THEN OUT1=“0000”; ELSE OUT1=IN1+1; ENG IF; END PROCESS; END ARCHITECTURE ART; 敏感信号表 有清零信号 或计满 9 有“ +”,须 加载运算符 第 3章 VHDL编程基础 沈阳农业大学信息与电气工程学院 本程序是一个加法器( adder),是组合电路。 清零 第 3章 VHDL编程基础 沈阳农业大学信息与电气工程学院 【 例 3.5.4】 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL;

51、 ENTITY CNT10 IS PORT(CLR: IN STD_LOGIC; CLK: IN STD_LOGIC; CNT: BUFFER STD_LOGIC_VECTOR (3 DOWNTO 0); END ENTITY CNT10; ? ? 第 3章 VHDL编程基础 沈阳农业大学信息与电气工程学院 ARCHITECTURE ART OF CNT10 IS BEGIN PROCESS IS BEGIN WAIT UNTI CLKEVENT AND CLK = 1; IF (CLR= 1 OR CNT=9) THEN CNT=“0000”; ELSE CNT=CNT+1; END IF;

52、 END PROCESS; END ARCHITECTURE ART; 等待时钟上 升沿 同步清零 加载运算符; 注意 cnt模式 第 3章 VHDL编程基础 沈阳农业大学信息与电气工程学院 本程序是一个计数器( count),是时序电路。 同步清零 第 3章 VHDL编程基础 沈阳农业大学信息与电气工程学院 进程之间的通信靠 信号 。 例:描述如下电路 :具有三态输出,异步清零,同 步寄存数据的八位寄存器。 。 八位寄存器 八个三态门构成 的输出缓冲器 第 3章 VHDL编程基础 沈阳农业大学信息与电气工程学院 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.AL

53、L; ENTITY reg8_oe IS PORT( clk,cr,en,oe: IN STD_LOGIC; data: in std_logic_vector(7 downto 0); q_out: OUT std_logic_vector (7 downto 0); END reg8_oe; ARCHITECTURE rtl OF reg8_oe IS SIGNAL q: std_logic_vector (7 downto 0); BEGIN 中间信号,连接 两个进程 第 3章 VHDL编程基础 沈阳农业大学信息与电气工程学院 p1:PROCESS( clk, cr, en, data

54、) BEGIN IF cr=0 then q = 00000000; ELSIF clkEVENT AND clk=1 THEN IF en=1 THEN q=data; END IF; END IF; END PROCESS P1; 异步清零 同步置数 八位寄存器 第 3章 VHDL编程基础 沈阳农业大学信息与电气工程学院 oes:PROCESS( oe, q ) BEGIN IF oe=0 THEN q_out Z ); ELSE q_out = q; END IF; END PROCESS oes; END rtl; 三 态 缓 冲 器 连接两个进程 高阻态 寄存器输出 第 3章 VHD

55、L编程基础 沈阳农业大学信息与电气工程学院 波形仿真: 输出高 阻态 异步 清零 同步 置数 第 3章 VHDL编程基础 沈阳农业大学信息与电气工程学院 一个进程中只允许描述对应于一个 时钟信号的同步时序逻辑 异步时序电路设计用多个时钟进程语句构成。 For an asynchronous circuit design, more than one processes should be used. 第 3章 VHDL编程基础 沈阳农业大学信息与电气工程学院 CLK启动 Q1启动 例:描述以下异步电路。 Q1 Q2 第 3章 VHDL编程基础 沈阳农业大学信息与电气工程学院 -vhdl of asyncronous LIBRARY IEEE ; USE IEEE. STD_LOGIC_1164. ALL; ENTITY asyn_2 IS PORT ( a, d, clk: IN STD_LOGIC; qd: OUT STD_LOGIC ); END asyn_2 ; 接口界面 第 3章 VHDL编程基础 沈阳农业大学信息与电气工程学院 ARCHITECTURE ex OF asyn_2 IS SIGNAL q

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!