[计算机软件及应用]第4章VHDL设计实例ppt课件_第1页
[计算机软件及应用]第4章VHDL设计实例ppt课件_第2页
[计算机软件及应用]第4章VHDL设计实例ppt课件_第3页
[计算机软件及应用]第4章VHDL设计实例ppt课件_第4页
[计算机软件及应用]第4章VHDL设计实例ppt课件_第5页
已阅读5页,还剩88页未读 继续免费阅读

下载本文档

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

文档简介

1、第四章根本逻辑电路设计实例组合逻辑电路设计时序逻辑电路设计存储器设计状态机设计一、一、4 4选选1 1多路选择器多路选择器 四选一y ya ab bc cd ds0s0s1s1组合逻辑电路的设计组合逻辑电路的设计LIBRARY IEEE;USE IEEE.std_logic_1164.all;ENTITY mux4 IS PORT a,b,c,d,s0,s1: IN std_logic; y: OUT std_logic ;END mux4;ARCHITECTURE func OF mux4 ISVARIABLE sel:std_logic_vector1 DOWNTO 0;BEGINsel=

2、s1&s0; y y y y y y y y y y y = X; END CASEEND CASE;END PROCESSEND PROCESS;BEGINBEGINPROCESS PROCESS s0s0,s1s1 BEGIN BEGIN IFIFs0s0=0and =0and s1s1=0=0 THEN y = THEN y =a a; ELSIFELSIFs0s0=0and =0and s1s1=1=1THEN y =THEN y =b b; ELSIFELSIFs0s0=1and =1and s1s1=0=0THEN y =THEN y =c c; ELSIFELSIFs0s

3、0=1and =1and s1s1=1=1THEN y =THEN y =d d; ELSE y = XELSE y = X; END IFEND IF;END PROCESSEND PROCESS;二:编码器与译码器二:编码器与译码器1 1、优先级、优先级8-38-3编码器编码器 编码器y0y0d0d0d1d1d2d2d3d3d4d4d5d5d6d6d7d7y1y1y2y2输入输出d7d6d5d4d3d2d1d0y2y1y01 11101 110001 1010001 10000001 011000001 010000000100100000000000优先编码器就是当有两个或优先编码器就是

4、当有两个或两个以上的输入有效时,仅两个以上的输入有效时,仅对优先级高的输入进展编码对优先级高的输入进展编码 LIBRARY IEEE;LIBRARY IEEE;USE IEEE.std_logic_1164.all;USE IEEE.std_logic_1164.all;ENTITY encoder8_3 ISENTITY encoder8_3 IS PORT PORT d: IN std_logic_vectord: IN std_logic_vector7 downto 07 downto 0; ; y0,y1,y2: OUT std_logic y0,y1,y2: OUT std_log

5、ic ; ;END encoder8_3;END encoder8_3;ARCHITECTURE func OF encoder8_3 ISARCHITECTURE func OF encoder8_3 ISBEGINBEGIN PROCESS PROCESSd d VARIABLE temp:std_logic_vector VARIABLE temp:std_logic_vector2 downto 02 downto 0; ; BEGIN BEGIN IF IFd d7 7=1=1 THEN temp:=“111 THEN temp:=“111; ; ELSIF ELSIFd d6 6=

6、1=1 THEN temp:=“110 THEN temp:=“110; ; ELSIF ELSIFd d5 5=1=1 THEN temp:=“101 THEN temp:=“101; ; ELSIF ELSIFd d4 4=1=1 THEN temp:=“100 THEN temp:=“100; ; ELSIF ELSIFd d3 3=1=1 THEN temp:=“011 THEN temp:=“011; ; ELSIF ELSIFd d2 2=1=1 THEN temp:=“010 THEN temp:=“010; ; ELSIF ELSIFd d1 1=1=1 THEN temp:=

7、“001 THEN temp:=“001; ; ELSIF ELSIFd d0 0=1=1 THEN temp:=“000 THEN temp:=“000; ; END IF END IF y y0 0=temp=temp0 0; ; y y1 1=temp=temp1 1; ; y y2 2=temp = temptemp = = temptemp = = temptemp = = temptemp =1 = temptemp = temp temp temp temp temp temp = temptemp= Xyyyyyy=“XXXXXXXX; ; END CASE; END CASE

