《VHDL基础》PPT课件.ppt

上传人:小飞机 文档编号:5577293 上传时间:2023-07-30 格式:PPT 页数:99 大小:408.50KB
返回 下载 相关 举报
《VHDL基础》PPT课件.ppt_第1页
第1页 / 共99页
《VHDL基础》PPT课件.ppt_第2页
第2页 / 共99页
《VHDL基础》PPT课件.ppt_第3页
第3页 / 共99页
《VHDL基础》PPT课件.ppt_第4页
第4页 / 共99页
《VHDL基础》PPT课件.ppt_第5页
第5页 / 共99页
点击查看更多>>
资源描述

《《VHDL基础》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《VHDL基础》PPT课件.ppt(99页珍藏版)》请在三一办公上搜索。

1、EDA技术与VHDL,第3章VHDL 基础,3.1 VHDL标识符,3.1.1 短标识符VHDL的短标识符遵守规则:1、有效字符:英文宁母(a-z,A-Zl)、数字(0-9)和下划线“_”。2、必须以英文字母打头。3、下划线(“”)前后都必须有英文字母或数字4、短标识符不区分大小写。注意:如ENTlTY、ARCHITECTURE、BEGIN、ENDUSE等,它们是VHDL的保留字。原则上这些保留字符用大写。用户自创的标识符用小写。,同一短标识符的不的表示形式,是合法的。or_gate,Or_gate,Qr_Gate,OR_GATE.不合法的:2illegal_name,_illegal_nam

2、e,illegal#name,Illegal_name_,3.1.2 扩展标识符 扩展标识符(Extended Identifier)是VHDL93版扩展的书写规则和识别都有新规定,扩展标识符具有以下特性:(1)扩展标识符用反斜杠来界定。例如:invalid,controller_decode是合法的。(2)允许包含图形符号、空格符,但没有格式的作用。例如:$5000T,mode A and B是合法的。(3)2个反斜杠之问的字可以和保留字相同。,例如;entity,begin都是合法的扩展标识符。(4)2个反斜杠之间的字可以用数宁打头。(5)扩展标识符中允许多个下划线相邻。例如:our_en

3、tity 是合法的扩展标识符。(6)扩展标识符区分大小写。例如:or_gate和OR_GATE是不同的。(7)扩展标识符永远和短标识符不同。例如:Adder和Adder及adder是不同的。(8)扩展标识符的名字中如果含有一个反斜杠,则用相邻的2个反斜杠来代表它。例如:text表示该扩展标识符的名字为text(5个字母)。,3U短标识符vHDL的短标识符遵守以F规则的字符序列:()有效字符:英文宁母(al”z“,fA。Zl)、数字(”o”9r)(2)必须以英义字蚂打头。(3)下划线(”)的前后都必须有英文字母dZ数字。(4)短标识符不区分大小4。某些标识符,例如ENTlTY、ARCHITECT

4、URE、BEGIN、END、USE等,它们是WDL的保留字。为了醒日和易于发现错误,建议vHDL的保留宁用大写宁母,啊用户创建的标识符用小巧字母。,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 ARCHIT

5、ECTURE one;,3.1 VHDL 基本语法,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;BEGINd=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);END ENTITY mux21a;A

6、RCHITECTURE 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;.p_namei:port_mi data_type);END ENTITY e_n

7、ame;,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的数据类型必须是boolean IF(s1=0)AND(s2=1)OR(cb+1)THEN.,8.逻辑操作符,BIT、BO

8、OLEAN、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.进程语句和顺序语句,12.文件取名和存盘,IF_THEN_ELSE_END IF;PROCESS.END PROCESS,“.vhd”,adder_f.vhd,3.2

9、时序电路描述,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 STD;USE STD.STANDARD.ALL;,LIBRARY;USE.ALL;,LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;,3.2 时序电路

10、描述,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)BEGIN 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 时序

11、电路描述,图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)BEGINIF CLKEVENT AND(CLK=1)AND(CLKLAST_VALUE=0)THEN Q=D;-确保CLK的变化是一次上升沿的跳变 END IF;END PROCESS;【例3-10】.PROCESS(CLK)BEGINIF CLK=1 AND CLKLAST_VALUE=0-同例3-9 THEN Q=D;END IF;END PROCESS;,3.2 时序电

12、路描述,【例3-11】LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY DFF3 IS PORT(CLK,D:IN STD_LOGIC;Q:OUT STD_LOGIC);END;ARCHITECTURE 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 时序电路描述

