版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第6章 VHDL程序设计基础,6.1 常用组合逻辑电路设计 6.2 时序逻辑电路设计 6.3 存储器设计 6.4 状态机设计 小结,6.1 常用组合逻辑电路设计,6.1.1基本门电路 基本门电路有与门、或门、非门、与非门、或非门和异或门等,用VHDL语言来描述十分方便。 12输入与非门电路 LIBRARY ieee; USE ieee.std_logic_1164.ALL; ENTITY nand2 IS PORT(a,b:IN Std_logic; y:OUT std_logic);,下一页,返回,6.1 常用组合逻辑电路设计,END nand2; ARCHITECTURE one OF n
2、and2 IS BEGIN y=a NAND B; END one; 22输入或非门 LIBRARY ieee; use ieee.std_logic_1164.ALL; entity nor2 is port(a,b:in std_logic; y:out std_logic);,下一页,返回,上一页,6.1 常用组合逻辑电路设计,END nor2; architecture nor_behave of nor2 is BEGIN y=a nor b; END nor_behave; 32输入异或门电路 library ieee; use ieee.std_logic_1164.ALL; e
3、ntity xor2 is PORT(a,b:IN std_logic; y:out std_logic);,下一页,返回,上一页,6.1 常用组合逻辑电路设计,END XOR2; ARCHITECTURE XOR_BEHAVE OF XOR2 IS BEGIN y=a xor b; END XOR_BEHAVE;,下一页,返回,上一页,6.1 常用组合逻辑电路设计,6.1.2编码器/译码器 1编码器 8-3线优先编码器的输入信号为input(0)、input(0)、input(1)、input(2)、input(3)、input(4)、input(5)、 input(6)和input(7),
4、输出信号为output(0)、output(1)和output(2)。输入信号中input(7)的优先级别最高,依次类推,input(0)的优先级别最低。8-3线优先编码器的真值表如表6-1所示,表中为任意值。,下一页,返回,上一页,6.1 常用组合逻辑电路设计,【例6-1】8-3线优先编码器的VHDL程序。 LIBRARY ieee; USE ieee.std_logic_1164.ALL; ENTITY ENCODER38 IS PORT(input: IN std_logic_VECTOR(7 DOWNTO 0); output: OUT std_logic_VECTOR(2 DOWNT
5、O 0); END ENCODER38; ARCHITECTURE ART3 OF ENCODER38 IS BEGIN PROCESS(IN1) BEGIN,下一页,返回,上一页,6.1 常用组合逻辑电路设计,IF input(7)=1 THEN output=111; ELSIF input(6)=1 THEN output=110; ELSIF input(5)=1 THEN output=101; ELSIF input(4)=1 THEN output=100; ELSIF input(3)=1 THEN output=011; ELSIF input(2)=1 THEN outpu
6、t=010; ELSIF input(1)=1 THEN output=001; ELSIF input(0)=1 THEN output=000; ELSE output=XXX; END IF ; END PROCESS; END ART3;,下一页,返回,上一页,6.1 常用组合逻辑电路设计,2译码器 译码器是最常用的组合电路之一,三线-八线译码器74LS138的真值表如表6-2所示。 【例6-2】用VHDL描述的三线-八线译码器74LS138源程序。 LIBRARY ieee; USE ieee.std_logic_1164.ALL; entity decoder38 is port(
7、a,b,c,g1,g2a,g2b:in std_logic; y:out std_logic_vector(7 downto 0); END decoder38;,下一页,返回,上一页,6.1 常用组合逻辑电路设计,architecture behave38 OF decoder38 is signal indata:std_logic_vector(2 downto 0); BEGIN indatayyy=11111011;,下一页,返回,上一页,6.1 常用组合逻辑电路设计,when 011=yyyyyy=XXXXXXXX; END case; else y=11111111; END I
8、F; END PROCESS; END behave38;,下一页,返回,上一页,6.1 常用组合逻辑电路设计,6.1.3运算器 1数值比较器 数值比较器可以比较两个二进制是否相等,下面是一个8位比较器的VHDL描述。有两个8位二进制数,分别是A和B,输出为EQ,当A=B时,EQ=1,否则EQ=0。 【例6-3】8位数值比较器的VHDL描述。 LIBRARY ieee; USE ieee.std_logic_1164.ALL; ENTITY compare IS PORT (A,B: IN std_logic_VECTOR(7 DOWNTO 0); EQ: OUT std_logic);,下一
9、页,返回,上一页,6.1 常用组合逻辑电路设计,END compare; ARCHITECTURE one OF compare IS BEGIN EQ =1 WHEN A=B ELSE 0; END one; 2运算器 【例6-4】对4位二进制数a,b作加法、减法和乘法运算的VHDL程序。 LIBRARY ieee; USE ieee.std_logic_1164.ALL; USE ieee.std_logic_ARITH.ALL; USE ieee.std_logic_UNSIGNED.ALL; ENTITY ARITHMETIC IS,下一页,返回,上一页,6.1 常用组合逻辑电路设计,
10、PORT (A,B:IN std_logic_VECTOR(3 DOWNTO 0); Q1:OUT std_logic_VECTOR(4 DOWNTO 0); Q2:OUT std_logic_VECTOR(3 DOWNTO 0); Q3:OUT std_logic_VECTOR(7 DOWNTO 0); END ARITHMETIC; ARCHITECTURE ART OF ARITHMETIC IS BEGIN PROCESS(A,B) BEGIN Q1=(0,下一页,返回,上一页,6.1 常用组合逻辑电路设计,3求补器 【例6-5】 LIBRARY IEEE; USE IEEE.STD_
11、LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY patch IS PORT(a:IN STD_LOGIC_VECTOR(7 DOWNTO 0); b:OUT STD_LOGIC_VECTOR(7 DOWNTO 0); END patch; ARCHITECTURE rtl OF patch IS BEGIN b=NOT a+1; END rtl;,下一页,返回,上一页,6.1 常用组合逻辑电路设计,6.1.4数据选择器 4选1选择器用于四路信号的切换。4选1选择器有4个信号输入端data (0)data(3),两个信号选择端sel
12、(0)、sel(1),一个信号输出端Y。当sel输入不同的选择信号时,就可以使data (0)data(3)中某个相应的输入信号与输出端Y接通。4选1选择器的真值表如表6-3所示。 【例6-6】4选1选择器的VHDL描述。 LIBRARY ieee; USE ieee.std_logic_1164.ALL; ENTITY MUX41 IS PORT(data: IN std_logic_VECTOR(3 DOWNTO 0); sel: IN std_logic_VECTOR(1 DOWNTO 0); Y: OUT std_logic);,下一页,返回,上一页,6.1 常用组合逻辑电路设计,EN
13、D MUX41; ARCHITECTURE ART OF MUX41 IS BEGIN PROCESS(data,sel) BEGIN IF (sel=00) THEN Y=data(0); ELSIF (sel=01) THEN Y=data(1); ELSIF (sel=11)THEN Y=data(2); ELSE Y=data(3); END IF; END PROCESS; END ART;,下一页,返回,上一页,6.1 常用组合逻辑电路设计,6.1.5三态门及总线缓冲器 三态门和总线缓冲器是驱动电路经常用到的器件。 1.三态门电路 【例6-7】三态门电路的VHDL描述 LIBRAR
14、Y ieee; USE ieee.std_logic_1164.ALL; ENTITY TRISTATE IS PORT (EN,DIN : IN std_logic; DOUT : OUT std_logic); END TRISTATE;,下一页,返回,上一页,6.1 常用组合逻辑电路设计,ARCHITECTURE one OF TRISTATE IS BEGIN PROCESS (EN,DIN) BEGIN IF EN=1 THEN DOUT=DIN; ELSE DOUT= Z; END IF ; END PROCESS; END one;,下一页,返回,上一页,6.1 常用组合逻辑电路
15、设计,2. 单向总线驱动器 在微型计算机的总线驱动中经常要用单向总线缓冲器,它通常由多个三态门组成,用来驱动地址总线和控制总线。一个8位的单向总线缓冲器如图6-1所示。 【例6-8】单向8位总线缓冲器的VHDL描述 LIBRARY ieee; USE ieee.std_logic_1164.ALL; ENTITY TR1_BUF8 IS PORT (DIN: IN std_logic_VECTOR(7 DOWNTO 0); EN: IN std_logic;,下一页,返回,上一页,6.1 常用组合逻辑电路设计,DOUT: OUT std_logic_VECTOR(7 DOWNTO 0); EN
16、D TR1_BUF8; ARCHITECTURE ART OF TR1_BUF8 IS BEGIN PROCESS (EN,DIN) BEGIN IF(EN=1) THEN DOUT=DIN; ELSE DOUT=ZZZZZZZZ; END IF; END PROCESS; END ART;,下一页,返回,上一页,6.1 常用组合逻辑电路设计,3双向总线缓冲器 双向总线缓冲器用于数据总线的驱动和缓冲,典型的双向总线缓冲器如图6-2所示。图中的双向总线缓冲器有两个数据输入输出端A和B,一个方向控制端DIR和一个选通端EN。EN=0时双向缓冲器选通,若DIR=0,则A=B,反之则B=A。 【例6-
17、9】双向总线冲器的VHDL描述。 LIBRARY ieee; USE ieee.std_logic_1164.ALL; ENTITY BIDIR IS PORT(A,B: INOUT std_logic_VECTOR(7 DOWNTO 0); EN,DIR: IN std_logic);,下一页,返回,上一页,6.1 常用组合逻辑电路设计,END BIDIR; ARCHITECTURE ART OF BIDIR IS SIGNAL AOUT , BOUT: std_logic_VECTOR(7 DOWNTO 0); BEGIN PROCESS (A,EN,DIR) BEGIN IF(EN=0)
18、AND (DIR=1) THEN BOUT=A; ELSE BOUT=ZZZZZZZZ; END IF ; B=BOUT; END PROCESS;,下一页,返回,上一页,6.1 常用组合逻辑电路设计,PROCESS (B,EN,DIR) BEGIN IF(EN=0)AND (DIR=1) THEN AOUT=B; ELSE AOUT=ZZZZZZZZ; END IF ; A=AOUT; END PROCESS; END ART;,返回,上一页,6.2 时序逻辑电路设计,时序电路主要有触发器、寄存器、计数器、序列信号发生器和序列信号检测器等。 6.2.1时钟信号和复位信号 1.时钟信号的描述
19、(1)若进程的敏感信号是时钟信号,这时时钟信号出现在PROCESS后的括号中。 例: PROCESS (时钟信号名) BEGIN IF (时钟信号变化条件) THEN,下一页,返回,6.2 时序逻辑电路设计,顺序语句; END IF; END PROCESS; (2) 在进程中用WAIT ON语句等待时钟 这样的电路没有敏感信号,进程通常停留在WAIT ON 语句上,只有时钟信号到来且满足一定条件时,其余语句才能执行。 例: PROCESS BEGIN WAIT ON (时钟信号名) UNTIL (时钟信号变化条件),下一页,返回,上一页,6.2 时序逻辑电路设计,顺序语句; END PROC
20、ESS; (3) 时钟信号的边沿描述 时钟信号上升沿VHDL描述如下: IF (clk event and clk=1)或WAIT UNTIL RISING_EDGE(clk); 时钟信号下降沿VHDL描述如下: IF (clk event and clk=0)或WAIT UNTIL FALLING_EDGE(clk);,下一页,返回,上一页,6.2 时序逻辑电路设计,2.复位信号 (1) 同步复位 同步复位是指,当时钟边沿有效且复位信号有效时,时序电路复位。 同步信号复位的VHDL描述如下: PROCESS(时钟信号名) IF (时钟信号变化条件) THEN IF (复位信号变化条件) TH
21、EN 复位语句; ELSE 顺序语句; END IF;,下一页,返回,上一页,6.2 时序逻辑电路设计,END IF; END PROCESS; (2)异步复位 异步复位指的时,只要复位信号有效,时序电路就被复位,复位信与时钟信号外无关。 异步信号复位的VHDL描述如下: PROCESS(时钟信号名) IF (复位信号变化条件) THEN 复位语句; ELSIF(时钟信号变化条件) THEN 顺序语句; END IF; END PROCESS;,下一页,返回,上一页,6.2 时序逻辑电路设计,6.2.2触发器 触发器是构成时序逻辑电路的基本元件,常用的触发器包括RS触发器、JK触发器、D触发器
22、等类型。 1. D触发器 【例6-10】 同步清零D触发器VHDL程序。 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY dff IS PORT(d:IN STD_LOGIC; clk:IN STD_LOGIC; clr:IN STD_LOGIC;,下一页,返回,上一页,6.2 时序逻辑电路设计,q: OUT STD_LOGIC); END dff; ARCHITECTURE behav2 OF dff IS BEGIN PROCESS(clk) BEGIN IF clkEVENT AND clk=1 THEN IF clr=1 THEN q
23、=0; ELSE q=d;,下一页,返回,上一页,6.2 时序逻辑电路设计,END IF; END IF; END PROCESS; END behav2; 【例6-11】异步清零D触发器VHDL程序。 ARCHITECTURE behavl OF dff_y IS BEGIN PROCESS(clk,clr,d) BEGIN IF clr=1 THEN q=0;,下一页,返回,上一页,6.2 时序逻辑电路设计,ELSIF clkEVENT AND clk=1 THEN q=d; END IF; END PROCESS; END behavl; 2RS触发器 【例6-12】RS触发器VHDL程
24、序。 LIBRARY IEEE; USE IEEE. STD_LOGIC_1164.ALL;,下一页,返回,上一页,6.2 时序逻辑电路设计,ENTITY rsff IS PORT(r,s:IN STD_LOGIC; q,qb:OUT STD_LOGIC); END rsff; ARCHITECTURE behavl OF rsff IS SIGNAL q_temp,qb_temp:STD_LOGIC; BEGIN PROCESS(r,s) BEGIN IF s=1AND r=0 THEN q_temp=0; qb_temp=1;,下一页,返回,上一页,6.2 时序逻辑电路设计,ELSIF s
25、=0AND r=1 THEN q_temp=1; qb_temp=0; ELSE q_temp=q_temp; qb_temp=qb_temp; END IF; END PROCESS; q=q_temp; qb=qb_temp; END behavl;,下一页,返回,上一页,6.2 时序逻辑电路设计,3. JK触发器 【例6-13】JK触发器VHDL程序。 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY JKCFQ IS PORT(J,K,CLK:IN STD_LOGIC; Q,QB:BUFFER STD_LOGIC); END JKCFQ
26、; ARCHITECTURE ART OF JKCFQ IS SIGNAL Q_S,QB_S:STD_LOGIC; BEGIN PROCESS(CLK,J,K) BEGIN,下一页,返回,上一页,6.2 时序逻辑电路设计,IF (CLKEVENT AND CLK=1)THEN IF(J=0 AND K=1) THEN Q_S=0; QB_S=1; ELSIF (J=1 AND K=0) THEN Q_S=1; QB_S=0; ELSIF (J=1 AND K=1) THEN Q_S=NOT Q_S; QB_S=NOT QB_S;,下一页,返回,上一页,6.2 时序逻辑电路设计,END IF;
27、END IF ; Q=Q_S; QB=QB_S; END PROCESS; END ART; 6.2.3寄存器和移位寄存器 1.寄存(锁存)器 寄存器用于寄存一组二值代码,广泛用于各类数字系统。因为一个触发器能储存1位二值代码,所以用N个触发器组成的寄存器能储存一组N位的二值代码。,下一页,返回,上一页,6.2 时序逻辑电路设计,具有三态输出的8D锁存器元件符号如图6-3所示。CLR是复位控制输入端,当CLR=0时,8位数据输出Q7.0=00000000。ENA是使能控制输入端,当ENA=1时,锁存器处于工作状态,输出Q7.0D7.0;ENA=0时,锁存器的状态保持不变。OE是三态输出控制端,
28、当OE=1时,输出为高阻态;OE=0时,锁存器为正常输出状态。 【例6-14】8D锁存器。 LIBRARY ieee; USE ieee.std_logic_1164.ALL; ENTITY latch8 IS PORT(clr,clk,ena,oe:IN std_logic; d:IN std_logic_VECTOR(7 DOWNTO 0);,下一页,返回,上一页,6.2 时序逻辑电路设计,q:BUFFER std_logic_VECTOR(7 DOWNTO 0); END latch8; ARCHITECTURE one OF latch8 IS SIGNAL q_temp:std_lo
29、gic_VECTOR(7 DOWNTO 0); BEGIN 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;,下一页,返回,上一页,6.2 时序逻辑电路设计,END IF; IF oe=1 THEN q= ZZZZZZZZ; ELSE q = q_temp; END IF; END PROCESS u1; END one; 2. 移位寄存器 移位寄存器除了具有存储代码的功能以外,还具
30、有移位功能。所谓移位功能,是指寄存器里存储的代码能在移位脉冲的作用下依次左移或右移。因此,移位寄存器不但可以用来寄存代码,还可用来实现数据的串并转换、数值的运算以及数据处理等。,下一页,返回,上一页,6.2 时序逻辑电路设计,【例6-15】具有左移一位或右移一位、并行输入和同步复位功能的8位移位寄存器VHDL程序。 LIBRARY ieee; USE ieee.std_logic_1164.ALL; ENTITY SHIFTER IS PORT(DATA:IN std_logic_VECTOR(7 DOWNTO 0); clk:IN std_logic; SHIFT_LEFT:IN std_l
31、ogic; SHIFT_RIGHT:IN std_logic; RESET:IN std_logic;,下一页,返回,上一页,6.2 时序逻辑电路设计,MODE:IN std_logic_VECTOR(1 DOWNTO 0); QOUT:BUFFER std_logic_VECTOR(7 DOWNTO 0); END SHIFTER; ARCHITECTURE ART OF SHIFTER IS BEGIN PROCESS BEGIN WAIT UNTIL(RISING_EDGE(CLK); IF(RESET=1)THEN QOUT=00000000; -同步复位功能的实现,下一页,返回,上一
32、页,6.2 时序逻辑电路设计,ELSE CASE MODE IS WHEN 01=QOUTQOUTQOUTNULL; END CASE; END IF; END PROCESS; END ART;,下一页,返回,上一页,6.2 时序逻辑电路设计,6.2.4计数器 计数器是在数字系统中使用最多的时序电路,它不仅能用于对时钟脉冲计数,还可以用于分频、定时、产生节拍脉冲和脉冲序列以及进行数字运算等。 1. 具有清零端的4位二进制计数器 【例6-17】具有清零端的4位二进制计数器VHDL程序。 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.ST
33、D_LOGIC_UNSIGNED. ALL; ENTITY cnt4 IS,下一页,返回,上一页,6.2 时序逻辑电路设计,PORT(clk:IN STD_LOGIC; clr:IN STD_LOGIC; q:BUFFER STD_LOGIC_VECTOR(3 DOWNTO 0); END cnt4; ARCHITECTURE behav OF cnt4 IS BEGIN PROCESS(clk,clr) BEGIN IF clr=1 THEN q=0000;,下一页,返回,上一页,6.2 时序逻辑电路设计,ELSIF clkEVENT AND clk=1 THEN q=q+1; END IF
34、; END PROCESS; END behav; 28位异步复位的可预置加减计数器 【例6-18】8位异步复位的可预置加减计数器VHDL程序。 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY counter8 IS,下一页,返回,上一页,6.2 时序逻辑电路设计,PORT(clk:IN STD_LOGIC; reset:IN STD_LOGIC; ce,load,dir:IN STD_LOGIC; din:IN INTEGER RANGE 0 TO 255; count:OUT INTEGER RANGE 0 TO 255); END co
35、unter8; ARCHITECTURE counter8_arch OF counter8 IS BEGIN PROCESS(clk,reset) VARIABLE counter:INTEGER RANGE 0 TO 255; BEGIN,下一页,返回,上一页,6.2 时序逻辑电路设计,IF reset=1 THEN counter:=0; ELSIF clkEVENT AND clk=1 THEN IF load=1 THEN counter:=din; ELSE IF ce=1 THEN IF dir=1 THEN IF counter=255 THEN counter:=0;,下一页
36、,返回,上一页,6.2 时序逻辑电路设计,ELSE counter:=counter+1; END IF; ELSE IF counter=0 THEN counter:=255; ELSE counter:=counter-1; END IF; END IF; END IF;,下一页,返回,上一页,6.2 时序逻辑电路设计,END IF; END IF; count=counter; END PROCESS; END counter8_arch; 34位移位寄存器型扭环计数器 【例6-19】4位移位寄存器型扭环计数器VHDL程序。 LIBRARY IEEE; USE IEEE. STD_LO
37、GIC_1164.ALL; ENTITY shift_cnt4 IS-本例的4位扭环计数器采用高位取反后移至低位的循环码编码方式,下一页,返回,上一页,6.2 时序逻辑电路设计,PORT(clr,clk:IN STD_LOGIC; Y:OUT STD_LOGIC_VECTOR(3 DOWNTO 0); END shift_cnt4; ARCHITECTURE behav OF shift_cnt4 IS SIGNAL q:STD_LOGIC_VECTOR(3 DOWNTO 0); SIGNAL d0:STD_LOGIC;-描述最低位的输入信号,扭环计数器的设计关键所在 BEGIN PROCES
38、S(clk,clr) BEGIN,下一页,返回,上一页,6.2 时序逻辑电路设计,IF clr=1 THEN q=1111;-置计数器的初始状态 ELSIF clkEVENT AND clk=1 THEN q(0)=d0;q(3 DOWNTO 1)=q(2 DOWNTO 0);-时钟上沿到来时移位 END IF; IF(q=1111OR q=1110OR q= 1100OR q=1000OR q=0000OR q=0001OR q=0011OR q=0111)THEN d0=NOT q(3); ELSE,下一页,返回,上一页,6.2 时序逻辑电路设计,IF q=1010OR q=0101THE
39、N -如果进入非法状态,电路能够自启动 d0=NOT q(3); ELSE d0=q(3); END IF; END IF; END PROCESS; Y=q; END behav;,下一页,返回,上一页,6.2 时序逻辑电路设计,4具有异步复位,模为60的8421BCD码加法计数器。 【例6-20】具有异步复位,模为60的8421BCD码加法计数器VHDL程序。 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY CNTM60 IS PORT(CLK ,RESET:IN STD_
40、LOGIC; CO:OUT STD_LOGIC; QH:BUFFER STD_LOGIC_VECTOR(3 DOWNTO 0); QL:BUFFER STD_LOGIC_VECTOR(3 DOWNTO 0); END CNTM60,下一页,返回,上一页,6.2 时序逻辑电路设计,ARCHITECTURE ART OF CNTM60 IS BEGIN CO=1WHEN(QH=0101AND QL=1001 )ELSE0; PROCESS(CLK,RESET) BEGIN IF(RESET=0)THEN QH=0000; QL=0000; ELSIF(CLKEVENT AND CLK=1)THEN
41、 IF(QL=9)THEN QL=0000;,下一页,返回,上一页,6.2 时序逻辑电路设计,IF(QH=5)THEN QH=0000; ELSE QH=QH+1; END IF; ELSE QL=QL+1; END IF; END IF; END PROCESS; END ART;,下一页,返回,上一页,6.2 时序逻辑电路设计,5可逆计数器 8位二进制加减计数器的元件符号如图6-4所示,CLR是复位控制输入端;ENA是使能控制输入端;LOAD是预置控制输入端;D7.0是8位并行数据输入端;UPDOWN是加减控制输入端,当UPDOWN=0时,计数器作加法操作,UPDOWN=1时,计数器作减法
42、操作;COUT是进位/借位输出端。 【例6-21】用VHDL描述的8位二进制加减计数器源程序。 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY updowncnt8 IS,下一页,返回,上一页,6.2 时序逻辑电路设计,PORT(clr,clk,ena,load,updown:IN STD_LOGIC; d:IN INTEGER RANGE 0 TO 255; cout:OUT STD_LOGIC; q:BUFFER INTEGER RANGE 0 TO 255); END updowncnt8; ARCHITECTURE one OF up
43、downcnt8 IS BEGIN PROCESS(clk,ena,clr,d,load,updown) BEGIN IF CLR=0 THEN q = 0; ELSIF clkEVENT AND clk=1 THEN,下一页,返回,上一页,6.2 时序逻辑电路设计,IF load = 1 THEN q = d; ELSIF ena=1 THEN IF updown = 0 THEN q = q+1; IF q = 255 THEN COUT = 1;END IF; ELSE q = q-1; IF q = 0 THEN COUT = 0;END IF; END IF; END IF; END
44、 IF; END PROCESS; END one;,下一页,返回,上一页,6.2 时序逻辑电路设计,6.2.5序列信号发生器和检测器 1. 序列信号发生器 在数字信号的传输和数字系统的测试中,有时需要用到一组特定的串行数字信号,产生序列信号的电路称为序列信号发生器。 【例6-22】“01111110”序列发生器VHDL程序。 LIBRARY ieee; USE ieee.std_logic_1164.ALL; ENTITY xulie IS PORT(CLK,LOAD,EN:IN std_logic;,下一页,返回,上一页,6.2 时序逻辑电路设计,DATA: IN std_logic_VE
45、CTOR(20 DOWNTO 0); LOUT: BUFFER std_logic); END xulie; ARCHITECTURE ART OF xulie 0 IS CONSTANT LEN:INTEGER :=20; SIGNAL LFSR_VAL:std_logic_VECTOR(LEN DOWNTO 0); SIGNAL DOUT:std_logic_VECTOR(LEN DOWNTO 0); BEGIN PROCESS(LOAD,EN,DOUT) BEGIN,下一页,返回,上一页,6.2 时序逻辑电路设计,IF (LOAD=1)THEN LFSR_VAL=DATA; ELSIF
46、(EN=1)THEN LFSR_VAL(0)=DOUT(3) XOR DOUT(LEN); LFSR_VAL(LEN DOWNTO 1)=DOUT(LEN-1 DOWNTO 0); END IF; END PROCESS; PROCESS(CLK) BEGIN,下一页,返回,上一页,6.2 时序逻辑电路设计,IF(CLKEVENT AND CLK=1)THEN DOUT=LFSR_VAL; LOUT=LFSR_VAL(LEN); END IF; END PROCESS; END ART; 2. 序列信号检测器 【例6-23】一个“01111110”序列信号检测器的VHDL程序。 LIBRARY
47、 ieee; USE ieee.std_logic_1164.ALL; ENTITY DETECT IS,下一页,返回,上一页,6.2 时序逻辑电路设计,PORT( DATAIN:IN std_logic; CLK:IN std_logic; Q:OUT std_logic); END DETECT; ARCHITECTURE ART OF DETECT IS TYPE STATETYPE IS(S0,S1,S2,S3,S4,S5,S6,S7,S8); BEGIN PROCESS(CLK) VARIABLE PRESENT_STATE:STATETYPE; BEGIN Q=0;,下一页,返回,
48、上一页,6.2 时序逻辑电路设计,CASE PRESENT_STATE IS WHEN S0= IF DATAIN=0 THEN PRESENT_STATE:=S1; ELSE PRESENT_STATE:=S0; END IF; WHEN S1= IF DATAIN=1 THEN PRESENT_STATE:=S2; ELSE PRESENT_STATE:=S1; END IF; WHEN S2= IF DATAIN=1THEN PRESENT_STATE:=S3; ELSE PRESENT_STATE:=S1; END IF;,下一页,返回,上一页,6.2 时序逻辑电路设计,WHEN S3
49、= IF DATAIN=1THEN PRESENT_STATE:=S4; ELSE PRESENT_STATE:=S1; END IF; WHEN S4= IF DATAIN=1THEN PRESENT_STATE:=S5; ELSE PRESENT_STATE:=S1; END IF; WHEN S5= IF DATAIN=1THEN PRESENT_STATE:=S6; ELSE PRESENT_STATE:=S1; END IF; WHEN S6= IF DATAIN=1THEN PRESENT_STATE:=S7; ELSE PRESENT_STATE:=S1; END IF;,下一页
50、,返回,上一页,6.2 时序逻辑电路设计,WHEN S7= IF DATAIN=0THEN PRESENT_STATE:=S8; Q IF DATAIN=0THEN PRESENT_STATE:=S1; ELSE PRESENT_STATE:=S2; END IF; END CASE; WAIT UNTIL CLK=1; END PROCESS; END ART;,返回,上一页,6.3 存储器设计,半导体存储器的种类很多,从功能上可以分为只读存储器(Read_Only Memory,简称ROM)和随机存储器(Random Access Memory, 简称RAM)两大类。 6.3.1 ROM设
51、计 只读存储器在正常工作时从中读取数据,不能快速地修改或重新写入数,适用于存储固定数据的场合。图6-5是一个容量为328的ROM的示意图。该有addr(7)addr(0)为ROM的5位地址线, dout(7)dout(0) 为8位数据输出线,rd为读使能控制,clk为时钟。,下一页,返回,6.3 存储器设计,【例6-24】容量328存储器VHDL程序。 LIBRARY IEEE; USE IEEE. STD_LOGIC_1164.ALL; ENTITY rom32 IS PORT( clk,rd:IN STD_LOGIC; addr:IN STD_LOGIC_VECTOR(4 DOWNTO 0
52、); dout:OUT STD_LOGIC_VECTOR(7 DOWNTO 0); END rom32; ARCHITECTURE a OF rom32 IS SIGNAL data:STD_LOGIC_VECTOR(7 DOWNTO 0); BEGIN,下一页,返回,上一页,6.3 存储器设计,p1:PROCESS(clk) BEGIN IF clkEVENT AND clk=1 THEN CASE addr IS WHEN 00000 = data data data data data data data=01100110;,下一页,返回,上一页,6.3 存储器设计,WHEN 00111
53、 = data data data data data data data data data data data=00110111;,下一页,返回,上一页,6.3 存储器设计,WHEN 10010 = data data data data data data data data data data data=01001000;,下一页,返回,上一页,6.3 存储器设计,WHEN 11100 = data data data dataNULL; END CASE; END IF; END PROCESS p1; p2:PROCESS(data,rd) BEGIN IF rd=1 THEN d
54、out=data;,下一页,返回,上一页,6.3 存储器设计,ELSE dout=ZZZZZZZZ; END IF; END PROCESS p2; END a; 6.3.2 SRAM设计 RAM和ROM的主要区别在于RAM描述上有读和写两种操作,而且在读写上对时间有较严格的要求。下面我们给出一个88位的双口SRAM的VHDL描述实例,如图6-6所示。,下一页,返回,上一页,6.3 存储器设计,【例6-25】88位的双口SRAM LIBRARY ieee; USE ieee.std_logic_1164.ALL; USE ieee.std_logic_ARITH.ALL; USE ieee.s
55、td_logic_UNSIGNED.ALL; ENTITY SRAM IS GENERIC(WIDTH:INTEGER :=8; DEPTH:INTEGER :=8; ADDER:INTEGER :=3); PORT(DATAIN:IN std_logic_VECTOR(WIDTH-1 DOWNTO 0); DATAOUT:OUT std_logic_VECTOR(WIDTH-1 DOWNTO 0);,下一页,返回,上一页,6.3 存储器设计,CLOCK:IN std_logic; WE,RE:IN std_logic; WADD:IN std_logic_VECTOR(ADDER-1 DOW
56、NTO 0); RADD:IN std_logic_VECTOR(ADDER-1 DOWNTO 0); END SRAM; ARCHITECTURE ART OF SRAM IS TYPE MEM IS ARRAY(0 TO DEPTH-1) OF std_logic_VECTOR(WIDTH-1 DOWNTO 0); SIGNAL RAMTMP:MEM; BEGIN,下一页,返回,上一页,6.3 存储器设计,-写进程 PROCESS(CLOCK) BEGIN IF (CLOCKEVENT AND CLOCK=1) THEN IF(WE=1)THEN RAMTMP(CONV_INTEGER(W
57、ADD)=DATAIN; END IF; END IF; END PROCESS; -读进程 PROCESS(CLOCK),下一页,返回,上一页,6.3 存储器设计,BEGIN IF(CLOCKEVENT AND CLOCK=1)THEN IF (RE=1) THEN DATAOUT=RAMTMP(CONV_INTEGER(RADD); END IF; END IF; END PROCESS; END ART;,返回,上一页,6.4 状态机设计,6.4.1状态机概述 状态机就是一组触发器的输出状态随着时钟和输入信号按照一定的规律变化的一种机制或过程。任何时序电路都可以表示为有限状态机(Finite State Machine, FSM),有限状态机是实现高可靠逻辑控制的重要途径,是大型数字系统设计中的重要组成部分,尤
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 海底捞内部员工制度
- 炼油厂内部工作制度范本
- 煤矿内部事故汇报制度
- 煤矿开采内部控制制度
- 环保公司内部管理制度
- 环评公司内部考核制度
- 监理内部会议制度
- 监理部内部安全管理制度
- 科学公司内部管理制度
- 科技公司内部考核制度
- 1.3“开元盛世”与唐朝经济的繁荣 课件(内嵌视频) 2025-2026学年统编版七年级历史下册
- 特种设备作业人员资格复审申请表
- 2026年吉安幼儿师范高等专科学校单招职业适应性考试题库附答案详解(夺分金卷)
- 2024-2025学年人民版四年级劳动下册全册教案设计
- 2026年春季开学教职工会议校长讲话:以改革之剑破局以实干之力育人
- 2026年部编本三年级下册《23.暴风雨来临之前》教案设计
- XX中学2026年春季学期“开学第一课”主题班会活动方案
- 2026年人教版三年级下册数学全册教学设计(春改版教材)
- 2026秋招:重庆农商行笔试题及答案
- 产品研发流程规范与指导(标准版)
- 初中音乐学业水平考试复习资料
评论
0/150
提交评论