简单数字逻辑电路的设计汇编_第1页
简单数字逻辑电路的设计汇编_第2页
简单数字逻辑电路的设计汇编_第3页
简单数字逻辑电路的设计汇编_第4页
简单数字逻辑电路的设计汇编_第5页
已阅读5页,还剩90页未读 继续免费阅读

下载本文档

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

文档简介

1、1.逻辑表达式的VHDL描述 设计一个函数电路:y=abc+efLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;entity example is port(a,b,c,e,f : in std_logic; y : out std_logic);end;architecture a of example isbegin yqqqqqqqqq=XXX; END CASE; END PROCESS encoder_process;END rtl;D0D1D2D3D4D5D6D7E1Q0Q1Q2GSE0E1 D0 D1 D2 D3 D4 D5 D6 D7 Q2 Q

2、1 Q0 E0 GS 1 x x x x x x x x 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 0 1 0 x x x x x x x 0 0 0 0 1 0 0 x x x x x x 0 1 0 0 1 1 0 0 x x x x x 0 1 1 0 1 0 1 0 0 x x x x 0 1 1 1 0 1 1 1 0 0 x x x 0 1 1 1 1 1 0 0 1 0 0 x x 0 1 1 1 1 1 1 0 1 1 0 0 x 0 1 1 1 1 1 1 1 1 0 1 0 0 0 1 1 1 1 1 1 1 1 1 1 1 0LIBRARY IE

3、EE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY priorityencoder IS PORT(d : IN STD_LOGIC_VECTOR(7 DOWNTO 0); e1 : IN STD_LOGIC; q : OUT STD_LOGIC_VECTOR(2 DOWNTO 0); gs,e0 : OUT STD_LOGIC);END priorityencoder;ARCHITECTURE rtl OF priorityencoder ISBEGIN encoder_process: PROCESS(e1,d) BEGIN IF (e1=1) THEN q=“11

4、1”; gs=1; e0=1; ELSIF (d=“11111111” AND e1=0) THEN q=“111”; gs=1; e0=0; ELSIF (d(7)=0 AND e1=0) THEN q=“000”; gs=0; e0=1; ELSIF (d(6)=0 AND e1=0) THEN q=“001”; gs=0; e0=1; ELSIF (d(5)=0 AND e1=0) THEN q=“010”; gs=0; e0=1; ELSIF (d(4)=0 AND e1=0) THEN q=“011”; gs=0; e0=1; ELSIF (d(3)=0 AND e1=0) THEN

5、 q=“100”; gs=0; e0=1; ELSIF (d(2)=0 AND e1=0) THEN q=“101”; gs=0; e0=1; ELSIF (d(1)=0 AND e1=0) THEN q=“110”; gs=0; e0=1; ELSIF (d(0)=0 AND e1=0) THEN q=“111”; gs=0; e0=1; END IF; END PROCESS encoder_process;END rtl; D QCLKDFF1D QCLKDFF2D QCLKDFF3D QCLKDFF4D QCLKDFF8D QCLKDFF7D QCLKDFF6D QCLKDFF5q(0

6、)q(1)q(2)q(3)q(4)q(5)q(6)q(7)q(8)cp输出d0输入d18位串入/串出移位寄存器的逻辑电路图3.逻辑电路图的VHDL描述LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY dff IS PORT(d,clk : IN STD_LOGIC; q : OUT STD_LOGIC);END dff;ARCHITECTURE rtl OF dff ISBEGIN dff_process:PROCESS(clk) BEGIN IF(clkEVENT AND clk=1)THEN q=d; END IF; END PROCESS d

7、ff_process;END rtl;8位串入/串出移位寄存器的VHDL描述LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY shift_reg IS PORT(d1 : IN STD_LOGIC; cp : IN STD_LOGIC; d0 : OUT STD_LOGIC);END shift_reg;ARCHITECTURE structure OF shift_reg IS COMPONENT dff PORT(d : IN STD_LOGIC; clk: IN STD_LOGIC; q : OUT STD_LOGIC); END COMPO

