EDA第3章VHDL基础.ppt

上传人:本田雅阁 文档编号:2891699 上传时间:2019-06-02 格式:PPT 页数:95 大小:389.52KB
返回 下载 相关 举报
EDA第3章VHDL基础.ppt_第1页
第1页 / 共95页
EDA第3章VHDL基础.ppt_第2页
第2页 / 共95页
EDA第3章VHDL基础.ppt_第3页
第3页 / 共95页
EDA第3章VHDL基础.ppt_第4页
第4页 / 共95页
EDA第3章VHDL基础.ppt_第5页
第5页 / 共95页
点击查看更多>>
资源描述

《EDA第3章VHDL基础.ppt》由会员分享,可在线阅读,更多相关《EDA第3章VHDL基础.ppt(95页珍藏版)》请在三一文库上搜索。

1、EDA技术与VHDL,第3章 VHDL 基础,KX康芯科技,3.1 VHDL 基本语法,3.1.1 组合电路描述,图3-1 mux21a实体 图3-2 mux21a结构体,3.1 VHDL 基本语法,3.1.1 组合电路描述,【例3-1】 ENTITY mux21a IS PORT ( a, b : IN BIT; s : IN BIT; y : OUT BIT ); END ENTITY mux21a; ARCHITECTURE one OF mux21a IS BEGIN y = a WHEN s = 0 ELSE b ; END ARCHITECTURE one ;,3.1 VHDL 基

2、本语法,3.1.1 组合电路描述,【例3-2】 ENTITY mux21a IS PORT ( a, b, s: IN BIT; y : OUT BIT ); END ENTITY mux21a; ARCHITECTURE one OF mux21a IS SIGNAL d,e : BIT; BEGIN d = a AND (NOT S) ; e = b AND s ; y = d OR e ; END ARCHITECTURE one ;,3.1 VHDL 基本语法,【例3-3】 ENTITY mux21a IS PORT ( a, b, s: IN BIT; y : OUT BIT );

3、END ENTITY mux21a; ARCHITECTURE one OF mux21a IS BEGIN PROCESS (a,b,s) BEGIN IF s = 0 THEN y = a ; ELSE y = b ; END IF; END PROCESS; END ARCHITECTURE one ;,3.1.1 组合电路描述,3.1 VHDL 基本语法,图3-3 mux21a功能时序波形,3.1.1 组合电路描述,3.1 VHDL 基本语法,3.1.2 VHDL结构,【例3-4】 ENTITY e_name IS PORT ( p_name : port_m data_type; .

4、 p_namei : port_mi data_type ); END ENTITY e_name;,1. 实体表达,3.1 VHDL 基本语法,2. 实体名,3. 端口语句和端口信号名,4. 端口模式,“IN”、“OUT”、“INOUT”、“BUFFER”,5. 数据类型,3.1 VHDL 基本语法,6. 结构体表达,【例3-5】 ARCHITECTURE arch_name OF e_name IS 说明语句 BEGIN (功能描述语句) END ARCHITECTURE arch_name ;,3.1 VHDL 基本语法,7. 赋值符号和数据比较符号,IF a THEN . - 注意,a

5、的数据类型必须是boolean IF (s1=0)AND(s2=1)OR(cb+1) THEN ,8. 逻辑操作符,BIT、BOOLEAN、STD_LOGIC,AND(与)、OR(或)、NAND(与非)、NOR(或非)、XOR(异或)、XNOR(同或)和NOT(取反),3.1 VHDL 基本语法,9. 条件语句,10. WHEN_ELSE条件信号赋值语句,赋值目标 = 表达式 WHEN 赋值条件 ELSE 表达式 WHEN 赋值条件 ELSE . 表达式 ;,z = a WHEN p1 = 1 ELSE b WHEN p2 = 1 ELSE c ;,3.1 VHDL 基本语法,11. 进程语句

