VHDL第十三章.ppt

上传人:本田雅阁 文档编号:2895117 上传时间:2019-06-02 格式:PPT 页数:56 大小:342.02KB
返回 下载 相关 举报
VHDL第十三章.ppt_第1页
第1页 / 共56页
VHDL第十三章.ppt_第2页
第2页 / 共56页
VHDL第十三章.ppt_第3页
第3页 / 共56页
VHDL第十三章.ppt_第4页
第4页 / 共56页
VHDL第十三章.ppt_第5页
第5页 / 共56页
点击查看更多>>
资源描述

《VHDL第十三章.ppt》由会员分享,可在线阅读,更多相关《VHDL第十三章.ppt(56页珍藏版)》请在三一文库上搜索。

1、131 8位并行预置加法计数器设计 例13-1描述的是一个含计数使能、异步复位和计数值并行预置功能的8位加法计数器。其中d (7 DOWNTO 0)为8位并行输入预置值;ld,ce,clk,rst分别为计数器的并行输入预置使能信号、计数时钟使能信号、计数时钟信号和复位信号,例13-1:文件名:countervhd LIBRARY IEEE; USE IEEESTD_LOGIC_1164ALL; USE IEEESTD_LOGIC_UNSIGNEDALL; ENTITY counter IS PORT(d:IN STD_LOGIC_VECTOR(7 DOWNTO 0) ; ld,ce,clk,r

2、st: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); BEGIN PROCESS(clk,rst) BEGIN IF 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; EN

3、D PROCESS; q=count; END behave;,132 位宽可预置中断处理器设计 中断处理器例13-2的设计利用了”IFTHENELSE语句结构,使得很容易地实现了nmi、float、int和peripheral 4个中断请求信号的能按优先顺序分别进行处理,程序中使用了类属语句,使此中断处理器可根据实际情况容易地改变地址位宽;程序中还使用了数据类型转换函数CONV_STD_LOGIC_VECTOR(X,Y)。,LIBRARY IEEE; USE IEEESTD_LOGIC_1164ALL; USE IEEESTD LOGIC_ARITHALL; ENTITY interrupt

4、 IS GENERIC(msb:INTEGER:=15); PORT(nmi,float,int,peripheral:INT STD_LOGIC; Flush_cache:OUT STD_LOGIC; Goto_addr:OUT_STD_LOGIC(msb DOWNTO 0) ; END interrupt;,ARCHITECTURE behave 0F interrupt工S CONSTANT nop:INTEGER:=0; 设置地址nop=0 CONSTANT nmi_addr:integer:= #6#C5AA#; 设置中断服务程序地址 CONSTANT float_addr:inte

5、ger:=#16#CA522#; 设置中断服务程序地址 CONSTANT int_addr:integer:=#16#CB4A#; 设置中断服务程序地址 CONSTANT periph_addr:integer:=#16#CD2C#; 设置中断服务程序地址 BEGIN PROCESS(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; 次

6、高优先级 Flush_cache = 1; ELSIF int=1 THEN address:= int_addr; 再次高优先级 Flush_cache = 1; ELSIF periphera=1 THEN address:=periph_addr; 最低优先级 ELSE address:=nop; 地址置0 END IF;,调用类型转换函数将整数类型的地址值, 将“address”转化成“msb+l”位标准矢量位值 Goto_addr=CONV_STD_LOGICVECTOR( address,msb+1); END PROCESS; END behave;,133 静态随机存储器(SR

7、AM)设计 静态随机存储器SRAM电子线路中是存储数据的重要器件,它由锁存器阵列构成,它的界面端口由地址线、数据输入线、数据输出线、片选线、写入允许线和读出允许线组成。 SRAM根据地址信号令经由译码电路选择欲读写的存储单元。,例13-3描述的SRAM具有4位二进制地址线、8位二进制输入输出数据线,即存储 空间为主16x8bit,它的地址线是将数据读入和数据输出端口分开的(许多SRAM的数据端 口的读写功能是合二为一的,即为双向口)。程序中有两个进程,一个是数据写入进程WRITE,该进程设置条件为wr=0的IF_THEN不完整的条件语句,锁存器阵列,wr作为锁存控制信号,当wr=0时,在满足条

8、件(cs=0 and rd=1)时将外部8位数据din锁进指定地址adr的RAM单元中;而当满足,条件(rd=0 and cs=0 and wr=1)时,此SRAM将指定地址adr的RAM单元中的数据向dout端口输出,否则该端口呈高阻态。,例13-3:文件名:sramvhd LIBRARY IEEE; USE IEEESTD_LOGIC_1164ALL; USE IEEESTD LOGIC UNSIGNEDALL; ENTITY sram IS GENERIC(k:INTEGER :=8 ; w:INTEGER :=4 ); port (rd,wr,cs:in std_logic; adr:

9、in std_logic_vector(w-1 downto 0) ; din:in std_logic_vector(k1 downto 0) ; dout:out std_logic_vector(k1 downto 0) ); END sram;,ARCHITECTURE behave OF sram is SUBTYPE 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_i

10、n :INTEGER; BEGIN adr_in=CONV_INTEGER(adr) ;,WRITE:PROOCESS(wr,cs,adr_in,din,rd) 数据写入进程 BEGIN IF wr=0 THEN IF cs=0 AND rd=1 THEN sram(adr_in)=din; END IF; END IF; END PROCESS;,READ:PROOCESS(rd,cs,adr_in,wr) 数据读出进程 BEGIN IF cs=0 AND rd=0 AND wr=1 THEN doutZ); END IF; END PROCESS; END behave;,134 堆栈设计

