EDA技术实用教程-第3章-VHDL设计初步.ppt

上传人:牧羊曲112 文档编号:5428629 上传时间:2023-07-06 格式:PPT 页数:88 大小:780.50KB
返回 下载 相关 举报
EDA技术实用教程-第3章-VHDL设计初步.ppt_第1页
第1页 / 共88页
EDA技术实用教程-第3章-VHDL设计初步.ppt_第2页
第2页 / 共88页
EDA技术实用教程-第3章-VHDL设计初步.ppt_第3页
第3页 / 共88页
EDA技术实用教程-第3章-VHDL设计初步.ppt_第4页
第4页 / 共88页
EDA技术实用教程-第3章-VHDL设计初步.ppt_第5页
第5页 / 共88页
点击查看更多>>
资源描述

《EDA技术实用教程-第3章-VHDL设计初步.ppt》由会员分享,可在线阅读,更多相关《EDA技术实用教程-第3章-VHDL设计初步.ppt(88页珍藏版)》请在三一办公上搜索。

1、EDA技术实用教程,第3章 VHDL设计初步,教学内容:,3.1组合电路的VHDL描述3.2基本时序电路的VHDL描述 3.3计数器的VHDL设计3.4实用计数器的VHDL设计,教学要求:,通过对VHDL电路示例分析学习,了解用VHDL表达和设计电路的方法,理解VHDL语言现象和语句规则的特点。,VHDL的优点,*易于设计复杂的、多层次的设计。支持设计库和设计的重复使用*与硬件独立,一个设计可用于不同的硬件结构,而且设计时不必了解过多的硬件细节。*有丰富的软件支持VHDL的综合和仿真,从而能在设计阶段就能发现设计中的Bug,缩短设计时间,降低成本。*更方便地向ASIC过渡*VHDL有良好的可读

2、性,容易理解。,VHDL与计算机语言的区别,*运行的基础计算机语言是在CPURAM构建的平台上运行VHDL设计的结果是由具体的逻辑、触发器组成的数字电路*执行方式计算机语言基本上以串行的方式执行VHDL在总体上是以并行方式工作*验证方式计算机语言主要关注于变量值的变化VHDL要实现严格的时序逻辑关系,3.1 组合电路的VHDL描述,3.1.1 2选1多路选择器及其VHDL描述1,通道选择控制信号端,数据通道输入端口,数据输出端,ENTITY mux21a ISPORT(a,b:IN BIT;s:IN BIT;y:OUT BIT);END ENTITY mux21a;ARCHITECTURE o

3、ne OF mux21a ISBEGIN y=a WHEN s=0 ELSE b;END ARCHITECTURE one;,【例3-1】2选1多路选择器,s=0 y=a s=1 y=b,3.1.1 2选1多路选择器及其VHDL描述1,2选1多路选择器,s=0 y=a s=1 y=b,(1)以关键词ENTITY引导,END ENTITY 结尾的语句部分,称为实体。,mux21a实体,2选1多路选择器的VHDL描述,功能:描述设计模块的输入/输出信号或引脚,并给出设计模块与外界的接口。实体类似一个“黑盒”,实体描述了“黑盒”的输入输出口。port:*在层次化设计时,Port为模块之间的接口*在芯

4、片级,则代表具体芯片的管脚,(2)以关键词ARCHITECTURE引导,END ARCHITECTURE 结尾的语句部分,称为结构体。,图3-2 mux21a结构体,功能:通过若干顺序语句和并行语句来描述设计实体的逻辑功能(行为描述)或内部电路结构(结构描述),从而建立设计实体输出与输入之间的关系。一个设计实体可以有多个结构体结构体有三种描述方式*行为描述(behavioral):高层次的功能描述,不必考虑在电路中到底是怎样实现的。*数据流描述(dataflow):描述输入信号经过怎样的变换得到输出信号*结构化描述(structural):类似于电路的网络表,将各个器件通过语言的形式进行连接,

