用VHDL语言设计基本逻辑电路.ppt

上传人:小飞机 文档编号:5796110 上传时间:2023-08-21 格式:PPT 页数:125 大小:917KB
返回 下载 相关 举报
用VHDL语言设计基本逻辑电路.ppt_第1页
第1页 / 共125页
用VHDL语言设计基本逻辑电路.ppt_第2页
第2页 / 共125页
用VHDL语言设计基本逻辑电路.ppt_第3页
第3页 / 共125页
用VHDL语言设计基本逻辑电路.ppt_第4页
第4页 / 共125页
用VHDL语言设计基本逻辑电路.ppt_第5页
第5页 / 共125页
点击查看更多>>
资源描述

《用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

23、tion:If the clear and preset are active simultaneously,whats the result?,为了与真值表一致,可以修改如下:,IF pset=0 AND clr=1 THEN qs=1;qbs=0;ELSIF clr=0 AND pset=1 THEN qs=0;qbs=1;.,Using CASE statement:,ARCHITECTURE rtl OF jkff2 ISSIGNAL qs,qbs:STD_LOGIC;SIGNAL tmp:STD_LOGIC_VECTOR(1 DOWNTO 0);BEGIN tmp=j,PROCESS

24、(clk,clr,pset)BEGIN IF pset=0THEN qs=1;ELSIF clr=0 THEN qs=0;ELSIF clkEVENT and clk=1THEN,CASE tmp IS WHEN 00=qsqsqsqsqs=X;END CASE;END IF;,qbs=NOT qs;END PROCESS;q=qs;qb=qbs;END rtl;,3.3.3 Registers,When a set of n flip-flops is used to store n bits of information,such as an n-bit number,we refer t

25、o these flip-flops as a register.A register that provides the ability to shift its contents is called a shift register.Parallel input and parallel output,serial input and serial output,parallel input and serial output,serial input and parallel output.,1、Serial input and serial output shift register,

26、LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY shift8 ISPORT(a,clk:IN STD_LOGIC;b:OUT STD_LOGIC);END shift8;,f.e.1,ARCHITECTURE rtl OF shift8 IS COMPONENT dff PORT(d,clk:IN STD_LOGIC;q:OUT STD_LOGIC);END COMPONENT;SIGNAL z:STD_LOGIC_VECTOR(0 TO 8);BEGIN z(0)=a;g1:FOR i IN 0 TO 7 GENERATE dffx:dff P