8、NENT; SIGNAL q : STD_LOGIC_VECTOR(8 DOWNTO 0);BEGIN q(0)=d1; register8:FOR I IN 0 TO 7 GENERATE DFFX:dff PORT MAP(q(i),cp,q(i+1); END GENERATE register8; d0=q(8);END structure;【例】【例】 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL;ENTITY shift_reg IS PORT ( CLK : IN STD_LOGIC; DIN : IN STD_LOGIC; QB : OUT

9、 STD_LOGIC );END shift_reg;ARCHITECTURE behav OF shift_reg IS SIGNAL REG8 : STD_LOGIC_VECTOR(7 DOWNTO 0);BEGIN PROCESS (CLK) BEGIN IF CLKEVENT AND CLK = 1 THEN REG8(7) = DIN; REG8(6 DOWNTO 0) = REG8(7 DOWNTO 1); END IF; END PROCESS; QB = REG8(0); END behav; 4.根据逻辑功能的要求按行为方式进行描述常用逻辑电路的常用逻辑电路的VHDL语言程序

10、语言程序 数字逻辑电路可分为两类: 一.组合逻辑电路, 二. 时序逻辑电路 任何复杂、实用的数字逻辑电路都是由基本的组合逻辑电路和时序逻辑电路构成的,而且 主要集中在典型的几 种电路中。一.常用组合逻辑电路的VHDL语言程序 常见的组合逻辑电路主要包括基本门电路、编码器、译码器、选择器、缓冲器以及运算器等1.基本门电路1) 与门、或门、非门 在数字电路中,与门、或门、非门的逻辑表达式分别为aybaybay其VHDL语言描述可以如下:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALLENTITY logic_gate IS PORT(a,b : IN STD_LOG

11、IC; y1,y2,y3 : OUT STD_LOGIC);END logic_gate;ARCHITECTURE behave OF logic_gate ISBEGIN y1=a AND b; y2=a OR b; y3qqqqqqqqq=“XXX”; END CASE; END PROCESS encoder_process;END rtl; 2)优先编码器:指将所有的输入信号按优先级顺序进行排队,当几个输入信号同时出现时,只对其中优先级最高的一个输入信号进行编码的编码器.D0D1D2D3D4D5D6D7E1Q0Q1Q2GSE074LS148优先编码器逻辑符号E1 D0 D1 D2 D3

12、 D4 D5 D6 D7 Q2 Q1 Q0 E0 GS 1 x x x x x x x x 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 0 1 0 x x x x x x x 0 0 0 0 1 0 0 x x x x x x 0 1 0 0 1 1 0 0 x x x x x 0 1 1 0 1 0 1 0 0 x x x x 0 1 1 1 0 1 1 1 0 0 x x x 0 1 1 1 1 1 0 0 1 0 0 x x 0 1 1 1 1 1 1 0 1 1 0 0 x 0 1 1 1 1 1 1 1 1 0 1 0 0 0 1 1 1 1 1 1 1 1

13、1 1 1 0 表中,”X”代表任意项;E1是使能控制端,低电平有效;D0-D7为输入信号,低电平有效;Q0-Q2为输出端;E0为无编码信号输入的状态标志端,低电平有效;GS是有编码信号输入的状态标志端,低电平有效;(E0端和GS端在进行编码器级联时十分有用). 这里设定D7的优先级最高.74LS148优先编码器VHDL语言程序入下:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY priorityencoder IS PORT(d : IN STD_LOGIC_VECTOR(7 DOWNTO 0); e1 : IN STD_LOGIC; q :

14、OUT STD_LOGIC_VECTOR(2 DOWNTO 0); gs,e0 : OUT STD_LOGIC);END priorityencoder;ARCHITECTURE rtl OF priorityencoder ISBEGIN encoder_process: PROCESS(e1,d) BEGIN IF (e1=1) THEN q=“111”; gs=1; e0=1; ELSIF (d=“11111111” AND e1=0) THEN q=“111”; gs=1; e0=0; ELSIF (d(7)=0 AND e1=0) THEN q=“000”; gs=0; e0=1;

