寄存器设计应用.ppt

上传人:小飞机 文档编号:6274106 上传时间:2023-10-12 格式:PPT 页数:30 大小:309.82KB
返回 下载 相关 举报
寄存器设计应用.ppt_第1页
第1页 / 共30页
寄存器设计应用.ppt_第2页
第2页 / 共30页
寄存器设计应用.ppt_第3页
第3页 / 共30页
寄存器设计应用.ppt_第4页
第4页 / 共30页
寄存器设计应用.ppt_第5页
第5页 / 共30页
点击查看更多>>
资源描述

《寄存器设计应用.ppt》由会员分享,可在线阅读,更多相关《寄存器设计应用.ppt(30页珍藏版)》请在三一办公上搜索。

1、第5章 寄存器设计应用,寄存器VHDL描述,D触发器的描述,D触发器,【例】LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY DFF1 IS PORT(CLK:IN STD_LOGIC;D:IN STD_LOGIC;Q:OUT STD_LOGIC);END;ARCHITECTURE bhv OF DFF1 IS SIGNAL Q1:STD_LOGIC;-类似于在芯片内部定义一个数据的暂存节点 BEGIN PROCESS(CLK,Q1)BEGIN IF CLKEVENT AND CLK=1 THEN Q1=D;END IF;END PROCESS;Q

2、=Q1;-将内部的暂存数据向端口输出 END bhv;,寄存器描述的VHDL程序,VHDL描述的语言现象说明,信号定义和数据对象,信号定义SIGNAL Q1:STD_LOGIC;表示在描述的器件DFF1内部定义标识符Q1的数据对象为信号SIGNAL,其数据类型为STD_LOGIC。由于Q1被定义为器件的内部节点信号,数据的进出不像端口信号那样受限制,所以不必定义其端口模式(如IN、OUT等)。定义Q1的目的是为了在设计更大的电路时使用由此引入的时序电路的信号,这是一种常用的时序电路设计的方式。有Q1过渡,Q不用BUFFER类型。,VHDL描述的语言现象说明,上升沿检测表式和信号属性函数EVEN

3、T,CLKEVENT AND CLK=1 检测时钟信号CLK的上升沿 关键词EVENT是信号属性函数,用来获得信号行为信息的函数称为信号属性函数 EVENT“clkEVENT”就是对clk标识符的信号在当前的一个极小的时间段 内发生事件的情况进行检测。所谓发生事件,就是clock在其数据类型的取值范围内发生变化,从一种取值转变到另一种取值(或电平方式)。,VHDL描述的语言现象说明,上升沿检测表式和信号属性函数EVENT,如果clk的数据类型定义为STD_LOGIC,则在 时间段内,clk从其数据类型允许的9种值中的任何一个值向另一值跳变,如由0变成1、由1变成0或由Z变成0,都认为发生了事件

4、虽然STD_LOGIC一般只有0和1,LAST_VALUE 信号属性函数,它表示最近一次事件发生前的值。,【例】ENTITY P_BAD IS PORT(a1,b1:IN BIT;q1:OUT BIT);END;ARCHITECTURE one OF P_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;,不完整条件语句与时序电路,不完整条件语句与时序电路,电路图(Synplify综合),不完整条件语句与时序电路,

5、.IF a1 b1 THEN q1=1;ELSE q1=0;END IF;.,(Synplify综合),实现时序电路的不同表述,【例】.PROCESS(CLK)BEGINIF CLKEVENT AND(CLK=1)AND(CLKLAST_VALUE=0)THEN Q=D;-确保CLK的变化是一次上升沿的跳变 END IF;END PROCESS;,实现时序电路的不同表述,【例】.PROCESS(CLK)BEGINIF CLK=1 AND CLKLAST_VALUE=0 THEN Q=D;END IF;END PROCESS;,【例】LIBRARY IEEE;USE IEEE.STD_LOGIC

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