11、 在计算机组成电路中,或数字信号处理电路模块中堆栈存储器(后进先出存储器)具有重要的实用性。例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用于计算堆栈中已压人数据的个数。,例13-4:文件名:stackvhd LIBRARY IEEE; USE IEEESTD LOGIC

12、1164ALL; USE IEEESTD_LOGIC_UNSIGNEDALL; entity stack is generic(n:INTEGER:=8; 堆栈元素的字长 k:INTEGER:=8); 堆栈中元素的个数 port(rst,clk: in std_logic; push,pop:in Std_logic; - empty,fullpop:out Std logic; din:in std_logic_vector(n-1 downto 0) ; dout:out std_logic_vector(n-1 downto 0) ; end stack;,architecture al

13、g of stack is signal num,c:integer range 0 to k-1; function to_bit(b:in boolean) return std_logic is begin MAX+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

14、(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(

15、0); c=c-1; end if; end process; end alg;,135 8位硬件加法器设计 加法器是数字系统中的基本逻辑器件。例如,为了节省逻辑资源,减法器和硬件乘法器都可由加法器来构成。宽位加法器的设计是十分耗费硬件资源的,因此在实际的设计和相关系统的开发中需要注意资源的利用率和进位速度两方面的问题。对此,首先应选择较适合组合逻辑设计的器件作为最终的目标器件,如CPLD;其次在加法器的逻辑结构的设计上,在芯片资源的利用率和加法器的速度两方面权衡得失,探寻最佳选择,即选择最佳的并行进位最小加法单元的宽度。显然,这种选择与目标器件的时延特性有直接关系。以下是一个比较简单的设计示

16、例。,多位加法器的构成有两种方式:并行进位和串行进位方式。并行进位加法器设有并行进位产生逻辑,运算速度较快;串行进位方式是将全加器级联构成多位加法器。并行进位加法器通常比串行级联加法器占用更多的资源,随着位数的增加,相同位数的并行加法器与串行加法器的资源占用差距快速增大。 一般,4位二进制并行加法器和串行级联加法器占用几乎相同的资源。这样,多位数加法器由4位二进制并行加法器级联构成是较好的折中选择。,四位二进制并行加法器的设计思想: (1)将加数A、被加数B、和S扩展成5位,即将加数、被加数、和与0相并置,运算之后分别为AA,BB,SINT; (2)按照全加器的方法将并置运算后的加数、被加数和

17、接收低位进位相加赋值给并置运算后的和,即SINT=AA+BB+CIN,其中CIN为接收低位进位输入端; (3)将SINT的第3到第0位赋值给S,SINT的第4位赋值给COUT,其中COUT为向高位进位输出端。,4位二进制加法器的VHDL逻辑描述如下: 例13-5:文件名:ADDER4Bvhd LIBRARY 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

18、 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) COUT=SINT(4); END behav

19、;,由两个4位二进制并行加法器级联而成的8位二进制 加法器逻辑描述如下: 例13-6:文件名:ADDER8Bvhd LIBRARY IEEE; USE IEEESTD_LOGIC_1164ALL; USE IEEESTD_LOGIC_UNSIGNEDALL; ENTITY ADDER8B IS PORT( CIN:IN STD_LOGIC; A:IN STD_LOGIC_VECTOR(7 DOWNT0 0) ; B:IN STD_LOG_VECTOR(7 DOWNT0 0) ; S:OUT STD_LOGIC_VECTOR(7 DOWNTO 0) ; COUT:OUT STD_LOGIC );

20、 END ADDER8B;,ARCHITECTURE struc 0F ADDER8B IS COMPONENT ADDER4B 对要调用的元件ADDER4B的界面端口进行定义 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 COMPONENT; SIGNAL CARRY_OUT: STD_LOGIC; 设置4位加法器进位标志,BEG

21、IN U1:ADDER4B PORT MAP(CIN=CIN,A=A(3 DOWNTO 0), B=B(3 DOWNTO 0), S=S(3 DOWNTO 0), COUT=CARRY_OUT); U2:ADDER4B PORT MAP(CIN= CARRY_OUT, A=A(7 DOWNTO 4), B=B(7 DOWNTO 4), S=S(7 DOWNTO 4) , COUT= COUT); END struc;,138 序列检测器设计 序列检测器可用于检测一组或多组由二进制码组成的脉冲序列信号,这在数字通信领域有广泛的应用。当序列检测器连续收到一组串行二进制码后,如果这组码与检测器中预先

22、设置的码相同,则输出1,否则输出0。由于这种检测的关键在于正确码的收到必须是连续的,这就要求检测器必须记住前一次的正确码及正确序列,直到在连续的检测中所收到的每一位码都与预置数的对应码相同。在检测过程中,任何一位不相等都将回到初始状态重新开始检测。如图136所示,当一串待检测的串行数据进入检测器后,若此数在每一位的连续检测中都与预置的密码数相同,则输出“A”,否则仍然输出“B 其VHDL逻辑描述如下:,例1321:文件名:CHKVHD LIBRARY IEEE; USE IEEESTD_LOGIC_1164ALL; ENTITY CHK IS PORT(DIN:IN STD_ LOGIC; C

23、LK,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 IS SIGNAL Q:INTEGER RANGE 0 TO 8; BEGIN PROCESS(CLK,CLR) BEGIN IF CLR=1 THEN QT IF DIN=D(7) THEN Q=1; ELSE Q=0; END IF;,WHEN 1= IF DIN=D(6) THEN Q IF DIN=D(5) THEN Q IF

24、DIN=D(4) THEN Q IF DIN=D(3) THEN Q IF DIN=D(2) THEN Q=6; ELSE Q=0; END IF;,WHEN 6= IF DIN=D(1) THEN Q IF DIN=D(0) THEN Q Q=0; END CASE;,PROCESS(Q) 检测结果判断输出 BEGIN IF Q=8 THEN AB=“1010”; 检测序列正确,输出“A” ELSE AB=“1011”; 检测序列错误,输出“B” END IF; END PROCESS; END behave;,139 正负脉宽数控调制信号发生器设计,1、正负脉宽数控调制信号发生器是由两个完

25、全相同的可自加载加法计数器LCNT8组成的,它的输出信号的高低电平脉宽可分别由两组8位预置数进行控制。 2、将计数初始值可预置的加法计数器的溢出信号作为本计数器的初始预置值加载信号LD,则可构成计数初始值自加载方式的加法计数器,从而构成数控分频器。 3、D触发器的一个重要功能就是均匀输出信号的占空比,提高驱动能力。,正负脉宽数控调制信号发生器原理图,正负脉宽数控调制信号发生器原理图,1、T1不是从预置数开始计数产生的脉宽,而是从零开始计数的,为CNT2从零计到255的时间 2、产生的波形周期是T2+T3 3、CNT1使D触发器输出低电平,低电平时间(即T2)是由CNT2的计数时间决定的 4、C

26、NT2使D触发器输出高电平,高电平时间(即T3)是由CNT1的计数时间决定的,正负脉宽数控调制信号发生器顶层文件连接图,正负脉宽数控调制信号发生器单元电路的VHDL语言描述,1、可自加载预置数的八位二进制加法计数器LCNT8,LIBRARY IEEE; USE IEEESTD_LOGIC_1164ALL; ENTITY LCNT8 IS PORT(CLK,LD:IN STD_LOGIC; D:IN INTEGER RANGE 0 TO 255; CAO:OUT STD_LOGIC); END LCNT8;,ARCHITECTURE behav OF LCNT8 IS SIGNAL COUNT

27、: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 CAO=0 END IF; END PROCESS; END behav;,2、正负脉宽数控调制信号发生器顶层文件,LIBRARY IEEE; USE IEEESTD_LOGIC_1164ALL; E

28、NTITY PULSE IS PORT( CLK:IN STD_LOGIC; A,B:IN STD_ LOGIC_VECTOR(7 DOWNTO 0); PSOUT:OUT STD_LOGIC); END PULSE;,ARCHITECTURE mixed OF PULSE IS COMPONENT LCNT8 PORT,(CLK,LD:IN STD_LOGIC; D:IN STD_ LOGIC_VECTOR(7 DOWNTO 0); CAO:OUT STD_LOGIC ); END CONPONENT; SIGNAL CAO1,CAO2:STD_LOGIC; SIGNAL LD1,LD2:S

29、TD_LOGIC; SIGNAL PSINT:STD_LOGIC;,BEGIN U1:LCNT8 PORT MAP(CLK=CLK,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

30、.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 RAN

31、GE 255 DOWNTO 0; BEGIN PROCESS(CLK) BEGIN IF(CLKEVENT AND CLK=1) THEN Q = Q + 1; 建立转换计数器 END IF; END PROCESS;,PROCESS(Q) BEGIN CASE Q IS 64点正弦波波形数据输出 WHEN 00=DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD=8;,WHEN 36=DDDDDDDDDDDDDDDDDDDDDDDDDDDDNULL END CASE; END PROCESS; DD=D; DA转换数据输出 DISPDATA=D; DA转换数据显示,当CLK频率很低时,可以 从显示器上看到此输出数据 END;,

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

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1