15、ELSIF (d(6)=0 AND e1=0) THEN q=“001”; gs=0; e0=1; ELSIF (d(5)=0 AND e1=0) THEN q=“010”; gs=0; e0=1; ELSIF (d(4)=0 AND e1=0) THEN q=“011”; gs=0; e0=1; ELSIF (d(3)=0 AND e1=0) THEN q=“100”; gs=0; e0=1; ELSIF (d(2)=0 AND e1=0) THEN q=“101”; gs=0; e0=1; ELSIF (d(1)=0 AND e1=0) THEN q=“110”; gs=0; e0=1;

16、ELSIF (d(0)=0 AND e1=0) THEN q=“111”; gs=0; e0=1; END IF; END PROCESS encoder_process;END rtl; 3.译码器 译码是编码的逆过程,在数字电路中,一般将译码器分为三类:变量译码器、码制变换译码器和地址译码器1)变量译码器:把输入的二进制代码的各种组和状态翻译成对应的输出信号,如3-8译码器.Y0Y1Y2Y3Y4Y5Y6Y7ABCG1G2AG2B74LS138译码器的逻辑符号 从逻辑符号中可以看到,它具有三个附加的控制端G1、G2A和G2B.当G1=1、G2A+G2B=0时,译码器将处在译码工作状态;否则译

17、码器将被禁止,所有的输出端将被封锁在高电平,如真值表所示.实际上,这三个输入端可叫作”片选”输入端,可以将多片74LS138译码器连接起来以扩展译码器的功能.G1 G2A G2B C B A Y0 Y1 Y2 Y3 Y4 Y5 Y6 Y7 x 1 x x x x 1 1 1 1 1 1 1 1 x x 1 x x x 1 1 1 1 1 1 1 1 0 x x x x x 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 1 1 1 1 1 1 1 1 0 0 0 0 1 1 0 1 1 1 1 1 1 1 0 0 0 1 0 1 1 0 1 1 1 1 1 1 0 0 0 1 1

18、1 1 1 0 1 1 1 1 1 0 0 1 0 0 1 1 1 1 0 1 1 1 1 0 0 1 0 1 1 1 1 1 1 0 1 1 1 0 0 1 1 0 1 1 1 1 1 1 0 1 1 0 0 1 1 1 1 1 1 1 1 1 1 0 74LS138译码器的真值表LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY decoder3_8 IS PORT(g1,g2a,g2b : IN STD_LOGIC; a,b,c : IN STD_LOGIC; y : OUT STD_LOGIC_VECTOR(7 DOWNTO 0);END d

19、ecoder3_8;ARCHITECTURE rtl OF decoder3_8 IS SIGNAL comb : STD_LOGIC_VECTOR(2 DOWNTO 0);BEGIN combqqqqqqqqq=“XXXXXXXX”; END CASE; ELSE y=“11111111”; END IF; END PROCESS decoder_process;END rtl;2)码制变换译码器 所谓码制变换译码器就是将一种码制转换成另外一种码制的译码器,常用于码制转换电路中,其VHDL描述与变量译码器相似.七段字符显示器ABCDEFGABCDEFGA3 A2 A1 A0 A B C D

20、E F G0 0 0 0 1 1 1 1 1 1 00 0 0 1 0 1 1 0 0 0 00 0 1 0 1 1 0 1 1 0 10 0 1 1 1 1 1 1 0 0 10 1 0 0 0 1 1 0 0 1 10 1 0 1 1 0 1 1 0 1 10 1 1 0 1 0 1 1 1 1 10 1 1 1 1 1 1 0 0 0 01 0 0 0 1 1 1 1 1 1 11 0 0 1 1 1 1 1 0 1 11 0 1 0 1 1 1 0 1 1 11 0 1 1 0 0 1 1 1 1 11 1 0 0 1 0 0 1 1 1 01 1 0 1 0 1 1 1 1 0 11

21、 1 1 0 1 0 0 1 1 1 11 1 1 1 1 0 0 0 1 1 1上图为七段字符显示器的输出与发光二极管的对应关系3)显示译码器LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY se7_display IS PORT(a0,a1,a2,a3 : IN STD_LOGIC; a,b,c,d,e,f,g : OUT STD_LOGIC);END se7_display;- seven_segment display- a- - f| |b- -g- e| |c- - d- end of description for seven_seg

