VHDL描述风格.ppt_第1页
VHDL描述风格.ppt_第2页
VHDL描述风格.ppt_第3页
VHDL描述风格.ppt_第4页
VHDL描述风格.ppt_第5页
已阅读5页,还剩74页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、VHDL的描述方式,掌握结构体三种不同的描述风格: 结构体对基本设计单元的输入输出关系可以有三种描述方式: 三种不同的描述风格: 行为描述、数据流描述、结构描述 三种描述风格三从不同角度对硬件系统进行描述,各自具有什么特点。,* 行为级描述,也称为算法级描述,它不是对某一个器件的描述,而是对整个设计单元的数学模型描述,所以属于一种高层次描述方式。,看个例题吧!,例:如图所示的全加器,其功 能真值表已经给出,写出它的 行为描述。,全加器,x,y,C_out,sum,C_in,例:基于全加器真值表采用行为描述方式设计的全加器(1位二进制数全加) LIBRARY IEEE; USE IEEE.STD

2、_LOGIC_1164.ALL; ENTITY full_adder IS GENERIC(tpd : TIME := 10 ns); PORT(x,y,c_in : IN STD_LOGIC; Sum, c_out : OUT STD_LOGIC); END full_adder; ARCHITECTURE behav OF full_adder IS BEGIN PROCESS (x, y, c_in) VARIABLE n: INTEGER; CONSTANT sum_vector: STD_LOGIC_VECTOR (0 TO 3) := “0101”; CONSTANT carry_

3、vector: STD_LOGIC_VECTOR (0 TO 3) := “0011”;,输入 输出 c_in x y c_out sum 0 0 0 0 0 0 0 1 0 1 0 1 0 0 1 0 1 1 1 0 1 0 0 0 1 1 0 1 1 0 1 1 0 1 0 1 1 1 1 1,BEGIN n := 0; IF x = 1 THEN n := n+1; END IF; IF y = 1 THEN n:=n+1; END IF; IF c_in = 1 THEN n:=n+1; END IF; - (0 TO 3) sum = sum_vector (n); - - sum_

4、vector初值为“0101” c_out = carry_vector (n); - - carry_vector初值为“0011” END PROCESS; - (0 TO 3) END behav;,输入 输出 c_in x y c_out sum 0 0 0 0 0 0 0 1 0 1 0 1 0 0 1 0 1 1 1 0 1 0 0 0 1 1 0 1 1 0 1 1 0 1 0 1 1 1 1 1,对照真值表解释程序,行为级描述只描述设计电路的功能或电路的行为,而没有指明或实现这些行为的硬件结构;或者说行为级描述只表示输入输出之间的转换行为,它不包含任何结构信息。 行为级描述通常

5、指顺序语句描述,即含有进程的非结构化的逻辑描述。 行为级描述的设计模型定义了系统的行为,通常由一个或多个进程构成,每一个进程又包含了一系列的顺序语句。,由例可以看到,采用行为级描述方式的程序不是从设计实体的电路组织和门级实现来完成设计,而是着重设计正确的实体行为、准确的函数模型和精确的输出结果。采用行为级描述方式的VHDL语言程序,在一般情况下只能用于行为层次的仿真,而不能进行逻辑综合。只有将行为级描述方式改写为数据流级描述方式,才能进行逻辑综合。随着设计技术的发展,一些EDA软件能够自动完成行为综合,如Synopsys的Behavioral Complier,从而可以把行为级描述转换为数据流

6、级描述方式。,数据流描述,数据流描述也叫RTL的描述方式,采用寄存器硬件一一对应的直接描述,或者采用寄存器之间的功能描述。 RTL描述方式建立在并行信号赋值语句描述的基础上,描述数据流的运动路径、运动方向和运动结果。 RTL描述方式是真正可以进行逻辑综合的描述方式。 RTL描述方式既可描述时序电路,又可描述组合电路。,* 数据流描述方式,对于全加器,用布尔方程描述其逻辑功能如下: s = x XOR y sum = s XOR c_in c_out = (x AND y) OR( s AND c_in) 下面是基于上述布尔方程的数据流风格的描述:,数据流描述方式能比较直观地表述底层逻辑行为。,