8、; ELSE ELSEy=“11111111y=“11111111END IF;END IF; END PROCESS; END PROCESS;END func;END func;三:加法器三:加法器1 1、一位全加器、一位全加器 半加器半加器h_adderh_adder的描绘的描绘 I113coasob1001010110001100cosobanotxnor2and2一位全加器可以由一位全加器可以由两个半加器和一个两个半加器和一个与门连接而成。与门连接而成。LIBRARY IEEE; -LIBRARY IEEE; -半加器描绘半加器描绘USE IEEE.STD_LOGIC_1164.AL

9、L; USE IEEE.STD_LOGIC_1164.ALL; ENTITY h_adder IS ENTITY h_adder IS PORT PORT a, b : IN STD_LOGIC; a, b : IN STD_LOGIC; co, so : OUT STD_LOGIC co, so : OUT STD_LOGIC; ; END h_adder; END h_adder; ARCHITECTURE fh1 OF h_adder is ARCHITECTURE fh1 OF h_adder is BEGIN BEGIN so = NOT so = NOTa XOR a XOR NO

10、T bNOT b ; ; co = a AND b ; co aina=ain,b=binb=bin,co=dco=d,so=eso=e;-;-例化语句例化语句 u2 : h_adder PORT MAPu2 : h_adder PORT MAPa=ea=e, b=cinb=cin, co=fco=f,so=sumso=sum; ; u3 : or2a PORT MAP u3 : or2a PORT MAPa=da=d, b=fb=f, c=coutc=cout; ; END fd1; END fd1; 2 2、串行进位加法器、串行进位加法器 两个多位二进制数相加时,除了最低位之外,两个多位二

11、进制数相加时,除了最低位之外,每一位相加都必须包括低位进位,因此必须使用全每一位相加都必须包括低位进位,因此必须使用全加器。加器。 按照加法规那么,只需将低位全加器的进位输按照加法规那么,只需将低位全加器的进位输出端出端C Ci i接到高位全加器的进位输入端接到高位全加器的进位输入端C Ci+1i+1就可以构就可以构成多位二进制加法器。成多位二进制加法器。2B1iCiCiAiB2A1iCiCiAiB1B1A3A1iCiCiAiB3B0S1iCiCiAiB0A0B3S2S1S4C例:两个二位数相加例:两个二位数相加串行进位链:串行进位链:c0 = c0 = a0 and b0a0 and b0

12、or or a0 or b0a0 or b0and and cincin; ; c1 = c1 = a1 and b1a1 and b1 or or a1 or b1a1 or b1and and c0c0; ; a0a0 b0b0a1a1 b1b1cincinc0c0c1c1 时序逻辑电路的设计时序逻辑电路的设计 时序电路中,任一时刻的输出信号不时序电路中,任一时刻的输出信号不仅取决于当时的输入信号,而且还取决于仅取决于当时的输入信号,而且还取决于电路原来的状态,即还和以前的输入信号电路原来的状态,即还和以前的输入信号及输出有关。也就是说,时序逻辑电路具及输出有关。也就是说,时序逻辑电路具有

13、记忆功能。有记忆功能。一:时钟信号和复位信号一:时钟信号和复位信号 任何时序电路都是以时钟信号为驱动程序的,任何时序电路都是以时钟信号为驱动程序的,时序电路也只有在时钟信号的边沿到来时,其状态时序电路也只有在时钟信号的边沿到来时,其状态才发生改变。才发生改变。 因此,时钟信号通常是描绘时序电路的程序的因此,时钟信号通常是描绘时序电路的程序的执行条件,时序电路也总是以时钟进程形式来进展执行条件,时序电路也总是以时钟进程形式来进展描绘。描绘。1 1、时钟信号、时钟信号1 1、进程的敏感信号是时钟信、进程的敏感信号是时钟信号号PROCESSPROCESSclock_Signalclock_Signa

14、lBEGINBEGINIFIFclock_edge_conditionclock_edge_conditionTHENTHENSignal_out= Signal_in; Signal_out= Signal_in; END IFEND IF;END PROCESS;END PROCESS; 2 2、用进程中的、用进程中的WAITWAIT语句等待时钟信语句等待时钟信号号PROCESSPROCESSBEGINBEGIN WAIT ON WAIT ONclock_Signalclock_SignalUNTILUNTILclock_edge_conditionclock_edge_condition