22、ment displayARCHITECTURE rtl OF se7_display IS SIGNAL input : STD_LOGIC_VECTOR(3 DOWNTO 0); SIGNAL output : STD_LOGIC_VECTOR(6 DOWNTO 0);BEGIN display_process: PROCESS(a0,a1,a2,a3) BEGIN inputoutputoutputoutputoutputoutputoutputoutputoutputoutputoutputoutputoutputoutputoutputoutputoutputoutput=“0000

23、000”; END CASE; END PROCESS display_process; a=output(0); b=output(1); c=output(2); d=output(3); e=output(4); f=output(5); g=output(6);END rtl;4.选择器 其逻辑功能是在地址选择信号的控制下从多路输入数据中选择一路数据作为输出端口的输出数据.4)地址译码器 地址译码器是指将译码器输入地址信号翻译成相应的输出控制信号,其典型应用是根据输入端的不同地址输入信号,经过译码后选择不同的存储空间.EEPROMSRAMperipheral2peripheral1PR

24、OM/ShadowRAM0XFFFF0XC0000X80000X40100X40080X40000X0000 现根据右图所示的存储空间的分布情况设计一个地址译码器LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY mux4 IS PORT(a,b,c,d : IN STD_LOGIC; s0,s1 : IN STD_LOGIC; y : OUT STD_LOGIC);END mux4;ARCHITECTURE rtl OF mux4 IS SIGNAL comb :STD_LOGIC_VECTOR(1 DOWNTO 0);BEGIN mux_proc

25、ess:PROCESS(a,b,c,d,s0,s1) BEGIN combyyyynull; END CASE; END PROCESS mux_process;END rtl;yabcds0s1LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY mux4 IS PORT(a,b,c,d : IN STD_LOGIC; s0,s1 : IN STD_LOGIC; y : OUT STD_LOGIC);END mux4;ARCHITECTURE rtl OF mux4 IS SIGNAL comb :STD_LOGIC_VECTOR(1 DOWNTO

26、0);BEGIN mux_process:PROCESS(a,b,c,d,s0,s1) BEGIN comb= s1 & s0; if comb=00 then y=a; elsif comb=01 then y=b; elsif comb=10 then y=c; elsif comb=11 then y=d; else null; end if; END PROCESS mux_process;END rtl;yabcds0s15.比较器LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY equal_comp IS PORT(a,b :

27、IN STD_LOGIC_VECTOR(3 DOWNTO 0); q : OUT STD_LOGIC);END equal_comp;ARCHITECTURE rtl OF equal_comp ISBEGIN comp_process:PROCESS(a,b) BEGIN IF(a=b)THEN q=1; ELSE q=0; END IF; END PROCESS comp_process; END rtl; 下面是4位等值比较器的VHDL语言描述6.三态门及数据缓冲器LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY tri_gate IS PO

28、RT(din : IN STD_LOGIC; en : IN STD_LOGIC; dout : out STD_LOGIC);END tri_gate;ARCHITECTURE rtl OF tri_gate ISBEGIN p1:PROCESS(din,en) BEGIN IF(en=1)THEN dout=din; ELSE dout=Z; END IF; END PROCESS p1; END rtl; 1)三态门2)单向缓冲器dout(0)dout(1)dout(2)dout(3)dout(4)dout(5)dout(6)dout(7)endin(0)din(1)din(2)din(

29、3)din(4)din(5)din(6)din(7) 8位单向缓冲器内部由8个三态门组成,具有8个输入端和8个输出端,所有三态门的使能控制端连在一起,由一个使能信号en控制.LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY tri_buff8 IS PORT(din : IN STD_LOGIC_VECTOR(7 DOWNTO 0); en : IN STD_LOGIC; dout : out STD_LOGIC_VECTOR(7 DOWNTO 0);END tri_buff8;ARCHITECTURE rtl OF tri_buff8 ISBEG

30、IN p1:PROCESS(din,en) BEGIN IF(en=1)THEN dout=din; ELSE doutZ); END IF; END PROCESS p1; END rtl; 3)双向缓冲器 一个8位的双向总线缓冲器的逻辑符号如下图所示.图中,a和b是数据总线的输入和输出端,它们为8位总线结构;dr是数据传输方向的控制端;en是双向总线缓冲器的使能控制端其工作原理如真值表所示abendren dr 数据传输 1 x 高阻 0 0 a b 0 1 a b逻辑符号8位双向总线缓冲器的真值表位双向总线缓冲器的真值表LIBRARY IEEE;USE IEEE.STD_LOGIC_11