7、输入 输出 c_in x y c_out sum 0 0 0 0 0 0 0 1 0 1 0 1 0 0 1 0 1 1 1 0 1 0 0 0 1 1 0 1 1 0 1 1 0 1 0 1 1 1 1 1,一位全加器的数据流描述。 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY ADDER1B IS PORT(A,B,C_IN:IN BIT; SUM,C_OUT:OUT BIT); END ADDER1B ; ARCHITECTURE ART OF ADDER1B IS SUM= A XOR B XOR C_IN; C_OUT=(A AN

8、D B)OR (A AND C_IN) OR (B AND C_IN); END ART;,底层逻辑行为,结构级描述方式,结构描述方式是描述该设计单元的硬件结构,即该硬件是如何构成的。 在多层次的设计中,常采用结构描述方式在高层次的设计模块中调用低层次的设计模块,或者直接用门电路设计单元构造一个复杂的逻辑电路。 编写结构描述程序可模仿逻辑图的绘制方法。 结构描述方式通常采用元件例化语句和生成语句编写程序。,编写结构描述程序的主要步骤: 1) 绘制框图。先确定当前设计单元中需要用到的子模块的种类和个数。对每个子模块用一个图符(称为实例元件)来代表,只标出其编号、功能和接口特征(端口及信号流向),

9、而不关心其内部细节。 2) 元件说明。每种子模块分别用一个元件声明语句来说明。 3)信号说明。为各实例元件之间的每条连接线都起一个单独的名字,称为信号名。利用SIGNAL语句对这些信号分别予以说明。 4) 元件例化。根据实例元件的端口与模板元件的端口之间的映射原理,对每个实例元件均可写出一个元件例化语句。 5) 添加必要的框架,完成整个设计文件。,对于上图给出的全加器端口结构,可以认为它是由两个半加器和一个或门组成的 。,一位全加器的数据流描述。,例:全加器的结构化描述 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY half_adder I

10、S GENERIC(tpd:TIME:=10 ns); PORT(in1, in2: IN STD_LOGIC; sum, carry: OUT STD_LOGIC); END half_adder; ARCHITECTURE behavioral OF half_adder IS BEGIN PROSESS (in1, in2) BEGIN sum = in1 XOR in2; carry = in1 AND in2; END PROCESS; END behavioral; - -半加器设计完毕,半加器设计,LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL

11、; ENTITY or_gate IS GENERIC(tpd:TIME:=10 ns); PORT(in1, in2: IN STD_LOGIC; out1: OUT STD_LOGIC); END or_gate; ARCHITECTURE structural OF or_gate IS BEGIN out1 = in1 OR in2 AFTER tpd; END structural; - - 或门设计完毕,或门设计,LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY full_adder IS GENERIC(tpd:TIME:=10

12、ns); PORT(x,y,c_in: IN STD_LOGIC; Sum, c_out: OUT STD_LOGIC); END full_adder; ARCHITECTURE structural OF full_adder IS COMPONENT half_adder PORT(in1, in2: IN STD_LOGIC; sum, carry: OUT STD_LOGIC); END COMPONENT; COMPONENT or_gate PORT(in1, in2: IN STD_LOGIC; out1: OUT STD_LOGIC); END COMPONENT;,或门声明

13、,半加器声明,SIGNAL a, b, c:STD_LOGIC; BEGIN u1: half_adder PORT MAP (x, y, b, a); u2: half_adder PORT MAP (c_in, b, sum, c); u3: or_gate PORT MAP (c, a, c_out); END structural;,COMPONENT half_adder PORT(in1, in2: IN STD_LOGIC; sum, carry: OUT STD_LOGIC); END COMPONENT;,COMPONENT or_gate PORT(in1, in2: IN

14、 STD_LOGIC; out1: OUT STD_LOGIC); END COMPONENT;,由上例可见,对于一个复杂的电子系统,可以将其分解为若干个子系统,每个子系统再分解成模块,形成多层次设计。这样,可以使更多的设计者同时进行合作。在多层次设计中,每个层次都可以作为一个元件,再构成一个模块或系统,可以先分别仿真每个元件,然后再整体调试。所以说结构化描述不仅是一种设计方法,而且是一种设计思想,是大型电子系统高层次设计的重要手段。,* 结构级描述,也称为逻辑元器件连接描述或门级描述,即采用并行处理语句,使用最基本的逻辑门单元来描述设计实体内部的结构组织和元器件的连接关系。 这三种描述方式的

