欢迎来到三一文库! | 帮助中心 三一文库31doc.com 一个上传文档投稿赚钱的网站
三一文库
全部分类
  • 研究报告>
  • 工作总结>
  • 合同范本>
  • 心得体会>
  • 工作报告>
  • 党团相关>
  • 幼儿/小学教育>
  • 高等教育>
  • 经济/贸易/财会>
  • 建筑/环境>
  • 金融/证券>
  • 医学/心理学>
  • ImageVerifierCode 换一换
    首页 三一文库 > 资源分类 > PPT文档下载  

    第4章VHDL语言基础.ppt

    • 资源ID:9139174       资源大小:854.50KB        全文页数:75页
    • 资源格式: PPT        下载积分:8
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录   微博登录  
    二维码
    微信扫一扫登录
    下载资源需要8
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    第4章VHDL语言基础.ppt

    FPGA-CPLD原理及应用,山东工商学院 电子信息系 张守祥 ,第四章 VHDL语言基础,硬件特性,工程(实体),外部(可视部分,也称端口),内部(不可视,也称内部功能和算法),库,实体(Entity),结构体 (Architecture),进程或其它并行结构,配置(Configuration),VHDL结构,程序包,Library(程序库) Package(程序包) Entity(实体) Architecture(结构体) Configuration(配置),VHDL程序由5个部分组成,一个实体可以拥有多个不同的结构体,而每个结构体在实体中的地位是相同的。可以利用配置语句为实体指定一个结构体。,VHDL程序由5个部分组成,库,存放已编译过的实体、结构体、程序包和配置。,程序包,由一组对外可见的信号、常量、数据类型、子程序、属性等组成的程序集合。,实体,描述系统的外部信号接口。,结构体,描述系统的行为,系统数据流程,系统组织结构形式。,配置,-eqcomp4 is a four bit equality comparator Library IEEE; use IEEE.std_logic_1164.all; entity eqcomp4 is port(a, b:in std_logic_vector(3 downto 0); equal :out std_logic); end eqcomp4; architecture dataflow of eqcomp4 is begin equal <= 1 when a=b else 0; End dataflow;,VHDL组成,eqcomp4.vhd,包,实体,结构体,文件名和实体名一致,每行;结尾,关键字begin,关键字end后跟实体名,关键字end后跟结构体名,库,一、实体(Entity),描述此设计功能输入输出端口(Port) 在层次化设计时,Port为模块之间的接口 在芯片级,则代表具体芯片的管脚,A3.0,B3.0,equal,Entity eqcomp4 is port(a, b: in std_logic_vector(3 downto 0); equal: out std_logic ); end eqcomp4;,Port (端口名称,端口名称:端口模式 数据类型; 端口名称,端口名称:端口模式 数据类型 );,端口声明,确定输入、输出端口的数目和类型。,输入(Input) 输出(Output) 双向(Inout):可代替所有其他模式,但降低了程序的可读性,一般用于与CPU的数据总线接口 缓冲(Buffer):与Output类似,但允许该管脚名作为一些逻辑的输入信号,端口模式符号图,out 和 buffer 的区别,OUT、INOUT与BUFFER模式的区别,例:一个完整描述(3 比特 计数器),计数器等效描述(out与buffer的区别),指端口上流动的数据表达格式,为预先定好的数据类型,如:bit、bit_vector、integer、std_logic、std_logic_vector 等。 例: entity m81 is port (a: in std_logic_vector(7 downto 0); sel: in std_logic_vector(2 downto 0); b:out bit ); end entity m81;,3、数据类型,作用:用于描述设计实体的内部结构以及实体端口之间的逻辑关系 两个组成部分: 说明部分:对数据类型、常数、信号、子程序、 元件等元素的说明。 功能描述部分:以各种不同的描述风格对系统的 逻辑功能进行描述。 常用的描述风格有: 行为描述、数据流描述、结构化描述。,二、 结构体,二、 结构体,实体与结构体的关系,设计实体,结构体1,结构体2,结构体3,结构体n,。 。 。,一个设计实体可有多个结构体,代表实体的多种实现方式。各个结构体的地位相同。,注:同一实体的结构体不能同名。定义语句中的常数、信号不能与实体中的端口同名。,architecture 结构体名称 of 实体名称 is 说明语句 ; begin (功能描述)语句; end architecture 结构体名称;,结构体的语法,例:结构体中错误的信号声明,设计实体,结构体1,结构体2,结构体3,结构体n,。 。 。,一个设计实体的多种实现方式,配置:从某个实体的多种结构体描述方式中选择 特定的一个。,三、配置,configuration 配置名 of 实体名 is for 选配结构体名 end for ; end 配置名;,简单配置的语法,library ieee; use ieee.std_logic_1164.all; entity nand is port(a: in std_logic; b: in std_logic; c: out std_logic); end entity nand; architecture art1 of nand is begin c<=not (a and b); end architecture art1;,一个与非门不同实现方式的配置,architecture art2 of nand is begin c<=1 when (a=0) and (b=0) else 1 when (a=0) and (b=1) else 1 when (a=1) and (b=0) else 0 when (a=1) and (b=1) else 0; end architecture art2;,configuration first of nand is for art1; end for; end first; configuration second of nand is for art2 end for; end second;,四、 库,库是一种用来存储预先完成的程序包和数据集合体的仓库。 VHDL语言中存在多个不同的库,库与库之间独立,不可嵌套; 库的好处:达到资源共享。,1、格式:LIBRARY 库名;,2、库的种类,IEEE库 STD库(默认库) ASIC库 WORK库(默认库) 用户定义库,库的分类,IEEE库,IEEE库是最常用的资源库,包含IEEE标准的程序包和其他一些支持工业标准的程序包。 还有一些程序包,如SYNOPSYS公司提供的 STD_LOGIC_ARITH STD_LOGIC_UNSIGNED STD_LOGIC_SIGNED 不属于IEEE标准,但仍汇集在IEEE库中。,该库中的程序包并非符合VHDL语言标准,因此在使用时必须以显示表达出来。 格式:LIBRARY IEEE ; 库内程序包: std_logic_1164 (std_logic types ,LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_ UNSIGNED.CONV_INTEGER; 上例表明,要使用IEEE库中STD_LOGIC_1164包 集合中的所有过程和函数,这里项目名为ALL, 表示包集合中的所有项目都要用。,库调用举例,程序包(Package):将已定义的常数、数据类型、元件语句、子程序等收集起来组成一个集合,以便被更多的VHDL设计实体进行访问和共享。,五、程序包(包集合)Package,程序包结构: 程序包说明(包首) 程序包主体(包体),包声明项可由以下语句组成: use 语句(用来包括其它程序包); 类型说明;子类型说明;常量说明; 信号说明;子程序说明;元件说明。,package 程序包名 is 包说明项 end 程序包名;,1、程序包说明(包首),语法:,包首说明,包体说明项可含: use 语句; 子程序说明; 子程序主体; 类型说明; 子类型说明; 常量说明。,package body 程序包名 is 包体说明项 end 程序包名;,2、程序包包体,程序包的内容:子程序的实现算法。,程序包体并非必须,只有在程序包中要说明子程序时,程序包体才是必须的。 程序包首可以独立定义和使用。,包首与包体关系,package seven is subtype segments is bit_vector(0 to 6); type bcd is range 0 to 9; end seven; library work; use work.seven.all; entity decoder is port(input: in bcd; drive: out segments); end decoder; architecture art of decoder is begin,程序包,with input select drive<=B“1111110” when 0, B“0110000” when 1, B“1101101” when 2, B“1111001” when 3, B“0110011” when 4, B“1011011” when 5, B“1011111” when 6, B“1110000” when 7, B“1111111” when 8, B“1111011” when 9, B“0000000” when others; end architecture art;,程序包,包的基本格式,PACKAGE IS 常数声明 类型声明 信号声明 子程序声明 元件声明 以及其它声明 END ; (1076-1987) END PACKAGE ; (1076-1993),PACKAGE BODY IS use 语句;子程序声明;子程序体;类型声明; 子类型声明;常量声明。 END ; (1076-1987) END PACKAGE BODY ; (1076-1993),库和程序包的调用,LIBRARY IEEE; USE IEE.STD_LOGIC_1164.ALL; USE IEE.STD_LOGIC_ARITH.ALL; USE IEE.STD_LOGIC_UNSIGNED.ALL;,VHDL语言要素,VHDL数据对象,常数(Constant) 固定值,不能在程序中被改变 增强程序的可读性,便于修改程序 在综合后,连接到电源和地 可在Library、Entity、Architecture、Process中进行定义,其有效范围也相应限定 Constant data_bus_width: integer := 8;,VHDL数据对象,信号(Signals) 代表连线,Port也是一种信号 没有方向性,可给它赋值,也可当作输入 在Entity中和Architecture中定义 设定的初始值在综合时没有用,只是在仿真时在开始设定一个起始值。在MaxPlusII中被忽略。 用 <= 进行赋值 signal count:bit_vector(3 downto 0):=“0011”;,VHDL数据对象,变量(Variable) 临时数据,没有物理意义 只能在Process和Function中定义,并只在其内部有效 要使其全局有效,先转换为Signal。 用 := 进行赋值 variable result : std_logic := 0;,信号与变量的区别,architecture rtl of start is signal count : integer range 0 to 7; begin process(clk) begin if (clkevent and clk=1) then count <= count + 1; if(count=0) then carryout <= 1; else carryout <= 0; end if; end if; end process; end rtl;,architecture rtl of start is begin process(clk) variable count : integer range 0 to 7; begin if (clkevent and clk=1) then count := count + 1; if(count=0) then carryout <= 1; else carryout <= 0; end if; end if; end process; end rtl;,信号与变量的区别,architecture a of start is signal tmp : std_logic; begin process(a_bus) begin tmp <= 1; for i in 3 downto 0 loop tmp <= a_bus(i) and tmp; end loop; carryout <= tmp; end process; end a;,architecture a of start is begin process(a_bus) variable tmp:std_logic; begin tmp := 1; for i in 3 downto 0 loop tmp := a_bus(i) and tmp; end loop; carryout <= tmp; end process; end a;,VHDL数据类型,标量类型(Scalar) 枚举(Enumeration) 整数(Integer) 浮点数(Float) 物理(Physical) 复合类型(Composite),VHDL数据类型枚举,列举数据对象可能存在的值,一般用于定义状态机的状态 Type states is (idle, start, running, pause, stop) Signal current_state : states; IEEE1076标准中预定义了两个枚举类型 Type boolean is (False, True) Type bit is (0, 1) Signal a : bit;,VHDL数据类型枚举,IEEE1164标准中预定义了一个枚举类型Type std_logic is(U, X,0, 1, Z, W, L, H, -); 该类型能比较全面地包括数字电路中信号会出现的几种状态,因此一般情况把这种类型代替bit Signal a : std_logic; 注意:这里的大小写是敏感的,VHDL数据类型,整数、浮点数 方便用于数值方面的运算:加减乘除 整数范围:-231 231 1,经常用于计数器 实数范围:-1.0E38+1.0E38,不被 MaxPLusII支持 Variable a : integer range 255 to +255; 物理类型 主要用于调试,VHDL数据类型复合类型,数组类型 多个相同类型成员组成的队列,一般用于定义数据总线、地址总线等。 Signal a: std_logic_vector(7 downto 0); a <= B“00111010”; a <= X “3A”; 可自定义复合类型 Type word is array (15 downto 0) of bit; Signal b : word; Type table8x4 is array (0 to 7, 0 to 3) of bit;,VHDL数据类型复合类型,记录类型 相同或不同类型的元素组成,类似C中的结构 具有模型抽象能力,用于描述一个功能模块 Type iocell is record Enable :bit; DataBus :bit_vector(7 downto 0); end record; singal bus : iocell; bus.Enable <= 1; bus.DataBus <= “00110110”;,VHDL数据类型及子类型,VHDL是强类型语言,必须用类型转换函数才能进行不同类型之间的转换 type byte_size is integer range 0 to 255; signal a : byte_size; signal b : integer range 0 to 255; if a=b then 采用以下方式 subtype byte_size is integer range 0 to 255;,属性(Attributes),提供实体、结构体、数据类型和信号的信息。 有许多预定义的值、信号和范围的属性 一个最常用的属性是event if clkevent and clk=1 then left,right, high, low,length type count is integer range 0 to 127 countleft = 0; countright = 127; counthigh = 127; countlow = 0; countlength = 128;,VHDL运算符,逻辑运算符 AND、OR、NAND、NOR、XOR、NOT 关系运算符 =、/=、= 算术运算符 +、-、*、/ 并置(连接)运算符 B <= not(y);,组合电路并行语句,With-select-when语句 With Sel_signal select Signal_name <= a when Sel_signal_1, b when Sel_signal_2, c when Sel_signal_3, x when Sel_signal_x;,Signal s : std_logic_vector(1 downto 0); Signal a,b,c,d,x : std_logic; With s select x <= a when “00”, b when “01”, c when “10”, d when others;,组合电路并行语句,When-else语句 Signal_name <= a when condition1 else b when condition2 else c when condition3 else x ;,x <= a when s=“00” else b when s=“01” else c when s=“10” else d;,Signal a,b,c,d:std_logic; Signal w,x,y,z:std_logic; x <= w when a=1 else x when b=1 else y when c=1 else z when d=1 else 0;,组合电路并行语句,实现优先级编码器 encode <= “111” when D(7) = 1 else “110” when D(6) = 1 else “101” when D(5) = 1 else “100” when D(4) = 1 else “011” when D(3) = 1 else “010” when D(2) = 1 else “001” when D(1) = 1 else “000” when D(0) = 1 else “000”;,组合电路并行语句,When-else语句条件语句可以是一个简单的表达式 With-select-when则不能采用表达式作为条件 a <= “0000” when state=idle and state=1 else “0001” when state=idle and state=0 else b when state=running and state=1 else a;,组合电路顺序语句,Process,Function,Procedure中的语句都是顺序执行,以Process为例 Process与Process之间,与其他并行语句之间都是并行的关系 If-then-else Case-when,组合电路顺序语句,If-then-else If(condition1) then do something; elsif(condition2) then else do something different; end if;,组合电路顺序语句,Process(addr) Begin step <= 0; if(addr = X “F”) then step <= 1; end if; End process;,Process(addr) Begin if(addr = X “F”) then step <= 1; else step <= 0; end if; End process;,Process(addr) Begin if(addr = X “F”) then step <= 1; end if; End process;,Step <= addr(3) * addr(2) * Addr(1) * addr(0) + step,组合电路顺序语句,用于作地址译码 InRam = X“0000” and addr = X“4000” and addr = X“4008” and addr = X“8000” and addr = X“C000” then EEPRom<= 1; end if;,组合电路顺序语句,Case-when case sel_signal is when value_1 = (do sth) when value_2 = (do sth) when value_last = (do sth) end case;,组合电路顺序语句,实现数码管译码器 Process(address) begin case address is when “0000” = decode decode decode decode decode <= X “00”; end case; end process;,几种语句的比较,同步时序逻辑电路,Process(clk) begin if(clkevent and clk=1) then q <= d; end if; end process;,Process(clk) begin if(clk=1) then q <= d; end if; end process;,D触发器,缓冲器,实现T触发器,Process(clk) begin if(clkevent and clk=1) then if(t = 1) then q <= not(q); else q <= q; end if; end if; end process;,4.7 小结,在本章中,主要向用户讲解了VHDL语言中常用的条件编译结构、循环结构、选择结构、嵌套结构以及输出控制结构等相关的功能和使用方法。,

    注意事项

    本文(第4章VHDL语言基础.ppt)为本站会员(rrsccc)主动上传,三一文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    经营许可证编号:宁ICP备18001539号-1

    三一文库
    收起
    展开