vhdl语言构造体的描述方式教学PPT.ppt_第1页
vhdl语言构造体的描述方式教学PPT.ppt_第2页
vhdl语言构造体的描述方式教学PPT.ppt_第3页
vhdl语言构造体的描述方式教学PPT.ppt_第4页
vhdl语言构造体的描述方式教学PPT.ppt_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

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

文档简介

第5章vhdl语言 构造体的描述方式,行为描述方式 数据流描述方式(寄存器传输描述rtl) 结构描述方式 混合描述方式,可进行逻辑综合,不能进行逻辑综合,5.1行为描述方式,所谓行为描述,就是对设计实体的数学模型的描述,其抽象程度远远高于数据流描述方式和结构描述方式. 行为描述类似于高级编程语言,当要描述一个设计实体的行为时,无须知道具体电路的结构,只需要用一组状态来描述即可.,行为描述的优点在于只需要描述清楚输入与输出的行为,而不需要花费更多的精力关注设计功能的门级实现. 描述数字系统的行为,主要用于仿真和系统工作原理的研究。,代入语句 格式: 信号量=敏感信号量表达式; 例如: z=a nor(b nand c); 该例中有三个敏感量,无论哪一个发生变化都可以使z变化。 具有时间延迟的代入语句: a=b after 10 ns 表示当b发生变化10 ns后a才变化。 a:=b after 5 ns,语法错误,例如: entity and2 is port(a,b : in bit; c : out bit); end and2; architecture and2_behave of and2 is begin c=a and b; end and2_behave;,c=a and b; 被替换为 c=a and b after 5 ns;,延时语句 vhdl中有两种延时语句:惯性延时和传输延时。 惯性延时 vhdl中惯性延时是缺省的,因为逻辑硬件电路总是有时间延迟的。若延迟时间是20ns,那么输入信号时间若小于20ns,则输出信号将不跟随输入信号的变化。有时为使延迟时间更逼真实际电路,就专门设置惯性时间: b=a after 10 ns; 传输延时 传输延时常代表总线、连接线的延迟时间,该时间必须专门说明。该传输延时只对信号起纯延时作用。 例: b=transport a after 20 ns;,generic语句 generic语句常用于不同层次之间的信息传递。该语句说设计的数据除整数类型以外,如涉及其他类型的数据则不能进行逻辑综合。该语句主要用于行为描述方式。 使用generic语句易于使器件模块化和通用化。 例如书中p54页例题4-4,4-5,数据流描述方式 数据流描述方式是一种可以进行逻辑综合的描述方式,由于要进行逻辑综合所以对使用的语句有一定的限制,vhdl中的每一个命令和语句都对逻辑综合能力进行了定义,要进行逻辑综合的设计实体就要使用有逻辑综合能力的命令和语句。,数据流描述是对从信号到信号的数据流的路径形式进行描述,因此很容易进行逻辑综合. 由于要对信号的流动路径进行描述,因此要求设计人员对设计实体的功能实现要有一定的了解,有时候还需要对内部电路有清楚的认识,具有一定的难度.,例:四选一电路 library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity mux42 is port(input : in std_logic_vector(3 downto 0); sel : in std_logic_vector(1 downto 0); y : out std_logic); end mux42; architecture app of mux42 is begin y=input(0) when sel=0 else input(1) when sel=1 else input(2) when sel=2 else input(3); end app;,使用数据流描述方式应该注意的问题: 1x状态的传递问题 有时x状态会逐级传递,造成系统的输出为不确定或者错误,所以要在设计中考虑x状态对输出的影响。,process (sel) begin if (sel=1) then y=0; else y=1; end if; end process;,process (sel) begin if (sel=1) then y=0; else y=1; end if; end process;,如下更改 process (sel) begin if (sel=1) then y=0; elseif (sel=0) then y=1; else y=x; end if end process,2. 一些限制 *禁止在一个进程中使用两个寄存器 *在进程中,对变量要先读后写 *在if语句描述寄存器时,禁止else项 *在寄存器描述中,禁止将变量代入信号 *关连性强的信号应该放在一个进程中,例1: process(clk1,clk2) begin if clk1event and clk1=1 then y=m; end if; if clk2event and clk2=1 then -错误 x=m; end if; end process;,例2: process(clk,reset) variable a:std_logic; begin if reset = 1 then a:= 0; outsignal=0; elsif rising_edge(clk) then outsignal=a; -先读 a := insignal; -后写 end if; end process; 因为变量值是立即获得的,所以如果先写后读就会产生长的组合逻辑和锁存器(或寄存器)。因此在编写代码过程中,对变量要先读后写。,对于rtl描述方式中的if语句在其描述寄存器功能时,禁止采用else项,因为这种赋值方式相当于检测如果没有时钟信号时,则赋新值,而实际上不可能有这样的硬件电路与之对应,如例3所示。而如例4所示的else项在rtl描述方式中是可以使用的。,例3: process(clk) begin if clkevent and clk=1 then y=m; else -禁止使用 y=n; end if; end process;,例4: process(clk) begin if clkevent and clk=1 then if ena=1 then y=m; else -可以使用 y=n; end if; end if; end process;,结构描述方式,结构描述方式就是在多层次的设计中,通过调用库中的元件或是已设计好的模块来完成设计实体功能的描述. 在结构体中,描述只表示元件(或模块)和元件(或模块)之间的互连,就像网表一样. 当引用库中不存在的元件时,必须首先进行元件的创建,然后将其放在工作库中,通过调用工作库来引用元件.在引用元件时,要先在结构体说明部分进行元件的说明,然后在使用元件进行元件例化.,注重调用已有的元件、元件或门级电路之间的连线是结构描述的特点,结构描述可以提高设计效率. 元件声明语句: 元件声明语句用于调用已生成的元件,这些元件可能在库中,也可能是预先编写的元件实体描述. 元件语句的格式: component 元件名 generic说明; 参数说明 port 说明; 端口说明 end component; 元件语句可以在architecture,package和block的说明部分.,元件调用: 格式: 标号名:元件名 port map(信号,); 两层信号之间的关系为映射关系,该映射有两种: 位置映射例: 有一元件的端口说明为: port (a,b: in bit; c: out bit); 调用该元件时: u2: 元件名 port map(n1,n2,m); 这里n1对应a,n2对应 b,m对应 c. 名称映射例: 该映射就是将库中已有模块的端口名称,赋予设计中的信号名. u2: 元件名 port map(a=n1,b=n2,c=m);,asic级结构描述 插板级结构描述 系统级的结构描述,构造体结构描述的基本框架,全加器,设有两个四位二进制数相加 1 0 0 1 被加数a 0 1 0 1 加数 b 1 1 1 0 和 s 在相加过程中,两数相加有时要产生进位,这个进位要送到高位的和中去.所以一个全加器要求三个变量(被加数ai和加数bi以及低位向本位的进位ci-1)的和si和向高位的进位ci.,全加器真值表,一位全加器的逻辑示意图,a,b,cin,s,co,采用行为描述方法设计一位全加器,library ieee; use ieee.std_logic_1164.all; entity full_adder is port(a,b,cin:in std_logic; co,s:out std_logic); end full_adder; architecture behav of full_adder is begin process(a,b,cin) variable ai,bi,ci,si:integer; begin if (a=0) then ai := 0; else ai := 1; end if; if (b=0) then bi := 0; else bi := 1; end if;,if (cin=0) then ci := 0; else ci := 1; end if; si := ai + bi +ci; case si is when 0= s =0;co=0; when 1= s =1;co=0; when 2= s =0;co=1; when 3= s =1;co=1; when others=s=x;co=0; end case; end process; end behav;,错误; 应为=,错误; 应在32位之内,一位全加器实现的逻辑电路图,采用数据流描述方法设计一位全加器,library ieee; use ieee.std_logic_1164.all; entity full_adder is port(a,b,cin:in std_logic; co,s:out std_logic); end full_adder; architecture dataflow of full_adder is signal temp1,temp2:std_logic; begin temp1 = a xor b; temp2 = temp1 and cin; s = temp1 xor cin; co = temp2 or (a and b); end dataflow;,采用半加器设计全加器,1位半加器,1位全加器,h_adder a co b so,h_adder a co b so,h_adder a co b so,f_adder ain cout bin sum cin,ain,bin,ain,a c b,u1,u2,u3,sum,cout,d,e,f,library ieee; use ieee.std_logic_1164.all; entity or2 is port(a,b:in std_logic; c: out std_logic); end or2; architecture ful of or2 is begin c = a or b; end fu1;,或门设计,library ieee; use ieee.std_logic_1164.all; entity h_adder is port(a,b:in std_logic; co,so:out std_logic); end h_adder; architecture fh1 of h_adder is begin so= a and (a nand b); co=not( a nand b ); end fh1;,半加器设计,library ieee; use ieee.std_logic_1164.all; entity f_adder is port(ain,bin,cin:in std_logic; cout,sum:out std_logic); end f_adder; architecture fd1 of f_adder is component h_adder port(a,b:in st

温馨提示

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

评论

0/150

提交评论