15、划分是根据寄存器和组合逻辑的确定性而言的: * 行为级描述,寄存器和组合逻辑都不明确; * 数据流级描述,寄存器明确,组合逻辑不明确; * 结构级描述,寄存器和组合逻辑都明确。,用三种方法描述4选1数据选择器,4选1数据选择器真值表,一个4选1数据选择器应具备的脚位: 地址输入端:S0、S1; 数据输入端:D、C、B、A; 输出端:Y。,例: 4选1数据选择器的行为级描述描述。,LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY multi_4v IS PORT(S : IN STD_LOGIC_VECTOR (1 DOWNTO 0); A,B,

16、C,D : IN STD_LOGIC; Y : OUT STD_LOGIC); END multi_4v; ARCHITECTURE a OF multi_4v IS BEGIN,PROCESS BEGIN IF (S=00) THEN Y = A; ELSIF (S=01) THEN Y = B; ELSIF (S=10) THEN Y = C; ELSIF (S=11) THEN Y = D; END IF; END PROCESS; END a;,【例】 4选1数据选择器的数据流描述。,LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY m

17、ulti_4v IS PORT(S : IN STD_LOGIC_VECTOR (1 DOWNTO 0); A,B,C,D : IN STD_LOGIC; Y : OUT STD_LOGIC); END multi_4v; ARCHITECTURE a OF multi_4v IS BEGIN,y = (NOT S(0) AND NOTS(1) AND A) OR (S(0) AND NOTS(1) AND B) OR (NOTS(0) AND S(1) AND C) OR (S(0) AND S(1) AND D ) ; END a;,【例】 4选1数据选择器的数据流描述。,LIBRARY

18、IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY multi_4v IS PORT(S : IN STD_LOGIC_VECTOR (1 DOWNTO 0); A,B,C,D : IN STD_LOGIC; Y : OUT STD_LOGIC); END multi_4v; ARCHITECTURE a OF multi_4v IS BEGIN,y = A WHEN S=“00” ELSE B WHEN S=“01“ ELSE C WHEN S=“10” ELSE D ; END PROCESS; END a;,4选1多路选择器(RTL描述) LIBRARY

19、ieee; USE ieee.std_logic_1164.ALL; ENTITY mux4_1 IS PORT(d: INSTD_LOGIC_VECTOR(3 DOWNTO 0); sel: INSTD_LOGIC_VECTOR(1 DOWNTO 0); y: OUTSTD_LOGIC); END mux4_1; ARCHITECTURE rtl OF mux4_1 IS BEGIN y=d(0) WHEN sel=00 ELSE d(1) WHEN sel=01 ELSE d(2) WHEN sel=10 ELSE d(3) ; END rtl;,【例】 四选一复用器的结构级描述。 LIB

20、RARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY multi_4v IS PORT (a, b,c,d : IN STD_LOGIC; s : IN STD_LOGIC_VECTOR(1 DOWNTO 0); q : OUT STD_LOGIC); END multi_4v; ARCHITECTURE structural OF multi_4v IS COMPONENT and_3 PORT (in1,in2,in3 : IN STD_LOGIC; out1 : OUT STD_LOGIC); END COMPONENT;,【例】 四选一复用器的结

21、构级描述。 ARCHITECTURE structural OF multi_4v IS COMPONENT and_3 PORT (in1,in2,in3 : IN STD_LOGIC; out1 : OUT STD_LOGIC); END COMPONENT; COMPONENT or_4 PORT (in1,in2,in3 ,in4: IN STD_LOGIC; out1: OUT STD_LOGIC); END COMPONENT; COMPONENT INV PORT (in1:IN STD_LOGIC; out1 :OUT STD_LOGIC); END COMPONENT;,【例

