用VHDL语言设计基本逻辑电路.ppt
《用VHDL语言设计基本逻辑电路.ppt》由会员分享,可在线阅读,更多相关《用VHDL语言设计基本逻辑电路.ppt(125页珍藏版)》请在三一办公上搜索。
1、CHAPTER 3 DIGITAL CURCUITS WITH VHDL DESIGN,在前面的学习中,我们对VHDL语言的语句、语法及利用VHDL语言设计逻辑电路的基本方法作了详细介绍。为了深入理解使用VHDL语言设计逻辑电路的具体步骤和方法,本章以常用的基本逻辑电路设计为例,再次对其进行系统和详细的介绍,以使大家初步掌握用VHDL语言描述基本逻辑电路的方法。,3.1 Summary of basic statements in VHDL codes,1、Sequential Assignment Statements,1)IF、CASE、LOOP、NULL statements only
2、using in process,procedure and function.2)IF、CASE用于条件选择;LOOP用于循环控制偏重计算;NULL是一条空语句,一般用于CASE语句中。,2、Concurrent Assignment Statements,1)PROCESS语句注意敏感信号表,一般将进程中的输入信号或变量都写入敏感信号表中,如无敏感信号,则使用WAIT语句。2)BLOCK语句改善并行语句及其结构的可读性。3)并行信号赋值语句:(1)简单信号赋值语句(2)WHEN ELSE 语句(ELSE 后面无符号),(3)选择信号赋值语句的用法 ARCHITECTURE ar_7 OF
3、fzh_2 IS BEGIN WITHqSELECT y=aWHEN00,-选择值用“,”结束bWHEN01,cWHEN10,dWHEN OTHERS;ENDar_7;4)元件例化语句:主要用于在VHDL中的层次设计。5)生成语句:作用就是复制FOR 循环变量 IN 取值范围 GENERATE,3.Subprogram,VHDL中的子程序包括函数(FUNCTION)和过程(PROCEDURE)等两类。函数的作用就是输入若干个参数,通过函数运算求值,最后直接返回一个值。过程的调用是一条语句,调用时通过其接口返回0个或多个值。,4.Library and Package,3.2 VHDL for
4、Combinational Circuits,Having learned a number of useful circuits that can be used as building blocks in larger circuits in before courses,such as logic gates,multiplexers,decoders and encoders,we will now consider how such circuits can be described in VHDL.,3.2.1 Logic Gates,简单门电路包括2输入“与非”门、集电极开路的2
5、输入“与非”门、2输入“或非”门、反相器、集电极开路的反相器、3输入“与非”门、2输入“或”门和2输入“异或”门等,它们是构成所有逻辑电路的基本电路。,Two-input XOR Gate,f.e.,3.2.2 Encoder,Decoder and Multiplexer,编、译码器和选择器是组合电路中较简单的3种通用电路。它们可以由简单的门电路组合连接而成,但采用这种方式,只给出电路,让读者来判断该电路的功能,那么要读通该电路需要花较多的时间。如果采用VHDL语言,从行为、功能来描述,不仅逻辑设计变得非常容易,而且阅读也会很方便。,例1:一位共阴七段数码管译码器LIBRARY ieee;U
6、SE ieee.std_logic_1164.ALL;entity bcd7 IS PORT(d3,d2,d1,d0:IN std_logic;a,b,c,d,e,f,g:OUT std_logic);END;ARCHITECTURE arc_bcd7 OF bcd7 IS SIGNAL din:std_logic_vector(3 DOWNTO 0);SIGNAL dout:std_logic_vector(6 DOWNTO 0);,BEGINdin dout dout dout dout dout dout dout=1011111;-显示6,WHEN 1000=dout dout dou
7、t=1110000;-显示7.END CASE;END PROCESS;a=dout(6);b=dout(5);c=dout(4);d=dout(3);e=dout(2);f=dout(1);g=dout(0);END arc_bcd7;,2.Priority Encoder,f.e.2,3.2.3 Complement Circuits,二进制运算经常要用到求补的操作。这里用八位二进制求补电路为例。我们当然可以采用结构描述方式来描述构造体,但是这样对每个门进行描述和连接太繁琐。这里采用RTL描述就显得更加简洁、清楚。,1.二进制求补电路,2.Multiplication Circuit,LI
8、BRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY mul ISPORT(A,B:IN STD_LOGIC_VECTOR(2 DOWNTO 0);M:OUT STD_LOGIC_VECTOR(5 DOWNTO 0);END mul;,ARCHITECTURE beha OF mul ISSIGNAL tmp0:STD_LOGIC_VECTOR(2 DOWNTO 0);SIGNAL tmp1:STD_LOGIC_VECTOR(3 DOWNTO 0);SIGNAL tmp2:STD_LOGIC_
9、VECTOR(4 DOWNTO 0);BEGIN PROCESS(A,B)BEGIN,IF B(0)=1 THEN tmp0=A;ELSE tmp0=000;END IF;IF B(1)=1 THEN tmp1=A,IF B(2)=1 THEN tmp2=A,Ex3:设计一个四位加减法器,LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY add_sub ISPORT(sub:IN STD_LOGIC;a,b:IN STD_LOGIC_VECTOR(3 DOWNTO 0);y:OUT S
10、TD_LOGIC_VECTOR(3 DOWNTO 0);co:OUT STD_LOGIC);END add_sub;,ARCHITECTURE rtl OF add_sub ISSIGNAL tmp:STD_LOGIC_VECTOR(4 DOWNTO 0);BEGIN PROCESS(sub,a,b)BEGIN,IF sub=0 THEN tmp=0,3.2.4 Tristate-gate and Bus Buffer,三态门和双向缓冲器是接口电路和总线驱动电路经常用到的器件。它们虽然不属于组合电路,但我们也在这里进行介绍。,f.e.2,f.e.3,这里对一个实体采用了三种构造体进行描述,若要
11、把上述三个例题写在一起,可以用配置来实现:,ENTITY tri_gate ISEND tri_gate;ARCHITECTURE zas ISEND zas;ARCHITECTURE blk IS,END blk;ARCHITECTURE nas ISEND nas;CONFIGURATION triif OF tri_gate IS FOR zas END FOR;END triif;,CONFIGURATION triblk OF tri_gate IS FOR blk END FOR;END triblk;CONFIGURATION tricase OF tri_gate IS FOR
12、 nas END FOR;END tricase;,2、Unidirectional Bus Buffer,在微机的总线驱动中经常要用单向总线缓冲器,它通常由多个三态门组成,用来驱动地址总线和控制总线。,f.e.1,f.e.2,f.e.3,3、Bi-Directional Bus Buffer,f.e.1,3.3 Design for Sequential Circuits,Sequential circuits in which the values of the outputs depend on not only on the present values of the inputs b
13、ut also on the past behavior of the circuit.Such circuits include storage elements that store the values of logic signals.,3.3.1 Clock Signals and Clear Signals,1、Clock Signals 任何时序电路都以时钟信号为驱动信号,时序电路只是在时钟信号的边沿到来时,其状态才发生改变。因此,时钟信号通常是描述时序电路的程序执行的条件。另外,时序电路也总是以时钟进程形式来进行描述的,其描述方式一般有两种:,1)进程的敏感信号是时钟信号 在这
14、种情况下,时钟信号应作为敏感信号,显式的出现在PROCESS语句后跟的括号中,如PROCESS(clock_signal)。时钟信号边沿的到来,将作为时序电路语句执行的条件,如下例所示:该进程在时钟信号发生变化时被启动,而在时钟边沿的条件得到满足后才真正执行时序电路所对应的语句。,f.e.1,2)用进程中的WAIT ON语句等待时钟 在这种情况下,描述时序电路的进程将没有敏感信号,而是用WAIT ON语句来控制进程的执行。也就是说,进程通常停留在WAIT ON语句上,只有在时钟信号到来,且满足边沿条件时,其余的语句才能执行。如下例所示:,f.e.2,在编写上述两个程序时应注意:无论是IF语句还
15、是WAIT ON语句,在对时钟边沿说明时,一定要注明是上升沿还是下降沿,光说明边沿是不行的。当时钟信号作为进程的敏感信号时,在敏感信号的表中不能出现一个以上的时钟信号,除时钟信号以外,像复位信号等是可以和时钟信号一起出现在敏感表中的。WAIT ON语句只能放在进程的最前面或者最后面。,3)时钟边沿的描述 为了描述时钟边沿,一定要指定是上升沿还是下降沿,这一点可以使用时钟信号的属性描述来达到。也就是说,时钟信号的值是从“0”到“1”变化;还是从“1”到“0”变化。由此可以得知是时钟脉冲信号的上升沿还是下降沿。,(a)时钟脉冲上升沿描述,If rising_edge(clk),(b)时钟脉冲下降沿
16、描述,If falling_edge(clk),根据上面的描述,时钟信号边沿检出条件可以统一描述如下:,2、触发器的同步和非同步复位 触发器的初始状态应由复位信号来设置,复位信号对触发器复位的操作不同,使其可以分为同步复位和非同步复位两种。所谓同步复位,就是当复位信号有效且在给定的时钟边沿到来时,触发器才被复位;而非同步复位则是,一旦复位信号有效,触发器就被复位。,1)Synchronous Clear 在用VHDL语言描述时,同步复位一定在以时钟为敏感信号的进程中定义,且用IF语句来描述必要的复位条件。下面两个例子就是同步复位方式的描述实例:,f.e.1,f.e.2,2)Asynchrono
17、us Clear 非同步复位即异步复位,在描述时与同步方式不同:首先在进程的敏感信号中,除了时钟信号以外,还应加入复位信号;其次是用IF语句描述复位条件;最后在ELSIF段描述时钟边沿的条件,并加上EVENT属性。,f.e.1,添加clock_event是为了防止没有时钟事件发生时的误操作。譬如,现在时钟事件没有发生而是发生了复位事件,这样该进程就得到了启动。在此情况下,若复位条件没有满足,而时钟边沿条件却是满足的,那么与时钟信号有关的那一段程序(ELSIF段)就会得到执行,从而造成错误操作。,3.3.2 Flip-Flops,1、Latch1).Gated D Latch,f.e.1libr
18、ary ieee;use ieee.std_logic_1164.all;entity dff1 isport(d,clk:in std_logic;q:out std_logic);end dff1;,architecture rtl of dff1 isbegin process(clk)begin if clk=1 then q=d;end if;end process;end rtl;,电平触发还是边沿触发?,若改为 process(clk,d),电平触发还是边沿触发?,f.e.2library ieee;use ieee.std_logic_1164.all;entity dff2
19、isport(d,clk:in std_logic;q:out std_logic);end dff2;,architecture rtl of dff2 isbegin process begin wait until clkevent and clk=1;q=d;end process;end rtl;,2)Gated D Latch with Asynchronous Clear,非同步复位的D锁存器与一般的D锁存器相比多了一个复位输入端clr。当clr=0时,输出被强制复位。,f.e.1LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY df
20、fr ISPORT(d,clk,clr:IN STD_LOGIC;q:OUT STD_LOGIC);END dffr;,ARCHITECTURE rtl OF dffr ISBEGIN PROCESS(clk,clr)BEGIN IF clr=0 THEN q=0;ELSIF clkEVENT and clk=1THEN q=d;END IF;END PROCESS;END rtl;,DFF with a synchronous clear:PROCESS(clk)BEGIN IF clkEVENT and clk=1 THEN IF clr=0 THEN q=0;ELSE q=d;END I
21、F;END IF;END PROCESS;,Ex:Write the VHDL codes for a DFF with asynchronous clear and preset.,Note:preset is priority of clear.,2、JK Flip-Flop,f.e.1LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY jkff1 ISPORT(clk,clr,pset,j,k:IN STD_LOGIC;qb,q:OUT STD_LOGIC);END jkff1;ARCHITECTURE rtl OF jkff1 ISSIGNA
22、L qs,qbs:STD_LOGIC;BEGIN PROCESS(j,k,clk,clr,pset),BEGINIF pset=0THEN qs=1;qbs=0;ELSIF clr=0 THEN qs=0;qbs=1;ELSIF clkEVENT and clk=1THEN IF j=0 AND k=1 THEN qs=0;qbs=1;ELSIF j=1 AND k=0 THEN qs=1;qbs=0;ELSIF j=1 AND k=1 THEN qs=NOT qs;qbs=NOT qbs;END IF;,END IF;END PROCESS;q=qs;qb=qbs;END rtl;,Ques
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- VHDL 语言 设计 基本 逻辑电路
![提示](https://www.31ppt.com/images/bang_tan.gif)
链接地址:https://www.31ppt.com/p-5796110.html