电子自动化第三章3.83.9VHDL描述风格.ppt

上传人:小飞机 文档编号:6003790 上传时间:2023-09-13 格式:PPT 页数:34 大小:210.63KB
返回 下载 相关 举报
电子自动化第三章3.83.9VHDL描述风格.ppt_第1页
第1页 / 共34页
电子自动化第三章3.83.9VHDL描述风格.ppt_第2页
第2页 / 共34页
电子自动化第三章3.83.9VHDL描述风格.ppt_第3页
第3页 / 共34页
电子自动化第三章3.83.9VHDL描述风格.ppt_第4页
第4页 / 共34页
电子自动化第三章3.83.9VHDL描述风格.ppt_第5页
第5页 / 共34页
点击查看更多>>
资源描述

《电子自动化第三章3.83.9VHDL描述风格.ppt》由会员分享,可在线阅读,更多相关《电子自动化第三章3.83.9VHDL描述风格.ppt(34页珍藏版)》请在三一办公上搜索。

1、3.8 VHDL的描述方式,掌握结构体三种不同的描述风格行为描述、数据流描述、结构描述三种描述风格各自具有什么特点。,行为描述方式是指对系统数学模型的抽象描述,为高级描述,只描述电路的功能,不直接指明或涉及这些行为的硬件结构。在行为描述方式的程序中,大量采用了算术运算、关系运算、惯性延时、传输延时等难于进行逻辑综合和不能进行逻辑综合的VHDL语句,采用综合能力较强的Cadence、Synopsys等EDA工具。,3.8.1 行为描述,ENTITY cnt10 IS PORT(reset,clk:INSTD_LOGIC;q:OUTSTD_LOGIC_VECTOR(3 downto 0);END

2、cnt10;ARCHITECTURE behav OF cnt10 IS SIGNAL qo:STD_LOGIC_VECTOR(3 downto 0);BEGIN PROCESS(clk,reset,qo)BEGIN IF reset=0 THEN qo=0000;ELSIF(clkevent and clk=1)THENIF qo=1001 THEN qo=0000;ELSE qo=qo+1;END IF;END IF;q=qo;END PROCESS;END behav;,异步清零的模10计数器,它对计数器时钟信号的触发要求作了明确而详细的描述,对时钟信号特定的行为方式所产生的信息后果作了

3、准确的定义。这充分展现了VHDL最为闪光之处。,ELSIF(clkevent and clk=1)THEN,ENTITY cnt10 IS PORT(reset,clk:INSTD_LOGIC;q:OUTSTD_LOGIC_VECTOR(3 downto 0);END cnt10;ARCHITECTURE behav OF cnt10 ISSIGNAL qo:integer range 0 to 15;BEGINPROCESS(clk,reset,qo)BEGINIF(clkevent and clk=1)THEN IF(reset=0 or qo=9)THEN qo=0;ELSE qo=qo

4、+1;END IF;END IF;q=conv_std_logic_vector(qo,4);END PROCESS;END behav;,同步清零的模10计数器,ENTITY cntb IS PORT(reset,en,load,clk:INSTD_LOGIC;din:INSTD_LOGIC_VECTOR(3 downto 0);q:OUTSTD_LOGIC_VECTOR(3 downto 0);END cntb;ARCHITECTURE behav OF cntb IS SIGNAL qo:STD_LOGIC_VECTOR(3 downto 0);BEGIN PROCESS(clk,res

5、et,en,load,qo)BEGINIF reset=0 THEN qo=0000;ELSIF(clkevent and clk=1)THEN IF load=0 THEN qo=din;ELSIF en=1 THEN qo=qo+1;END IF;END IF;q=qo;END PROCESS;END behav;,4位二进制计数器,行为级描述只描述设计电路的功能或电路的行为,而没有指明或实现这些行为的硬件结构;或者说行为级描述只表示输入输出之间的转换行为,它不包含任何结构信息。行为级描述通常指顺序语句描述,即含有进程的非结构化的逻辑描述。行为级描述的设计模型定义了系统的行为,通常由一个或

6、多个进程构成,每一个进程又包含了一系列的顺序语句。,在应用VHDL进行程序设计时,行为描述方式是最重要 的描述方式,它是VHDL编程的核心,可以说,没有行为描述就没有VHDL。,3.8.2 数据流描述,数据流描述也叫RTL的描述方式,采用寄存器硬件一一对应的直接描述,或者采用寄存器之间的功能描述。RTL描述方式建立在并行信号赋值语句描述的基础上,描述数据流的运动路径、运动方向和运动结果。RTL描述方式是真正可以进行逻辑综合的描述方式。RTL描述方式既可描述时序电路,又可描述组合电路。,4选1多路选择器(RTL描述)LIBRARY ieee;USE ieee.std_logic_1164.ALL

7、;ENTITY mux4_1 ISPORT(d:INSTD_LOGIC_VECTOR(3 DOWNTO 0);sel:INSTD_LOGIC_VECTOR(1 DOWNTO 0);y:OUTSTD_LOGIC);END mux4_1;ARCHITECTURE rtl OF mux4_1 ISBEGINy=d(0)WHEN sel=00 ELSE d(1)WHEN sel=01 ELSE d(2)WHEN sel=10 ELSE d(3);END rtl;,一位全加器(RTL描述)LIBRARY IEEE;ENTITY ADDER1B ISPORT(AIN,BIN,CIN:IN BIT;SUM,

8、COUT:OUT BIT);END ENTITY ADDER1B;ARCHITECTURE ART OF ADDER1B IS SUM=AIN XOR BIN XOR CIN;COUNT=(AIB AND BIN)OR(AIN AND CIN)OR(BIN AND CIN);END ARCHITECTURE ART;,使用RTL描述方式应注意问题,PROCESS(sel)BEGINIF(sel=1)THEN y=0;ELSE y=1;END IF;END PROCESS;,PROCESS(sel)BEGINIF(sel=0)THEN y=1;ELSE y=0;END IF;END PROCES

9、S;,当sel=X时,前一个输出的y值为1,后一个却变成了0。,(一)“X”状态的传递:所谓“X”状态的传递,不确定信号的传递,它将使逻辑电路产生不确定的结果。“不确定状态”在RTL仿真时是允许出现的,但在逻辑综合后的门级电路仿真中是不允许出现的。,PROCESS(sel)BEGINIF(sel=1)THEN y=0;ELSIF(sel=0)THEN y=1;ELSE y=X;END IF;END PROCESS;,在使用双向数据总线时,其信号取值总会出现高阻状态“Z”。当双向总线的信号去驱动逻辑电路时,就有可能出现“X”状态的传递。为了保证逻辑电路的正常工作,高阻状态“Z”应该禁止。如右图中

10、的en信号。,(二)寄存器RTL描述的限制:禁止在一个进程中存在两个边沿检测 的寄存器描述;禁止使用IF语句中的 ELSE 项;寄存器描述中必须代入信号值。,PROCESS(clk1,clk2)BEGINIF(clk1 EVENT AND clk1=1)THEN y=a;END IF;IF(clk2 EVENT AND clk2=1)THEN z=b;END IF;END PROCESS;,在一个进程中不允许引入两个边沿检测的寄存器进行描述!,PROCESS(clk)BEGINIF(clkEVENT AND clk=1)THEN y=a;ELSE-禁止使用 y=b;END IF;END PRO

11、CESS;,PROCESS(clk)VARIABLE tmp:STD_LOGIC;BEGINIF(clkEVENT AND clk=1)THEN tmp:=a;END IF;y=tmp;END PROCESS;,禁止使用ELSE!,必须代入信号值!,不可能有这样的硬件电路与之对应!,3.8.3 结构级描述方式,结构描述方式是描述该设计单元的硬件结构,即该硬件是如何构成的。在多层次的设计中,常采用结构描述方式在高层次的设计模块中调用低层次的设计模块,或者直接用门电路设计单元构造一个复杂的逻辑电路。编写结构描述程序可模仿逻辑图的绘制方法。结构描述方式通常采用元件例化语句和生成语句编写程序。,四位等

12、值比较器ENTITY comp4 IS PORT(a,b:IN STD_LOGIC_VECTOR(3 downto 0);y:OUT STD_LOGIC);END comp4;ARCHITECTURE structural OF comp4 IS COMPONENT xnor2PORT(in1,in2:IN STD_LOGIC;out:OUT STD_LOGIC);END COMPONENT;COMPONENT and4PORT(in1,in2,in3,in4:IN STD_LOGIC;out:OUT STD_LOGIC);END COMPONENT;SIGNAL s:STD_LOGIC_VE

13、CTOR(0 to 3);BEGIN u0:xnor2 PORT MAP(a(0),b(0),s(0);u1:xnor2 PORT MAP(a(1),b(1),s(1);u2:xnor2 PORT MAP(a(2),b(2),s(2);u3:xnor2 PORT MAP(a(3),b(3),s(3);u4:and4 PORT MAP(s(0),s(1),s(2),s(3),y);END structural;,编写结构描述程序的主要步骤:1)绘制框图。先确定当前设计单元中需要用到的子模块的种类和个数。对每个子模块用一个图符(称为实例元件)来代表,只标出其编号、功能和接口特征(端口及信号流向),

14、而不关心其内部细节。2)元件说明。每种子模块分别用一个元件声明语句来说明。3)信号说明。为各实例元件之间的每条连接线都起一个单独的名字,称为信号名。利用SIGNAL语句对这些信号分别予以说明。4)元件例化。根据实例元件的端口与模板元件的端口之间的映射原理,对每个实例元件均可写出一个元件例化语句。5)添加必要的框架,完成整个设计文件。,-结构体 1:ARCHITECTURE behavior OF comp4 ISBEGINComp:PROCESS(a,b)BEGIN IF a=b THEN y=1;ELSE y=0;END IF;END PROCESS comp;END behavior;,四

15、位等值比较器三种不同描述风格,-结构体 2:ARCHITECTURE dataflow OF comp4 ISBEGIN y=1 WHEN(a=b)ELSE 0;END dataflow;,-结构体 3:ARCHITECTURE structural OF comp4 IS COMPONENT xnor2 PORT(in1,in2:IN STD_LOGIC;Out:OUT STD_LOGIC);END COMPONENT;COMPONENT and4 PORT(in1,in2,in3,in4:IN STD_LOGIC;Out:OUT STD-LOGIC);END COMPONENT;SIGNA

16、L s:STD_LOGIC_VECTOR(0 to 3);BEGIN u0:xnor2 PORT MAP(a(0),b(0),s(0);u1:xnor2 PORT MAP(a(1),b(1),s(1);u2:xnor2 PORT MAP(a(2),b(2),s(2);u3:xnor2 PORT MAP(a(3),b(3),s(3);u4:and4 PORT MAP(s(0),s(1),s(2),s(3),y);END structural;,3.9 基本逻辑电路设计,组合逻辑电路:基本逻辑门电路、3-8译码器、三态门及其总线缓冲器时序逻辑电路:D触发器、T触发器、JK触发器、RS触发器、寄存器

17、、移位寄存器、计数器,LIBRARY IEEE;ENTITY GATE ISPORT(A,B:IN STD_LOGIC;YAND,YOR,YNAND,YNOR,YNOT,YXOR:OUT STD_LOGIC);END ENTITY GATE;ARCHITECTURE ART OF GATE ISBEGIN YAND=A AND B;-与门输出 YOR=A OR B;-或门输出 YNAND=A NAND B;-与非门输出 YNOR=A NOR B;-或非门输出 YNOT=A NOT B;-反相器输出 YXOR=A XOR B;-异或门输出 END ARCHITECTURE ART;,基本逻辑门电

18、路,LIBRARY IEEE;USE IEEE.STD_LOGIC_UNSIGNED_ALL;ENTITY DECODER ISPORT(INP:IN STD_LOGIC_VECTOR(2 DOWNTO 0);OUTP:OUT BIT_VECTOR(7 DOWNTO 0);END ENTITY DECODER;ARCHITECTURE ART2 OF DECODER ISBEGIN PROCESS(INP)BEGIN OUTP1);OUTP(COVN_INTEGER(INP)=1;END PROCESS;END ARCHITECTURE ART2;,3-8译码器,三态门,LIBRARY IEE

19、E;ENTITY TRISTATE ISPORT(EN,DIN:IN STD_LOGIC;DOUT:OUT STD_LOGIC);END ENTITY TRISTATE;ARCHITECTURE ART OF TRISTATE ISBEGINPROCESS(EN,DIN)ISBEGINIF EN=1 THEN DOUT=DIN;ELSE DOUT=Z;END IF;END PROCESS;END ARCHITECTURE ART;,总线缓冲器,ENTITY TRI_BUF8 ISPORT(DIN:IN STD_LOGIC_VECTOR(7 DOWNTO 0);EN:IN STD_LOGIC;D

20、OUT:OUT STD_LOGIC_VECTOR(7 DOWNTO 0);END ENTITY TRI_BUF8;ARCHITECTURE ART OF TRI_BUF8 ISBEGIN PROCESS(EN,DIN)ISBEGINIF(EN=1)THENDOUT=DIN;ELSE DOUT=ZZZZZZZZ;END IF;END PROCESS;END ARCHITECTURE ART;,LIBRARY IEEE;ENTITY DCFQ IS PORT(D,CLK:IN STD_LOGIC;Q:OUT STD_LOGIC);END ENTITY DCFQ;ARCHITECTURE ART O

21、F DCFQ ISBEGINPROCESS(CLK)ISBEGIN IF(CLKEVENT AND CLK=1)THEN-时钟上升沿触发 Q=D;END IF;END PROCESS;END ARCHITECTURE ART;,D触发器,LIBRARY IEEE;ENTITY JKCFQ IS PORT(J,K,CLK:IN STD_LOGIC;Q,QB:BUFFER STD_LOGIC);END ENTITY JKCFQ;ARCHITECTURE ART OF JKCFQ ISSIGNA Q_S,QB_S:STD_LOGIC;BEGIN,JK触发器,PROCESS(CLK,J,K)ISBEG

22、IN 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;END IF;END IF;Q=Q_S;QB=QB_S;END PROCESS;END ARCHITECTURE ART;,JK触发器,LIBRARY IEEE;ENTITY REG IS PORT(D:IN STD_LOGIC_VECTOR(0 TO 7);CLK:IN STD_LOGIC;Q:OUT

23、 STD_LOGIC_VECTOR(0 TO 7);END ENTITY REG;ARCHITECTURE ART OF REG ISBEGINPROCESS(CLK)BEGINIF(CLKEVENT AND CLK=1)THENQ=D;END IF;END PROCESS;END ARCHITECTURE ART;,寄存器,LIBRARY IEEE;ENTITY SHIFTER ISPORT(DATA:IN STD_LOGIC_VECTOR(7 DOWNTO 0);SHIFT_LEFT:IN STD_LOGIC;SHIFT_RIGHT:IN STD_LOGIC;RESET:IN STD_LO

24、GIC;MODE:IN STD_LOGIC_VECTOR(1 DOWNTO 0);QOUT:BUFFER STD_LOGIC_VECTOR(7 DOWNTO 0);END ENTITY SHIFTER;ARCHITECTURE ART OF SHIFTER ISBEGIN,移位寄存器,PROCESSBEGINWAIT UNTIL(RISING_EDGE(CLK);IF(RESET=1)THEN QOUTQOUTQOUTQOUTNULL;END CASE;END IF;END PROCESS;END ARCHITECTURE ART;,移位寄存器,LIBRARY IEEE;ENTITY CNTM

25、60 IS PORT(CI:IN STD_LOGIC;-计数控制NRESET:IN STD_LOGIC;-异步复位控制 LOAD:IN STD_LOGIC;-置数控制 D:IN STD_LOGIC_VECTOR(7 DOWNTO 0);CLK:IN STD_LOGIC;CO:OUT STD_LOGIC;-进位输出 QH:BUFFER STD_LOGIC_VECTOR(3 DOWNTO 0);-输出高4位 QL:BUFFER STD_LOGIC_VECTOR(3 DOWNTO 0);-输出低4位END ENTITY CNTM60;,60进制计数器,ARCHITECTURE ART OF CNTM

26、60 ISBEGINCO=1WHEN(QH=“0101”AND QL=“1001”AND CI=1)ELSE0;-进位输出的产生PROCESS(CLK,NRESET)BEGINIF(NRESET=0)THEN-异步复位QH=0000;QL=0000;ELSIF(CLKEVENT AND CLK=1)THEN-同步置数IF(LOAD=1)THENQH=D(7 DOWNTO 4);Q L=D(3 DOWNTO 0);ELSIF(CI=1)THEN-模60的实现IF(QL=9)THENQL=0000;,60进制计数器,IF(QH=5)THEN QH=0000;ELSE-计数功能的实现 QH=QH+1;END IF;ELSEQL=QL+1;END IF;END IF;-END IF LOADEND IF;END PROCESS;END ARCHITECTURE ART;,60进制计数器,

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

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


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号