15、Signal_out= Signal_in; Signal_out= Signal_in; END PROCESS;END PROCESS; 时钟沿描绘:时钟沿描绘:上升沿:上升沿:IfIfclkevent and clk=1clkevent and clk=1ThenThenIfIfrising_edgerising_edgeclkclkThenThenWait Until clk=1Wait Until clk=1IfIfclklast_value=0and clkevent clklast_value=0and clkevent and and clk=1clk=1ThenThen下降沿

16、:下降沿:IfIfclkevent and clk=0clkevent and clk=0ThenThenIfIffalling_edgefalling_edgeclkclkThenThenWait Until clk=0Wait Until clk=0IfIfclklast_value=1and clkevent clklast_value=1and clkevent and and clk=0clk=0ThenThen2 2、复位信号、复位信号 触发器的初始状态是由复位信号来设置。触发器的初始状态是由复位信号来设置。 根据复位信号对触发器复位的操作不同,分根据复位信号对触发器复位的操作不同

17、,分为同步复位和非同步复位异步复位两种。为同步复位和非同步复位异步复位两种。1 1、同步复位同步复位2 2、非同步复位非同步复位 当复位信号有效,且在给定的时钟边沿到当复位信号有效,且在给定的时钟边沿到来时,触发器才被触发。来时,触发器才被触发。一旦复位信号有效,触发器就被触发。一旦复位信号有效,触发器就被触发。 在用在用VHDLVHDL语言描绘时,同步复位一定在以语言描绘时,同步复位一定在以时钟为敏感信号的进程中定义,且用时钟为敏感信号的进程中定义,且用IfIf语句来语句来描绘必要的复位条件。描绘必要的复位条件。PROCESSPROCESSclock_Signalclock_SignalBE

18、GINBEGINIFIFclock_edge_conditionclock_edge_conditionTHENTHEN IF IFreset_conditionreset_conditionThenThen Signal_out= reset_value; Signal_out= reset_value; Else Signal_out= Signal_in; Else Signal_out= Signal_in; END IF END IF;END IF;END IF;END PROCESS;END PROCESS; PROCESSPROCESSBEGINBEGIN Wait on Wai

19、t onclock_Signalclock_SignalUntilUntilclock_edge_conditionclock_edge_conditionIFIFreser_conditionreser_conditionThenThen Signal_out= reset_value; Signal_out= reset_value;Else Else Signal_out= Signal_in; Signal_out= Signal_in; END IFEND IF;END PROCESS;END PROCESS; 在用在用VHDLVHDL语言描绘异步复位时,首先在进程的敏语言描绘异步复

20、位时,首先在进程的敏感信号中除时钟信号外,还应加上复位信号;然后用感信号中除时钟信号外,还应加上复位信号;然后用IfIf语句来描绘必要的复位条件;最后在语句来描绘必要的复位条件;最后在EleifEleif段描绘时段描绘时钟信号边沿条件,并加上钟信号边沿条件,并加上eventevent属性。属性。PROCESSPROCESSreset_Signal,clock_Signalreset_Signal,clock_SignalBEGINBEGIN IF IFreset_conditionreset_conditionTHENTHEN Signal_out= reset_value; Signal_o

21、ut= reset_value; Elsif Elsifclock_event and clock_edge_conditionclock_event and clock_edge_conditionThenThen Else Signal_out= Signal_in; Else Signal_out= Signal_in; END IFEND IF;END PROCESS;END PROCESS; 二:二:D触发器触发器LIBRARY IEEE;LIBRARY IEEE;USE IEEE.std_logic_1164.all;USE IEEE.std_logic_1164.all;ENTI

22、TY dff ISENTITY dff IS PORT PORT data,clk: IN STD_LOGIC;data,clk: IN STD_LOGIC; Q: OUT STD_LOGIC Q: OUT STD_LOGIC; ;END dff;END dff;ARCHITECTURE Behavior OF dff ISARCHITECTURE Behavior OF dff ISBEGINBEGIN PROCESS PROCESSclkclk BEGIN BEGIN IF clkEVENT AND clk=1 THEN IF clkEVENT AND clk=1 THENQ=data;Q