6、和顺序语句,12. 文件取名和存盘,IF_THEN_ELSE_END IF; PROCESS. END PROCESS,“.vhd”,adder_f.vhd,3.2 时序电路描述,3.2.1 D 触发器,3.2 时序电路描述,3.2.2 时序描述VHDL规则,1. 标准逻辑位数据类型 STD_LOGIC,BIT数据类型定义: TYPE BIT IS(0,1); -只有两种取值 STD_LOGIC数据类型定义: TYPE STD_LOGIC IS (U,X,0,1,Z,W,L,H,-); -有9种取值,3.2 时序电路描述,2. 设计库和标准程序包,LIBRARY WORK ; LIBRARY

7、STD ; USE STD.STANDARD.ALL ;,LIBRARY ; USE ALL ;,LIBRARY IEEE ; USE IEEE.STD_LOGIC_1164.ALL ;,3.2 时序电路描述,3. 信号定义和数据对象,EVENT,4. 上升沿检测表式和信号属性函数EVENT,5. 不完整条件语句与时序电路,3.2 时序电路描述,【例3-7】 ENTITY COMP_BAD IS PORT( a1,b1 : IN BIT; q1 : OUT BIT ); END ; ARCHITECTURE one OF COMP_BAD IS BEGIN PROCESS (a1,b1) BE

8、GIN IF a1 b1 THEN q1 = 1 ; ELSIF a1 b1 THEN q1 = 0 ;- 未提及当a1=b1时,q1作何操作 END IF; END PROCESS ; END ;,3.2 时序电路描述,图3-5 例3-7的电路图,3.2 时序电路描述,图3-6 例3-8的电路图,【例3-8】 . IF a1 b1 THEN q1 = 1 ; ELSE q1 = 0 ; END IF; .,3.2 时序电路描述,3.2.3 时序电路的不同表述,【例3-9】 . PROCESS (CLK) BEGIN IF CLKEVENT AND (CLK=1) AND (CLKLAST_V

9、ALUE=0) THEN Q = D ; -确保CLK的变化是一次上升沿的跳变 END IF; END PROCESS ; 【例3-10】 . PROCESS (CLK) BEGIN IF CLK=1 AND CLKLAST_VALUE=0 -同例3-9 THEN Q = D ; END IF; END PROCESS ;,3.2 时序电路描述,【例3-11】 LIBRARY IEEE ; USE IEEE.STD_LOGIC_1164.ALL ; ENTITY DFF3 IS PORT (CLK,D : IN STD_LOGIC ; Q : OUT STD_LOGIC ); END ; AR

10、CHITECTURE bhv OF DFF3 IS SIGNAL Q1 : STD_LOGIC; BEGIN PROCESS (CLK) BEGIN IF rising_edge(CLK) - 必须打开STD_LOGIC_1164程序包 THEN Q1 = D ; END IF; END PROCESS ; Q = Q1 ; -在此,赋值语句可以放在进程外,作为并行赋值语句 END ;,3.2 时序电路描述,3.2.3 实现时序电路的不同表述,【例3-12】 . PROCESS BEGIN wait until CLK = 1 ; -利用wait语句 Q = D ; END PROCESS;,

11、3.2 时序电路描述,【例3-13】 . PROCESS (CLK) BEGIN IF CLK = 1 THEN Q = D ; -利用进程的启动特性产生对CLK的边沿检测 END IF; END PROCESS,图3-7 例3-13的时序波形,3.2 时序电路描述,【例3-14】 . PROCESS (CLK,D) BEGIN IF CLK = 1 -电平触发型寄存器 THEN Q = D ; END IF; END PROCESS ;,图3-8 例3-14的时序波形,3.3 全加器的VHDL描述,3.3.1 半加器描述,图3-9 全加器f_adder电路图及其实体模块,3.3 全加器的VH