31、64.ALL;ENTITY bidir_tri_buff8 IS PORT(a,b : INOUT STD_LOGIC_VECTOR(7 DOWNTO 0); dr,en : IN STD_LOGIC);END bidir_tri_buff8;ARCHITECTURE rtl OF bidir_tri_buff8 IS SIGNAL aout,bout :STD_LOGIC_VECTOR(7 DOWNTO 0);BEGIN p1:PROCESS(a,dr,en) BEGIN IF(en=0 AND dr=1)THEN bout=a; ELSE bout=“zzzzzzzz”; END IF;

32、b=bout; END PROCESS p1; 8位双向总线缓冲器的位双向总线缓冲器的VHDL语言程序语言程序 p2:PROCESS(b,dr,en) BEGIN IF(en=0 AND dr=0)THEN aout=b; ELSE aout=“zzzzzzzz”; END IF; a=aout; END PROCESS p2;END rtl;二.常用时序逻辑电路的VHDL语言程序 常见的时序逻辑电路主要包括触发器、寄存器、移位寄存器以及计数器等.这些常见的时序逻辑电路是构成复杂数字系统的基础.1.触发器1)D触发器(1)基本的D触发器(2)带同步复位端的D触发器(3)带异步复位端的D触发器(

33、4)带同步置位/复位端的D触发器(5)带异步置位/复位端的D触发器LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY dff IS PORT(d,clk : IN STD_LOGIC; q,qd : OUT STD_LOGIC);END dff;ARCHITECTURE rtl OF dff ISBEGIN dff_process:PROCESS(clk) BEGIN IF(clkEVENT AND clk=1)THEN q=d; qb=NOT d; END IF; END PROCESS dff_process;END rtl;(1)基本的D触发器

34、(2)带同步复位端的D触发器dclkqqbresetLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY sync_rdff IS PORT(d,clk : IN STD_LOGIC; reset : IN STD_LOGIC; q,qb : OUT STD_LOGIC);END sync_rdff;ARCHITECTURE rtl OF sync_rdff ISBEGIN rdff_process:PROCESS(clk) BEGIN IF(clkEVENT AND clk=1)THEN IF(RESET=0)THEN q=0; qb=1; ELSE

35、 q=d; qb=NOT d; END IF; END IF; END PROCESS rdff_process;END rtl;(3)带异步复位端的D触发器LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY sync_rdff IS PORT(d,clk : IN STD_LOGIC; reset : IN STD_LOGIC; q,qb : OUT STD_LOGIC);END sync_rdff;ARCHITECTURE rtl OF sync_rdff ISBEGIN rdff_process:PROCESS(clk,reset) BEGIN

36、 IF(RESET=0)THEN q=0; qb=1; ELSIF(clkEVENT AND clk=1)THEN q=d; qb=NOT d; END IF; END PROCESS dff_process;END rtl;(4)带同步置位/复位端的D触发器dclkqqbresetsetLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY sync_rsdff IS PORT(d,clk : IN STD_LOGIC; set,reset : IN STD_LOGIC; q,qd : OUT STD_LOGIC);END sync_rsdff;ARC

37、HITECTURE rtl OF sync_rsdff ISBEGIN rsdff_process:PROCESS(clk) BEGIN IF(clkEVENT AND clk=1)THEN IF(set=0 AND reset=1)THEN q=1; qb=0; ELSIF(set=1 AND reset=0)THEN q=0; qb=1; ELSE q=d; qb=NOT d; END IF; END PROCESS dff_process;END rtl;(5)带异步置位/复位端的D触发器ARCHITECTURE rtl OF sync_rsdff ISBEGIN rsdff_proce