23、CPCPQ QQ Qclkdata1 1、D D触发器触发器不推荐不推荐LIBRARY IEEE;LIBRARY IEEE;USE IEEE.std_logic_1164.all;USE IEEE.std_logic_1164.all;ENTITY dff ISENTITY dff IS PORT PORT data,clk: IN STD_LOGIC;data,clk: IN STD_LOGIC; Q: OUT STD_LOGIC Q: OUT STD_LOGIC; ;END dff;END dff;ARCHITECTURE Behavior OF dff ISARCHITECTURE Be

24、havior OF dff ISBEGINBEGIN PROCESS PROCESS BEGIN BEGIN Wait Until clkEVENT AND clk=1 Wait Until clkEVENT AND clk=1Q=data;QCPCPQ QQ QclkdataresetLIBRARY IEEE; LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_1164.ALL; ENTITY dff_reset IS ENTITY dff_reset IS PORT PORT data: IN STD_LOGIC;d

25、ata: IN STD_LOGIC; clk: IN STD_LOGIC; clk: IN STD_LOGIC; reset: IN STD_LOGIC; reset: IN STD_LOGIC; Q: OUT STD_LOGIC Q: OUT STD_LOGIC; ; END dff_reset;END dff_reset;ARCHITECTURE dff OF dff_reset IS ARCHITECTURE dff OF dff_reset IS BEGINBEGIN PROCESS PROCESSclk,resetclk,reset BEGIN BEGIN IF reset=0THE

26、N IF reset=0THENQ=0;Q=0; Elsif clkevent and clk=1 THEN Elsif clkevent and clk=1 THEN Q=data;QCPCPQ QQ QclkdataresetsetARCHITECTURE dff OF dff_asyn IS ARCHITECTURE dff OF dff_asyn IS BEGINBEGIN PROCESS PROCESSclk,set,resetclk,set,reset BEGIN BEGIN IF set=0THEN IF set=0THENQ=1;Q=1; Elsif reset=1THEN E

27、lsif reset=1THENQ=0;Q=0; Elsif clkevent and clk=1 THEN Elsif clkevent and clk=1 THENQ=data;QCPCPQ QQ QclkdataresetenLIBRARY IEEE; LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_1164.ALL; ENTITY dff_ck_en IS ENTITY dff_ck_en IS PORT PORT data: IN STD_LOGIC;data: IN STD_LOGIC; clk: IN S

28、TD_LOGIC; clk: IN STD_LOGIC; reset: IN STD_LOGIC; reset: IN STD_LOGIC; en: IN STD_LOGIC; en: IN STD_LOGIC; Q: OUT STD_LOGIC Q: OUT STD_LOGIC; ; END dff_ck_en;END dff_ck_en;ARCHITECTURE dff OF dff_ck_en IS ARCHITECTURE dff OF dff_ck_en IS BEGINBEGIN PROCESS PROCESSclk,resetclk,reset BEGIN BEGIN IF re

29、set=0THEN IF reset=0THENQ=0;Q=0; Elsif clkevent and clk=1 THEN Elsif clkevent and clk=1 THENIF en=1 THENIF en=1 THEN Q=data;Q=data;END IF;END IF; END IF; END IF; END PROCESS; END PROCESS; END dff_ck_en; END dff_ck_en; 三:存放器三:存放器 在数字系统中可以用来存储一组二进在数字系统中可以用来存储一组二进制码的同步时序逻辑电路,一般由多位触制码的同步时序逻辑电路,一般由多位触发器连

30、接而成。通常可以按功能分为:锁发器连接而成。通常可以按功能分为:锁存器和移位存放器。存器和移位存放器。 LIBRARY IEEE; LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_1164.ALL; ENTITY reg4b IS ENTITY reg4b IS PORT PORTload:IN STD_LOGICload:IN STD_LOGIC din:IN STD_LOGIC_VECTOR din:IN STD_LOGIC_VECTOR3 DOWNTO 03 DOWNTO 0; ; dout:OUT STD_LO