7、序电路的不同表述,【例】.PROCESS(CLK)BEGIN IF CLK=1 THEN Q=D;-利用进程的启动特性产生对CLK的边沿检测 END IF;END PROCESS;,时序波形,实现时序电路的不同表述,【例】.PROCESS(CLK,D)BEGIN IF CLK=1-电平触发型寄存器 THEN Q=D;END IF;END PROCESS,时序波形,LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY DFF51 IS PORT(CLK0:IN STD_LOGIC;CL:IN STD_LOGIC;OUT1:OUT STD_LOGIC);E

8、ND DFF51;ARCHITECTURE bhv OF DFF51 IS SIGNAL D,Q:STD_LOGIC;BEGIN PROCESS(CLK1,CL)BEGIN D=CL NOR Q;IF CLK1EVENT AND CLK1=1 THEN Q=D;END IF;END PROCESS;OUT1=NOT Q;END bhv;,异步时序电路设计,在时序电路设计中应注意,一个时钟进程只能构成对应单一时钟信号的时序电路,或者说是同步时序电路。即如果在进程中需要构成多触发器时序电路,也只能产生对应某个单一时钟的同步时序逻辑。异步逻辑必须用多个时钟进程语句来构成。,异步时序电路设计,【例】.

9、ARCHITECTURE bhv OF MULTI_DFF IS SIGNAL Q1,Q2:STD_LOGIC;BEGINPRO1:PROCESS(CLK)BEGIN IF CLKEVENT AND CLK=1 THEN Q1=NOT(Q2 OR A);END IF;END PROCESS;PRO2:PROCESS(Q1)BEGIN IF Q1EVENT AND Q1=1 THEN Q2=D;END IF;END PROCESS;QQ=Q2;.,其中,进程标号PRO1和PRO2只是一种标注符号,不参加综合。程序中,时钟进程PRO1的赋值信号Q1成了时钟进程PRO2的敏感信号及时钟信号。这两个时

