《D触发器电路全加器.pptx》由会员分享,可在线阅读,更多相关《D触发器电路全加器.pptx(46页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、主要内容 DFF的VHDL描述 全加器的VHDL描述第1页/共46页library ieee;use ieee.std_logic_1164.all;entity dff1 is port(clk,d:in std_logic;q:out std_logic);end;architecture bhv of dff1 issignal q1:std_logic;begin process(clk)begin if(clkevent and clk=1)then q1=d;end if;end process;q=q1;end;库、程序包实体结构体第2页/共46页STD_LOGIC标准逻辑位数据
2、类型STD_LOGIC比BIT包含的内容丰富和完整 BIT:0、1 STD_LOGIC数据类型通常在设计中通常使用std_logic类型这里我们借D触发器对这类数据类型进行一个描述,并非时序电路都要用这类数据类型第3页/共46页U -Uninitialized (未初始化的)X-Forcing Unknown(强未知的)0-Forcing 0 (强0)1-Forcing 1 (强1)Z-High Impedance (高阻态)W-Weak Unknown(弱未知的)L-Weak 0 (弱0)H-Weak 1 (弱1)-Dont care (忽略)返回第4页/共46页 库、程序包 std_log
3、ic、std_logic_vector:定义在std_logic_1164.all程序包中,而此包由IEEE定义。所以,使用到这两种数据类型时,需包含 library ieee;use ieee.std_logic_1164.all;返回第5页/共46页 SIGNAL 信号名:数据类型:=初始值;区别:signal:描述实体内部节点,不定义输入输出方向,在结构体中作为一个数据的暂存器,进行赋值。端口:描述实体与外界的接口数据对象数据对象返回第6页/共46页p Event信号属性函数 sEvent:如果在当前一个相当小的时间间隔内,事件发生了,则函数将返回”TURE”、否则返回”FLASE”上升
4、沿:clockevent and clock=1;下降沿:clockevent and clock=0;上升沿:rising_edge(clock);下降沿:falling_edge(clock);上升沿检测表达方式和信号属性使用函数要注意打开相关程序包第7页/共46页时钟的描述方法时钟的描述方法上升沿:上升沿:CPEVENT AND CP=1下升沿:下升沿:CPEVENT AND CP=0Clk=0Clk=0Clk=1Clk=1ClockEVENTClockEVENTClockEVENTClockEVENT 为信号的属性函数,有事件发为信号的属性函数,有事件发生为生为“真真”,否则为,否则为
5、“假假”第8页/共46页architecture bhv of dff2 isbegin process(clk)begin if(clkevent and clk=1)then q=d;end if;end process;end;时序电路由于这条语句的存在?第9页/共46页 不完整条件语句与时序电路 if(clkevent and clk=1)then q1=d;end if;此IF语句未利用ELSE指明IF语句不满足条件时,作何操作(不完整的条件语句);引入时序元件保存q1的原值;不完整语句,综合器如何处理?第10页/共46页上升沿上升沿D触发器描述触发器描述方法一:使用信号属性函数方法
6、一:使用信号属性函数LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY D_reg ISPORT(D,CP:IN STD_LOGIC;Q:OUT STD_LOGIC);END D_reg;ARCHITECTURE test OF D_reg ISSIGNAL Q1:STD_LOGICBEGINPROCESS(CP)BEGIN IF(CPEVENT AND CP=1)THEN Q1=D;END IF;END PROCESS;Q=Q1;END test;CP定义的数据类型有9种状态,不能完全代表信号由0跳变到1第11页/共46页方法二:使用方法二:使用W
7、AIT 语句语句LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY D_reg ISPORT(D,CP:IN STD_LOGIC;Q:OUT STD_LOGIC);END D_reg;ARCHITECTURE test OF D_reg ISBEGINPROCESSBEGINWAIT UNTIL CP=1;Q=D;END PROCESS;END test;上升沿上升沿D触发器描述触发器描述使用wait until 语句后就不用列出敏感信号等效对时钟信号CP的一个跳变判断第12页/共46页方方法法三三:使使用用上上升升沿沿检检测测函函数数LIBRARY
8、 IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY D_reg ISPORT(D,CP:IN STD_LOGIC;Q:OUT STD_LOGIC);END D_reg;ARCHITECTURE test OF D_reg ISBEGINPROCESS(cp)BEGINIF(rising_edge(cp)THENQ=D;END IF;END PROCESS;END test;上升沿上升沿D触发器描述触发器描述使用函数要注意打开相关程序包第13页/共46页方方法法四四:使使用用进进程程的的启启动动特特性性LIBRARY IEEE;USE IEEE.STD_LOGIC_
9、1164.ALL;ENTITY D_reg ISPORT(D,CP:IN STD_LOGIC;Q:OUT STD_LOGIC);END D_reg;ARCHITECTURE test OF D_reg ISBEGINPROCESS(CP)BEGINIF CP=1 THENQ=D;END IF;END PROCESS;END test;上升沿上升沿D触发器描述触发器描述使用进程对敏感信号的检测,来实现对时钟信号的边沿检测第14页/共46页由波形可见,Q的变化发生在clk的上升沿时刻D的取值。clk=0时,Q值不变。上升沿上升沿D触发器描述触发器描述第15页/共46页髙电平髙电平D触发器描述触发器
10、描述方方法法:使使用用进进程程的的启启动动特特性性LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY D_reg ISPORT(D,CP:IN STD_LOGIC;Q:OUT STD_LOGIC);END D_reg;ARCHITECTURE test OF D_reg ISBEGINPROCESS(CP,D)BEGINIF CP=1 THENQ=D;END IF;END PROCESS;END test;注意进注意进程的敏程的敏感信号感信号第16页/共46页由图可见,当CLK=1时,Q随D变化而变化。clk=0时,Q保持不变。髙电平髙电平D触发器描
11、述触发器描述第17页/共46页uvw全加器设计含有层次结构的VHDL程序例化语句的学习case语句的认识第18页/共46页-以下是以下是半加器半加器的描述的描述LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;-以下是半加器的实体描述以下是半加器的实体描述ENTITY H_adder ISPORT(in_a,in_b :IN STD_LOGIC;out_s,out_co:OUT STD_LOGIC);END ;-以下是半加器结构体描述以下是半加器结构体描述ARCHITECTURE one OF H_adder ISBEGINout_s=in_a XOR in_b
12、;out_co=in_a AND in_b;END one;第19页/共46页architecture one of h_adder issignal P:std_logic_vector(1 downto 0);begin Pso=0;coso=1;coso=1;coso=0;conull;end case;end process;end;-以下是半加器的结构体描述 CASE语句当a和b分别为0和0时,即P为00不是操作符,含义相当于then/“于是”满足条件后执行语句判断P的值相当于写出真值表第20页/共46页-以下是或门描述以下是或门描述LIBRARY IEEE;USE IEEE.STD
13、_LOGIC_1164.ALL;-以下是或门实体描述以下是或门实体描述ENTITY Or_2 ISPORT(x,y:IN STD_LOGIC;z:OUT STD_LOGIC);END Or_2;-以下是或门结构体描述以下是或门结构体描述ARCHITECTURE one OF Or_2 ISBEGIN Z=1 WHEN(x=0 AND y=1)ELSE 1 WHEN(x=1 AND y=0)ELSE 1 WHEN(x=1 AND y=1)ELSE 0;END behavioral;第21页/共46页.-以下是或门另一种结构体描述architecture one of or_2 isbegin c
14、a,in_b=b,out_s=v,out_co=u);-端口映射U2:H_adder PORT MAP(in_a=v,in_b=ci,out_s=s,out_co=w);U3:Or_2 PORT MAP(x=u,y=w,z=co);END;第23页/共46页元件例化语句 元件例化语句:即将从前设计的实体当作本设计的一个元件,然后用VHDL语句将各元件之间的连接关系描述出来;VHDL设计实体、来自FPGA元件库中的元件、Verilog设计的实体、IP核、FPGA中的嵌入式硬IP核等;第24页/共46页 COMPONENT 元件名 IS 【GENERIC(类属表);】PORT(端口名表);END
15、COMPONENT 元件名;例化名:元件名 PORT MAP(元件端口名=连接端口名,);元件定义语句:将一个现成的设计实体定义为本设计的一个元件;与实体的port()一样。元件例化语句:描述元件与当前设计实体的连接关系第25页/共46页 元件端口名=连接端口名其中,元件端口名是元件定义语句中的端口名表中已定义好的;连接端口名是当前系统与准备接入的元件对应端口相连的通信端口;端口名和当前系统的连接端口名的接口表达名字关联:端口名和关联符号”=”必须存在位置关联:只需列出连接端口U1:H_adder PORT MAP(in_a=a,in_b=b,out_s=v,out_co=u);-端口映射第2
16、6页/共46页architecture abc of shifter is component dff port(d,clk:in bit;q:out bit);end component;signal d:bit_vector(0 to 4);begin d(0)d(2),clk=clk,q=d(3);u1:dff port map(d=d(3),clk=clk,q=d(4);dout 语句A;WHEN 值2=语句B;WHEN OTHERS=语句C;END CASE;这里的=不是关系运算符,仅描述:值和对应执行语句的对应关系,相当于THEN的作用返回判断前面的情况都不存在时,作为最后一种条件
17、取值第28页/共46页std_logic 标准位类型std_logic_vector 标准一维数组使用std_logic_vector 表示多通道端口或者总线。使用std_logic_vector 时要注明其数组宽度:如:B:out std_logic_vector(7 downto 0);downto 表示最左边为最高位,位数向右依次递减。如:A:out std_logic_vector(1 to 4);to 表示最左边为最低位,位数向右递增。前例中定义内部信号P为两个元素的std_logic_vector第29页/共46页&-并置操作符:将操作数或数组合并起来形成新的数组;返回 P=a&b
18、;表示P为a和b组成的数组当a,b分别为0,0;P为000,1;P为011,0;p为101,1;p为11第30页/共46页一种计数器的设计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+1;end if;end process;end bhv;第31页/共46页数据对象:Buffer在“=”的左右两边都出现Q,表明Q应具有输入和输出两种端
19、口模式,同时它的输入特性应是反馈方式,即传输符号“=”的右边Q应该来自左边的Q的反馈。BUFFER与INTOUT的区别在于buffer的输入来自反馈,所以这里将Q定义为buffer类型最为合适。返回第32页/共46页数据类型:integer对应“+、-”的操作数必须定义为整数类型(integer)。表达式:Q=Q+1;式中“Q”和“1”都是整数,满足“=”左右两边都是整数(类型相同),“+”左右两边都是整数的条件。VHDL综合器要求必须使用“RANGE”句子为所定义的数限定范围,再根据所定义的范围来决定表示此信号或变量的二进制数的位数。Q:buffer integer ranger 15 do
20、wnto 0;定义了Q的取值范围是015;可以用四位二进制数表示。第33页/共46页整数的表达式不加引号,如:1,0,25;而逻辑位的数据要加引号,如:1,0,”0”,”1111”。自然数:natural:0正整数;正整数:positive:比自然数少个0;返回第34页/共46页另一种计数器表达方式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;a
21、rchitecture bhv of cnt4 issignal Q1:std_logic_vertor(3 downto 0);begin process(clk)begin if clkevent and clk=1 then Q1=Q1+1;end if;end process;Q=Q1;end bhv;第35页/共46页ieee.std_logic_unsigned.all表达式:Q1=Q1+1;加号左右两个数据类型不相同,Q1(逻辑矢量)1(整数);ieee库中std_logic_unsigned程序包中预先定义的操作符允许不同数据类型的操作数之间用运算符进行运算。返回第36页/共4
22、6页Q端口模式是“out”,由于Q没有输入的端口模式,因此Q不能如前例那样直接用表达式:Q=Q+1;在计数器内部定义一个信号signal,无需定义方向,所以Q1的方向是不受方向限制的,可以用Q10);elseif clkevent and clk=1 then if en=1 then if CQI0);end if;end if;ens if;if CQI=9 then cout=1;else cout=0;end if;CQ=cqi;end process;end beh;不完整条件语句需要检测时钟上升沿同步使能异步复位:不依赖时钟而有效的信号第39页/共46页IF条件语句中CQI9HE
23、CQI=9的比较符号两边都出现数据类型不同的现象。需要调用程序包std_logic_unsigned第40页/共46页第41页/共46页library ieee;use ieee.std_logic_1164.all;entity shfrt isport(clk,load:in std_logic din:in std_logic_vector(7 downto0);qb:out std_logic);end shfrt;architecture behav of shfrt is begin process(clk,load)variable reg8:std_logic_vector(7
24、 downto 0);begin if clkevent and clk=1 then if load=1 then reg8:=din;else reg8(6 downto 0):=reg8(7 downto 1);end if;end if;qb=reg8(0);end process;end behav;移位寄存器设计第42页/共46页第43页/共46页变量的赋值(VARIABLE)变量和信号一样属于数据对象,在程序中的功能和信号类似,但变量的赋值语句和信号的赋值不同:信号的赋值是“X)”多位的位矢量赋值中做省略化赋值。例如:variable CQI:std_logic_vector(3 downto 0);CQI:=(OTHERS=0);(等效CQI:=0000)利用(OTHERS=X)还可以给位矢量的某一部分位赋值之后再使用OTHERS给剩余的位赋值。第45页/共46页感谢您的欣赏!第46页/共46页