31、GIC_VECTOR dout:OUT STD_LOGIC_VECTOR3 DOWNTO 03 DOWNTO 0; ; END reg4b; END reg4b; ARCHITECTURE behav OF reg4b is ARCHITECTURE behav OF reg4b is BEGINBEGIN PROCESS PROCESSload,dinload,din BEGIN BEGIN IF loadevent and load=1 THEN IF loadevent and load=1 THEN dout=din; dout=din; END IF; END IF; END PRO

32、CESS; END PROCESS;END behav; END behav; 1 1、4 4位锁存器位锁存器2 2、串行输入、并行输出移位存放器、串行输入、并行输出移位存放器 移位存放器除了具有存储二进制码的功能以移位存放器除了具有存储二进制码的功能以外,还具有移位功能。即存放器里面存储的代码外,还具有移位功能。即存放器里面存储的代码可以在时钟的作用下依次进展左移或者右移。可以在时钟的作用下依次进展左移或者右移。 移位存放器不仅可以用来存储数据,还可以移位存放器不仅可以用来存储数据,还可以用来实现数值运算和数据处理等。用来实现数值运算和数据处理等。LIBRARY IEEE; LIBRARY

33、IEEE; USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY shift IS ENTITY shift IS PORT PORT clk,rst,data:IN STD_LOGIC; clk,rst,data:IN STD_LOGIC; q:OUT STD_LOGIC_VICTOR q:OUT STD_LOGIC_VICTOR7 downto 07 downto 0; ; END shi

34、ft; END shift; ARCHITECTURE sh1 OF shift isARCHITECTURE sh1 OF shift isSignal q_temp:STD_LOGIC_VECTORSignal q_temp:STD_LOGIC_VECTOR7 downto 07 downto 0 BEGINBEGINPROCESSPROCESSclk,rstclk,rstBEGINBEGIN IF rst=1 THEN IF rst=1 THEN q_temp= q_temp0others=0; ; Elsif clkevent and clk=1 THEN Elsif clkevent

35、 and clk=1 THEN q_temp=q_tempq_temp=q_temp6 downto 06 downto 0&data; &data; END IF; END IF;END PROCESS;END PROCESS;q=q_temp; q=q_temp; END sh1; END sh1; 8 8位带置位位带置位移位锁存器移位锁存器3 3、串行输入、串行输出移位存放器、串行输入、串行输出移位存放器LIBRARY IEEE; LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_1164.ALL;U

36、SE IEEE.STD_LOGIC_UNSIGNED.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY shift IS ENTITY shift IS PORT PORT clk, a:IN STD_LOGIC; clk, a:IN STD_LOGIC; b:OUT STD_LOGIC_VICTOR b:OUT STD_LOGIC_VICTOR4 downto 4 downto 0 0; ; END shift;END shift;ARCHITECTURE sh2 OF shift isCOMPONENT dffPORT d,clk:IN STD_LO

37、GIC;q:OUT STD_LOGIC;Signal z:STD_LOGIC_VECTOR4 downto 0 BEGIN z4=a;G1:FOR i IN 3 downto 0 GENERATE Dffx:dff PORT MAP zi,clk,zi+1;END GENERATE; btemptemp0others=0; ; WHEN “001 WHEN “001=temptemptemptemptemptemptemptemptemptempNULL; WHEN others=NULL; END CASE; END CASE; END PROCESS; END PROCESS;PROCES

38、SPROCESStemptempBEGINBEGIN term=1; term=1; FOR i IN temprange LOOP FOR i IN temprange LOOP IF tempIF tempi i=1 THEN;=1 THEN; temp=0 temp=0 EXIT; EXIT; END IF; END IF; END LOOP; END LOOP;END PROCESS;END PROCESS;dataout=temp;dataout=temp;END v1;END v1; 4 4、移位存放器、移位存放器 移位存放器除了具有存储代码的功能以外,移位存放器除了具有存储代码的

39、功能以外,还具有移位功能。所谓移位功能,是指存放器还具有移位功能。所谓移位功能,是指存放器里存储的代码能在移位脉冲的作用下依次左移里存储的代码能在移位脉冲的作用下依次左移或右移。因此,移位存放器不但可以用来存放或右移。因此,移位存放器不但可以用来存放代码,还可用来实现数据的串代码,还可用来实现数据的串/ /并转换、数值的并转换、数值的运算以及数据处理等。运算以及数据处理等。LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY SHIFTER ISPORTDATA:IN STD_LOGIC_VECTOR7 DOWNTO 0;SHIFT_LEFT,SHIF