38、ss:PROCESS(clk,set,reset) BEGIN IF(set=0 AND reset=1)THEN q=1; qb=0; ELSIF(set=1 AND reset=0)THEN q=0; qb=1; ELSIF(clkEVENT AND clk=1)THEN q=d; qb=NOT d; END IF; END PROCESS rsdff_process;END rtl;2)J-K触发器 J-K触发器的状态方程为 ,用VHDL逻辑表达式对JK触发器进行描述为:qkq jqLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY jkff1

39、 IS PORT(j,k,clk : IN STD_LOGIC; q : OUT STD_LOGIC);END jkff1;ARCHITECTURE a OF jkff1 IS SIGNAL q_temp : STD_LOGIC;BEGIN p1:PROCESS BEGIN WAIT UNTIL(clkEVENT AND clk=1); q_temp=(j AND (NOT q_temp)OR(NOT k)AND q_temp); END PROCESS; q=q_temp;END a;2.寄存器(通用寄存器的VHDL描述)LIBRARY IEEE;USE IEEE.STD_LOGIC_116

40、4.ALL;ENTITY registerN IS GENERIC(N:integer:=8); PORT(d : IN STD_LOGIC_VECTOR(N-1 DOWNTO 0); en,clk : IN STD_LOGIC; set,reset : IN STD_LOGIC; q : out STD_LOGIC_VECTOR(N-1 DOWNTO 0);END registerN;ARCHITECTURE rtl OF registerN ISBEGIN registerN_process:PROCESS(clk,set,reset) BEGIN IF(set=0 AND reset=1

41、)THEN q1); ELSIF(set=1 AND reset=0)THEN q0); ELSIF(clkevent AND clk=1)THEN IF(EN=1)THEN q=d; END IF; END IF; END PROCESS registerN_process;END rtl;3.移位寄存器 1)串入/串出移位寄存器 串入/串出移位寄存器是指具有一个数据输入端口、一个时钟输入端口和一个数据输出端口的移位寄存器。它的工作原理是:当输入时钟信号的有效边沿到来时,输入端口的数据就会在时钟信号的有效边沿的作用下逐级向后移动。D QCLKDFF1D QCLKDFF2D QCLKDFF3D

42、 QCLKDFF4D QCLKDFF8D QCLKDFF7D QCLKDFF6D QCLKDFF5q(0)q(1)q(2)q(3)q(4)q(5)q(6)q(7)q(8)cp输出d0输入d18位串入/串出移位寄存器的逻辑电路图8位串入/串出移位寄存器的VHDL描述LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY shift_reg IS PORT(d1 : IN STD_LOGIC; cp : IN STD_LOGIC; d0 : OUT STD_LOGIC);END shift_reg;ARCHITECTURE stucture OF shift

43、_reg IS COMPONENT dff PORT(d : IN STD_LOGIC; clk: IN STD_LOGIC; q : OUT STD_LOGIC); END COMPONENT; SIGNAL q : STD_LOGIC_VECTOR(8 DOWNTO 0);BEGIN q(0)=d1; register8:FOR I IN 0 TO 7 GENERATE DFFX:dff PORT MAP(q(i),cp,q(i+1); END GENERATE register8; d0=q(8);END structure;【例】【例】 LIBRARY IEEE; USE IEEE.S

44、TD_LOGIC_1164.ALL;ENTITY shift_reg IS PORT ( CLK : IN STD_LOGIC; DIN : IN STD_LOGIC; QB : OUT STD_LOGIC );END shift_reg;ARCHITECTURE behav OF shift_reg IS SIGNAL REG8 : STD_LOGIC_VECTOR(7 DOWNTO 0);BEGIN PROCESS (CLK) BEGIN IF CLKEVENT AND CLK = 1 THEN REG8(7) = DIN; REG8(6 DOWNTO 0) = REG8(7 DOWNTO

45、 1); END IF; END PROCESS; QB = REG8(0); END behav; 2)串入/并出移位寄存器D QCLKDFF4D QCLKDFF3D QCLKDFF2D QCLKDFF1q1q2q3q0cp输入d1 串入/并出移位寄存器是指具有一个数据输入端口、一个时钟输入端口和多个数据输出端口的移位寄存器。当输入时钟信号的有效边沿到来时,输入端口的数据会在时钟信号有效边沿的作用下逐级向后移动,当达到一定位数后将从输出端口并行输出。4位串入/并出移位寄存器的逻辑电路图LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY shift_