13、,3.2.3 实现时序电路的不同表述,【例3-12】.PROCESS BEGIN wait until CLK=1;-利用wait语句 Q=D;END PROCESS;,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

14、.3 全加器的VHDL描述,3.3.1 半加器描述,图3-9 全加器f_adder电路图及其实体模块,3.3 全加器的VHDL描述,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_ad

15、der is BEGIN so=NOT(a XOR(NOT b);co=a AND 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);-定义

16、标准逻辑位矢量数据类型BEGIN abc 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;,3

17、.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 COMPONENT;COMPONENT or2a

18、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 全加器的VHDL描述,3.3.2 CASE语句,1.CASE语句,CASE ISWhen=;.;;Wh

19、en=;.;;.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);或 SIGNAL A:STD_LOGIC_VECTOR(1 TO 4),3.3 全加器的VHDL描述,3.并置操作符,SIGNAL a:STD_LOGIC_VECTOR(3 DOWNTO 0)

20、;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 文件名;,COMPONENT h_adder PORT(c,d:IN STD_LOGIC;e,f:OUT STD_LOGIC);,例化名:元件名 PORT MAP(端口名=连接端口名,.);,3.4 计数器设计,【例3-19】ENTITY CNT4 IS

21、 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+1;END IF;END PROCESS;END bhv;,3.4 计数器设计,1程序说明,表式Q=Q+1的右项与左项并非处于相同的时刻内,对于时序电路,除了传输延时外,前者的结果出现于当前时钟周期;后者,即左项要获得当前的Q+1,需等待下一个时钟周期。,3.4 计数器设计,2数据类型说明,1 十进制整数0 十进制整数

22、35 十进制整数10E3 十进制整数,等于十进制整数100016#D9#十六进制整数,等于十六进制整数D9H8#720#八进制整数,等于八进制整数720O2#11010010#二进制整数,等于二进制整数11010010B,Q:BUFFER 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

23、PORT(CLK:IN STD_LOGIC;Q:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);END;ARCHITECTURE bhv OF CNT4 ISSIGNAL 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_L

24、OGIC_UNSIGNED.ALL;ENTITY CNT10 IS PORT(CLK,RST,EN:IN STD_LOGIC;CQ:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);COUT:OUT STD_LOGIC);END CNT10;ARCHITECTURE behav OF CNT10 ISBEGIN 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

25、-检测时钟上升沿 IF EN=1 THEN-检测是否允许计数(同步使能)IF 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:=(OTHE

26、RS=0);,d1 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 STD_LOGI

27、C_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;END IF;QB=REG8(0);-输出最低位 END PROC

28、ESS;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 a:INTEGER RANGE 0 TO 15;-变量a定义为常数,取值范围是0到5VARIABLE d:STD_LOGIC

29、:=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.6 数据对象,3.6.3 信号,SIGNAL 信号名:数据类型:=初始值;,目标信号名=表达式 AFTER 时间量;,SIGNAL a,b,c,y,z:INTEGER;.PROCESS(a,b,c)B

30、EGIN 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)VARIABLE 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】ARCHITE

31、CTURE 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 数据对象,【例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;BEGI

32、N PROCESS(CLK)BEGIN IF CLKEVENT AND CLK=1 THEN A=D1;B=A;Q1=B;END IF;END PROCESS;END;,3.6 数据对象,【例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

33、 THEN A:=D1;B:=A;Q1=B;END IF;END PROCESS;END;,3.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+m 行.E

34、ND IF;END PROCESS;,【例3-28】LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY mux4 ISPORT(i0,i1,i2,i3,a,b:IN STD_LOGIC;q:OUT STD_LOGIC);END mux4;ARCHITECTURE body_mux4 OF mux4 ISsignal muxval:integer range 7 downto 0;BEGINprocess(i0,i1,i2,i3,a,b)begin muxval q q q q null;end case;end process;END body_mu

35、x4;,【例3-29】LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY mux4 ISPORT(i0,i1,i2,i3,a,b:IN STD_LOGIC;q:OUT STD_LOGIC);END mux4;ARCHITECTURE body_mux4 OF mux4 ISBEGINprocess(i0,i1,i2,i3,a,b)variable muxval:integer range 7 downto 0;begin muxval:=0;if(a=1)then muxval:=muxval+1;end if;if(b=1)then muxval:

36、=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中正确的工作时序,【例3-30】Library IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY SHIFT ISPORT(CLK,C0:IN

37、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;ARCHITECTURE BEHAV OF SHIFT IS SIGNAL REG:STD_LOGIC_VECTOR(7 DOWNTO 0);SIGNAL CY:STD_LOGIC;BEGIN PROCESS(CLK,MD,C0)BEGI

38、N 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(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_LOG

39、IC_1164.ALL;ENTITY control_stmts ISPORT(a,b,c:IN BOOLEAN;output:OUT BOOLEAN);END control_stmts;ARCHITECTURE example OF control_stmts IS BEGIN 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;ENTIT

40、Y coder IS PORT(din:IN STD_LOGIC_VECTOR(0 TO 7);output:OUT STD_LOGIC_VECTOR(0 TO 2);END coder;ARCHITECTURE 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

41、output=110;ELSIF(din(3)=0)THEN output=001;ELSIF(din(2)=0)THEN 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 PR

42、OCESS 进程标号;,3.8 进程语句归纳,3.8.2 进程结构组成,进程说明部分,顺序描述语句部分,敏感信号参数表,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.一个进程中只允许描述对应于一个时

43、钟信号的同步时序逻辑,3.8 进程语句归纳,【例3-33】ENTITY mul ISPORT(a,b,c,selx,sely:IN BIT;data_out:OUT BIT);END mul;ARCHITECTURE ex OF mul IS SIGNAL temp:BIT;BEGINp_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 data_out=temp;ELSE data_out=

44、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 ELSE1 WHEN s0=1 AND s1=0 ELSE2 WHEN s0=0 AND s1=1 ELSE3;x=a WHEN select=0 ELSEb WHEN select=1 ELSEc WHEN select=2 ELSE d;,3.10 双向和三态电路信号赋值,【例3-36】LIBRARY IEEE;USE IEEE.STD_LOGIC_

45、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 ISBEGINPROCESS(enable,datain)BEGIN IF enable=1 THEN dataout=datain;ELSE dataout=ZZZZZZZZ;END IF;END PROCESS;END bhv;,3.10.1 三态门设计,3.10

46、 双向和三态电路信号赋值,3.10.1 三态门设计,图3-21 8位3态控制门电路,3.10 双向和三态电路信号赋值,【例3-36】library ieee;use ieee.std_logic_1164.all;entity tri_state isport(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 t

47、ri_state isbeginprocess(control,q,in1)beginif(control=0)then x=q;else q=in1;x=ZZZZZZZZ;end if;end process;end body_tri;,3.10.2 双向端口设计,3.10 双向和三态电路信号赋值,【例3-37】(以上部分同上例)process(control,q,in1)beginif(control=0)then x=q;q=ZZZZZZZZ;else q=in1;x=ZZZZZZZZ;end if;end process;end body_tri;,3.10.2 双向端口设计,3.10

48、 双向和三态电路信号赋值,3.10.2 双向端口设计,图3-23 例3-36的仿真波形图,3.10 双向和三态电路信号赋值,3.10.2 双向端口设计,图3-24 例3-37的综合结果,3.10 双向和三态电路信号赋值,3.10.2 双向端口设计,图3-25 例3-37的仿真波形图,3.10 双向和三态电路信号赋值,3.10.3 三态总线电路设计,【例3-38】LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY tristate2 IS port(input3,input2,input1,input0:IN STD_LOGIC_VECTOR(7 DO

49、WNTO 0);enable:IN STD_LOGIC_VECTOR(1 DOWNTO 0);output:OUT STD_LOGIC_VECTOR(7 DOWNTO 0);END tristate2;ARCHITECTURE multiple_drivers OF tristate2 ISBEGINPROCESS(enable,input3,input2,input1,input0)BEGIN IF enable=00 THEN output Z);END IF;IF enable=01 THEN output Z);END IF;IF enable=10 THEN output Z);EN

50、D IF;IF enable=11 THEN output Z);END IF;END PROCESS;END multiple_drivers;,3.10 双向和三态电路信号赋值,3.10.3 三态总线电路设计,【例3-39】library ieee;use ieee.std_logic_1164.all;entity tri2 isport(ctl:in std_logic_vector(1 downto 0);datain1,datain2,datain3,datain4:in std_logic_vector(7 downto 0);q:out std_logic_vector(7 d

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

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号