40、T_RIGHT:IN STD_LOGIC;RESET:IN STD_LOGIC;MODE:IN STD_LOGIC_VECTOR1 DOWNTO 0; QOUT:BUFFER STD_LOGIC_VECTOR7 DOWNTO 0;END SHIFTER;ARCHITECTURE ART OF SHIFTER ISBEGINPROCESSBEGINWAIT UNTILRISING_EDGECLK; IFRESET=1THEN QOUTQOUTQOUTQOUTNULL;END CASE; END IF;END PROCESS;END ARCHITECTURE ART;四四:计数器:计数器 计数器是

41、在数字系统中使用最多的计数器是在数字系统中使用最多的时序电路,它不仅能用于对时钟脉冲计时序电路,它不仅能用于对时钟脉冲计数,还可以用于分频、定时、产生节拍数,还可以用于分频、定时、产生节拍脉冲和脉冲序列以及进展数字运算等。脉冲和脉冲序列以及进展数字运算等。 LIBRARY IEEELIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALLUSE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALLUSE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY CNTM60 ISENTITY CNTM6

42、0 IS PORT PORTCICI:IN STD_LOGICIN STD_LOGIC; NRESET NRESET:IN STD_LOGICIN STD_LOGIC; LOAD LOAD:IN STD_LOGICIN STD_LOGIC; D D:IN STD_LOGIC_VECTORIN STD_LOGIC_VECTOR7 DOWNTO 07 DOWNTO 0; CLK CLK:IN STD_LOGICIN STD_LOGIC; CO CO:OUT STD_LOGICOUT STD_LOGIC; QH QH:BUFFER STD_LOGIC_VECTORBUFFER STD_LOGIC_V

43、ECTOR3 DOWNTO 03 DOWNTO 0; QL QL:BUFFER STD_LOGIC_VECTORBUFFER STD_LOGIC_VECTOR3 DOWNTO 03 DOWNTO 0;END CNTM60END CNTM60;1 1、同步计数器、同步计数器 模为模为6060,带异步复位、同步置数功能的,带异步复位、同步置数功能的8421BCD8421BCD码计数器。码计数器。ARCHITECTURE ART OF CNTM60 ISARCHITECTURE ART OF CNTM60 ISBEGINBEGIN CO=1WHEN CO=1WHENQH=0101AND QL=100

44、1AND QH=0101AND QL=1001AND CI=1CI=1ELSE0ELSE0; PROCESSPROCESSCLKCLK,NRESETNRESET IS IS BEGIN BEGINIFIFNRESET=0NRESET=0THEN THEN QH=0000 QH=0000; QL=“0000 QL=“0000;ELSIFELSIFCLKEVENT AND CLK=1CLKEVENT AND CLK=1THEN THEN IFIFLOAD=1LOAD=1THENTHENQH=DQH=D7 DOWNTO 47 DOWNTO 4;QL=DQL=D3 DOWNTO 03 DOWNTO 0

45、; ELSIF ELSIFCI=1CI=1THENTHENIFIFQL=9QL=9THENTHEN QL=0000 QL=0000; IFIFQH=5QH=5THENTHENQH=0000QH=0000; ELSE ELSE QH=QH+1QH=QH+1; END IFEND IF;ELSEELSE QL=QL+1 QL=QL+1;END IFEND IF;END IFEND IF; END IFEND IF; END PROCESSEND PROCESS;END ARTEND ART;2 2、异步计数器、异步计数器 用用VHDLVHDL语言描绘语言描绘异步计数器,与同步计异步计数器,与同步计

46、数器不同之处主要表如今对各级时钟的描绘上数器不同之处主要表如今对各级时钟的描绘上。下面是一个由下面是一个由4 4个触发器构成的异步计数器。个触发器构成的异步计数器。LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY DIFFR IS PORTCLK,CLR,D:IN STD_LOGIC; Q,QB;OUT STD_LOGIC;END DIFFR;ARCHITECTURE ART1 OF DIFFR IS SIGNA Q_IN:STD_LOGIC;BEGIN Q=Q_IN; QB=NOT Q_IN; PROCESSCLK,CLR IS BEGIN IF