12、DL描述,3.3.1 半加器描述,图3-10 半加器h_adder电路图及其真值表,3.3 全加器的VHDL描述,3.3.1 半加器描述,【例3-15】 LIBRARY IEEE; -半加器描述(1):布尔方程描述方法 USE IEEE.STD_LOGIC_1164.ALL; ENTITY h_adder IS PORT (a, b : IN STD_LOGIC; co, so : OUT STD_LOGIC); END ENTITY h_adder; ARCHITECTURE fh1 OF h_adder is BEGIN so = NOT(a XOR (NOT b) ; co = a AN

13、D b ; END ARCHITECTURE fh1;,3.3 全加器的VHDL描述,【例3-16】 LIBRARY IEEE; -半加器描述(2):真值表描述方法 USE IEEE.STD_LOGIC_1164.ALL; ENTITY h_adder IS PORT (a, b : IN STD_LOGIC; co, so : OUT STD_LOGIC); END ENTITY h_adder; ARCHITECTURE fh1 OF h_adder is SIGNAL abc : STD_LOGIC_VECTOR(1 DOWNTO 0) ; -定义标准逻辑位矢量数据类型 BEGIN ab

14、c so so so so NULL ; END CASE; END PROCESS; END ARCHITECTURE fh1 ;,3.3 全加器的VHDL描述,3.3.1 半加器描述,【例3-17】 LIBRARY IEEE ; -或门逻辑描述 USE IEEE.STD_LOGIC_1164.ALL; ENTITY or2a IS PORT (a, b :IN STD_LOGIC; c : OUT STD_LOGIC ); END ENTITY or2a; ARCHITECTURE one OF or2a IS BEGIN c = a OR b ; END ARCHITECTURE one

15、 ;,3.3 全加器的VHDL描述,【例3-18】 LIBRARY IEEE; -1位二进制全加器顶层设计描述 USE IEEE.STD_LOGIC_1164.ALL; ENTITY f_adder IS PORT (ain,bin,cin : IN STD_LOGIC; cout,sum : OUT STD_LOGIC ); END ENTITY f_adder; ARCHITECTURE fd1 OF f_adder IS COMPONENT h_adder -调用半加器声明语句 PORT ( a,b : IN STD_LOGIC; co,so : OUT STD_LOGIC); END

16、COMPONENT ; COMPONENT or2a PORT (a,b : IN STD_LOGIC; c : OUT STD_LOGIC); END COMPONENT; SIGNAL d,e,f : STD_LOGIC; -定义3个信号作为内部的连接线。 BEGIN u1 : h_adder PORT MAP(a=ain,b=bin,co=d,so=e); -例化语句 u2 : h_adder PORT MAP(a=e, b=cin, co=f,so=sum); u3 : or2a PORT MAP(a=d, b=f, c=cout); END ARCHITECTURE fd1;,3.3

17、 全加器的VHDL描述,3.3.2 CASE语句,1. CASE语句,CASE IS When = ; . ; ; When = ; . ; ; . WHEN OTHERS = ; END CASE ;,3.3 全加器的VHDL描述,2. 标准逻辑矢量数据类型,B = “01100010“ ; - B(7)为 0 B(4 DOWNTO 1) = “1101“ ; - B(4)为 1 B(7 DOWNTO 4) = A ; - B(6)等于 A(2),SIGNAL C :BIT_VECTOR(3 DOWNTO 0);,B : OUT STD_LOGIC_VECTOR(7 DOWNTO 0) ;

18、或 SIGNAL A :STD_LOGIC_VECTOR(1 TO 4),3.3 全加器的VHDL描述,3. 并置操作符 ,SIGNAL a : STD_LOGIC_VECTOR (3 DOWNTO 0) ; SIGNAL d : STD_LOGIC_VECTOR (1 DOWNTO 0) ; . a = 10d(1)1 ; - 元素与元素并置,并置后的数组长度为4 . IF a d = “101011“ THEN . - 在IF条件句中可以使用并置符,3.3 全加器的VHDL描述,3.3.3 例化语句,COMPONENT 元件名 IS PORT (端口名表) ; END COMPONENT

19、文件名 ;,COMPONENT h_adder PORT ( c,d : IN STD_LOGIC; e,f : OUT STD_LOGIC);,例化名 : 元件名 PORT MAP( 端口名 = 连接端口名,.);,3.4 计数器设计,【例3-19】 ENTITY CNT4 IS PORT ( CLK : IN BIT ; Q : BUFFER INTEGER RANGE 15 DOWNTO 0 ) ; END ; ARCHITECTURE bhv OF CNT4 IS BEGIN PROCESS (CLK) BEGIN IF CLKEVENT AND CLK = 1 THEN Q = Q

20、+ 1 ; END IF; END PROCESS ; END bhv;,3.4 计数器设计,1程序说明,表式Q = Q + 1的右项与左项并非处于相同的时刻内,对于时序电路,除了传输延时外,前者的结果出现于当前时钟周期;后者,即左项要获得当前的Q + 1,需等待下一个时钟周期。,3.4 计数器设计,2数据类型说明,1 十进制整数 0 十进制整数 35 十进制整数 10E3 十进制整数,等于十进制整数1000 16#D9# 十六进制整数,等于十六进制整数D9H 8#720# 八进制整数,等于八进制整数720O 2#11010010# 二进制整数,等于二进制整数11010010B,Q : BUF

21、FER NATURAL RANGE 15 DOWNTO 0;,Q : BUFFER INTEGER RANGE 15 DOWNTO 0;,3.4 计数器设计,3计数器的其他表述方法,【例3-20】 LIBRARY IEEE ; USE IEEE.STD_LOGIC_1164.ALL ; USE IEEE.STD_LOGIC_UNSIGNED.ALL ; ENTITY CNT4 IS PORT ( CLK : IN STD_LOGIC ; Q : OUT STD_LOGIC_VECTOR(3 DOWNTO 0) ) ; END ; ARCHITECTURE bhv OF CNT4 IS SIGN

22、AL Q1 : STD_LOGIC_VECTOR(3 DOWNTO 0); BEGIN PROCESS (CLK) BEGIN IF CLKEVENT AND CLK = 1 THEN Q1 = Q1 + 1 ; END IF; END PROCESS ; Q = Q1 ; END bhv;,3.5 一般计数器的VHDL设计方法,【例3-21】 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY CNT10 IS PORT (CLK,RST,EN : IN STD_LOGIC; C

23、Q : OUT STD_LOGIC_VECTOR(3 DOWNTO 0); COUT : OUT STD_LOGIC ); END CNT10; ARCHITECTURE behav OF CNT10 IS BEGIN PROCESS(CLK, RST, EN) VARIABLE CQI : STD_LOGIC_VECTOR(3 DOWNTO 0); BEGIN IF RST = 1 THEN CQI := (OTHERS =0) ; -计数器异步复位 ELSIF CLKEVENT AND CLK=1 THEN -检测时钟上升沿 IF EN = 1 THEN -检测是否允许计数(同步使能) I

24、F CQI 0); -大于9,计数值清零 END IF; END IF; END IF; IF CQI = 9 THEN COUT = 1; -计数大于9,输出进位信号 ELSE COUT = 0; END IF; CQ = CQI; -将计数值向端口输出 END PROCESS; END behav;,3.5 一般计数器的VHDL设计方法,3.5.1 相关语法,SIGNAL d1 : STD_LOGIC_VECTOR(4 DOWNTO 0); VARIABLE a1 : STD_LOGIC_VECTOR(15 DOWNTO 0); . d1 0); a1 := (OTHERS=0) ;,d1

