第7章 CPLDFPGA设计实践--(1)_第1页
第7章 CPLDFPGA设计实践--(1)_第2页
第7章 CPLDFPGA设计实践--(1)_第3页
第7章 CPLDFPGA设计实践--(1)_第4页
第7章 CPLDFPGA设计实践--(1)_第5页
已阅读5页,还剩55页未读 继续免费阅读

下载本文档

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

文档简介

1、第7章 CPLDFPGA设计(shj)实践(1) 7.1 基本组合逻辑建模 7.2 基本时序(sh x)逻辑建模 7.3 常用算法的实现7.4 状态机设计共六十页 常用的组合单元电路主要有译码器、 编码器、 数据选择器、 减法器、 加法器等, 前面我们(w men)已经举过许多例子, 这里再做一些补充和总结。7.1 基本组合(zh)逻辑建模 共六十页基本(jbn)门电路VHDL描述 基本门电路用VHDL语言来描述(mio sh)十分方便。为方便起见,在下面的两输入模块中,使用VHDL中定义的逻辑运算符,同时实现一个与门、或门、与非门、或非门、异或门及反相器的逻辑。 共六十页1、模型布尔代数模型

2、 VHDL描述 b= not a2、程序设计首先确定(qudng)实体(一个输入信号,一个输出信号)然后确定结构体由于简单可直接写出VHDL文件例7.1 “非”门电路设计共六十页非门电路建模LIBRARY ieee;use ieee.std_logic_1164.all;entity nota isport(a: in std_logic; b: out std_logic);end;architecture behv of nota is begin b=not a;end;共六十页3、仿真验证步骤:综合编译源文件波形(b xn)验证分析功能的正确性 同样的方法可以(ky)将基本门电路的建模

3、做好与门、与非门、或非门、与或非门、异或门共六十页LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY GATE ISPORT (A,B : IN STD_LOGIC; YAND,YOR :OUT STD_LOGIC; YNAND,YNOR :OUT STD_LOGIC ; YNOT,YXOR :OUT STD_LOGIC); END ENTITY GATE;【例7.2】基本(jbn)门电路描述共六十页ARCHITECTURE ART OF GATE IS BEGIN YAND=A AND B; -与门输出(shch) YOR=A OR B; -或门输

4、出 YNAND=A NAND B;-与非门输出 YNOR=A NOR B; -或非门输出 YNOT=A NOT B; -反相器输出 YXOR=A XOR B; -异或门输出 END ARCHITECTURE ART;共六十页例7.3 半加器的建模1、建模2、程序设计(chn x sh j).So=a xor b;Co=a and b;3、波形仿真共六十页architecture behv of h_adder is begin so=a xor b; coy,co=x); u2: h_adder port map(cin,y,so=so,co=z); co=x or z;end;LIBRARY