47、CLR=1THENQ_IN=0; ELSIF CLKEVENT AND CLK=1 THENQ_IN=D; END IF; END PROCESS;END ART1;LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY RPLCOUNT IS PORTCLK,CLR:IN STD_LOGIC; COUNT:OUT STD_LOGIC_VECTOR3 DOWNTO 0;END RPLCOUNT;ARCHITECTURE ART2 OF RPLCOUNT IS SIGNA COUNT_IN:STD_LOGIC_VECTOR4 DOWNTO 0;COMPON

48、ENT DIFFR IS PORTCLK,CLR,D:IN STD_LOGIC; Q,QB:OUT STD_LOGIC;END COMPONENT DIFFR;BEGINCOUNT_IN0COUNT_INI, CLR=CLR, D=COUNT_INI+1, Q=COUNT_INI, QB=COUNT_INI+1; END GENERATE GEN1;END ART2;存储器设计存储器设计 半导体存储器从功能上可以分为只读半导体存储器从功能上可以分为只读存储器和随机存储器两大类。存储器和随机存储器两大类。 两类存储器描绘中的一样问题两类存储器描绘中的一样问题存存储器中的数据类型:储器中的数据类型

49、: 通常用数组来描绘存储器构造,数组通常用数组来描绘存储器构造,数组的元素就是存储器中的数据。的元素就是存储器中的数据。1ROM 只读存储器在正常工作时从中读取数据,不能快速地修改或重新写入数,适用于存储固定数据的场合。下面是一个容量为2564的ROM存储的例子,该ROM有8位地址线ADR0ADR7,4位数据输出线DOUT0DOUT3及使能信号EN。注意:需要初始化注意:需要初始化DOUT3.0DOUT3.0ENADR7.0ADR7.0ENROMLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;US

50、E STD.TEXTIO.ALLUSE STD.TEXTIO.ALL;ENTITY ROM IS PORTEN:IN STD_LOGIC; ADR:IN STD_LOGIC_VECTOR7 DOWNTO 0; DOUT:OUT STD_LOGIC_VECTOR3 DOWNTO 0;END ROM;ARCHITECTURE ART OF ROM IS SUB TYPE WORD IS STD_LOGIC_VECTOR3 DOWNTO 0; TYPE MEMORY IS ARRAY0 TO 255 OF WORD; SIGNA ADR_IN:INTEGER RANGE 0 TO 255; VARI

51、ABLE ROM:MEMORY; VARIABLE START_UP:BOOLEAN:=TRUE; VARIABLE L:LINE; VARIABLE J:INTEGER; FILE ROMIN:TEXT IS IN “ROMIN;BEGIN PROCESSEN,ADR IS BEGIN IF START_UP THEN FOR J IN ROMRANGE LOOP READLINEROMIN,1;READ1,ROMJ; END LOOP; START_UP:=FALSE END IF; ADR_IN=CONV_INTEGERADR; IFEN=1THEN DOUT=ROMADR_IN; EL

52、SE DOUT=ZZZZ; END IF; END PROCESS;END ART;初始化初始化2SRAM RAM和ROM的主要区别在于RAM描绘上有读和写两种操作,而且在读/写上对时间有较严格的要求。下面是一个88位的双口SRAM。DATAOUT7.0DATAIN7.0WERECLOCKWADD2.0RADD2.0DATAOUT7.0DATAIN7.0WERECLOCKWADD2.0RADD2.0DPRAMLIBRARY IEEELIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALLUSE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_L

53、OGIC_ARITH.ALLUSE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALLUSE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY DPRAM ISENTITY DPRAM ISGENERICGENERICWIDTHWIDTH:INTEGER :=8INTEGER :=8; DEPTH DEPTH:INTEGER :=8INTEGER :=8; ADDER ADDER:INTEGER :=3INTEGER :=3;PORTPORTDATAIN:IN STD_LOGIC_VECTORDATAIN:IN