25、 e(3),3=e(5), OTHERS=e(1) );,f = e(1) ,3.5 一般计数器的VHDL设计方法,3.5.2 程序功能分析,图3-11 例3-21的RTL电路(Synplify综合),3.5 一般计数器的VHDL设计方法,3.5.2 程序功能分析,图3-12 例3-21的工作时序,3.5 一般计数器的VHDL设计方法,3.5.3 移位寄存器设计,【例3-22】 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY SHFRT IS - 8位右移寄存器 PORT ( CLK,LOAD : IN STD_LOGIC; DIN : IN

26、 STD_LOGIC_VECTOR(7 DOWNTO 0); QB : OUT STD_LOGIC ); END SHFRT; ARCHITECTURE behav OF SHFRT IS BEGIN PROCESS (CLK, LOAD) VARIABLE REG8 : STD_LOGIC_VECTOR(7 DOWNTO 0); BEGIN IF CLKEVENT AND CLK = 1 THEN IF LOAD = 1 THEN REG8 := DIN; -由(LOAD=1)装载新数据 ELSE REG8(6 DOWNTO 0) := REG8(7 DOWNTO 1); END IF; E

27、ND IF; QB = REG8(0); - 输出最低位 END PROCESS; END behav;,3.5 一般计数器的VHDL设计方法,3.5.3 移位寄存器设计,图3-13 例3-22的工作时序,3.6 数据对象,3.6.1 常数,CONSTANT 常数名:数据类型 := 表达式 ;,CONSTANT FBT : STD_LOGIC_VECTOR := “010110“ ; - 标准位矢类型 CONSTANT DATAIN : INTEGER := 15 ; - 整数类型,3.6 数据对象,3.6.2 变量,VARIABLE 变量名 : 数据类型 := 初始值 ;,VARIABLE