5、与电路有一对应的关系,一般用于大规模电路的层次化设计时。,设计实体:,一个完整的、可综合的VHDL程序设计构建,VHDL程序设计基本结构:,结构体三种描述方式的比较,1.实体表达 描述电路器件端口构成、端口类型(信号流动方向和方式)和信号属性,【例】ENTITY e_name IS PORT(p_name:port_m data_type;.p_namei:port_mi data_type);END ENTITY e_name;,VHDL相关语法说明,语法格式entity 实体名 is port()端口说明;end entity 实体名;,注意:关键词,2.实体名,3.端口语句PORT和端口

6、信号名,实体名实际上是器件名,最好根据相应的电路功能确定;实体名必须与文件名相同,否则无法编译;实体名不能用工具库中定义好的元件名;实体名不能用中文,也不能用数字开头。,端口语句(port)说明:以port为引导,并在语句结尾处加分号“;”port(端口信号名:端口模式 数据类型名:=初始值;);,4.端口模式,“IN”、“OUT”、“INOUT”、“BUFFER”,输入(In):从外部输入至实体;单向端口;输出(Out):从实体输出至外部;单向端口;双向(Inout):可以从外部输入至实体;也可以从实体输出至外部;双向端口;可代替所有其他模式,但降低了程序的可读性,一般用于与CPU的数据总线

7、接口;缓冲(Buffer):可以从实体输出至外部;也可以从端口回读该输出值至实体;不可以从外部输入至实体;单向端口(伪双向端口);允许该管脚名作为一些逻辑的输入信号。,VHDL语言中数据对象(信号、变量、常数)被赋予的类型规定取值范围和数值类型,即对传输或存储数据的类型作明确的界定。如Integer(整型)、Bit(位型)等;*VHDL-强类型语言*预定义类型 vs.自定义类型:-数据类型的分类已在VHDL标准中预先定义,可直接使用,如Integer,Real,Bit等;按照类型说明的格式自定义用户所需的类型;,5.数据类型,BIT:位数据类型 规定的取值范围是逻辑位1和0;可参与逻辑运算或算

8、术运算;BIT数据类型的定义在VHDL标准程序包STANDARD中,6.结构体表达,【例】ARCHITECTURE arch_name OF e_name IS(说明语句)说明和定义数据对象、数据类型、元件调用说明等 BEGIN(功能描述语句)电路功能描述语句,可以是并行语句、顺序语句或是他们的混合语句END ARCHITECTURE arch_name;,一个设计实体的功能与(/或)结构描述;一个设计实体可以有多个结构体;语法格式architecture 结构体名 of 设计实体名 is 说明区;begin 执行语句区;end architecture 结构体名;,顺序语句:由进程语句引导的

9、,以顺序方式执行的语句,其执行结果与书写先后顺序有关.如赋值语句;分支控制语句;循环控制语句;同步控制语句,并行语句:在结构体中以并行方式执行的语句。其结果与书写先后顺序无关.并行语句有五种语句结构:块语句、进程语句、信号赋值语句、子程序调用语句和元件例化语句。,VHDL的基本语句 顺序语句 并行语句,-eqcomp4 is a four bit equality comparatorLibrary IEEE;use IEEE.std_logic_1164.all;entity eqcomp4 isport(a,b:in std_logic_vector(3 downto 0);equal:o

10、ut std_logic);end entity eqcomp4;architecture dataflow of eqcomp4 isbegin equal=1 when a=b else 0;End architecture dataflow;,VHDL 大小写不敏感,eqcomp4.vhd,包,实体,结构体,文件名和实体名一致,每行;结尾,关键字begin,关键字end后跟实体名,关键字end后跟构造体名,库,7.赋值符号和数据比较符号,8.WHEN_ELSE条件信号赋值语句 并行语句 并行逻辑操作符:,赋值符号:“=”用于信号数据的传输,仿真传输延时最短为一个。要求两边的 信号的 数据

11、类型必须一致数据比较符号:“=”在条件语句表式中用于比较待测数据的关系。没有赋值的含义,只是一种数据比较符号。输出结果的数据类型是布尔(BOOLEAD),赋值目标=表达式 WHEN 赋值条件 ELSE 表达式 WHEN 赋值条件 ELSE.表达式;,例:z=a WHEN p1=1 ELSE b WHEN p2=1 ELSE c;,VHDL语言中预定义的有特殊含义的英文词语。用户不能用关键词命名自用对象或用作标识符。,9关键字,10标识符,11规范的程序书写格式,用户在编程中自定义的,用于表示不同名称的词语,12文件取名和存盘,文件取名:建议文件名与VHDL设计的实体名一致,后缀是.vhd。,文