54、STD_LOGIC_VECTORWIDTH-1 DOWNTO 0WIDTH-1 DOWNTO 0; DATAOUT:OUT STD_LOGIC_VECTOR DATAOUT:OUT STD_LOGIC_VECTORWIDTH-1 DOWNTO 0WIDTH-1 DOWNTO 0; CLOCK,WE,RE:IN STD_LOGIC CLOCK,WE,RE:IN STD_LOGIC; WADD,RADD:IN STD_LOGIC_VECTOR WADD,RADD:IN STD_LOGIC_VECTORADDER-1 DOWNTO 0ADDER-1 DOWNTO 0;END DPRAMEND DPR

55、AM;ARCHITECTURE ART OF DPRAM ISTYPE MEM IS ARRAY0 TO DEPTH-1 OFSTD_LOGIC_VECTORWIDTH-1 DOWNTO 0;SIGNA RAMTMP:MEM;BEGINPROCESSCLOCK ISBEGINIF CLOCKEVENT AND CLOCK=1 THENIFWE=1THENRAMTMPCONV_INTEGERWADD=DATAIN;END IF;END IF; END PROCESS;PROCESSCLOCK ISBEGINIFCLOCKEVENT AND CLOCK=1THENIF RE=1 THENDATAO

56、UT=RAMTMPCONV_INTEGERRADD;END IF; END IF;END PROCESS;END ART;3队列 先进先出队列FIFO,作为数据缓冲器,通常其数据存放构造完全与RAM一致,只是存取方式有所不同。DATA7.0ACLKCLOCKWEREWERECLOCKACLKFFEF同步FIFOQ7.0DATA7.0EFFFQ7.0LIBRARY IEEELIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALLUSE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALLUSE IEEE.STD_LOGI

57、C_ARITH.ALL;ENTITY REG_FIFO ISENTITY REG_FIFO ISGENERICGENERICWIDTHWIDTH:INTEGER :=8INTEGER :=8; DEPTH DEPTH:INTEGER :=8INTEGER :=8; ADDR ADDR:INTEGER :=3INTEGER :=3; PORT PORTDATADATA:IN STD_LOGIC_VECTORIN STD_LOGIC_VECTORWIDTH-1 DOWNTO WIDTH-1 DOWNTO 0 0; Q Q:OUT STD_LOGIC_VECTOROUT STD_LOGIC_VECT

58、ORWIDTH-1 DOWNTO 0WIDTH-1 DOWNTO 0; ACLR ACLR,CLOCKCLOCK,WEWE,RERE:IN STD_LOGICIN STD_LOGIC; EF EF,FF FF :OUT STD_LOGICOUT STD_LOGIC;END REG_FIFOEND REG_FIFO;TYPE MEM IS ARRAYTYPE MEM IS ARRAY0 TO DEPTH-10 TO DEPTH-1 OF OF STD_LOGIC_VECTORSTD_LOGIC_VECTORWIDTH-1 DOWNTO 0WIDTH-1 DOWNTO 0;SIGNA RAMTMP

59、SIGNA RAMTMP:MEMMEM;SIGNA WADD SIGNA WADD :STD_LOGIC_VECTORSTD_LOGIC_VECTORADDR-1 DOWNTO 0ADDR-1 DOWNTO 0;SIGNA RADDSIGNA RADD:STD_LOGIC_VECTORSTD_LOGIC_VECTORADDR-1 DOWNTO 0ADDR-1 DOWNTO 0;SIGNA WORDSSIGNA WORDS:STD_LOGIC_VECTORSTD_LOGIC_VECTORADDR-1 DOWNTO 0ADDR-1 DOWNTO 0;ARCHITECTURE ART OF REG_

60、FIFO ISARCHITECTURE ART OF REG_FIFO ISBEGINPROCESSACLR,CLOCK ISBEGINIF ACLR=0 THENWADD0;ELSIF CLOCKEVENT AND CLOCK=1 THENIF WE=1 THENIF WADD=WORDS THEN WADD0;ELSE WADD=WADD+1;END IF;END IF;END IF;END PROCESS;PROCESSCLOCK ISBEGINIF CLOCKEVENT AND CLOCK=1 THENIF WE=1 THENRAMTMPCONV_INTEGERWADD=DATA;END IF;END IF

温馨提示

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

评论

0/150

提交评论