28、a : INTEGER RANGE 0 TO 15 ; -变量a定义为常数,取值范围是0到5 VARIABLE d : STD_LOGIC := 1; -变量a定义为标准逻辑位数据类型,初始值是1,目标变量名 := 表达式 ;,VARIABLE x,y : INTEGER RANGE 15 DOWNTO 0 ;-分别定义变量x和y为整数类型 VARIABLE a,b : STD_LOGIC_VECTOR(7 DOWNTO 0) ; x := 11 ; y := 2 + x ; - 运算表达式赋值,y 也是实数变量 a := b -b向a赋值 a(0 TO 5) := b(2 TO 7) ;,3

29、.6 数据对象,3.6.3 信号,SIGNAL 信号名: 数据类型 := 初始值 ;,目标信号名 = 表达式 AFTER 时间量;,SIGNAL a,b,c,y,z: INTEGER ; . PROCESS (a,b,c) BEGIN y = a + b ; z = c a ; y = b ; END PROCESS ;,3.6 数据对象,3.6.4 进程中的信号赋值与变量赋值,表3-1 信号与变量赋值语句功能的比较,3.6 数据对象,3.6.4 进程中的信号赋值与变量赋值,【例3-23】 ARCHITECTURE bhv OF DFF3 IS BEGIN PROCESS (CLK) VARI

30、ABLE QQ : STD_LOGIC ; BEGIN IF CLKEVENT AND CLK = 1 THEN QQ := D1 ; END IF; END PROCESS ; Q1 = QQ; END ;,3.6 数据对象,3.6.4 进程中的信号赋值与变量赋值,【例3-24】 ARCHITECTURE bhv OF DFF3 IS SIGNAL QQ : STD_LOGIC ; BEGIN PROCESS (CLK) BEGIN IF CLKEVENT AND CLK = 1 THEN QQ = D1 ; END IF; END PROCESS ; Q1 = QQ; END ;,3.6

31、数据对象,【例3-25】 LIBRARY IEEE ; USE IEEE.STD_LOGIC_1164.ALL ; ENTITY DFF3 IS PORT ( CLK,D1 : IN STD_LOGIC ; Q1 : OUT STD_LOGIC ) ; END ; ARCHITECTURE bhv OF DFF3 IS SIGNAL A,B : STD_LOGIC ; BEGIN PROCESS (CLK) BEGIN IF CLKEVENT AND CLK = 1 THEN A = D1 ; B = A ; Q1 = B ; END IF; END PROCESS ; END ;,3.6 数

32、据对象,【例3-26】 LIBRARY IEEE ; USE IEEE.STD_LOGIC_1164.ALL ; ENTITY DFF3 IS PORT ( CLK,D1 : IN STD_LOGIC ; Q1 : OUT STD_LOGIC ) ; END ; ARCHITECTURE bhv OF DFF3 IS BEGIN PROCESS (CLK) VARIABLE A,B : STD_LOGIC ; BEGIN IF CLKEVENT AND CLK = 1 THEN A := D1 ; B := A ; Q1 = B ; END IF; END PROCESS ; END ;,3.