5、 ieee;use ieee.std_logic_1164.all;entity f_adder isport(cin,a,b:in std_logic; so,co:out std_logic);end;共六十页下面(xi mian)我们分别以四种方法描述一个3-8线译码器。LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY DECODER ISPORT(INP:IN STD_LOGIC_VECTOR(2 DOWNTO 0); OUTP:OUT STD_LOGIC_VECTOR (7

6、DOWNTO 0);END ENTITY DECODER;例7.5 3-8线译码器共六十页方法1:使用(shyng)SLL逻辑运算符ARCHITECTURE ART1 OF DECODER IS BEGIN OUTP0); S(CONV_INTEGER(INP):=1; OUTP=S; END PROCESS; END ARCHITECTURE ART2;共六十页方法3:使用(shyng)WHENELSE语句 ARCHITECTURE ART3 OF DECODER IS BEGIN OUTP(0)=1 WHEN INP=000 ELSE 0; OUTP(1)=1 WHEN INP=001 E

7、LSE 0; OUTP(2)=1 WHEN INP=“010” ELSE “0”; OUTP(3)=1 WHEN INP=011 ELSE 0; OUTP(4)=1 WHEN INP=100 ELSE 0; OUTP(5)=1 WHEN INP=101 ELSE 0; OUTP(6)=1 WHEN INP=110 ELSE 0; OUTP(7)OUTPOUTPOUTPOUTPOUTPOUTPOUTPOUTPOUTP= XXXXXXXX; END CASE; END PROCESS;END ARCHITECTURE ART4;共六十页下面我们(w men)用三种方法设计8-3线优先编码器。 8-

8、3线优先编码器,输入信号为A、B、C、D、E、F、G和H,输出信号为OUT0、OUT1和OUT2。输入信号中A的优先级别最低,依次类推,H的优先级别最高。例7.68-3线优先(yuxin)编码器共六十页LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY ENCODER ISPORT (A,B,C,D:IN STD_LOGIC; E,F,G,H:IN STD_LOGIC; OUT0,OUT1,OUT2:OUT STD_LOGIC);END ENTITY ENCODER;共六十页方法1:使用(shyng)条件赋值语句ARCHITECTURE ART1 O

9、F ENCODER IS SIGNAL OUTS:STD_LOGIC_VECTOR(2 DOWNTO 0); BEGIN OUTS (2 DOWNTO 0)= 111 WHEN H=1 ELSE 110 WHEN G=1 ELSE 101 WHEN F=1 ELSE 100 WHEN E=1 ELSE 011 WHEN D=1 ELSE 010 WHEN C=1 ELSE 001 WHEN B=1 ELSE 000 WHEN A=1 ELSE “XXX”; OUT0=OUTS(0); OUT1=OUTS(1); OUT2=0 AND INPUTS(I)/=1 LOOP -此处的“/=”表示不等

10、于 I:=I-1; END LOOP; (OUT2,OUT1,OUT0)=CONV_STD_LOGIC_VECTOR(I,3); END PROCESS;END ARCHITECTURE ART2;共六十页方法(fngf)3:使用IF语句LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY ENCODER IS PORT(IN1:IN STD_LOGIC_VECTOR(7 DOWNTO 0); OUT1:OUT STD_LOGIC_VECTOR(2 DOWNTO 0);END ENTITY ENCODER;共六十页ARCHITECTURE ART3 O

11、F ENCODER ISBEGIN PROCESS(INT1) ISBEGIN IF IN1(7)=1 THEN OUT1=111;ELSIF IN1(6)=1 THEN OUT1=110;ELSIF IN1(5)=1 THEN OUT1=101;ELSIF IN1(4)=1 THEN OUT1=100;ELSIF IN1(3)=1 THEN OUT1=“011”;ELSIF IN1(2)=1 THEN OUT1=010;ELSIF IN1(1)=1 THEN OUT1=001;ELSIF IN1(0)=1 THEN OUT1=000;ELSE OUT1=XXX;END IF ;END PRO

12、CESS;END ARCHITECTURE ART3;共六十页 比较器可以比较两个二进制是否相等,下面是一个8位比较器的VHDL描述(mio sh)。有两个8位二进制数,分别是A和B,输出为EQ,当A=B时,EQ=1,否则EQ=0。例7.78位比较(bjio)器 共六十页LIBRARY IEEE;USE IEEE.STD_LOGIC_VECTOR(7 DOWNTO 0);ENTITY COMPARE IS PORT (A,B:IN STD_LOGIC_VECTOR(7 DOWNTO 0); EQ:OUT STD_LOGIC);END ENTITY COMPARE;ARCHITECTURE AR

13、T OF COMPARE IS BEGIN EQ =1 WHEN A=B ELSE 0;END ARCHITECTURE ART;共六十页 选择器常用于信号(xnho)的切换,四选一选择器可以用于四路信号(xnho)的切换。四选一选择器有四个信号(xnho)输入端INP(0)INP(3),两个信号(xnho)选择端A和B和一个信号(xnho)输出端Y。当A、B输入不同的选择信号(xnho)时,就可以使INP(0)INP(3)中某个相应的输入信号(xnho)与输出端Y接通。 例7.8四选一选择器共六十页LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY

14、 MUX41 ISPORT ( INP:IN STD_LOGIC_VECTOR(3 DOWNTO 0); A,B:IN STD_LOGIC; Y :OUT STD_LOGIC);END ENTITY MUX41;ARCHITECTURE ART OF MUX41 IS SIGNAL SEL :STD_LOGIC_VECTOR(1 DOWNTO 0); BEGIN 共六十页SEL=B&A;PROCESS(INP,SEL) IS BEGIN IF (SEL=00)THEN Y=INP(0); ELSIF (SEL=01)THEN Y=INP(1); ELSIF (SEL=11)THEN Y=INP

15、(2); ELSE Y=INP(3); END IF; END PROCESS;END ARCHITECTURE ART;共六十页下面(xi mian)的程序对输入操作数A、B作加、减、乘、除运算。LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY ARITHMETIC ISPORT (A,B: IN STD_LOGIC_VECTOR(3 DOWNTO 0); Q1:OUT STD_LOGIC_VECTOR(4 DOWNTO 0)

16、; Q2,Q3:OUT STD_LOGIC_VECTOR(3 DOWNTO 0); Q4:OUT STD_LOGIC_VECTOR(7 DOWNTO 0); END ENTITY ARITHMETIC;例7.9算术(sunsh)运算共六十页ARCHITECTURE ART OF ARITHMETIC ISBEGIN PROCESS(A,B) ISBEGIN Q1=(0&A)+(0&B); -ADDITION Q2=A-B; -SUBTRACTION Q3=A/B; -DIVISION Q4=A*B; -MULTIPLICATIONEND PROCESS;END ARCHITECTURE ART

17、;共六十页三态门和总线缓冲器是驱动电路(dinl)经常用到的器件。1) 三态门电路LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY TRISTATE IS PORT (EN,DIN :IN STD_LOGIC; DOUT :OUT STD_LOGIC);END ENTITY TRISTATE;例7.10三态门及总线(zn xin)缓冲器共六十页ARCHITECTURE ART OF TRISTATE IS BEGIN PROCESS(EN,DIN) IS BEGIN IF EN=1 THEN DOUT=DIN; ELSE DOUT=Z; END I

18、F ; END PROCESS;END ARCHITECTURE ART;共六十页 2) 单向总线驱动器 在微型计算机的总线驱动中经常要用单向总线缓冲器,它通常由多个三态门组成(z chn),用来驱动地址总线和控制总线。一个8位的单向总线缓冲器如下图所示。共六十页LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY TRI_BUF8 IS PORT ( DIN:IN STD_LOGIC_VECTOR(7 DOWNTO 0); EN:IN STD_LOGIC;DOUT:OUT STD_LOGIC_VECTOR(7 DOWNTO 0);END ENTITY

19、 TRI_BUF8;共六十页ARCHITECTURE ART OF TRI_BUF8 IS BEGIN PROCESS(EN,DIN) BEGIN IF(EN=1)THEN DOUT=DIN; ELSE DOUT=ZZZZZZZZ; END IF; END PROCESS;END ARCHITECTURE ART;共六十页3) 双向总线缓冲器 双向总线缓冲器用于数据(shj)总线的驱动和缓冲,典型的双向总线缓冲器如下图所示。图中的双向总线缓冲器有两个数据(shj)输入/输出端A和B,一个方向控制端DIR和一个选通端EN。EN=0时双向缓冲器选通。若DIR=0,则A=B,反之则B=A。共六十页L

20、IBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY BIDIR ISPORT(A,B:INOUT STD_LOGIC_VECTOR(7 DOWNTO 0); EN,DIR:IN STD_STD_LOGIC);END ENTITY BIDIR;共六十页ARCHITECTURE ART OF BIDIR ISSIGNAL AOUT,BOUT: STD_LOGIC_VECTOR(7 DOWNTO 0); BEGINPROCESS(A,EN,DIR) -A为输入(shr) BEGIN IF(EN=0)AND (DIR=1)THEN BOUT=A; ELSE B

21、OUT=ZZZZZZZZ; END IF ; B=BOUT; -B为输出END PROCESS;共六十页PROCESS(B,EN,DIR) IS -B为输入(shr) BEGIN IF(EN=0)AND (DIR=0)THEN AOUT=B; ELSE AOUT=ZZZZZZZZ; END IF ; A=AOUT; -A为输出 END PROCESS;END ARCHITECTURE ART;共六十页 本节的时序电路设计主要有触发器、寄存器、计数器序列(xli)信号发生器和序列(xli)信号检测器等的设计实例。7.2 基本时序(sh x)逻辑建模共六十页1、模型布尔代数模型 2、程序设计首先确

22、定实体然后确定结构体由于简单可直接(zhji)写出VHDL文件例7.11 基本(jbn)D触发器电路共六十页LIBRARY IEEE;USE IEEE.std_logic_1164.all;Entity DFF2 isport (clk, d : in std_logic; q : out std_logic);end DFF2;architecture body of DFF2 isbeginprocess (clk,d)begin if CLKEVENT AND CLK=1 then q = d; end if;end process;end body;LIBRARY IEEE;USE I

23、EEE.std_logic_1164.all;Entity DFF1 isport (clk, d : in std_logic; q : out std_logic);end DFF1;architecture body of DFF1 isbeginprocess (clk,d) begin if rising_edge(clk) then q = d; end if;end process;end body;共六十页例7.12 T触发器1、模型(mxng)布尔代数模型 LIBRARY IEEE;USE IEEE.std_logic_1164.all;Entity TFFa isport

24、(clk,T: in STD_LOGIC; q: buffer STD_LOGIC);end;architecture bodya of TFFa isbeginprocess (clk,T)begin if CLKEVENT AND CLK=1 then if t=1 then q =not q; else q=q; end if; end if;end process;end;q=t xor q;共六十页例7.13 JK触发器状态方程LIBRARY IEEE;USE IEEE.std_logic_1164.all;Entity JKa isport (clk, J,K: in STD_LO

25、GIC;q: buffer STD_LOGIC);end;architecture bodya of JKa isbeginprocess (clk,J,K)begin if clkevent and clk=1 thenq =(J and (not q) or (not K) and q); end if;end process;end;共六十页LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY RSF IS PORT(R,S,CLK:IN STD_LOGIC; Q:BUFFER STD_LOGIC);END ENTITY RSF; 【例7.14】

26、 RS触发器共六十页ARCHITECTURE ART OF RSCFQ IS SIGNAL Q_S:STD_LOGIC; BEGIN PROCESS(CLK,R,S) IS BEGIN IF (CLKEVENT AND CLK=1)THEN IF(S=1 AND R=0) THEN Q_S=1; ELSIF (S=0 AND R=1) THEN Q_S=0; ELSIF (S=0 AND R=0) THEN Q_S=Q_S; END IF; END IF ; Q=Q_S; END PROCESS;END ARCHITECTURE ART ;共六十页 时序电路的初始状态一般由复位/置位信号来设置

27、, 有同步复位/置位和异步复位/置位两种工作方式。 所谓同步复位/置位, 就是在复位/置位信号有效(yuxio)且给定的时钟边沿到来时, 时序电路才被复位/置位; 而异步复位/置位则与时钟无关, 一旦复位/置位信号有效(yuxio), 时序电路就被复位/置位。 触发器的同步(tngb)和非同步(tngb)复位共六十页 在用VHDL语言描述时, 同步复位/置位一定在以时钟为敏感信号的进程中定义, 且用IF等条件语句来描述必要的复位/置位条件。 其典型格式(g shi)为: PROCESS (时钟信号名) BEGIN IF 时钟边沿表达式 AND 复位/置位条件表达式 THEN 复位/置位语句;

28、ELSE 正常执行语句; END IF; END PROCESS; 1) 同步复位(f wi)/置位的描述共六十页或 PROCESS BEGIN WAIT UNTIL 时钟边沿(binyn)表达式 IF 复位/置位条件表达式 THEN 复位/置位语句; ELSE 正常执行语句; END IF; END PROCESS ; 共六十页描述异步复位/置位时, 应将时钟信号和复位/置位信号同时加入到进程的敏感信号表中或WAIT ON语句后的信号表中, 而且在执行时, 需识别进程是由时钟激活还是(hi shi)由复位/置位信号激活, 并分别执行相应的操作。 其常用格式可表示为 : PROCESS (时钟

29、信号, 复位/置位信号) BEGIN IF 复位/置位信号有效 THEN 复位/置位语句; ELSIF 时钟边沿表达式 THEN 正常执行语句; END IF ; END PROCESS ; 2) 异步复位(f wi)/置位共六十页LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY ASDff ISPORT(CLK,D :IN STD_LOGIC; PRESET,CLR:IN STD_LOGIC; Q:OUT STD_LOGIC);END ENTITY ASDff;【例7.15】 异步复位(f wi)/置位的D触发器共六十页ARCHITECTURE

30、ART OF ASDff IS BEGIN PROCESS(CLK,PRESET,CLR) IS BEGIN IF(PRESET=1)THEN -置位信号(xnho)为1,则触发器被置位 Q=1; ELSIF(CLR=1)THEN -复位信号为1,则触发器被复位 Q=0; ELSIF(CLKEVENT AND CLK=1)THEN Q=D; END IF; END PROCESS;END ARCHITECTURE ART;共六十页异步复位(f wi)D触发器仿真波形共六十页LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY SYDff ISPORT(D, CLK :IN STD_LOGIC; RESET:IN STD_LOGIC; Q:OUT STD_LOGIC);END ENTITY SYDff;【例7.16】 同步(tngb)复位的D触发器共六十页ARCHITECTURE ART OF SYDff IS BEGIN PROCESS(CLK) IS BEGIN IF(CLKEVENT AND CLK=1)THEN IF(RESET=0)

温馨提示

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

评论

0/150

提交评论