第十三章-1--8位并行预置加法计数器设计-VHDL语言-教学-课件.ppt
-
资源ID:91517381
资源大小:1.92MB
全文页数:56页
- 资源格式: PPT
下载积分:12金币
快捷下载
会员登录下载
微信登录下载
三方登录下载:
微信扫一扫登录
友情提示
2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
|
第十三章-1--8位并行预置加法计数器设计-VHDL语言-教学-课件.ppt
131 8位并行预置加法计数器设计 例13-1描述的是一个含计数使能、异步复位和计数值并行预置功能的8位加法计数器。其中d(7 DOWNTO 0)为8位并行输入预置值;ld,ce,clk,rst分别为计数器的并行输入预置使能信号、计数时钟使能信号、计数时钟信号和复位信号 例13-1:文件名:countervhdLIBRARY IEEE;USE IEEESTD_LOGIC_1164ALL;USE IEEESTD_LOGIC_UNSIGNEDALL;ENTITY counter ISPORT(d:IN STD_LOGIC_VECTOR(7 DOWNTO 0);ld,ce,clk,rst:IN STD_LOGIC;q:OUT STD_LOGIC_VECTOR(7 DOWNTO 0);END counter;ARCHITECTURE behave OF counter IS SIGNAL count:STD_LOGIC_VECTOR(7 DOWNTO 0);BEGINPROCESS(clk,rst)BEGINIF rst=1 THEN count0);ELSIF RISING_EDGE(Clk)THEN IF ld=1 THEN count=d;ELSIF ce=1 THEN count=count+1;END IF;END IF;END PROCESS;q=count;END behave;132 位宽可预置中断处理器设计 中断处理器例13-2的设计利用了”IFTHENELSE语句结构,使得很容易地实现了nmi、float、int和peripheral 4个中断请求信号的能按优先顺序分别进行处理,程序中使用了类属语句,使此中断处理器可根据实际情况容易地改变地址位宽;程序中还使用了数据类型转换函数CONV_STD_LOGIC_VECTOR(X,Y)。ARCHITECTURE behave 0F interrupt工SCONSTANT nop:INTEGER:=0;设置地址nop=0CONSTANT nmi_addr:integer:=#6#C5AA#;设置中断服务程序地址CONSTANT float_addr:integer:=#16#CA522#;设置中断服务程序地址CONSTANT int_addr:integer:=#16#CB4A#;设置中断服务程序地址CONSTANT periph_addr:integer:=#16#CD2C#;设置中断服务程序地址BEGINPROCESS(nmi,float,int,peripheral)VARIABLE address:INTEGER;BEGIN Flush_cache=0;IF nmi=1 THEN address:=nmi_addr;最高优先级ELSIF float=1 THEN address:=float_addr;次高优先级Flush_cache=1;ELSIF int=1 THEN address:=int_addr;再次高优先级 Flush_cache=1;ELSIF periphera=1 THENaddress:=periph_addr;最低优先级ELSE address:=nop;地址置0END IF;调用类型转换函数将整数类型的地址值,将“address”转化成“msb+l”位标准矢量位值 Goto_addr=CONV_STD_LOGICVECTOR(address,msb+1);END PROCESS;END behave;例13-3描述的SRAM具有4位二进制地址线、8位二进制输入输出数据线,即存储空间为主16x8bit,它的地址线是将数据读入和数据输出端口分开的(许多SRAM的数据端口的读写功能是合二为一的,即为双向口)。程序中有两个进程,一个是数据写入进程WRITE,该进程设置条件为wr=0的IF_THEN不完整的条件语句,锁存器阵列,wr作为锁存控制信号,当wr=0时,在满足条件(cs=0 and rd=1)时将外部8位数据din锁进指定地址adr的RAM单元中;而当满足条件(rd=0 and cs=0 and wr=1)时,此SRAM将指定地址adr的RAM单元中的数据向dout端口输出,否则该端口呈高阻态。ARCHITECTURE behave OF sram isSUBTYPE word IS STD_LOGIC_VECTOR(K-1 DOWNTO 0);Max+PlusII不支持以下语句TYPE memory IS array(0 TO 2*w-1)OF word;SIGNAL sram:memory;SIGNAL adr_in:INTEGER;BEGIN adr_in=CONV_INTEGER(adr);READ:PROOCESS(rd,cs,adr_in,wr)数据读出进程 BEGIN IF cs=0 AND rd=0 AND wr=1 THEN dout=sram(adr_in);ELSE doutZ);END IF;END PROCESS;END behave;134 堆栈设计 在计算机组成电路中,或数字信号处理电路模块中堆栈存储器(后进先出存储器)具有重要的实用性。例13-4给出的是一数据位宽为8,深度为8的堆栈。此堆栈所有的操作运行均由时钟信号clk同步。push=1和pop=0时允许将8位数据din(7 downto 0)压人堆栈;而当push=0和pop=1时时允许将堆栈内部的数据按后进先出的方式弹出堆栈,从dout(7 downto 0)口输出;empty=1时,表示堆栈中已空;pushfull=1时,表示堆栈已满。信号c用于计算堆栈中已压人数据的个数。architecture alg of stack issignal num,c:integer range 0 to k-1;function to_bit(b:in boolean)return std_logic isbeginMAX+PLUSII不支持case或IF语句中含return的格式 case b is when true =return 1;when false =return 0;end case;end to_bit;begin empty=to_bit(c=0);fullpop=to_bit(c=k-1);process type type_stack is array(natural range k-1 downto 0)of std_logic_vector(n-1 downto 0);variable s:type_stack;begin wait until clkevent and clk=1;if rst=1 then c=0;elsif push=1 and pop=0 then s(k-1 downto 1):=s(k-2 downto 0);s(0)=din;c=c+1;elsif push=0 and pop=1 then s(k-2 downto 0):=s(k-1 downto 1);dout=s(0);c=c-1;end if;end process;end alg;135 8位硬件加法器设计 加法器是数字系统中的基本逻辑器件。例如,为了节省逻辑资源,减法器和硬件乘法器都可由加法器来构成。宽位加法器的设计是十分耗费硬件资源的,因此在实际的设计和相关系统的开发中需要注意资源的利用率和进位速度两方面的问题。对此,首先应选择较适合组合逻辑设计的器件作为最终的目标器件,如CPLD;其次在加法器的逻辑结构的设计上,在芯片资源的利用率和加法器的速度两方面权衡得失,探寻最佳选择,即选择最佳的并行进位最小加法单元的宽度。显然,这种选择与目标器件的时延特性有直接关系。以下是一个比较简单的设计示例。多位加法器的构成有两种方式:并行进位和串行进位方式。并行进位加法器设有并行进位产生逻辑,运算速度较快;串行进位方式是将全加器级联构成多位加法器。并行进位加法器通常比串行级联加法器占用更多的资源,随着位数的增加,相同位数的并行加法器与串行加法器的资源占用差距快速增大。一般,4位二进制并行加法器和串行级联加法器占用几乎相同的资源。这样,多位数加法器由4位二进制并行加法器级联构成是较好的折中选择。4位二进制加法器的VHDL逻辑描述如下:例13-5:文件名:ADDER4BvhdLIBRARY IEEE;USE IEEESTD_LOGIC_1164ALL;USE IEEESTD_LOGIC_UNSIGNEDALL;ENTITY ADDER4B IS PORT(CIN:IN STD_LOGIC;A:IN STD_LOGIC VECTOR(3 DOWNTO 0);B:IN STD LOGIC VECTOR(3 DOWNTO 0);S:OUT STD LOGIC VECTOR(3 DOWNTO 0);COUT:OUT STD LOGIC );END ADDER4B;ARCHITECTURE behav OF ADDER4B IS SIGNAL SINT:STD_LOGIC_VECTOR(4 DOWNTO 0);SIGNAL AA,BB:STD_LOGIC_VECTOR(4 DOWNTO 0);BEGIN AA=0&A;BB=0&B;SINT=AA+BB十CIN;S=SINT(3 DOWNTO 0)COUTCIN,A=A(3 DOWNTO 0),B=B(3 DOWNTO 0),S=S(3 DOWNTO 0),COUT=CARRY_OUT);U2:ADDER4BPORT MAP(CIN=CARRY_OUT,A=A(7 DOWNTO 4),B=B(7 DOWNTO 4),S=S(7 DOWNTO 4),COUT=COUT);END struc;例1321:文件名:CHKVHDLIBRARY IEEE;USE IEEESTD_LOGIC_1164ALL;ENTITY CHK ISPORT(DIN:IN STD_ LOGIC;CLK,CLR:IN STD LOGIC;D:IN STD_ LOGIC_ VECTOR(7 DOWNTO 0);AB:OUT STD_ LOGIC_VECTOR(3 DOWNTO 0);END CHK;ARCHITECTURE behav OF CHK ISSIGNAL Q:INTEGER RANGE 0 TO 8;BEGINPROCESS(CLK,CLR)BEGINIF CLR=1 THEN QT IF DIN=D(7)THEN Q=1;ELSE Q IF DIN=D(6)THEN Q=2;ELSE Q IF DIN=D(5)THEN Q=3;ELSE Q IF DIN=D(4)THEN Q=4;ELSE Q IF DIN=D(3)THEN Q=5;ELSE Q IF DIN=D(2)THEN Q=6;ELSE Q IF DIN=D(1)THEN Q=7;ELSE Q IF DIN=D(0)THEN Q=8;ELSE Q Q=0;END CASE;PROCESS(Q)检测结果判断输出BEGINIF Q=8 THEN AB=“1010”;检测序列正确,输出“A”ELSE AB=“1011”;检测序列错误,输出“B”END IF;END PROCESS;END behave;139 正负脉宽数控调制信号发生器设计正负脉宽数控调制信号发生器设计 1、正负脉宽数控调制信号发生器是由两个、正负脉宽数控调制信号发生器是由两个完全相同的可自加载加法计数器完全相同的可自加载加法计数器LCNT8组成的,组成的,它的输出信号的高低电平脉宽可分别由两组它的输出信号的高低电平脉宽可分别由两组8位位预置数进行控制。预置数进行控制。2、将计数初始值可预置的加法计数器的溢、将计数初始值可预置的加法计数器的溢出信号作为本计数器的初始预置值加载信号出信号作为本计数器的初始预置值加载信号LD,则可构成计数初始值自加载方式的加法计数,则可构成计数初始值自加载方式的加法计数器,从而构成数控分频器。器,从而构成数控分频器。3、D触发器的一个重要功能就是均匀输出触发器的一个重要功能就是均匀输出信号的占空比,提高驱动能力。信号的占空比,提高驱动能力。正负脉宽数控调制信号发生器原理图正负脉宽数控调制信号发生器原理图正负脉宽数控调制信号发生器原理图正负脉宽数控调制信号发生器原理图 1、T1不是从预置数开始计数产生的脉宽,不是从预置数开始计数产生的脉宽,而是从零开始计数的,为而是从零开始计数的,为CNT2从零计到从零计到255的时的时间间 2、产生的波形周期是、产生的波形周期是T2+T3 3、CNT1使使D触发器输出低电平,低电平时触发器输出低电平,低电平时间(即间(即T2)是由)是由CNT2的计数时间决定的的计数时间决定的 4、CNT2使使D触发器输出高电平,高电平时触发器输出高电平,高电平时间(即间(即T3)是由)是由CNT1的计数时间决定的的计数时间决定的正负脉宽数控调制信号发生器顶层文件连接图正负脉宽数控调制信号发生器顶层文件连接图正负脉宽数控调制信号发生器单元电路的正负脉宽数控调制信号发生器单元电路的VHDL语言描述语言描述 1、可自加载预置数的八位二进制加法计数器、可自加载预置数的八位二进制加法计数器LCNT8 LIBRARY IEEE;USE IEEESTD_LOGIC_1164ALL;ENTITY LCNT8 ISPORT(CLK,LD:IN STD_LOGIC;D:IN INTEGER RANGE 0 TO 255;CAO:OUT STD_LOGIC);END LCNT8;ARCHITECTURE behav OF LCNT8 ISSIGNAL COUNT :INTEGER RANGE 0 TO 255;BEGIN PROCESS(CLK)BEGIN IF CLKEVENT AND CLK=1 THEN IF LD=1 THEN COUNT=D;ELSE COUNT=COUNT+1;END IF;END IF;END PROCESS;PROCESS(COUNT)BEGIN IF COUNT=255 THEN CAO=1;ELSE CAOCLK,LD=LD1,D=A,CAO=CAO1););U2:LCNT8 PORT MAP(CLK=CLK,LD=LD2,D=B,CAO=CAO2););PROCESS(CAO1,CAO2)BEGIN IF CAO1=1 THEN PSINT=0;ELSIF CAO2EVENT AND CLK=1 THEN PSINT=1;END IF;END PROCESS;LD1=NOT PSINT;LD2=PSINT;PSOUT=PSINT;END mixed;13.12 数字频率计设计数字频率计设计139 DA接口电路与波形发生器设计接口电路与波形发生器设计LIBRARY IEEE;USE IEEESTD_LOGIC_1164ALL;ENTITY DAC IS PORT(CLK:IN STD_LOGIC;DA转换控转换控制时钟制时钟 DD:OUT INTEGER RANGE 255 DOWNTO 0;待转换数据待转换数据DISPDATA:OUT INTEGER RANGE 255 DOWNTO 0);待转换数据输待转换数据输出显示出显示END;ARCHITECTURE DACC OF DAC IS SIGNAL Q:INTEGER RANGE 63 DOWNTO 0;SIGNAL D:INTEGER RANGE 255 DOWNTO 0;BEGINPROCESS(CLK)BEGINIF(CLKEVENT AND CLK=1)THEN Q DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDNULLEND CASE;END PROCESS;DD=D;DA转换数据输出转换数据输出DISPDATA=D;DA转换数据显示,当转换数据显示,当CLK频率很低时,可以频率很低时,可以 从显示器上看到此输出数据从显示器上看到此输出数据END;