46、reg IS PORT(d1 : IN STD_LOGIC; cp : IN STD_LOGIC; q : OUT STD_LOGIC_vector(3 downto 0);END shift_reg;ARCHITECTURE stucture OF shift_reg IS COMPONENT dff PORT(d : IN STD_LOGIC; clk: IN STD_LOGIC; q : OUT STD_LOGIC); END COMPONENT; SIGNAL temp : STD_LOGIC_VECTOR(4 DOWNTO 0);BEGIN temp(0)=d1; register4

47、:FOR I IN 0 TO 3 GENERATE DFFX:dff PORT MAP(temp(i),cp,temp(i+1); END GENERATE register4; q=temp(4 downto 1);END ;4位串入/并出移位寄存器VHDL描述LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY shift_reg IS GENERIC(SIZE:INTEGER:=8); PORT(d1 : IN STD_LOGIC; cp : IN STD_LOGIC; q : OUT STD_LOGIC_VECTOR(SIZE-1) DOWNT

48、O 0);END shift_reg;ARCHITECTURE stucture OF shift_reg IS COMPONENT dff PORT(d : IN STD_LOGIC; clk: IN STD_LOGIC; q : OUT STD_LOGIC); END COMPONENT; SIGNAL temp : STD_LOGIC_VECTOR(SIZE DOWNTO 0);BEGIN temp(0)=d1; FOR I IN 0 TO SIZE-1 GENERATE DFFX:dff PORT MAP(temp(i),cp,temp(i+1); END GENERATE; q=te

49、mp(SIZE DOWNTO 1);END structure;通用串入/并出移位寄存器VHDL描述4.计数器 计数器是指能够记忆时钟信号脉冲个数的时序逻辑电路,它不仅能用于对时钟脉冲计数,还可以用于分频定时产生节拍脉冲和脉冲系列以及进行数字运算等。1)同步计数器 同步计数器就是指在时钟脉冲的作用下,组成计数器的各个触发器的状态同时发生变 化的一类计数器. 4位二进制同步计数器的逻辑符号4位二进制同步计数器的真值表LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UN

50、SIGNED.ALL;ENTITY counter IS PORT(clk : IN STD_LOGIC; reset : IN STD_LOGIC; set : IN STD_LOGIC; enable : IN STD_LOGIC; cout : OUT STD_LOGIC; q : BUFFER STD_LOGIC_VECTOR(3 DOWNTO 0);END counter;ARCHITECTURE rtl OF counter ISBEGIN counter_process:PROCESS(clk,reset) BEGIN IF(reset=1)THEN q0); ELSIF(clk

51、EVENT AND clk=1)THEN IF(set=1)THEN q=“1010”; ELSIF(enable=1)THEN q=q+1; ELSE q=q; END IF; END IF; END PROCESS counter_process; cout=1WHEN q=“1111”AND enable=1ELSE 0;END rtl;LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY counterN IS GENERI

52、C(SIZE:INTEGER:=8); PORT(clk : IN STD_LOGIC; reset : IN STD_LOGIC; set : IN STD_LOGIC; enable : IN STD_LOGIC; q : BUFFER STD_LOGIC_VECTOR(SIZE-1) DOWNTO 0);END counterN;ARCHITECTURE rtl OF counterN ISBEGIN counterN_process:PROCESS(clk,reset) BEGIN IF(reset=1)THEN q0); ELSIF(clkEVENT AND clk=1)THEN I

53、F(set=1)THEN q1); 通用二进制同步计数器VHDL描述 ELSIF(enable=1)THEN q=q+1; ELSE q=q; END IF; END IF; END PROCESS counterN_process;END rtl;2)可逆计数器 在时钟脉冲的作用下,即可递增计数又可递减计数的计数器称为可逆计数器。对于可 逆计数器来说,我们必须定义一个用来控制计数器方向的控制端口UPDOWN,可逆计数器的 控制方向由它来决定,从而完成可逆计数器不同方式的计数.LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC

54、_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY counterN IS GENERIC(SIZE:INTEGER:=8); PORT(clk : IN STD_LOGIC; reset : IN STD_LOGIC; set : IN STD_LOGIC; enable : IN STD_LOGIC; updown : IN STD_LOGIC; q : BUFFER STD_LOGIC_VECTOR(SIZE-1) DOWNTO 0);END counterN;ARCHITECTURE rtl OF counterN ISBEGIN cou

55、nterN_process:PROCESS(clk,reset) BEGIN IF(reset=1)THEN q0); ELSIF(clkEVENT AND clk=1)THEN IF(set=1)THEN q1); ELSIF(enable=1)THEN IF(updown=1)THEN q=q+1; ELSE q=q-1; END IF; ELSE q=q; END IF; END IF; END PROCESS counterN_process;END rtl;3)异步计数器 异步计数器就是指构成计数器的低位计数触发器的输出作为相邻计数触发器的时钟, 这样逐级串行连接起来的一类计数器。异

56、步计数器和同步计数器的区别之处在于时钟信号的提供方式不同,除此以 外两种计数器是完全相向的。但是,由于异步计数器采用逐级时钟的方式,从而使异步计数 器的延迟增大. 4位异步计数器的逻辑电路图Temp(0)LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE WORK.example.async_rdff;ENTITY async_counter IS PORT(clk : IN STD_LOGIC; reset : IN STD_LOGIC; q : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);END async_counter;ARC

57、HITECTURE rtl OF async_counter IS COMPONENT async_rdff PORT(d,clk : IN STD_LOGIC; reset : IN STD_LOGIC; q,qb : OUT STD_LOGIC); END COMPONENT; SIGNAL temp : STD_LOGIC_VECTOR(4 DOWNTO 0);BEGIN temp(0)temp(i),reset=reset, d=temp(i+1),q=q(i),qb=temp(i+1); END GENERATE label1;END rtl;LIBRARY IEEE;USE IEE

58、E.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY CNT10 IS PORT (CLK,CLR,ENA : IN STD_LOGIC; CO : OUT STD_LOGIC_VECTOR(3 DOWNTO 0); CARRY_OUT : OUT STD_LOGIC ); END CNT10;ARCHITECTURE behav OF CNT10 IS SIGNAL CQI : STD_LOGIC_VECTOR(3 DOWNTO 0);BEGIN PROCESS(CLK, CLR, ENA) BEGIN IF CLR = 1

59、THEN CQI = 0000; ELSIF CLKEVENT AND CLK = 1 THEN IF ENA = 1 THEN IF CQI9 THEN CQI = CQI + 1; ELSE CQI = 0000; END IF; END IF; END IF; END PROCESS; PROCESS(CQI) BEGIN IF CQI=9 THEN CARRY_OUT=1; ELSE CARRY_OUT=0; END IF; END PROCESS; CO=CQI;END behav;LIBRARY IEEE; -32位锁存器位锁存器USE IEEE.STD_LOGIC_1164.AL

60、L;ENTITY REG32B IS PORT ( LOAD : IN STD_LOGIC; DIN : IN STD_LOGIC_VECTOR(31 DOWNTO 0); DOUT : OUT STD_LOGIC_VECTOR(31 DOWNTO 0) );END REG32B;ARCHITECTURE behav OF REG32B ISBEGIN PROCESS(LOAD, DIN) BEGIN IF LOADEVENT AND LOAD=1 THEN DOUT=DIN;-锁存输入数据锁存输入数据 END IF; END PROCESS;END behav;LIBRARY IEEE; -测频控制

温馨提示

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

评论

0/150

提交评论