22、】 四选一复用器的结构级描述。 SIGNAL ns0, ns1,a1,b1,c1,d1 : STD_LOGIC; BEGIN g1:INV PORT MAP (s(0),ns0); g2 : INV PORT MAP (s(1), ns1); g3 : and_3 PORT MAP (ns0, ns1, A,A1); g4 : and_3 PORT MAP (s(0), ns1, B,B1); g5 : and_3 PORT MAP (ns0, s(1), C,C1); g6 : and_3 PORT MAP (s(0), s(1), D,D1); g7 : or_4 PORT MAP (A1

23、,B1,C1,D1,q); END structural;,在应用VHDL进行程序设计时,行为描述方式是最重要 的描述方式,它是VHDL编程的核心,可以说,没有行为描述就没有VHDL。,使用RTL描述方式应注意问题,PROCESS(sel) BEGIN IF(sel=1)THEN y=0; ELSE y=1; END IF; END PROCESS;,PROCESS(sel) BEGIN IF(sel=0)THEN y=1; ELSE y=0; END IF; END PROCESS;,当sel=X时,前一个输出的y值为1,后一个却变成了0。,(一) “X”状态的传递: 所谓“X”状态的传递,

24、不确定信号的传递,它将使逻辑电路产生不确定的结果。“不确定状态”在RTL仿真时是允许出现的,但在逻辑综合后的门级电路仿真中是不允许出现的。,PROCESS(sel) BEGIN IF(sel=1)THEN y=0; ELSIF (sel=0)THEN y=1; ELSE y=X; END IF; END PROCESS;,在使用双向数据总线时,其信号取值总会出现高阻状态“Z”。当双向总线的信号去驱动逻辑电路时,就有可能出现“X”状态的传递。为了保证逻辑电路的正常工作,高阻状态“Z”应该禁止。如右图中的en信号。,(二)寄存器RTL描述的限制: 禁止在一个进程中存在两个边沿检测 的寄存器描述;

25、禁止使用IF语句中的 ELSE 项; 寄存器描述中必须代入信号值。,PROCESS(clk1,clk2) BEGIN IF (clk1 EVENT AND clk1=1) THEN y=a; END IF; IF (clk2 EVENT AND clk2=1) THEN z=b; END IF; END PROCESS;,在一个进程中不允许引入两个边沿检测的寄存器进行描述!,PROCESS(clk) BEGIN IF (clkEVENT AND clk=1) THEN y=a; ELSE - 禁止使用 y=b; END IF; END PROCESS;,PROCESS(clk) VARIABL

26、E tmp: STD_LOGIC; BEGIN IF (clkEVENT AND clk= 1) THEN tmp:=a; END IF; y=tmp; END PROCESS;,禁止使用ELSE!,必须代入信号值!,不可能有这样的硬件电路与之对应!,计数器设计,计数器,计数器是数字电路和计算机中广泛应用的一种逻辑部件,可累计输入脉冲的个数,可用于定时、分频、时序控制等。,计数器设计时注意事项,边沿(上升沿还是下降沿) 复位方式(同步复位与异步复位) 有无置数功能 计数制(对二进制计数还是十进制计数器) 是否可逆,PROCESS (clock_signal) BEGIN IF(clock_ed

27、ge_condition)THEN Signal_out = signal_in; 其他时序语句 END IF; END PROCESS;,边沿(上升沿还是下降沿),复位:设定初始状态,时序电路的初始状态应由复位信号来设置。根据复位信号对时序电路复位的操作不同,使其可以分为同步复位和异步复位。 所谓异步复位,就是当复位信号有效时,时序电路立即复位,与时钟信号无关。,同步复位,PROCESS (clock) BEGIN if clock =1 and clockEVENT then if reset = 1 then sout = 0; tmp = 0; else sout = sin; tmp

28、 = not tmp; end if; END IF; END PROCESS;,sin,clock,reset,sout,tmp,异步复位,PROCESS (clock, reset) BEGIN if reset = 1 then sout = 0; tmp = 0; elsif clock =1 AND clockEVENT then sout = sin; tmp = not tmp; end if; END PROCESS;,sin,clock,reset,sout,tmp,可逆计数器,可逆计数器根据计数脉冲的不同,控制计数器在同步信号脉冲的作用,进行加1操作,或者减1操作。 可逆计