12、件存盘:VHDL设计文件必须存于指定为工程的目录中,此目录将被设定为WORK库,WORK库的路径即为此目录的路径。,文件名后缀为.vhd文件名英文字母不分大小,【例4-2】2选1多路选择器ENTITY mux21a IS PORT(a,b:IN BIT;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;,VHDL数据对象(Data Objects),s=0 y=

13、a s=1 y=b,d,e,并行语句,3.1.2 2选1多路选择器及其VHDL描述2,布尔表达式,1.逻辑操作符,在AND(与)、OR(或)和NOT(取反)等的作用下可构成组合电路。,AND、OR、NOT NAND、NOR、XOR、XNOR操作对象的数据类型为:BIT、BOOLEAD、STD_LOGIC,BIT数据类型定义:种取值TYPE BIT IS(0,1);STD_LOGIC数据类型定义:种取值TYPE STD_LOGIC IS(U-未初始化的X-强未知的 0-强0 1-强1Z-高阻态W-弱未知的 L-弱0 H-弱1-忽略)可实现:X-0 1 Z,2.标准逻辑位数据类型STD_LOGIC

14、,库(LIBRARY)存放预先设计好的程序包和数据的集合体。常用的库有IEEE、STD、WORK、用户库等。这些设计单元可用作其他VHDL描述的资源。用户编写的设计单元既可以访问多个设计库,又可以加入到设计库中,被其他单元所访问。程序包(PACKAGE)将已定义的数据类型、元件调用说明及子程序收集在一起,供VHDL设计实体共享和调用,若干个包则形成库。程序包由两个独立的单元组成:程序包声明单元和程序包体单元构成。,3.设计库和标准程序包,IEEE库包括:STD_LOGIC_1164STD_LOGIC_ARITH是SYNOPSYS公司加入IEEE库程序包,包括:STD_LOGIC_SIGNED(

15、有符号数)STD_LOGIC_UNSIGNED(无符号数)STD_LOGIC_SMALL_INT(小整型数)VHDL 87版本使用IEEE STD 1076-1987 语法标准VHDL 93版本使用IEEE STD 1076-1993 语法标准描述器件的输入、输出端口数据类型中将要用到的IEEE的标准库中的STD_LOGIC_1164程序包。,使用库和程序包的一般定义表式是:LIBRARY;USE.ALL;,信号是在结构体(ARCHITECTURE)、程序包(PACKAGE)和实体(ENTITY)中说明的全局量。,信号定义格式:SIGNAL 信号名:数据类型:=初值;例如:SIGNAL Q1:

16、STD LOGIC:=0;,信号赋值语句:目标信号名=表达式例如:x=9;z=x AFTER 5ns;,4.SIGNAL信号定义和数据对象,数据对象:,数据对象定义:类似于容器,可接受不同数据类型的赋值数据对象类型:信号、变量、常数,【例3-3】2选1多路选择器ENTITY mux21a IS PORT(a,b,s:IN BIT;y:OUT BIT);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 A

17、RCHITECTURE one;,3.1.3 2选1多路选择器及其VHDL描述3,进程语句,敏感信号,s=0 y=a s=1 y=b,IF THEN ELSE顺序语句,1.条件语句,2.进程语句和顺序语句,IF语句必须以语句“END IF;”结束,IF_THEN_ELSE 顺序,进程语句以PROCESS(敏感信号表).END PROCESS引导的语句结构 敏感信号表中敏感信号的变化将激活所在进程;在一个结构体中可以包含任意个进程语句结构,所有进程语句是并行语句;由PROCESS引导的语句是顺序语句顺序语句以顺序方式执行的语句,其执行结果与书写先后顺序有关.,进程语句:主要用于设计实体的算法和功

18、能描述,即行为描述;,语法格式进程标号:process(敏感信号表)进程说明区 begin进程程序区 end process;进程说明区:只能定义类型、变量、子程序,不能定义信号;进程程序区:只能包含顺序语句;可包含信号和变量两种数据对象:变量为进程内部对象,不可跨越进程;信号为实体全局对象,用于与其它实体内模块建立联系;敏感信号表可以激活该进程的信号列表敏感信号表中信号的变化将激活所在进程;敏感信号表中只能包含信号,不能包含变量;,在VHDL中所有合法的顺序描述的语句必须放在进程语句中,3.1.4 半加器及其VHDL的描述,so=a XNOR(NOT b)co=a AND,异或非(同或),半

19、加器h_adder逻辑功能真值表,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 AND b;END ARCHITECTURE fh1;,so=a XNOR(NOT b)co=a AND,【例3-4】半加器,LIBRARY IEEE;-半加器描述

20、(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 abc so so so so NULL;END CASE;END PROCESS;END ARCHITECTURE fh1;,【例3-5】半加器,格式:CASE ISWhen=;

21、.;;When=;.;;.END CASE;,CASE语句属于顺序语句,须放在进程语句中使用.CASE语句根据满足的条件直接选择多项顺序语句中的一项执行,它常用来描述总线行为、编码器、译码器等的结构。可读性比if 语句强。,1.CASE语句,WHEN条件选择值可以有四种表达方式;,(1)单个普通数值,形如 WHEN 选择值=顺序语句;(2)并列数值,形如 WHEN 值/值/值=顺序语句;(3)数值选择范围,形如 WHEN 值TO值=顺序语句;(4)WHEN OTHERS=顺序语句;,使用CASE语句需注意以下几点:(1)CASE语句中每一条语句的选择值只能出现一次,即不能有相同选择值的条件语句

22、出现(2)CASE语句执行中必须选中,且只能选中所列条件语句中的一条,即CASE语句至少包含一个条件语句。(3)除非所有条件语句中的选择值能完全覆盖CASE语句中表达式的取值,否则最末一个条件语句中的选择必须用“OTHERS”表示,它代表已给出的所有条件语句中未能列出的其他可能的取值。否则在综合过程中会插入不必要的锁存器。关键词OTHERS只能出现一次,且只能作为最后一种条件取值。,当执行到CASE语句时,首先计算CASE和IS之间的表达式的值,然后根据条件语句中与之相同的选择值,执行对应的顺序语句,最后结束CASE语句。,在使用STD_LOGIC_VECTOR中,必须注明其数组宽度,即位宽如

23、:B:OUT STD_LOGIC_VECTOR(7 DOWNTO 0);或 SIGNAL A:STD_LOGIC_VECTOR(1 TO 4),B=01100010;-B(7)为 0B(4 DOWNTO 1)=1101;-B(4)为 1B(7 DOWNTO 4)=A;-B(6)等于 A(2),2.标准逻辑矢量数据类型STD_LOGIC_VECTOR,并置操作示例:SIGNAL a:STD_LOGIC_VECTOR(3 DOWNTO 0);SIGNAL d:STD_LOGIC_VECTOR(1 DOWNTO 0);.a=10d(1)1;-元素与元素并置,并置后的数组长度为4.IF a d=101

24、011 THEN.-在IF条件句中可以使用并置符,并置操作是将操作数或数组合并起来形成新的数组。,并置后的数组长度为6,3.并置操作符,3.1.5 一位二进制全加器及其VHDL描述,1位全加器逻辑功能真值表,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-6】或门逻辑描述,【例3-7】L

25、IBRARY IEEE;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;,1位二进制全加器顶层设计描述,ARCHITECTURE fd1 OF f_adder IS COMPONENT h_adder-调用半加器声明语句-例化语句 PORT(a,b:IN STD_LOGIC;co,so:OUT STD_LOGIC);END COMPONENT;COMPONENT or2a-调用或门声明语句-例化语句 POR

26、T(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;,层次化设计:,对于一个复杂的电子系统,可以将其分解为若干个子系统,每个子系统再分解成模块,形成多层次设计。

27、这样,可以使更多的设计者同时进行合作。在多层次设计中,每个层次都可以作为一个元件,再构成一个模块或系统,可以先分别仿真每个元件,然后再整体调试。,元件例化是引入一种连接关系,是将预先设计好的设计实体定义为一个元件,然后利用映射语句将此元件与当前设计实体中的指定端口相连,从而为当前设计实体引入了一个低一级的设计层次。*在结构体中,描述只表示元件(或模块)和元件(或模块)之间的互连,就象网表一样。*元件例化语句也是一种并行语句,各个例化语句的执行顺序与例化语句的书写顺序无关,而是按照驱动的事件并行执行的。*元件例化可以是多层次的*当引用库中不存在的元件时,必须首先进行元件的创建,然后将其放在工作库

28、中,通过调用工作库来引用元件。在引用元件时,要先在结构体中说明部分进行元件的说明,然后在使用元件时进行元件例化。,3.1.6 例化语句,COMPONENT 元件名 IS PORT(端口名表);END COMPONENT 元件名;,元件例化语句由两部分组成第一部分:元件定义语句(或元件说明语句)是对一个现成的设计实体定义为一个元件,语句的功能是对待调用的元件作出调用声明,它的最简表达式如下所示:,即对设计实体进行封装,使其只留出对外的接口界面,其中端口名表须列出该元件对外通信的各端口名,命名方式与实体中的 PORT()语句相同,元件定义语句必须放在结构体的ARCHITECTURE与BIGIN之间

29、-即在结构体的说明区。,元件例化语句组成:,第二部分:映射语句,是此元件与当前设计实体(顶层文件)中元件间及端口的连接说明。完成电路板上的元件“插座”的定义,“例化名”(标号名)相当于“插座名”是不可缺少的;语句的表达式如下:例化名:元件名 PORT MAP(端口名=连接端口名,.);,PORT MAP:端口映射/端口连接端口名:是在元件例化语句中端口名表中已定义好的元件端口名字连接端口名:是在顶层系统中,准备与接入的元件的端口相连的通信线名或顶层系统的端口名“=”:连接符号(端口名=连接端口名,.)部分完成“元件”引脚与“插座”引脚的连接“关联”关联方法:位置影射法上层元件端口说明语句中的信

30、号名与PORT MAP()中的信号名书写顺序和位置一一对应。例如,u1:and1(a1,b1,y1);名称映射法用“=”号将上层元件端口说明语句中的信号名与PORT MAP()中的信号名关联起来。例如,u1:and1(a=a1,b=b1,y=y1);,【例3-8】D触发器,图3-6 D触发器,3.2 寄存器描述及其VHDL语言现象3.2.1 D触发器的VHDL描述,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;AR

31、CHITECTURE bhv OF DFF1 IS SIGNAL Q1:STD_LOGIC;-类似于在芯片内部定义一个数据的暂存节点 BEGIN PROCESS(CLK)BEGIN IF CLKEVENT AND CLK=1 THEN Q1=D;END IF;Q=Q1;-将内部的暂存数据向端口输出 END PROCESS;END ARCHITECTURE bhv;,双横线-是注释符号,1.上升沿检测表达式和信号属性函数EVENT,关键词EVENT是预定义信号属性,表示对当前的一个极小的时间段内发生事件的情况进行检测(如时钟的边沿)。VHDL通过以下表式来测定某信号的跳变边沿:EVENT,例如:

32、clockEVENT-检测以clock为属性测试项目的事件clockEVENT AND clock=1;-检测clock的上升沿clockEVENT AND clock=0;-检测clock的下降沿,LAST_EVENT从信号最近一次的发生至今所经历的时间,常用于检查定时时间、建立时间、保持时间和脉冲宽度等。,D触发器VHDL描述的语言现象说明,【例3-9】-比较器ENTITY COMP_BAD IS PORT(a1:IN BIT;b1:IN BIT;q1:OUT BIT);END;ARCHITECTURE one OF COMP_BAD IS BEGIN PROCESS(a1,b1)BEGI

33、N IF a1 b1 THEN q1=1;ELSIF a1 b1 THEN q1=0;-未提及当a1=b1时,q1作何操作 END IF;END PROCESS;END;,图3-7 例3-9的电路图,在设计组合逻辑电路时,如没有列出所有条件及其对应的处理方法,将导致不完整的条件语句,从而产生组合和时序电路 的混合体,浪费逻辑资源,降低电路工作速度,影响了电路的可靠性。,a1 b1:q1=1 a1 b1:q1=0 a1=b1:q1=?,2.不完整条件语句与时序电路,寄存器,【例3-10】-改进的比较器ENTITY COMP_GOOD IS PORT(a1:IN BIT;b1:IN BIT;q1:

34、OUT BIT);END;ARCHITECTURE one OF COMP_GOOD IS BEGIN PROCESS(a1,b1)BEGIN IF a1 b1 THEN q1=1;ELSE q1=0;END IF;END PROCESS;END;,a1 b1:q1=1 a1 b1:q1=0,【例3-11】D触发器.PROCESS(CLK)BEGIN IF CLKEVENT AND(CLK=1)AND(CLKLAST_VALUE=0)THEN Q=D;-确保CLK的变化是一次上升沿的跳变 END IF;END PROCESS;,3.2.2 VHDL实现时序电路的不同表述,CLK LAST_VA

35、LUE:预定义信号属性,表示最近一次事件(EVENT)发生前的值 CLKLAST_VALUE 0为true表示在时刻前为0 CLKLAST_VALUE 1为true表示在时刻前为1,【例3-12】D触发器.PROCESS(CLK)BEGIN IF CLK=1 AND CLKLAST_VALUE=0-同例4-11 THEN Q=D;-确保CLK的变化是从0跳变到1 END IF;END PROCESS;.,【例3-13】D触发器LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY DFF3 IS PORT(CLK:IN STD_LOGIC;D:IN ST

36、D_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;Q=Q1;END PROCESS;END;,rising_edge()是VHDL在IEEE库中标准程序包STD_LOGIC_1164内预定义函数。,【例3-14】D触发器.PROCESS BEGIN wait until CLK=1;-利用wait语句 Q=D;END PROCE

37、SS;.,wait until:等待保持至,【例3-15】D触发器.PROCESS(CLK)BEGIN IF CLK=1 THEN Q=D;-利用进程的启动特性产生对CLK的边沿检测 END IF;END PROCESS;,图3-9 边沿型触发器时序波形,【例3-16】D触发器.PROCESS(CLK,D)BEGIN IF CLK=1-电平触发型寄存器 THEN Q=D;END IF;END PROCESS;,图3-10 电平触发型寄存器的时序波形,Entity test1 isport(clk,d:in bit;q:out bit);end test1;architecture body o

38、f test1 issignal q1:bit;beginprocess(clk)begin if clk=1 AND clklast_value=0 then q1=d;end if;q=q1;end process;end test1_body;,LIBRARY IEEE;USE IEEE.std_logic_1164.all;Entity test1 isport(clk,d:in bit;q:out bit);end test1;architecture body of test1 isbeginprocess(clk)begin if rising_edge(clk)then q=d

39、;end if;end process;end test1_body;,Entity test1 isport(clk:in bit;d:in bit;q:out bit);end test1;architecture body of test1 issignal q1:bit;beginprocess(clk,d)begin if(clk=1)then q1=d;end if;q=q1;end process;end body;,Entity test1 isport(clk:in bit;d:in bit;q:out bit);end test1;architecture body of

40、test1 issignal q1:bit;beginprocess(clk)begin if(clk=1)then q1=d;end if;q=q1;end process;end body;,比较不同语句的D触发器VHDL程序,小结:,*时序逻辑电路只能利用进程中的顺序语句建立;*常用和通用的边沿检测表达式:clockEVENT AND clock=1;-检测clock的上升沿 clockEVENT AND clock=0;-检测clock的下降沿,3.2.3 异步时序电路设计,异步时序电路的实现:一个时钟进程只能构成对应单一时钟信号的时序电路,异步时序电路最好用多个时钟进程构成.,时钟进

41、程:构成时序电路的进程,【例3-17】用两个时钟进程描述的异步时序电路.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;QQ=Q2;END PROCESS;END ARCHITECTURE bhv,Q1,Q2,【例

42、3-18】4位加法计数器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;,3.3 计数器的VHDL设计 3.3.1 4位二进制加法计数器设计,加、减算术操作符对应的操作数的数据类型为整数类型,语言现象:,*端口模式:Buffer 缓冲*数据类型:INTEGER整数类型*计数器累加表

43、达式:Q=Q+1*加、减算术操作符:对应的操作数的数据类型为整数类型*数据对象更新时间:Q=Q+1 下一时钟周期,3.3.2 整数类型,整数类型INTEGER:正整数、负整数和零 表示范围:2147483647 2147483647(可用32位有符号的二进制 数表示,即从(2311)到+(2311),已定义在VHDL标准程序包 STANDARD。可以使用预定义运算操作符,如:加“”、减“”、乘“”、除“”进行算术运算。)自然数类型NATURUL:正整数和零正整数类型POSITIVE:正整数,*VHDL仿真器将整数类型作为有符号数处理;*VHDL综合器将整数类型作为无符号数处理,要求使用RANG

44、E子句限定整数的范围,并根据限定范围决定信号或变量的二进制的位数,例:Q:BUFFER INTEGER RANGE 15 DOWNTO 0,整数常量的书写方式示例如下:1 十进制整数0 十进制整数35 十进制整数10E3 十进制整数:100016#D9#十六进制整数8#720#八进制整数 2#11010010#二进制整数,VHDL规定加、减算术操作符对应的操作数的数据类型为整数类型,以数制基数表示的文字格式:数制#数值#B二进制基数符号;O八进制基数符号;X16进制基数符号,【例3-19】LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY CNT4

45、IS PORT(CLK:IN STD_LOGIC;Q:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);END ENTITY CNT4;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;Q=Q1;END PROCESS;END ARCHITECTURE bhv;,计数器的其他VHDL表达方式,中间节点,语言现象:,*输出信号Q:数据类型:STD_LOGIC_VECTO

46、R(3 DOWNTO 0)LIBRARY IEEE;端口模式:OUT Q=Q+1 Q1=Q1+1(定义内部信号)*运算符的重载:通过调用运算符的重载函数实现 Q1=Q1+1(标准逻辑矢量)(整数类型),中间节点,4位加法计数器组成:由两大部分组成:组合电路-加法器(加1器)时序电路-锁存器(4位、边沿触发型),图3-13 4位加法计数器工作时序,*数据类型:整数类型INTEGER、自然数类型NATURUL、正整数类型POSITIVE,*BUFFER模式:BUFFER表达特定端口的特定功能,并非是特定的端口结构。,*运算符重载:VHDL允许用户对原有的基本操作符重新定义,赋予新的定义和功能,或允

47、许不同的数据类型之间进行运算,从而建立新的操作符.运算符重载方法之一:调用重载函数*重载函数:程序包STD_LOGIC_UNSIGNED含有加号(+)和其他运算符的重载函数。,*计数器结构:加法计数由两部分组成:加1组合电路和寄存器时序电路。,归纳:,3.4 实用计数器的VHDL设计【例3-20】带有异步复位和同步置数、时钟使能的十进制计数器,接下页,接上页,功能:主要用于数据暂存,十进制计数器相关语法1)变量VARIABLE,变量的一般表述:VARIABLE 变量名:数据类型:=初始值;,特征:*一个局部量,只能在进程中和子程序中使用。*不能将信息带出对它作定义的当前设计单元。*一种理想化的

48、数据传输,立即发生,不延时。,变量赋值语句:目标变量名:=表达式;,信号赋值语句:目标信号名 表达式;,为了简化表达才使用短语“(OTHERS=X)”,这是一个省略赋值操作符,它可以在较多位的位矢量赋值中作省略化的赋值,如以下语句:SIGNAL d1:STD_LOGIC_VECTOR(4 DOWNTO 0);VARIABLE a1:STD_LOGIC_VECTOR(15 DOWNTO 0);.d1 1,3=1,OTHERS=0);a1:=(OTHERS=0);,2)省略赋值操作符(OTHERS=X),2.程序分析RTL电路图,工作时序,3.时序模块中的同步控制信号和异步控制信号的构建,异步信号

49、与同步信号:异步与同步相对于时钟信号而言,不依赖时钟而有效的信号为异步信号,否则为同步信号。,4.另一种描述方式,3.时序模块中的同步控制信号和异步控制信号的构建,4.另一种描述方式,LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_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 CN

50、T10 ISBEGIN PROCESS(CLK,RST,EN)-复位信号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-检测是否允许计数-同步 IF CQI 0);-大于9,计数值清零 END IF;END IF;END IF;IF CQI=1001 THEN COUT=1;-计数大于9,输出进位信号 ELSE COUT=0;END IF;CQ=

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

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


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号