VHDL与数字电路设计PPT课件-第四章 VHDL程序设计基础.ppt_第1页
VHDL与数字电路设计PPT课件-第四章 VHDL程序设计基础.ppt_第2页
VHDL与数字电路设计PPT课件-第四章 VHDL程序设计基础.ppt_第3页
VHDL与数字电路设计PPT课件-第四章 VHDL程序设计基础.ppt_第4页
VHDL与数字电路设计PPT课件-第四章 VHDL程序设计基础.ppt_第5页
免费预览已结束,剩余19页可下载查看

下载本文档

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

文档简介

第四章 vhdl程序 设计基础,vhdl与数字电路设计,本章内容,系统层次化设计方法 库和程序包 元件库 元件、块的配置及参数指定 子程序和运算符的重载 层次化设计实例,1、系统层次化设计方法,层次化设计方法的优点: 一些常用的模块可以被单独创建并存储,在以后的设计中可以直接调用该模块,而无需重新设计 使整个设计更结构化,程序也具有更高的可读性:顶层文件只将一些模块整合在一起,这使整个系统的设计思想比较容易被理解 设计“积木块”和搭“积木”,层次化设计的核心思想有两个: 模块化:可以将一个大系统划分为几个子模块,而这些子模块又分别由更小的模块组成,如此往下,直到不可再分。这也是自顶到下(top-down)的设计方法。 元件重用(reuse):同一个元件可以被不同的实体调用,也可以被同一个实体多次调用。这样做,不仅大大减轻了设计者的工作量,而且使程序更加结构化和具有更高的可读性。,实体a,实体b,实体c,实体d,实体e,实体f,实体g,实体h,2、库和程序包,库(library)是用来存放预先编译好的设计单元的地方,通过其目录可查询。分为设计库和资源库两类。 设计库:std和work库 std库为所有的设计单元所共享、隐含定义、默认和“可见”。直接使用,无需声明。 std库中有两个程序包:stabdard和textio,这两个程序包都是vhdl语言编译工具的组成部分,只要用vhdl语言设计项目,这两个程序包就是必需的工具。,work库是vhdl语言的工作库,用于保存用户的以前编译过或正在进行的设计。eda工具在编译一个vhdl程序时,通常默认它将保存在work库中。 如果需要引用work库中用户自己定义的例化元件和模块,需要声明。 ieee库是最常用的资源库 使用use子句,可以声明库中的单元为可见。 library ieee; use ieee.all; use ieee.std_logic_1164.all;,程序包(package)是一种使包体中的元件、函数、类型说明,对其他设计实体是“可见”、可调用的设计单元。 常用的程序包: standard text10 std_logic_1164 包含std_ulogic、std_ulogic_vector、std_logic、std_logic_vector及其他常用函数。 numeric_std numeric_bit,3、元件库,构造元件 元件打包 构建元件库 调用元件,4、元件、块的配置及参数指定,配置:configuration子句 参数指定:generic子句,5、子程序和运算符的重载,在编写vhdl子程序的过程中,设计人员为了避免混淆常常需要为执行相同操作的子程序选取不同的子程序的名称。这样做的后果是不但降低了vhdl程序的可读性,而且会不可避免的发生子程序名称重复 的情况。 重载是指同样名称的子程序可以采用不同的参数类型、参数数目、不同返回值类型来对它多次定义,同时调用过程中不会发生混淆的一种现象。 子函数重载和运算符重载。,5.1 子程序重载,参数类型的重载 参数数目的重载 返回值类型的重载 function max_value(a,b:integer) return integer; function max_value(a,b:std_logic_vector) return std_logic_vector; function max_value(a,b,c:integer) return integer; function max_value(a,b,c:std_logic_vector) return std_logic_vector; function max_value(a,b:std_logic_vector) return integer;,主程序调用哪一个函数由以下条件决定: 实参的数据类型 实参的具体数目 使用带名字的参数关联时形参的名字 返回值类型,entity maximum is port(a1,b1:in integer; a2,b2:in std_logic_vector(3 downto 0); a3,b3,c3:in integer; a4,b4,c4:in std_logic_vector(3 downto 0); a5,b5:std_logic_vector(3 downto 0); q1, q3, q5: out integer; q2, q4: out std_logic_vector(3 downto 0) end maximum; architecture rtl of maximum is begin q1=max_value(a1,b1); q2=max_value(a2,b2); q3=max_value(a3,b3,c3); q4=max_value(a4,b4,c4); q5=max_value(a5,b5); end rtl;,5.2 运算符重载,是指允许运算符函数对各种数据类型进行操作,是解决vhdl设计中不同数据类型或多种数据类型的对象操作的最有效手段。 function “+” (l,r:std_logic_vector) return std_logic_vector; function “+” (l:std_logic_vector; r:integer) return std_logic_vector; function “+” (l:integer; r:std_logic_vector) return std_logic_vector; function “+” (l:std_logic_vector; r:std_logic) return std_logic_vector; function “+” (l:std_logic; r:std_logic_vector) return std_logic_vector;,6、层次化设计实例,4分频电路,10分频电路,clkout,sel,clk,clk1,clk2,clkin,clkin,clkout,clkout,dataa,datab,dataout,library ieee; use ieee.std_logic.1164.all; entity hierarchy_eg is port( clk,sel: in std_logic; clkout: out std_logic); end hierarchy_eg; architecture structure of hierarchy_eg is component fredevided4 is port( clkin: in std_logic; clkout: out std_logic); end conponent; component fredevided10 is port( clkin: in std_logic; clkout: out std_logic); end conponent;,component mux2 is port( dataa,datab,sel: in std_logic; dataout: out std_logic); end conponent; signal clk1,clk2: std_logic; begin u1:fredevided4 port map (clkin=clk,clkout=clk1); u2:fredevided10 port map (clkin=clk,clkout=clk2); u3:mux2 port map (dataa=clk1, datab=clk2, sel=sel, dataout=clkout); end structure;,元件例化语句实现了系统的层次化和结构化设计,但有一个缺点:如果有n个上层实体用到了同一个下层实体,那么在这n个上层实体的程序中,都必须对该下层实体进行元件定义。另外,如果一个程序中用到了很多元件,那么元件定义语句要占很大篇幅,使程序显得臃肿,降低程序的可读性。 解决上述问题的方法就是用程序包package,library ieee; use ieee.std_logic.1164.all; package pac_devider is component fredevided4 is port(clkin: in std_logic; clkout: out std_logic); end conponent; component fredevided10 is port(clkin: in std_logic; clkout: out std_logic); end conponent; component mux2 is port(dataa,datab,sel: in std_logic; dataout: out std_logic); end conponent; end pac_devider;,将pac_devider保存并编译。只有保存过的程序包才能被其他设计实体调用。 调用如下: library ieee; use ieee.std_logic_1164.all; use work.pac_devider; entity hierarchy_eg is port(clk, sel: in std_logic; clkout: out std_logic); end hierarchy_eg; architecture structure of hierarchy_eg is signal clk1, clk2: std_logic; begin u1:fredevided4 port map (clkin=clk,clkout=clk1); u2:fredevided10 port map (clkin=clk,clkout=clk2); u3:mux2 port map (dataa=clk1, datab=clk2, sel=sel, dataout=clkout); end structure;,参数可调的偶数倍分频器的程序: library ieee; use ieee.std_logic_1164.all; entity fredevider is generic (n:integer); port (clkin: in std_logic; clkout: out std_logic); end fredevider; architecture behave of fredevider is signal counter: integer range 0 to n; begin end behave;,改写一下,将4分频器和10分频器用generic语句统一为一个component语句: library ieee; use ieee.std_logic_1164.all; package pac_devider is component fredevided is generic(n:integer); port(clkin: in std_logic; clkout: out std_logic); end conponent; component mux2 is port(dataa,datab,sel: in std_logic; dataout: out std_logic); end conponent; end pac_devider;,类属映射: library ieee; use ieee.std_logic_1164.all; use work.pac_devider; entity hierarchy_eg is port(clk, sel: in std_logic; clkout: out std_logic); end pac_devider; architecture structure of hier

温馨提示

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

评论

0/150

提交评论