10、钟进程通过Q1进行通信联系。显然,尽管两个进程都是并行语句,但它们被执行(启动)的时刻并非同时,因为根据敏感信号的设置,进程PRO1总是先于PRO2被启动。,寄存器描述的VHDL程序,异步时序电路设计,移位寄存器VHDL描述移位寄存器的描述移位寄存器就是一种具有移位功能的寄存器阵列。移位功能是指寄存器里面存储的数据能够在外部时钟信号的作用下进行顺序左移或者右移,因此移位寄存器常常用来存储数据、实现数据的串并转换、进行数值运算以及数据处理等。,【例5-11】LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY shift IS PORT(d1:IN ST

11、D_LOGIC;cp:IN STD_LOGIC;d0:OUT STD_ LOGIC);END shift;ARCHITECTURE str OF shift IS PONENT dff PORT(CLK:IN STD_LOGIC;D:IN STD_LOGIC;Q:OUT STD_LOGIC);END PONENT;SIGNAL q:STD_LOGIC_VECTOR(4 DOWNTO 0);BEGINq(0)=d1;dffl:dff PORT MAP(q(0),cp,q(l);-元件例化语句dff2:dff PORT MAP(q(1),cp,q(2);dff3:dff PORT MAP(q(2)

12、,cp,q(3);dff4:dff PORT MAP(q(3),cp,q(4);d0=q(4);END str;,5.3.2 VHDL描述的语言现象说明(1)元件声明语句和元件例化语句文件在实体中首先定义了移位寄存器顶层设计元件的端口信号dl、cp、d0,然后在ARCHITECTURE和BEGIN之间利用PONENT语句对准备调用的元件(DFF触发器)作了声明,并定义了q(4)到q(0)五个信号作为器件内部的连接线最后利用端口映射语句PORT MAP()将四个D触发器连接起来构成一个完整的移位寄存器。,(2)LOOP循环语句,常用的循环语句有FOR 和WHILE两种。1).FOR 循环循环标号

13、:FOR 循环变量的循环次数范围 LOOP顺序语句;END LOOP 循环标号;例如:例:add:FOR i IN 1 TO 9 LOOP sum:=i+sum;END LOOP add;add 为循环标号,i 是一个临时循环变量,属于FOR 语句的局部变量,不必事先定义,由FOR 语句自动定义,在FOR语句中不应再使用其他与此变量同名的标识符。i从循环范围的初值开始,每循环一次就自动加1,直到超出循环范围的终值为止。执行结果Sum中为到的和。,例:add:FOR i IN 9 DOWNTO 1 LOOP sum:=i+sum;END LOOP add;,2).WHILE 循环WHILE 循环

14、是一种未知循环次数的语句,循环次数取决于条件表达式是否成立。其格式如下:循环标号:WHILE 条件表达式 LOOP顺序语句;END LOOP 循环标号;循环标号是用来表示WHILE循环语句的标识符,是可选项。在循环语句中,没有给出循环次数的范围,而是给出了循环语句的条件。WHILE后边的条件表达式是一个布尔表达式,如果条件为TURE,则进行循环,如果条件为FALSE,则结束循环。,IF(clr=0)THEN 清零;ELSIF(clkEVENT)AND(clk=1)THEN IF(load=0)THEN 并行置数 ELSIF(load=1)AND(dir=0)THEN 左移 ELSIF(load

15、=1)AND(dir=1)THEN 右移 END IF;END IF;在完成多个条件语句时,一定要注意优先问题,同时注意ELSIF的使用。,(3)IF条件语句优先问题,(4)生成语句生成语句是一种循环语句,具有复制电路的功能。当设计一个由多个相同单元模块组成的电路时,利用生成语句复制一组完全相同的并行组件或设计单元电路结构,避免多段相同结构的重复书写,以简化设计。生成语句有FOR工作模式和IF工作模式两种。1)FOR 工作模式的生成语旬生成标号:FOR 循环变量IN 取值范围GENERATE并行语句:END GENERATE 生成标号;,【例5-15】用FOR工作模式生成语句描述4位移位寄存器

16、。程序如下:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY shift2 ISPORT(dl:IN STD_LOGIC;ep:IN STD_LOGIC;d0:OUT STD_LOGIC);END shift2;ARCHITECfURE str OF shift2 ISPONENT dffPORT(CLK:IN STD_LOGIC;D:IN STD_LOGIC;Q:OUT STD_LOGIC);END PONENT;SIGNAL q:STD_LOGIC_VECTOR(4 DOWNTO 0);BEGINq(0)=dl;reg1:FOR i IN 0

17、TO 3 GENERATE-FOR 工作模式生成语句dffx:dddd PORT MAP(ep,q(i),q(i+1);-元件例化END GENERATE reg1;d0=q(4);END str;,2)IF 工作模式的生成语句IF 工作模式的生成语句常用来描述带有条件选择的结构。格式如下:生成标号:IF 条件GENERATE并行语句;END GENERATE 生成标号;其中,条件是一个布尔表达式,返回值为布尔类型:当返回值为TRUE时,就会去执行生成语句中的并行处理语句;当返回值为FALSE时,则不执行生成语句中的并行处理语句。,【例5-16】用FOR和IF工作模式的生成语句描述8位移位寄存

18、器。程序如下:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY shift3 ISPORT(d1:IN STD_LOGIC;cp:IN STD_LOGIC;d0:OUT STD_LOGIC);END shift3;ARCHITECfURE str OF shift3 ISPONENT ddddPORT(CLK:IN STD_LOGIC;D:IN STD_LOGIC;Q:OUT STD_LOGIC);END PONENT;,SIGNAL q:STD_LOGIC_VECTOR(7 DOWNTO 1);BEGINreg:FOR i IN 0 TO 7 GENERATE-FOR 工作模式生成语句g1:IF i=0 GENERATE-IF 工作模式生成语句dffx:dddd PORT MAP(cp,d1,q(i+1);END GENERATE;g2:IF i=7 GENERATEdffx:dddd PORT MAP(cp,q(i),d0);END GENERATE;g3:IF(i/=0)AND(i/=7)GENERATEdffx:dddd PORT MAP(cp,q(i),q(i+1);END GENERATE;END GENERATE reg;END str;,

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

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


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号