33、6 数据对象,3.6.4 进程中的信号赋值与变量赋值,图3-15 例3-26的RTL电路 图3-16 D触发器电路,3.6 数据对象,【例3-27】 SIGNAL in1,in2,e1, . : STD_LOGIC ; . PROCESS(in1,in2, . . .) VARIABLE c1,. . . : STD_LOGIC_VECTOR(3 DOWNTO 0) ; BEGIN IF in1 = 1 THEN . - 第 1 行 e1 = “1010“ ; - 第 2 行 . IF in2 = 0 THEN . . . - 第 15+n 行 . c1 := “0011“ ; - 第 30+

34、m 行 . END IF; END PROCESS;,【例3-28】 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY mux4 IS PORT (i0, i1, i2, i3, a, b : IN STD_LOGIC; q : OUT STD_LOGIC); END mux4; ARCHITECTURE body_mux4 OF mux4 IS signal muxval : integer range 7 downto 0; BEGIN process(i0,i1,i2,i3,a,b) begin muxval q q q q null;

35、end case; end process; END body_mux4;,【例3-29】 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY mux4 IS PORT (i0, i1, i2, i3, a, b : IN STD_LOGIC; q : OUT STD_LOGIC); END mux4; ARCHITECTURE body_mux4 OF mux4 IS BEGIN process(i0,i1,i2,i3,a,b) variable muxval : integer range 7 downto 0; begin muxval :

36、= 0; if (a = 1) then muxval := muxval + 1; end if; if (b = 1) then muxval := muxval + 2; end if; case muxval is when 0 = q q q q null; end case; end process; END body_mux4;,图3-16 例3-28的RTL电路,图3-17 例3-29的RTL电路,3.6 数据对象,3.6.4 进程中的信号赋值与变量赋值,图3-18 例3-28中错误的工作时序,3.6 数据对象,3.6.4 进程中的信号赋值与变量赋值,图3-19 例3-29中正

37、确的工作时序,【例3-30】 Library IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY SHIFT IS PORT (CLK,C0 : IN STD_LOGIC; -时钟和进位输入 MD : IN STD_LOGIC_VECTOR(2 DOWNTO 0); -移位模式控制字 D : IN STD_LOGIC_VECTOR(7 DOWNTO 0); -待加载移位的数据 QB : OUT STD_LOGIC_VECTOR(7 DOWNTO 0); -移位数据输出 CN : OUT STD_LOGIC); -进位输出 END ENTITY; ARCHITEC

38、TURE BEHAV OF SHIFT IS SIGNAL REG : STD_LOGIC_VECTOR(7 DOWNTO 0); SIGNAL CY : STD_LOGIC ; BEGIN PROCESS (CLK,MD,C0) BEGIN IF CLKEVENT AND CLK = 1 THEN 接下页,CASE MD IS WHEN “001“ = REG(0) REG(0) REG(7) REG(7) REG(7 DOWNTO 0) REG = REG ; CY = CY ; -保持 END CASE; END IF; END PROCESS; QB(7 DOWNTO 0) = REG

39、(7 DOWNTO 0); CN = CY; -移位后输出 END BEHAV;,3.6 数据对象,3.6.4 进程中的信号赋值与变量赋值,图3-20 例3-30中带进位循环左移仿真波形(MD=“001“),3.7 IF语句概述,【例3-31】 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY control_stmts IS PORT (a, b, c: IN BOOLEAN; output: OUT BOOLEAN); END control_stmts; ARCHITECTURE example OF control_stmts IS B

40、EGIN PROCESS (a, b, c) VARIABLE n: BOOLEAN; BEGIN IF a THEN n := b; ELSE n := c; END IF; output = n; END PROCESS; END example;,【例3-32】 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY coder IS PORT ( din : IN STD_LOGIC_VECTOR(0 TO 7); output : OUT STD_LOGIC_VECTOR(0 TO 2) ); END coder; ARCHITECTURE