29、数器的计数方向,由特殊的控制端updn控制。 当updn = 1时,计数器加1操作; 当updn = 0时,计数器减1操作;,LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY count IS PORT (clk,clr,updn: IN STD_LOGIC; Q: OUT STD_LOGIC_VECTOR(7 downto 0); END count; ARCHITECTURE example OF count IS SIGNAL count_B:STD_LOGIC_VECTO

30、R (7 DOWNTO 0);,BEGIN Q = count_B; PROCESS (clr,clk) BEGIN IF(clr=1) THEN Count_B=“00000000”; ELSIF (clkEVENT AND clk= 1 ) THEN IF (updn=1) THEN Count_B=count_B + 1; ELSE Count_B=count_B 1; END IF; END IF; END PROCESS; END example;,PROCESS (clr,clk) BEGIN IF(clr=1) THEN Count_B=“00000000”; q = 0; EL

31、SIF (clkEVENT AND clk= 1 ) THEN IF (Count_B = “00001111”) THEN Count_B=“00000000”; else Count_B=count_B + 1; END IF; END IF; END PROCESS;,调整进制,6.4 基本计数器的设计,计数器是数字系统的一种基本部件,是典型的时序电路。计数器的应用十分广泛,常用于数/模转换、 计时、频率测量等。,(5) 输入VHDL源程序: USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY coun

32、tbasic IS PORT(clk:IN STD_LOGIC; q:BUFFER STD_LOGIC_VECTOR(7 DOWNTO 0); END countbasic; ARCHITECTURE a OF counbasict IS BEGIN,PROCESS(clk) VARIABLE qtmp:STD_LOGIC_VECTOR(7 DOWNTO 0); BEGIN IF clk event AND clk=1 THEN qtmp:=qtmp+1; END IF; q=qtmp; END PROCESS; END a;,6.5 同步清零的计数器,同步清零计数器只是在基本计数器的基础上增

33、加了一个同步清零控制端,本例设计一个同步清零的递增计数器,它只需以下基本引脚: 时钟输入端:clk; 计数输出端:Q; 同步清零端:clr。,(5) 输入VHDL源程序: LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY countclr IS PORT(clk :IN STD_LOGIC; clr :IN STD_LOGIC; q :BUFFER STD_LOGIC_VECTOR(7 DOWNTO 0); END countclr; ARCHITECTURE a OF coun

34、tclr IS,BEGIN PROCESS(clk) VARIABLE qtmp: STD_LOGIC_VECTOR(7 DOWNTO 0); BEGIN IF clkevent AND clk=1 THEN IF clr=0 THEN qtmp:=00000000; ELSE qtmp:=qtmp+1; END IF; END IF; q=qtmp; END PROCESS; END a ;,异步清零计数器的参考程序如下: LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY co

35、untyibu IS PORT(clk: IN STD_LOGIC; clr : IN STD_LOGIC; q : BUFFER STD_LOGIC_VECTOR(7 DOWNTO 0);,END countyibu; ARCHITECTURE a OF countyibu IS BEGIN PROCESS(clk,clr) BEGIN IF clr=0 THEN q=00000000; ELSIF clkevent AND clk=1 THEN q=q+1; END IF; END IF; END PROCESS; END a;,6.6 同步预置数的计数器,有时计数器不需要从0开始累计计数

36、,而希望从某个数开始往前或往后计数。这时就需要有控制信号能在计数开始时控制计数器从期望的初始值开始计数,这就是可预加载初始计数值的计数器。本例设计了一个对时钟同步的预加载(或称预置)计数器。,一个同步清零、使能、同步预置数的计数器应具备的脚位有: 时钟输入端:clk; 计数输出端:Q; 同步清零端:clr; 同步使能端:en; 加载控制端:load; 加载数据输入:din。,(5) 输入VHDL源程序: LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY countload IS

37、PORT(clk:IN STD_LOGIC; clr, en, load:IN STD_LOGIC; din:IN STD_LOGIC_VECTOR(7 DOWNTO 0); q:BUFFER STD_LOGIC_VECTOR(7 DOWNTO 0); END countload;,ARCHITECTURE a OF countload IS BEGIN PROCESS(clk) BEGIN IF clkevent AND clk=1 THEN IF clr=0 THEN q=00000000; ELSIF EN=1 THEN IF load=1 THEN q=din; ELSE q=q+1;

38、,END IF; END IF; END IF; END PROCESS; END a ;,6.6 同步清零的可逆计数器,前面所介绍的计数器其程序的计数趋势都是递增的,当然也可以通过将“Q=Q+1”改为“Q=Q-1”使其变为递减计数器。本例用VHDL设计了一个可逆计数器,可通过方向控制端控制计数器递增计数或递减计数。,一个同步清零可逆计数器至少应具备的脚位有: 时钟输入端:clk; 计数输出端:Q; 方向控制端:dire; 清零控制端:clr。,(5) 输入VHDL源程序: LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGI

39、C_UNSIGNED.ALL; ENTITY countud IS PORT(clk :IN STD_LOGIC; clr :IN STD_LOGIC; dire :IN STD_LOGIC; q :BUFFER STD_LOGIC_VECTOR(7 DOWNTO 0); END countud;,ARCHITECTURE a OF countud IS BEGIN PROCESS(clk) BEGIN IF clkevent AND clk=1 THEN IF clr=0 THEN q=00000000; ELSIF dire=1 THEN,q=q+1; ELSE q=q-1; END IF

40、; END IF; END PROCESS; END a;,6.8 带进制的计数器,前面几个实验中,计数最高值都受计数器输出位数的限制,当位数改变时,计数最高值也会发生改变。如对于8位计数器,其最高计数值为“11111111”,即每计255个脉冲后就回到“00000000”;而对于16位计数器,其最高计数值为“FFFFH”,每计65 535个时钟脉冲后就回到“0000H”。,时钟输入端:clk; 计数输出端:Q; 同步清零端:clr; 同步使能端:en; 加载控制端:load; 加载数据输入:din。,(5) 输入VHDL源程序: LIBRARY IEEE; USE IEEE.STD_LOGI

41、C_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY count128 IS PORT(clk : IN STD_LOGIC; clr, en, load: IN STD_LOGIC; din : IN STD_LOGIC_VECTOR(7 DOWNTO 0); q : BUFFER STD_LOGIC_VECTOR(7 DOWNTO 0); END count128;,ARCHITECTURE a OF count128 IS BEGIN PROCESS(clk) BEGIN IF clkevent AND clk=1 THEN IF clr

42、=0 THEN q=00000000; ELSIF q=01111111 THEN q=00000000; ELSIF en=1 THEN IF load=1 THEN q=din;,ELSE q=q+1; END IF; END IF; END IF; END PROCESS; END a;,LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY CNTM60 IS PORT(CI:IN STD_LOGIC; -计数控制 NRESET:IN STD_LOGIC; -异步复位控制 LO

43、AD:IN STD_LOGIC; -置数控制 D:IN STD_LOGIC_VECTOR(7 DOWNTO 0); CLK:IN STD_LOGIC; CO:OUT STD_LOGIC; -进位输出 QH:BUFFER STD_LOGIC_VECTOR(3 DOWNTO 0); -输出高4位 QL:BUFFER STD_LOGIC_VECTOR(3 DOWNTO 0); -输出低4位 END ENTITY CNTM60;,60进制计数器,ARCHITECTURE ART OF CNTM60 IS BEGIN CO=1WHEN(QH=“0101”AND QL=“1001”AND CI=1)ELS

44、E0; -进位输出的产生 PROCESS(CLK,NRESET) BEGIN IF(NRESET=0)THEN -异步复位 QH=0000; QL=0000; ELSIF(CLKEVENT AND CLK=1)THEN -同步置数 IF(LOAD=1)THEN QH=D(7 DOWNTO 4); Q L=D(3 DOWNTO 0); ELSIF(CI=1)THEN -模60的实现 IF(QL=9)THEN QL=0000;,60进制计数器,IF(QH=5)THEN QH=0000; ELSE -计数功能的实现 QH=QH+1; END IF; ELSE QL=QL+1; END IF; END

45、 IF; -END IF LOAD END IF; END PROCESS; END ARCHITECTURE ART;,60进制计数器,4 分频器设计,分频器就是根据输入时钟,采用计数器,计多次数输出一次。从而实现降频。,最简单的时钟输出,process ( fosc,rst) begin if rst = 1 then q = 0; else q = not q; end if; end process; 本例中,fosc两个沿都会触发进程,rst,fosc,q,q,q=0,q=1,分频器(2分频),signal count : std_logic_vector(7 DOWNTO 0); process ( fosc,rst) begin if rst = 1 then c

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论