资源描述
1第第3 3章章 VHDLVHDL设计初步设计初步3.1 3.1 组合电路的组合电路的VHDLVHDL描述描述3.2 3.2 基本时序电路的基本时序电路的VHDLVHDL描述描述3.3 3.3 计数器计数器的的VHDLVHDL设计设计3.4 3.4 实用实用计数器的计数器的VHDL设计设计2一、一、VHDLVHDL结构及相关语句说明结构及相关语句说明1、实体、实体l 是是VHDLVHDL程序的基本单元,用于描述设计系统的端口结程序的基本单元,用于描述设计系统的端口结构。构。l 一个电路系统的程序设计只有一个实体。一个电路系统的程序设计只有一个实体。l 一般语句结构:一般语句结构:ENTITY 实体名实体名 IS PORT(端口表端口表);END ENTITY 实体名实体名;3.1 二选一多路选择器二选一多路选择器VHDL描述描述用用VHDL描术电路由两部分组成描术电路由两部分组成:实体和结构体实体和结构体3【例【例3-1】ENTITY elector2_1 IS .END ENTITY elector2_1;1 1)、实体名)、实体名l 实体名设计者自己添加,最好根据相应电路的功实体名设计者自己添加,最好根据相应电路的功能来确定;能来确定;l 不要用数字或中文定义实体名;不要用数字或中文定义实体名;l 不要与不要与EDAEDA工具库中已定义好的元件同名工具库中已定义好的元件同名;42 2)、)、PORTPORT语句和端口信号名语句和端口信号名 PORTPORT说明语句是对一个设计实体与外部电路的接口通道说明语句是对一个设计实体与外部电路的接口通道的说明,其中包括对每一接口的输入输出模式和数据类型的的说明,其中包括对每一接口的输入输出模式和数据类型的定义。其格式如下:定义。其格式如下:PORT(端口名,端口名,端口名:端口模式端口名:端口模式 数据类型;数据类型;端口名,端口名,端口名:端口模式端口名:端口模式 数据类型数据类型);A A、端口模式:、端口模式:端口模式用于定义端口上的数据的流动方向和方式,一端口模式用于定义端口上的数据的流动方向和方式,一般有四种模式:般有四种模式:IN、OUT、INOUT、BUFFER5端口模式端口模式端口模式说明端口模式说明ININ单向只读模式,数据只能通过该端口读入实体中单向只读模式,数据只能通过该端口读入实体中OUTOUT单向输出模式,数据通过该端口从实体输出单向输出模式,数据通过该端口从实体输出INOUTINOUT输入输出双向端口,可以通过该端口读入或写出信息输入输出双向端口,可以通过该端口读入或写出信息BUFFERBUFFER具有读功能的输出模式,可以读或写,回读信号由内部具有读功能的输出模式,可以读或写,回读信号由内部产生产生INOUTINOUTBUFFER端口模式符号图端口模式符号图INOUTBUFFERINOUT6B B、数据类型、数据类型1 1)意义和作用:)意义和作用:数据类型是指端口上流动的数据的表达格式或取数据类型是指端口上流动的数据的表达格式或取值类型,值类型,VHDLVHDL要求只有相同数据类型的端口信号和操作数才能相互要求只有相同数据类型的端口信号和操作数才能相互作用。作用。2 2)数据类型种类:)数据类型种类:INTEGERINTEGER、BOOLEANBOOLEAN、BITBIT和和STD_LOGICSTD_LOGIC等。等。BOOLEAN:FALSE,TRUE BIT:(0,1)STD_LOGIC:(U,X,0,1,Z,W,L,H,-)U表示未初始化的;表示未初始化的;X表示强未知的;表示强未知的;0表示强逻辑表示强逻辑0;1表示强逻辑表示强逻辑1;Z表示高阻态;表示高阻态;W 表示弱未知的;表示弱未知的;L表示弱逻辑表示弱逻辑0;H表示弱逻辑表示弱逻辑1;-表示忽略。表示忽略。7ENTITY mux21a IS PORT(a,b:IN BIT;s:IN BIT;y:OUT BIT);END ENTITY mux21a;实体实体3)、)、2 2选选1 1多路选择器的多路选择器的VHDLVHDL描述描述(实体实体)82、结构体表达、结构体表达 结构体是描述设计实体的内部结构和外部设计实体端口间结构体是描述设计实体的内部结构和外部设计实体端口间的逻辑关系。结构体的一般结构为:的逻辑关系。结构体的一般结构为:ARCHITECTURE 结构体名结构体名 OF 实体名实体名 IS 说明语句说明语句;BEGIN 功能描述语句功能描述语句;END ARCHITECTURE 结构体名结构体名;u 说明语句:包括对数据对象、数据类型、常数、信号、子程序和元件等元素说明语句:包括对数据对象、数据类型、常数、信号、子程序和元件等元素的说明部分,的说明部分,可省略可省略。u 功能描述语句:描述实体逻辑行为,可以是并行、顺序语句或两者的混合,功能描述语句:描述实体逻辑行为,可以是并行、顺序语句或两者的混合,必须给出必须给出。u 一个实体可以有多个结构体,每个结构体对应着实体不同的结构和算法实现一个实体可以有多个结构体,每个结构体对应着实体不同的结构和算法实现方案,各个结构体的地位是同等的。方案,各个结构体的地位是同等的。9ARCHITECTURE one OF mux21a IS BEGIN y=(a AND(NOT s)OR(b AND s);END ARCHITECTURE one;结构体结构体【例【例3-2】2 2选选1 1多路选择器的多路选择器的VHDLVHDL描述(结构体)描述(结构体)103、完整的、完整的2选选1多路选择器的多路选择器的VHDL描述描述LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;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 AND(NOT s)OR(b AND s);END ARCHITECTURE one;11【例【例3-3】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;BEGIN d=a AND(NOT S);e=b AND s;y=d OR e;END ARCHITECTURE one;并行语句并行语句4、不同方式、不同方式2选选1多路选择器的多路选择器的VHDL描述描述1)、使用并行语句描述、使用并行语句描述12【例【例3-4】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 ARCHITECTURE one;顺序语句2)、使用进程和顺序语句描述、使用进程和顺序语句描述13【例【例3-5】ENTITY mux21a ISPORT(a,b:IN BIT;s:IN BIT;y:OUT BIT);END ENTITY mux21a;ARCHITECTURE one OF mux21a ISBEGIN y=a WHEN s=0 ELSE b;END ARCHITECTURE one;是顺序语句还是并行语句?14二、信号传输二、信号传输(赋值赋值)符号和数据比较符号符号和数据比较符号 1、信号传输信号传输(赋值赋值)符号符号:“=”例:例:y=a 表示信号表示信号a向信号向信号y赋值,要求两边的信号数据类型赋值,要求两边的信号数据类型必须一致。必须一致。赋值操作要经历一个模拟器的最小分辨时间赋值操作要经历一个模拟器的最小分辨时间后才完成,后才完成,可看可看成实际电路存在的固有延时量。成实际电路存在的固有延时量。2、数据比较符号、数据比较符号:“=”例:例:s=0 输出为布尔型,可能取值为输出为布尔型,可能取值为1、0,分别,分别表示表示true和和false。布尔型数据只能用于逻辑操作和条件判断。布尔型数据只能用于逻辑操作和条件判断。用于条件语句的判断表达式可以是一个值,也可以是复杂的逻用于条件语句的判断表达式可以是一个值,也可以是复杂的逻辑或运算表达式。辑或运算表达式。IF(s1=0)AND(S2=1)OR(cb+1)THEN154 4、逻辑操作符逻辑操作符运算符运算符功能功能AND与与OR或或NAND与非与非NOR或非或非XOR异或异或XNOR异或非异或非NOT非非运算符运算符功能功能=等于等于/=不等于不等于大于大于=大于等于大于等于3、关系运算符、关系运算符三、三、关系运算符、逻辑操作符关系运算符、逻辑操作符161 1、IF_THENIF_THEN条件语句条件语句2 2、WHEN_ELSEWHEN_ELSE条件信号赋值语句条件信号赋值语句赋值目标赋值目标=表达式表达式 WHEN 赋值条件赋值条件 ELSE 表达式表达式 WHEN 赋值条件赋值条件 ELSE .表达式;表达式;IF s=0 THEN y=a;ELSE y=b;END IF;z=a WHEN p1=1 ELSE b WHEN p2=1 ELSE c;四、四、条件语句、条件信号赋值语句条件语句、条件信号赋值语句A、格式:、格式:17l 并行信号赋值语句,赋值目标必须是信号赋值目标必须是信号,与其他并行语句一样,在结构体内的执行是同时发生的。l 根据指定条件对信号赋值,条件可以为任意表达式;l 根据赋值条件出现的先后次序隐含优先权,赋值条件测试具有顺序性;l 最后一个ELSEELSE子句隐含了所有未列出的条件;l 每一子句的结尾没有标点,只有最后一句有分号;B、几点说明、几点说明18x=a when(s=“00”)else b when(s=“01”)else c when(s=“10”)else d;隐含了所有未隐含了所有未列出的条件列出的条件隐含了优先权隐含了优先权C、实例、实例119 j=w when(a=1)else x when(b=1)else y when(c=1)elsez when(d=1)else0;允许有多个控制信号允许有多个控制信号 实例实例220五、五、PROCESSPROCESS进程语句和顺序语句进程语句和顺序语句1 1、基本格式:、基本格式:进程标号:进程标号:PROCESS(信号敏感表)(信号敏感表)IS(P1:)说明区;说明区;BEGIN 顺序语句;顺序语句;END PROCESS 进程标号;进程标号;进程标号:进程标号:PROCESS(信号敏感表)(信号敏感表)IS (Pn:)说明区;说明区;BEGIN 顺序语句;顺序语句;END PROCESS 进程标号;进程标号;21PROCESS1PROCESSnsignalsignal2、进程语句的特点:、进程语句的特点:一个构造体可以有多一个构造体可以有多个进程语句个进程语句进程和进程之间是并进程和进程之间是并行的行的进程和进程之间的数进程和进程之间的数据交换通过信号完成据交换通过信号完成进程内部是顺序语进程内部是顺序语句句ARCHITECTURE223、信号敏感表、信号敏感表 PROCESS(a,b,s)p敏感表中列出的任何信号的改变,都将启动进程,执行进程内相应顺序语句;p执行完顺序语句后,进程进入等待状态,直到下一次敏感表中某一信号发生改变;p一些VHDL综合器,综合后,对应进程的硬件系统对进程中的所有输入的信号都是敏感的,不论在源程序的进程中是否把所有的信号都列人敏感表中;p为了使软件仿真与综合后的硬件仿真对应起来,应当将进程中的所有输人信号都列入敏感表中。23entity terminal_count is port(clock,reset,enable:in bit;data:in std_logic_vector(7 downto 0);equals,term_cnt:inout std_logic_vector(7 downto 0);end terminal_count;architecture bhe of terminal_count is signal count:std_logic_vector(7 downto 0);begin P1:process(data)begin if data=count then equals=“11111111”;end if;end process P1;P2:process(clock)begin if reset=1 then count=11111111;elsif clockevent and clock=1 then count=count+1;end if;end process P2;term_cnt=count when enable=1 else ZZZZZZZZ“;end bhe;【例【例3-6】244、顺序语句、顺序语句u每一条顺序语句的执行顺序是与它们的书写顺序基本一致的;u顺序语句只能出现在进程(ProcessProcess)、函数(FuncationFuncation)和过程(ProcedureProcedure)中;u顺序语句包括:赋值语句、流程控制语句、等待语句、子程序调用语句、返回语句、空操作语句25六六 1位二进制全加器的位二进制全加器的VHDL设计设计半加器h_adder电路图1、半加器描述和、半加器描述和CASE语句语句【例【例1】-半加器描述半加器描述(1)LIBRARY IEEE;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 26【例【例2】-半加器描述半加器描述(2)LIBRARY IEEE;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=0;co so=1;co so=1;co so=0;co NULL;END CASE;END PROCESS;END ARCHITECTURE fh1;CASE语句语句并置操并置操作符作符&27(1 1)CASECASE语句语句 CASE CASE语句属于顺序语句,必须放在进程语句中,语句属于顺序语句,必须放在进程语句中,CASECASE语语句的一般表达式是:句的一般表达式是:CASE ISWHEN =;.;;WHEN =;.;;.WHEN OTHERS=;END CASE;p 选择值或标识符选择值或标识符的值必须在的值必须在表达式表达式的取值范围内。的取值范围内。p OTHERSOTHERS作为最后一种条件取值,只能出现一次,以涵盖表作为最后一种条件取值,只能出现一次,以涵盖表达式未列出的值。达式未列出的值。p 关键词关键词NULLNULL表示不做任何操作。表示不做任何操作。p 相同的选择值只能出现一次,相同的选择值只能出现一次,CASECASE语句执行时,只能选中语句执行时,只能选中所列条件语句中的一条。所列条件语句中的一条。28【例【例3】-半加器描述半加器描述(3)SIGNAL abc,cso:STD_LOGIC_VECTOR(1 DOWNTO 0);BEGIN abc=a&b;so=cso(1);co cso cso cso cso=“01”;END CASE;END PROCESS;END ARCHITECTURE fh1;信号合并信号合并并置操并置操作符作符&29(2 2)标准逻辑矢量数据类型)标准逻辑矢量数据类型STD_LOGIC_VECTORSTD_LOGIC_VECTOR 定义在定义在STD_LOGIC_1164程序包中,可以表示多通道端口程序包中,可以表示多通道端口、节点、总线。、节点、总线。STD_LOGIC_VECTOR被定义为标准的一维数组,数组中每被定义为标准的一维数组,数组中每一个元素都是一个元素都是STD_LOGIC数据类型。数据类型。使用使用STD_LOGIC_VECTOR中,必须注明其数组宽度,即位中,必须注明其数组宽度,即位宽,如宽,如B:OUT STD_LOGIC_VECTOR(7 DOWNTO 0);或或 SIGNAL A:STD_LOGIC_VECTOR(1 TO 4)BIT_VECTOR为位矢量数据类型,其每一个元素都是为位矢量数据类型,其每一个元素都是BIT数数据类型。据类型。30(3 3)并置操作符)并置操作符 SIGNAL a:STD_LOGIC_VECTOR(3 DOWNTO 0);SIGNAL d:STD_LOGIC_VECTOR(1 DOWNTO 0);.a =1 0 d(1)1 ;-元素与元素并置,并置后的数组长度为元素与元素并置,并置后的数组长度为4.IF a d=101011 THEN.-在在IF条件句中可以使用并置符条件句中可以使用并置符 312 2 全加器描述和例化语句全加器描述和例化语句全加器全加器f_adder电路图电路图【例【例4】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 连接端口名连接端口名,);33u1: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);全加器全加器f_adder电路图电路图34 (2)全加器描述全加器描述 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 PORT(a,b:IN STD_LOGIC;c:OUT STD_LOGIC);END COMPONENT;SIGNAL d,e,f :STD_LOGIC;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;35LIBRARY 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)BEGIN IF CLKEVENT AND CLK=1 THEN Q1=D;END IF;Q=Q1;-将内部的暂存数据向端口输出将内部的暂存数据向端口输出 END PROCESS;END bhv;3.2 3.2 基本时序电路的基本时序电路的VHDLVHDL描术描术一、一、D D触发器的触发器的VHDLVHDL描述描述D触发器361 1、SIGNALSIGNAL信号定义和数据对象信号定义和数据对象VHDL语言的数据对象有三类:语言的数据对象有三类:信号(信号(SIGNAL)、)、变量(变量(VARIABLE)、常量()、常量(CONSTANT)含义:含义:n 是电子电路内部硬件实体相互连接的抽象表示;是电子电路内部硬件实体相互连接的抽象表示;n 可代表连线、内连元件、或端口;可代表连线、内连元件、或端口;n 在结构体在结构体Architecture、包集合、包集合Package和实体和实体Entity说明中说明中使用;使用;一般格式:一般格式:SIGNAL 信号名:数据类型、约束条件:表达式;信号名:数据类型、约束条件:表达式;信号使用规则:信号使用规则:“=”表示赋值,是信号值的传递,允许产生延迟。表示赋值,是信号值的传递,允许产生延迟。如如:T1=T2 AFTER 20ns;37SIGNAL temp:Std_Logic_Vector(7 downto 0);temp=“10101010”;temp(7)=1;temp(7 downto 4)=“1010”;多位赋值用双引号多位赋值用双引号逐位赋值用单引号逐位赋值用单引号信号使用信号使用实例实例1:38ENTITY reg1 IS PORT(d:in BIT;clk:in BIT;q:out BIT);END reg1;ARCHITECTURE reg1 OF reg1 IS SIGNAL a,b:BIT;BEGIN PROCESS(clk)BEGIN IF clk=1 AND clkEVENT THEN a=d;b=a;q=b;END IF;END PROCESS;END reg1;程序如下:程序如下:39LIBRARY ieee;USE ieee.std_logic_1164.all;ENTITY simp ISPORT(a,b,c,d:IN Std_Logic;g:OUT Std_Logic);END simp;ARCHITECTURE logic OF simp ISSIGNAL e,f:Std_Logic;BEGIN e=a or b;f=not(c or d);g=e and f;END logic;信号使用信号使用实例实例2:402 2、上升沿检测表式和信号属性函数、上升沿检测表式和信号属性函数EVENTEVENT 关键词关键词EVENT是信号属性,是信号属性,VHDL通过以下表达式来测定通过以下表达式来测定某信号的跳变边沿:某信号的跳变边沿:信号名信号名EVENTp 对信号在当前对信号在当前时间段时间段内发生事件检测;内发生事件检测;p 发生事件是指信号的电平发生变化。发生事件是指信号的电平发生变化。clk:in Std_LogicIF CLKEVENT AND CLK=1CLK上升上升沿检测沿检测41【例【例】PROCESS(CLK)BEGIN IF CLKEVENT AND CLK=1 THEN Q1=D;END IF;Q b1 THEN q1=1;ELSIF a1 b1 THEN q1 b1 THEN q1=1;ELSE q1=0;END IF;END PROCESS;END;例例2的电路图的电路图45三、实现时序电路的三、实现时序电路的VHDL不同表达方式不同表达方式【例【例1】.PROCESS(CLK)BEGINIF CLKEVENT AND(CLK=1)AND(CLKLAST_VALUE=0)THEN Q=D;-确保确保CLK的变化是一次上升沿的跳变的变化是一次上升沿的跳变 END IF;END PROCESS;【例【例2】.PROCESS(CLK)BEGINIF CLK=1 AND CLKLAST_VALUE=0 -同例同例4-11 THEN Q=D;END IF;END PROCESS;46【例【例3】LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY DFF3 IS PORT(CLK:IN STD_LOGIC;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)THEN Q1=D;END IF;Q=Q1;END PROCESS;END;rising_edge为为STD_LOGIC_1164程序包中程序包中预定义函数。预定义函数。47【例【例4】.PROCESS BEGIN wait until CLK=1 ;-利用利用wait语句语句 Q=D;END PROCESS;【例【例5】.PROCESS(CLK)BEGIN IF CLK=1 THEN Q=D;-利用进程的启动特性产生对利用进程的启动特性产生对CLK的边沿检测的边沿检测 END IF;END PROCESS;【例【例6】.PROCESS(CLK,D)BEGIN IF CLK=1 -电平触发型寄存器电平触发型寄存器 THEN Q=D;END IF;END PROCESS;三、实现时序电路的三、实现时序电路的VHDL不同表达方式不同表达方式48三、实现时序电路的三、实现时序电路的VHDL不同表达方式不同表达方式边沿型触发器时序波形边沿型触发器时序波形电平触发型寄存器的时序波形电平触发型寄存器的时序波形49四、异步时序电路设计四、异步时序电路设计ARCHITECTURE bhv OF MULTI_DFF IS SIGNAL Q1,Q2:STD_LOGIC;BEGIN PRO1: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 PEOCESS;END异步逻辑用多异步逻辑用多个时钟进程语个时钟进程语句来构成。句来构成。50【例【例】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设计设计一 4位二进制加法计数器的设计取整数数据类型,为什么?端口信号模式取BUFFER,为什么?当前周期注意整数和位的不同表达方式!下一周期整数范围51二 整数、自然数和正整数数据类型l整数类型INTEGER包含的元素包含正整数、负整数和零。l通常VHDL仿真器将INTEGER类型作为有符号数,VHDL综合器将INTEGER类型作为无符号数。lVHDL综合器要求必须使用RANGERANGE子句为所定义的数限定范围,然后据此决定表示此信号或变量的二进制位数。l整数常量的书写方式示例如下:1 十进制整数0 十进制整数35 十进制整数10E3 十进制整数16#D9#十六进制整数8#720#八进制整数 2#11010010#二进制整数NATURAL:自然数类型POSITIVE:整数类型定义于标准程序包STANDARD52【例【例】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 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;QX)为了简化表达才使用短语为了简化表达才使用短语“(OTHERS=X)”,这是一个省,这是一个省略赋值操作符,它可以在较多位的位矢量赋值中作省略化的赋略赋值操作符,它可以在较多位的位矢量赋值中作省略化的赋值,如以下语句:值,如以下语句:SIGNAL d1,d2 :STD_LOGIC_VECTOR(4 DOWNTO 0);VARIABLE a1:STD_LOGIC_VECTOR(15 DOWNTO 0);.d1 0);a1:=(OTHERS=0);d21,4=1,others=0);则则d1为为00000,a1为为0000000000000000,d2为为 1001056BEGIN 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 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=CQI;-将计数值向端口输出将计数值向端口输出 END PROCESS;END behav;图图 RTL电路电路58图图3 例一的例一的RTL电路电路图图4 例一的工作时序例一的工作时序
展开阅读全文