41、 behav OF coder IS SIGNAL SINT : STD_LOGIC_VECTOR(4 DOWNTO 0); BEGIN PROCESS (din) BEGIN IF (din(7)=0) THEN output = “000“ ; ELSIF (din(6)=0) THEN output = “100“ ; ELSIF (din(5)=0) THEN output = “010“ ; ELSIF (din(4)=0) THEN output = “110“ ; ELSIF (din(3)=0) THEN output = “001“ ; ELSIF (din(2)=0) TH

42、EN output = “101“ ; ELSIF (din(1)=0) THEN output = “011“ ; ELSE output = “111“ ; END IF ; END PROCESS ; END behav;,3.7 IF语句概述,表3-2 8线-3线优先编码器真值表,注:表中的“x”为任意,类似VHDL中的“”值。,3.8 进程语句归纳,3.8.1 进程语句格式,PROCESS语句结构的一般表达格式如下 进程标号: PROCESS ( 敏感信号参数表 ) IS 进程说明部分 BEGIN 顺序描述语句 END PROCESS 进程标号;,3.8 进程语句归纳,3.8.2 进

43、程结构组成,进程说明部分,顺序描述语句部分,敏感信号参数表,3.8 进程语句归纳,3.8.3 进程要点,1. PROCESS为一无限循环语句,2. PROCESS中的顺序语句具有明显的顺序/并行运行双重性,PROCESS(abc) BEGIN CASE abc IS WHEN “0000“ = so so so so so NULL ; END CASE; END PROCESS;,3.8 进程语句归纳,3. 进程必须由敏感信号的变化来启动,4. 进程语句本身是并行语句,3.8.3 进程要点,5. 信号是多个进程间的通信线,6. 一个进程中只允许描述对应于一个时钟信号的同步时序逻辑,3.8 进

44、程语句归纳,【例3-33】 ENTITY mul IS PORT (a, b, c, selx, sely : IN BIT; data_out : OUT BIT ); END mul; ARCHITECTURE ex OF mul IS SIGNAL temp : BIT; BEGIN p_a : PROCESS (a, b, selx) BEGIN IF (selx = 0) THEN temp = a; ELSE temp = b; END IF; END PROCESS p_a; p_b: PROCESS(temp, c, sely) BEGIN IF (sely=0) THEN d

45、ata_out = temp; ELSE data_out = c; END IF; END PROCESS p_b; END ex;,3.9 并行赋值语句概述,【例3-34】 SIGNAL seiect : INTEGER RANGE 15 DOWNTO 0; . . . Select = 0 WHEN s0=0 AND s1=0 ELSE 1 WHEN s0=1 AND s1=0 ELSE 2 WHEN s0=0 AND s1=1 ELSE 3 ; x = a WHEN select=0 ELSE b WHEN select=1 ELSE c WHEN select=2 ELSE d ;,

46、3.10 双向和三态电路信号赋值,【例3-36】 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY tri_s IS port ( enable : IN STD_LOGIC; datain : IN STD_LOGIC_VECTOR(7 DOWNTO 0); dataout : OUT STD_LOGIC_VECTOR(7 DOWNTO 0) ); END tri_s ; ARCHITECTURE bhv OF tri_s IS BEGIN PROCESS(enable,datain) BEGIN IF enable = 1 THEN dat

47、aout = datain ; ELSE dataout =“ZZZZZZZZ“ ; END IF ; END PROCESS; END bhv;,3.10.1 三态门设计,3.10 双向和三态电路信号赋值,3.10.1 三态门设计,图3-21 8位3态控制门电路,3.10 双向和三态电路信号赋值,【例3-36】 library ieee; use ieee.std_logic_1164.all; entity tri_state is port (control : in std_logic; in1: in std_logic_vector(7 downto 0); q : inout std_logic_vector(7 downto 0); x : out std_logic_vector(7 downto 0); end tri_state; architecture body_tri of tri_state is begin process(control,q,in1) begin if (control = 0) then x = q ; else q = in1; x=“ZZZZZZZZ“ ; end if; end process; end body_tri;,3.10.2 双向端口设计,3.10

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

当前位置:首页 > 其他


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