27、ORT MAP(z(i),clk,z(i+1);END GENERATE;b=z(8);END rtl;,Or using IF-GENERATE Statement:,ARCHITECTURE rtl OF shift8_2 IS COMPONENT dff PORT(d,clk:IN STD_LOGIC;q:OUT STD_LOGIC);END COMPONENT;SIGNAL z:STD_LOGIC_VECTOR(1 TO 7);BEGIN g1:FOR i IN 0 TO 7 GENERATE g11:IF i=0 GENERATE,dffx:dff PORT MAP(a,clk,z(

28、i+1);END GENERATE;g12:IF i=7 GENERATE dffx:dff PORT MAP(z(i),clk,b);END GENERATE;g13:IF i/=0 AND i/=7 GENERATE dffx:dff PORT MAP(z(i),clk,z(i+1);END GENERATE;END GENERATE;END rtl;,Or describing the signals connect:,f.e.2,思考:若将上例中的信号量变为变量,代入符号改成赋值符号“:”,那么该程序所描述的是否仍是一个8位移位寄存器?,答:不是。这样在一个脉冲时间a就直接被送到b,不

29、符合移位寄存器的特征。,2、Rotated Shift Registers,f.e.1,LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;PACKAGE CPAC IS PROCEDURE shift(din,s:IN STD_LOGIC_VECTOR;SIGNAL dout:OUT STD_LOGIC_VECTOR);END CPAC;,PACKAGE BODY CPAC IS PROCEDURE shift(din,s:IN STD_LO

30、GIC_VECTOR;SIGNAL dout:OUT STD_LOGIC_VECTOR)IS VARIABLE sc:INTEGER;BEGIN sc:=CONV_INTEGER(s);FOR i IN dinRANGE LOOP IF(sc+i=dinLEFT)THEN dout(sc+i)=din(i);ELSE dout(sc+idinLEFT)=din(i);END IF;END LOOP;END shift;END CPAC;,Using the shift procedure to describe a 8-bit rotated shift register:,LIBRARY I

31、EEE;USE IEEE.STD_LOGIC_1164.ALL;USE WORK.CPAC.ALL;ENTITY bshift ISPORT(enb,clk:IN STD_LOGIC;din:IN STD_LOGIC_VECTOR(8 DOWNTO 1);s:IN STD_LOGIC_VECTOR(2 DOWNTO 0);dout:OUT STD_LOGIC_VECTOR(8 DOWNTO 1);END bshift;,ARCHITECTURE rtl OF bshift ISBEGIN PROCESS(clk)BEGIN IF(clkEVENT and clk=1)THEN IF enb=0

32、 THEN dout=din;ELSE shift(din,s,dout);END IF;END IF;END PROCESS;END rtl;,3.3.4 Counters,Counter circuits are used in digital systems for many purposes.They may count the number of occurrences of certain events,generate timing intervals for control of various tasks in a system,keep track of time elap

33、sed between specific events,and so on.,1、Synchronous Counters,所谓同步计数器,就是在时钟脉冲的控制下,构成计数器的各触发器状态同时发生变化的那一类计数器。(1)带允许端的十二进制计数器,LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY counter12_2 ISPORT(en,clk,clr:IN STD_LOGIC;qd,qc,qb,qa:OUT STD_LOGIC);END counter12_2;ARCHITECTU

34、RE rtl OF counter12_2 ISSIGNAL q:STD_LOGIC_VECTOR(3 DOWNTO 0);BEGIN,f.e.1,PROCESS(clk,clr)BEGIN IF clr=1 THEN q=0000;ELSIF(clkEVENT and clk=1)THEN IF en=1 THEN IF(q=1011)THEN q=0000;ELSE q=q+1;END IF;,ELSE q=q;END IF;END IF;END PROCESS;qd=q(3);qc=q(2);qb=q(1);qa=q(0);END rtl;,Ex:Design a up-down 6-b

35、it binary counter.,LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY counter64 ISPORT(updn,clk,clr:IN STD_LOGIC;qf,qe,qd,qc,qb,qa:OUT STD_LOGIC);END counter64;,ARCHITECTURE rtl OF counter64 ISSIGNAL q:STD_LOGIC_VECTOR(5 DOWNTO 0);BEGIN PROCESS(clk,clr)BEGIN IF clr=1 THE

36、N q=000000;,ELSIF(clkEVENT and clk=1)THEN IF updn=1 THEN q=q+1;ELSE q=q-1;END IF;END IF;END PROCESS;qf=q(5);qe=q(4);qd=q(3);qc=q(2);qb=q(1);qa=q(0);END rtl;,(2)Modulo-60 Counter,为了把个位和十位分开,我们采用2位十进制计数器连接起来构成一个六十进制计数器。配合bcd1wr,bcdtwr与datain使用,可以实现对六十进制计数器的个位和十位预置数操作。需要注意的是,在对个位和十位进行预置数操作时,datain输入端是公

37、用的,因而个位和十位的预置数操作必定要串行进行。,LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY counter60_2 ISPORT(clk,cin,bcd1wr,bcdtwr:IN STD_LOGIC;datain:IN STD_LOGIC_VECTOR(3 DOWNTO 0);bcd1:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);bcdt:OUT STD_LOGIC_VECTOR(2 DOWNTO 0);co:OUT STD_LOGIC);END coun

38、ter60_2;,f.e.1,ARCHITECTURE rtl OF counter60_2 ISSIGNAL bcd1n:STD_LOGIC_VECTOR(3 DOWNTO 0);SIGNAL bcdtn:STD_LOGIC_VECTOR(2 DOWNTO 0);BEGIN bcd1=bcd1n;bcdt=bcdtn;PROCESS(clk,bcd1wr)BEGIN IF bcd1wr=1 THEN bcd1n=datain;ELSIF(clkEVENT and clk=1)THEN,IF cin=1 THEN IF bcd1n=9 THEN bcd1n=0000;ELSE bcd1n=bc

39、d1n+1;END IF;END IF;END IF;END PROCESS;,PROCESS(clk,bcdtwr)BEGIN IF bcdtwr=1 THEN bcdtn=datain(2 downto 0);ELSIF(clkEVENT and clk=1)THEN IF(cin=1AND bcd1n=9)THEN IF bcdtn=5 THEN bcdtn=000;ELSE bcdtn=bcdtn+1;,END IF;END IF;END IF;END PROCESS;PROCESS(bcdtn,bcd1n,cin)BEGIN IF(cin=1 AND bcd1n=9 AND bcdt

40、n=5)THEN co=1;ELSE co=0;END IF;END PROCESS;END rtl;,2、Asynchronous Counter,异步计数器又称为行波计数器,它的下一位计数器的输出作为上一位计数器的时钟信号,这一级一级串行连接起来就构成了异步计数器。异步计数器与同步计数器不同之处在于时钟脉冲的提供方式,除此之外就没有什么不同,它同样可以构成各种各样的计数器。但是由于异步计数器采用行波计数,从而使计数延迟增加,在要求延迟小的领域受到了很大限制。但由于它电路简单,仍有广泛的应用。,f.e.1,3.4 Storage,Storages have two classes:RAM a

41、nd ROM.3.4.1 存贮器描述中的一些共性问题1、存贮器的数据类型 存贮器是众多存贮单元的一个集合体,按单元号顺序排列。每个单元由若干个二进制位构,成,以表示单元中存放的数据值。这种结构和数组的结构很相似。不妨认为某个存贮器可以用一个数组来代表,每个单元代表数组中的一个元素,数组中的元素序号和存贮器的单元序号一致。这样,用一个数组就能很好的描述存贮器存放数据的结构了。每个存贮单元所存放的数可以用不同的、由VHDL语句所定义的数的类型来描述,例如用整数或位矢量来描述:如,2、存贮的初始化 在用VHDL语言描述ROM时,ROM的内容应该在仿真时先读到ROM中,这就是所谓的存贮器的初始化。存贮

42、器的初始化要依赖于外部文件的读取,也就是说要依赖于TEXTIO。下面是对ROM进行初始化的实例:,一般,ROM初始化在系统加电之后只执行一次。如果在仿真时,RAM也要事先赋值的情况下,也可以采用上述的方法。,3.4.2 ROM,容量为2564的ROM:,f.e.1,SUBTYPE word IS STD_LOGIC_VECTOR(3 DOWNTO 0);TYPE memory IS ARRAY(0 TO 255)OF word;SIGNAL adr_in:INTEGER RANGE 0 TO 255;FILE romin:TEXT IS IN“rom24s10.in”;BEGIN PROCES

43、S(g1,g2,adr)VARIABLE rom:memory;VARIABLE startup:BOOLEAN:=TRUE;VARIABLE l:LINE;BEGIN,IF startup THEN FOR i IN romRANGE LOOP READLINE(romin,l);READ(l,rom(i);END LOOP;startup:=FALSE;END IF;adr_in=CONV_INTEGER(adr);IF(g1=1 AND g2=1)THEN dout=rom(adr_in);ELSE dout=“ZZZZ”;,END IF;END PROCESS;END behave;,

44、Ex:ROM的设计对于容量不大的ROM,可以用VHDL的case语句来实现。下面是用case语句实现88位ROM的源程序 LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY from_rom ISPORT(addr:ININTEGER RANGE 0 TO 7;ena:IN STD_LOGIC;q:OUTSTD_LOGIC_VECTOR(7 DOWNTO 0);END from_rom;ARCHITECTURE a OF from_rom IS BEGIN,PROCESS(ena,addr)BEGINIF(ena=1)THEN q q q q q q q q q=01001000;END CASE;,END IF;END PROCESS;END a;由VHDL源代码生成的88位ROM的元件符号如图所示,其中ADDR3.0是地址输入端,ENA是使能控制输入端,当ENA=1时,ROM不能工作,输出Q7.0为高阻态,ENA=0时,ROM工作,其输出的数据由输入地址决定。,图5.4.1 88位ROM的元件符号,3.4.3 RAM,RAM和ROM的主要区别,在于其描述上有读和写两种操作,而且在读、写上对时间有较严格的要求。,f.e.2,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号