版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第7章 EDA技术的应用,7.1 组合逻辑电路设计应用 1. 基本与非门电路 2. 运算电路设计 3. 编码器设计 4. 译码器设计 5. 数据选择器设计 6. 数据比较器设计 7. ROM的设计,1. 基本与非门电路,逻辑式,逻辑符号,真值表,(1). LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY nand2 IS PORT ( a ,b: IN STD_LOGIC; y : OUT STD_LOGIC ); END nand2; ARCHITECTURE nand-1 OF nand2 IS BEGIN y =a NAND b; END
2、 nand2-1;,1. 基本与非门电路,ARCHITECTURE nand-2 OF nand2 IS BEGIN PROCESS(a,b) VARIABLE comb: STD_LOGIC_VECTOR(1 DOWNTO 0) ; BEGIN comb:=a,(2),常用的运算电路有加法器、减法器和乘法器,下面以8位乘法器为例,介绍运算电路的设计。 A, B是被乘数和乘数输入端,Q是乘积输出端。 源程序如下: LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY mul IS PORT(a,b :IN integer range 0 to 25
3、5; q :out integer range 0 to 65535); end mul; architecture one of mul is begin q=a*b; end one;,2. 运算电路设计,编码器分为普通编码器和优先编码器两种。在普通编码器中之允许一个输入信号有效,否则输出将发生混乱。下面以十六进制编码键盘为例,介绍普通编码器的设计。 在编码器中, X3.0是行输入端,Y3.0是列输入端,没有键按下时,信号线呈高电平,有键按下时,相应信号线呈低电平, S3.0为编码器输出端。,3. 编码器,library ieee; use ieee.std_logic_1164.all;
4、 entity hcoder is port(x,y:in std_logic_vector(3 downto 0); s:out std_logic_vector(3 downto 0); end hcoder;,3. 编码器,3. 编码器,architecture struc of hcoder is begin process(x,y) variable xy:std_logic_vector(7 downto 0); begin xy:=(x case xy is,3. 编码器,3. 编码器,when B11101110=ssssssssss=B1001;,3. 编码器,3. 编码器,
5、when B10111011=sssssss=B0000; end case; end process; end struc;,3. 编码器,表6-2 8线-3线优先编码器真值表 输 入 输 出 din0 din1 din2 din3 din4 din5 din6 din7 output0 output1 output2 x x x x x x x 0 0 0 0 x x x x x x 0 1 1 0 0 x x x x x 0 1 1 0 1 0 x x x x 0 1 1 1 1 1 0 x x x 0 1 1 1 1 0 0 1 x x 0 1 1 1 1 1 1 0 1 x 0 1
6、1 1 1 1 1 0 1 1 0 1 1 1 1 1 1 1 1 1 1 注:表中的“x”为任意,类似VHDL中的“”值。,【例】 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY coder IS PORT ( din : IN STD_LOGIC_VECTOR(0 TO 7); output : OUT STD_LOGIC_VECTOR(0 TO 2) ); END coder; ARCHITECTURE behav OF coder IS SIGNAL SINT : STD_LOGIC_VECTOR(4 DOWNTO 0); BEGIN
7、 PROCESS (din) BEGIN IF (din(7)=0) THEN output = 000 ; ELSIF (din(6)=0) THEN output = 100 ; ELSIF (din(5)=0) THEN output = 010 ; ELSIF (din(4)=0) THEN output = 110 ; ELSIF (din(3)=0) THEN output = 001 ; ELSIF (din(2)=0) THEN output = 101 ; ELSIF (din(1)=0) THEN output = 011 ; ELSE output = 111 ; END
8、 IF ; END PROCESS ; END behav;,译码器的逻辑功能是将每个输入的二进制代码译成对应的输出高、低电平信号。,4. 译码器,二进制代码,高低电平信号,4. 译码器,library ieee; use ieee.std_logic_1164.all; entity decode38 is port (a,b,c: in std_logic; y: out std_logic_vector (7 downto 0); end decode38; architecture behave of decode38 is signal indata: std_logic_vecto
9、r (2 downto 0); begin Indata=c process(indata) begin case indata is,4. 译码器,when 000=yyyyyyyyy=“XXXXXXXX”; end case; end process; end behave;,4. 译码器,4. 译码器,用VHDL设计7段16进制译码器,用CASE语句完成真值表的功能,向7段数码 管输出信号, 最高位控制 小数点,注意,此语句必须加入,4位加法 计数器,7段译码器,8位总线输出,信号输出,5. 数据选择器,从一组数据中选择一路信号进行传输的电路,称为数据选择器。,控制信号,输入信号,输出信
10、号,数据选择器类似一个多投开关。选择哪一路信号由相应的一组控制信号控制。,5. 数据选择器,例1 四选一数据选择器,LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY multi_4v IS PORT(sel : IN STD_LOGIC_VECTOR (1 DOWNTO 0); Input0,input1,input2,input3 : IN STD_LOGIC; Y : OUT STD_LOGIC ); END multi_4v; ARCHITECTURE a OF multi_4v IS BEGIN,5. 数据选择器,PROCESS (se
11、l,input0,input1,input2,input3) BEGIN IF (sel=00) THEN Y = input0; ELSIF (sel=01) THEN Y = input1; ELSIF (sel=10) THEN Y = input2; ELSIF (sel=11) THEN Y = input3; END IF; END PROCESS; END a;,5. 数据选择器,5. 数据选择器,ENTITY mux21a IS PORT( a, b : IN BIT ; s : IN BIT; y : OUT BIT ) ; END ENTITY mux21a ; ARCHI
12、TECTURE one OF mux21a IS BEGIN y = a WHEN s = 0 ELSE b ; END ARCHITECTURE one ;,例2 2选1多路选择器的4种VHDL描述,ENTITY mux21a IS PORT ( a, b : IN BIT; s : IN BIT; y : OUT BIT ); END ENTITY mux21a; ARCHITECTURE one OF mux21a IS SIGNAL d,e : BIT; BEGIN d = a AND (NOT S) ; e = b AND s ; y = d OR e ; END ARCHITECT
13、URE one ;,. . . ARCHITECTURE one OF mux21a IS BEGIN y = (a AND (NOT s) OR (b AND s) ; END ARCHITECTURE one;,ENTITY mux21a IS PORT ( a, b, s: IN BIT; y : OUT BIT ); END ENTITY mux21a; ARCHITECTURE one OF mux21a IS BEGIN PROCESS (a,b,s) BEGIN IF s = 0 THEN y = a ; ELSE y = b ; END IF; END PROCESS; END
14、 ARCHITECTURE one ;,mux21a功能时序波形,数据比较器是一种运算电路,它可以对两个二进制数或二-十进制编码的数进行比较,得出大于、小与或相等的结果。下面以8位二进制数据比较器为例,介绍数据比较器的设计。 A7.0和B7.0是两个数据输入端,FA是“大于”输出端,FB是“小于”输出端,FE是“等于”输出端。当A7.0大于B7.0时, FA=1;当A7.0小于B7.0时,FB=1; A7.0等于B7.0时,FE=1。,6.数据比较器,LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY comp8 IS PORT( A,B :IN
15、 STD_LOGIC_VECTOR(7 DOWNTO 0); FA,FB,FE:OUT STD_LOGIC); END comp8; ARCHITECTURE one OF comp8 IS BEGIN,6.数据比较器,PROCESS(A,B) BEGIN IF AB THEN FA=1; FB=0; FE=0; ELSIF AB THEN FA=0; FB=1; FE=0;,6.数据比较器,ELSIF A=B THEN FA=0; FB=0; FE=1; END IF; END PROCESS; END one;,6.数据比较器,在数字系统中,按照结构特点分类,只读存储器ROM属于组合逻辑电
16、路。在使用时,ROM中的数据只能读出而不能写入,但掉电后数据不会丢失,因此常用于存放固化的程序和数据。 ROM的设计可以使用硬件描述语言合例化一个指定工艺的ROM两种方法来实现。 对于容量不大的ROM,可以用VHDL的CASE语句来实现。下面是用CASE语句实现8X8位ROM的源程序:,7. ROM的设计,LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY from_rom IS PORT(addr:IN INTEGER RANGE 0 TO 7; ena:IN STD_LOGIC; q : OUT STD_LOGIC_VECTOR(7 DOWN
17、TO 0); END from_rom; ARCHITECTURE aa OF from_rom IS BEGIN PROCESS (ena, adder) BEGIN,7 ROM的设计,7. ROM的设计,IF(ena=1) THEN q q q q q q q q q=“01001000”; END CASE; END IF; END PROCESS; END aa;,7 ROM的设计,7. ROM的设计,7.2 时序逻辑电路设计应用 时序逻辑电路由组合逻辑电路和存储电路两部分组成,存储电路由触发器构成,是时序逻辑电路不可缺少的部分,电路结构决定了时序逻辑的特点,即任一时刻的输出信号不仅取
18、决于当时的输入信号,而且还取决于电路的原来状态。存储电路负责保存组合逻辑电路的某些输出值,并将其反馈回同一个组合逻辑的输入端或输出到其他组合逻辑电路的输入端。记忆特性是时序逻辑电路的基本特征。 存储电路是通过各种存储单元来实现的,因而存储单元是构成时序逻辑电路不可或缺的因素。存储单元按照触发方式可以分为电平触发和边沿触发两种。 时序逻辑电路重要标志是具有时钟脉冲clock,在时钟脉冲的上升沿或下降沿的控制下,时序逻辑电路才能发生状态变化。,常见的时序逻辑电路有触发器, 锁存器, 移位寄存器, 计数器。 触发器是边沿触发的存储单元,只有当时钟信号的沿到来时存储单元的值才能发生变化。锁存器是电平触
19、发的存储单元。一般情况下,锁存器完成的操作总是可以用触发器来实现的,而触发器可以抑制输入信号的毛刺,因而在资源允许的情况下,应尽量使用触发器。例如在FPGA器件中,触发器资源非常丰富,那么在设计时就应该注意避免锁存器的出现。 寄存器与锁存器相比,从寄存数据的角度看,二者的功能是相同的,区别在于:锁存器一般是由电平信号来控制,属于电平敏感型,而寄存器一般由同步时钟信号控制。两者有不同的使用场合,主要取决于控制方式及控制信号和数据信号之间的时序关系:若数据有效滞后于控制信号有效,则只能使用锁存器;若数据提前于控制信号,并要求同步操作,则可以选择寄存器来存放数据。,触发器是构成时序电路的基本单元,
20、有两种稳定的状态:0状态和1状态,在信号作用下,触发器的状态可相互转换。,1. D触发器,D触发器的特性表,D,Q n+1,0,Q n,0,0,0,1,0,1,0,1,1,1,1,置0,状态,置1,CP,1. 时钟信号 将时钟信号作为敏感信号,VHDL程序如下: process (时钟信号名) begin if (时钟信号变化条件)then 顺序语句; end if; end process; 时钟信号上升沿的VHDL描述如下: if (clk event and clk= 1 ) then 或wait until rising_edge (clk); 时钟信号下降沿的VHDL描述如下: if
21、 clk event and clk= 0 then 或wait until falling_edge (clk),1. D触发器,同步复位信号的VHDL描述: process (时钟信号名) begin if (时钟信号变化条件)then if (复位信号变化条件) then 状态复位语句; else 顺序语句; end if; end if; end process;,异步复位信号的VHDL描述: process (复位信号名,时钟信号名) begin if (复位信号变化条件) then 状态复位语句; elsif (时钟信号变化条件)then 顺序语句; end if; end pro
22、cess;,2. 复位信号,1. D触发器,1. D触发器,LIBRARY IEEE ; USE IEEE.STD_LOGIC_1164.ALL ; ENTITY DFF1 IS PORT (CLK : IN STD_LOGIC ; D : IN STD_LOGIC ; Q : OUT STD_LOGIC ); END ; ARCHITECTURE bhv OF DFF1 IS SIGNAL Q1 : STD_LOGIC ; -类似于在芯片内部定义一个数据的暂存节点 BEGIN PROCESS (CLK) BEGIN IF CLKEVENT AND CLK = 1 THEN Q1 = D ;
23、END IF; Q = Q1 ; -将内部的暂存数据向端口输出 END PROCESS ; END bhv;,Entity test1 is port (clk, d : in bit; q : out bit); end test1; architecture body of test1 is signal q1 : bit ; begin process (clk) begin if clk=1 AND clklast_value=0 then q1 = d; end if; q = q1 ; end process; end test1_body;,LIBRARY IEEE; USE I
24、EEE.std_logic_1164.all; Entity test1 is port (clk, d : in bit; q : out bit); end test1; architecture body of test1 is begin process (clk,d) begin if rising_edge(clk) then q = d; end if; end process; end test1_body;,They are all the same,DFF,Entity test1 is port (clk : in bit; d : in bit; q : out bit
25、); end test1; architecture body of test1 is signal q1 : bit ; begin process (clk,d) begin if (clk = 1) then q1 = d; end if; q = q1 ; end process; end body;,Entity test1 is port (clk : in bit; d : in bit; q : out bit); end test1; architecture body of test1 is signal q1 : bit ; begin process (clk) beg
26、in if (clk = 1) then q1 = d; end if; q = q1 ; end process; end body;,比较用5种不同语句的D触发器VHDL程序,library ieee; use ieee.std_logic_1164.all; entity asyn_dff is port (clk, d, preset,clr: in std_logic; q: out std_logic); end asyn_dff; architecture behave of asyn_dff is begin process ( clk, preset, clr) begin
27、if (preset = 1 ) then q= 1; elsif (clr= 1) then q= 0; elsif (clkevent and clk= 1) then q=d; end if ; end process; end behave;,1. D触发器,异步复位/置位的D触发器,1. D触发器,library ieee; use ieee.std_logic_1164.all; entity syn_dff is port (d, clk, reset: in std_logic; q: out std_logic); end syn_dff; architecture beha
28、ve of syn_dff is begin process (clk) begin if rising_edge (clk) then if (reset= 0 ) then q= 0; else q=d; end if; end if; end process; end behave;,带有低有效同步复位端reset的D触发器,锁存器是一种用来暂时保存数据的逻辑部件,下面以具有三态输出8D锁存器为例,介绍锁存器的设计方法。 CLR是复位控制输入端,当CLR=0时,8位数据输出Q7.0=00000000。ENA是使能控制输入端,当ENA=1时,锁存器处于工作状态,输出Q7.0=D7.0;锁存
29、器的状态保持不变。OE是三态输出控制端,当OE=1时,输出为高阻态,即Q7.0=ZZZZZZZZ;OE=0时,锁存器为正常输出状态。,2. 锁存器设计,Library ieee; Use ieee.std_logic_1164.all; Entity latch8 is Port (clr,ena,oe: in std_logic; d: in std_logic_vector(7 downto 0); q: out std_logic_vector(7 downto 0); End latch8; Architecture one of latch8 is signal q_temp: st
30、d_logic_vector(7 downto 0); begin,2. 锁存器设计,u1:process(clk,clr,ena,oe) begin if clr=0 then q_temp=“00000000”; elsif clkevent and clk=1 then if (ena=1) then q_temp=d; end if; end if; if oe=1 then q=“ZZZZZZZZ”; else q=q_temp; end if; end process; End one;,2. 锁存器设计,移位寄存器除了具有存储数码的功能以外,还具有移位功能。移位是指寄存器里的数据
31、能在时钟脉冲的作用下,依次向左移或向右移。能使数据向左移的寄存器称为左移移位寄存器,反之为右移移位寄存器,能使数据向左移也能向右移的寄存器称为双向移位寄存器。 下面以8位双向移位寄存器为例,介绍移位寄存器的设计方法。,3. 移位寄存器设计,在源程序中, D7.0 为数据输入端,CLR是复位控制输入端,当CLR=0时,移位寄存器被复位,寄存器的8位输出Q7.0=00000000;LOD是预置控制输入端,当LOD=1且时钟CLK的上升沿到来时,寄存器状态被输入数据D7.0预置,即Q7.0= D7.0;S是移位方向控制输入端,当S=1时,是右移移位寄存器,在时钟脉冲的控制下,寄存器中的数据依次向右移
32、,S=0时,是左移移位寄存器;DIR是右移串入输入信号,当寄存器处于右移工作状态时,寄存器的最高位Q7从DIR接收右串入数据;DIL是左移串入输入信号,当寄存器处于左移状态时。寄存器的最低位Q0从DIL接收左串入数据。,3. 移位寄存器设计,Library ieee; Use ieee.std_logic_1164.all; Entity rlshift is Port( clr,lod,clk,s,dir,dil:in bit; d:in bit_vector(7 downto 0); q:buffer bit_vector(7 downto 0); End rlshift; Archite
33、cture one of rlshift is signal q_temp:bit_vector(7 downto 0); begin,3. 移位寄存器设计,process(clr,clk,lod,s,dir,dil) begin if clr=0 then q_temp=“00000000”; elsif clkevent and clk=1 then if (lod=1) then q_temp=d; elsif (s=1) then for i in 7 downto 1 loop -实现右移操作 q_temp(i-1)=q(i); end loop; q_temp(7)=dir; el
34、se,3. 移位寄存器设计,for i in 0 to 6 loop -实现左移操作 q_temp(i+1)=q(i); end loop; q_temp(0)=dil; end if; end if; q=q_temp; End process; End one;,3. 移位寄存器设计,LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY SHFRT IS - 8位右移寄存器 PORT ( CLK,LOAD : IN STD_LOGIC; DIN : IN STD_LOGIC_VECTOR(7 DOWNTO 0); QB : OUT STD_LO
35、GIC ); END SHFRT; ARCHITECTURE behav OF SHFRT IS BEGIN PROCESS (CLK, LOAD) VARIABLE REG8 : STD_LOGIC_VECTOR(7 DOWNTO 0); BEGIN IF CLKEVENT AND CLK = 1 THEN IF LOAD = 1 THEN - 装载新数据 REG8 := DIN; ELSE REG8(6 DOWNTO 0) := REG8(7 DOWNTO 1); END IF; END IF; QB = REG8(0); END PROCESS; - 输出最低位 END behav;,带
36、有并行置位的移位寄存器,(2)第二个时钟,以及以后的时钟信号都是移位时钟,(3)第二个时钟后,QB输出了右移出的第2个位1,(1)在第一个时钟到来时,LOAD恰为高电平,工作时序,计数器是在数字系统中使用最多的时序电路,它不仅能用于对时钟脉冲计数,还可以用于分频、定时、产生节拍脉冲和脉冲序列以及进行数字运算等。 按照计数方法分类,计数器可以分为加法计数器,减法计数器和可逆计数器(加/减法计数器)。 按照计数器中各个触发器是否同时翻转分类,计数器可以分为异步计数器和同步计数器。异步计数器是将低位触发器的输出作为高位触发器的输入时钟信号,翻转时刻不同。而同步计数器是将同一个时钟输入到触发器,翻转时
37、刻相同。 按照计数器的计数容量(连续输出1之间所间隔的时钟数)不同,分为八进制、十进制等。,4. 计数器,用VHDL设计4位计数器,4位锁存器,组合电路加1器,锁存信号,输出反馈,综合后的计数器电路RTL图,LIBRARY ieee; USE ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; ENTITY ls160 IS PORT( clk:in std_logic; count: buffer std_logic_vector(3 downto 0); tc:out std_logic); END ls160; ARCHIT
38、ECTURE behave OF ls160 IS BEGIN tc=1 when (count=1001 ) else 0;,4. 计数器,模10计数,cale: process(clk) begin if(rising_edge(clk) then if(count=1001)then count=0000; else count=count+1; end if; end if; END PROCESS; END behave;,4. 计数器,模10计数,4. 计数器,带有复位和时钟使能的10进制计数器,LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL;
39、USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY CNT10 IS PORT (CLK,RST,EN : IN STD_LOGIC; CQ : OUT STD_LOGIC_VECTOR(3 DOWNTO 0); COUT : OUT STD_LOGIC ); END CNT10; ARCHITECTURE behav OF CNT10 IS BEGIN PROCESS(CLK, RST, EN) VARIABLE CQI : STD_LOGIC_VECTOR(3 DOWNTO 0); BEGIN IF RST = 1 THEN CQI := (OTHERS =0)
40、 ; -计数器复位 ELSIF CLKEVENT AND CLK=1 THEN -检测时钟上升沿 IF EN = 1 THEN -检测是否允许计数 IF CQI 0);-大于9,计数值清零 END IF; END IF; END IF; IF CQI = 1001 THEN COUT = 1; -计数大于9,输出进位信号 ELSE COUT = 0; END IF; CQ = CQI; -将计数值向端口输出 END PROCESS; END behav;,RTL电路,工作时序,library ieee; use ieee.std_logic_1164.all; use ieee.std_log
41、ic_unsigned.all; entity cnt60 is port (clk, reset: in std_logic; co : out std_logic; qh,ql : buffer std_logic_vector (3 downto 0); end cnt60; architecture behave of cnt60 is begin co = 1 when ( qh= 0101 and ql= 1001 ) else 0;,4. 计数器,模60计数,process ( clk, reset) begin if (reset= 0) then qh = 0000; ql=
42、 0000; elsif (clkevent and clk= 1 ) then if (ql=9) thenql= 0000; if (qh=5) then qh= 0000; else qh=qh+1; end if; else ql=ql+1; end if; end if; end process; end Behave;,4. 计数器,ql:=ql+1; IF (ql=10) THEN ql := 0 ; qh := qh + 1; IF ( qh = 6) THEN qh := 0; CO=1; ELSE CO=0; END IF ; END IF ;,模60计数,library
43、ieee; use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; use ieee.std_logic_unsigned.all; entity cdu24 is port ( clk:in std_logic; co : out std_logic; mm :out std_logic_vector (7 downto 0); end cdu24 ; architecture aa of cdu24 is signal out1,out2 :integer range 0 to 9; signal out3,out4 :std_
44、logic_vector (3 downto 0); begin process(clk) begin if clkevent and clk=1 then if (out2=2) and (out1=3) then,4. 计数器,模24计数,out1=0; out2=0; co=1; else out1=out1+1; co=0; if out1=9 then out1=0; out2=out2+1; end if; end if; end if; out3= conv_std_logic_vector(out1,4); out4= conv_std_logic_vector(out2,4)
45、; mm=out4 ,4. 计数器,模24计数,4. 计数器,5 分频器,分频器在数字系统中经常使用,其设计方案也有很多种。可以借助计数器的进位输出端产生分频信号,例如,用六十进制计数器的输出信号产生六十分频信号。对于分频信号而言,无论取自加法计数器的进位输出还是减法计数器的借位输出分频结果都是一样的。 例如,时钟信号的频率为1KHz,利用计数器产生的分频信号频率如下表所示,其分频信号的频率分布不均匀,无法获得1KHz500Hz之间的分频信号。,为了解决计数器产生的分频信号频率分布不均匀的问题,下面提供一种小数分频电路的设计方案。例如,时钟信号的频率为1KHz,需要产生750Hz的分频信号,计
46、算其分频比为6/8。 设计思路是在8个时钟信号中保留6个时钟信号。具体做法是,首先设计一个8进制计数器,计数器的输出信号设计成2个0、6个1的形式,将该输出信号与时钟信号进行逻辑与运算,与运算的结果就是希望产生的分频信号。 例:用VHDL设计一个6/8分频系数的分频电路。计数器的功能表如下表所示。,根据功能表设计的程序如下: Library ieee; Use ieee.std_logic_1164.all; Entity fre is Port(clk,reset:in std_logic; outclk:out std_logic); End fre; Architecture be of
47、 fre is type fsm_st is(s0,s1,s2,s3,s4,s5,s6,s7); signal current_state,next_state:fsm_st; signal y,y1: std_logic; begin,Reg:process(reset,clk) begin if reset=1 then current_state y y y y y y y y=1;next_state=s0; end case;,If falling_edge(clk) then y1=y; End if; outclk=y1 and clk; End process; End be;
48、 分频器的仿真波形如图。可以看出,每8个周期的时钟信号产生6个周期的输出时钟,输出信号相对于时钟而言,该分频电路产生的是6/8分频信号。,6 双向电路和三态控制电路设计,( 1 ) 三态门设计,【例】 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY tri_s IS port ( enable : IN STD_LOGIC; datain : IN STD_LOGIC_VECTOR(7 DOWNTO 0); dataout : OUT STD_LOGIC_VECTOR(7 DOWNTO 0); END tri_s ; ARCHITECTURE
49、 bhv OF tri_s IS BEGIN PROCESS(enable,datain) BEGIN IF enable = 1 THEN dataout = datain ; ELSE dataout =ZZZZZZZZ ; END IF ; END PROCESS; END bhv;,( 2) 双向端口设计,【例】 library ieee; use ieee.std_logic_1164.all; entity tri_state is port (control : in std_logic; in1: in std_logic_vector(7 downto 0); q : ino
50、ut std_logic_vector(7 downto 0); x : out std_logic_vector(7 downto 0); end tri_state; architecture body_tri of tri_state is begin process(control,q,in1) begin if (control = 0) then x = q ; else q = in1; x=ZZZZZZZZ ; end if; end process; end body_tri;,双向端口设计,双向端口设计,【例】 (以上部分同上例) process(control,q,in1
51、) begin if (control=0) then x = q ; q = ZZZZZZZZ; else q = in1; x =ZZZZZZZZ; end if; end process; end body_tri;,双向端口设计,(3) 三态总线电路设计,LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY tristate2 IS port ( input3, input2, input1, input0 : IN STD_LOGIC_VECTOR (7 DOWNTO 0); enable : IN STD_LOGIC_VECTOR(1
52、DOWNTO 0); output : OUT STD_LOGIC_VECTOR (7 DOWNTO 0); END tristate2 ; ARCHITECTURE multiple_drivers OF tristate2 IS BEGIN PROCESS(enable,input3, input2, input1, input0 ) BEGIN IF enable = 00 THEN output Z); END IF ; IF enable = 01 THEN output Z); END IF ; IF enable = 10 THEN output Z); END IF ; IF
53、enable = 11 THEN output Z); END IF ; END PROCESS; END multiple_drivers;,三态总线电路设计,library ieee; use ieee.std_logic_1164.all; entity tri is port (ctl : in std_logic_vector(1 downto 0); datain1, datain2,datain3, datain4 : in std_logic_vector(7 downto 0); q : out std_logic_vector(7 downto 0) ); end tri;
54、 architecture body_tri of tri is begin q Z) ; q Z) ; q Z) ; q Z) ; end body_tri;,【例】,7.存储器的设计,(1)只读存储器 ROM存储单元中的信息可一次写入、多次读出。且当ROM存储芯片掉电时,存储单元中的信息不会消失,在电路系统中常用ROM存放固定的程序和数据。 (2) 随机读写存储器 RAM有读与写两种操作,而且在读写上对时间有较严格的要求。下面给出一个8X8的双口SRAM的参数化的程序。,LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGI
55、C_ARITH.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY dpram IS generic(width:integer:=8; depth:ingeter:=8; adder:integer:=3); PORT(datain:IN STD_LOGIC_VECTOR(width-1 DOWNTO 0); dataout:out STD_LOGIC_VECTOR(width-1 DOWNTO 0); clock,we,re:IN STD_LOGIC; wadd:in STD_LOGIC_VECTOR(adder-1 DOWNTO 0); radd:
56、in STD_LOGIC_VECTOR(adder-1 DOWNTO 0); END dpram; ARCHITECTURE aa OF dpram IS Type mem is array(0 to depth-1) of STD_LOGIC_VECTOR(width-1 DOWNTO 0); Signal ramtmp:mem; BEGIN,PROCESS (clock)写进程 BEGIN If (clockevent and clock=1) then if(we=1) then ramtmp(conv_integer(wadd)=datain; End if; End if; End
57、process; PROCESS (clock)读进程 BEGIN If (clockevent and clock=1) then if(re=1) then dataout=ramtmp(conv_integer(radd); End if; End if; End process; End aa;,(3)先进先出存储器 以上三种存储器都可以采用定制的方式使用宏功能模块来设计输入。 只要通过设置参数便可方便地将宏功能模块定制为不同的大小。具体的后面详细介绍。,7.3 有限状态机设计 有限状态机是设计时序逻辑电路的重要描述方法,是实现高效率高可靠性逻辑控制的重要途径。 因为状态机是按照预先设计的状态顺序运行的,所以状态机的顺序控
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 屈光术后神经可塑性的患者教育策略
- 居民参与度社区提升策略
- 导尿管相关尿潴留的预防与护理策略
- 医疗信息化与电子病历标准化
- 数字程控交换机技术演进与应用
- 2026年及未来5年中国水下机器人设备行业发展趋势预测及投资战略咨询报告
- 2026年及未来5年中国汽车座椅配件行业市场调查研究及投资前景预测报告
- 2026年及未来5年中国棉精梳机行业市场调查研究及投资战略咨询报告
- 2026年及未来5年市场数据中国蒿甲醚行业市场调查研究及投资战略咨询报告
- 玉溪市2024云南玉溪师范学院公开招聘博士人员(37人)笔试历年参考题库典型考点附带答案详解(3卷合一)试卷2套
- 完美着装智慧树知到期末考试答案章节答案2024年武汉纺织大学
- 吉林丰满水电站全面治理(重建)工程变更环评
- 音乐鉴赏与实践考核试题及答案
- 汽车线束DFMEA设计失效模式和影响分析
- 王洪图黄帝内经80课时讲稿
- 工序交接单-范例
- 《JSP程序设计》教案
- 高中语文-中国精神(共34张PPT)
- 尿液有形成分显微镜检查
- 医疗器械公司财务部职责
- JJF 1334-2012混凝土裂缝宽度及深度测量仪校准规范
评论
0/150
提交评论