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

    第七章VHDL语言简介.ppt

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

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

    第七章VHDL语言简介.ppt

    第七章 VHDL语言简介,硬件描述语言:就是可以描述硬件电路的功能、信号的连接关系及定时关系语言。 最常用的HDL是VHDL和Verilog HDL 一、VHDL的发展史 二、VHDL的基本语法 三、VHDL程序的基本结构 四、 VHDL语言构造体的描述方式 五、VHDL构造体的子结构描述方式 六、VHDL的基本描述语句 七、基本逻辑电路设计 八、VHDL仿真与综合,一、VHDL的发展史, VHSIC 计划 美国国防部在上个世纪70年代末和80年代初提出的VHSIC(Very High Speed Integrated Circuit)计划的产物。1981年提出了一种新的硬件描述语言,称为VHSIC Hardware Description Language 。简称VHDL。 VHDL标准化 1987年12月VHDL被接纳为IEEE std-1076-1987标准,一般称为 VHDL87 。 1993年进一步修订,形成IEEE std 1076-1993标准,称为VHDL93。,采用VHDL语言的硬件电路设计方法 采用VHDL设计数字系统一般采用自上而下(Top Down)的分层设计方法,所谓自上而下的设计方法,就是从系统总体出发,自上而下地逐步将设计内容细化,最后完成系统硬件的整体设计。 1) 第一层次行为描述:就是对整个系统的数学模型的描述。 2) 第二层次RTL方式描述,即寄存器传输描述,也称为数据流描述。采用RTL方式描述,才能导出系统的逻辑表达式,才能进行逻辑综合。 3) 第三层次是逻辑综合。就是利用逻辑综合工具,将RTL方式描述的程序转换成用基本元件表示的文件(门级网表)。, 采用VHDL语言设计硬件电路的优点 1、 计技术齐全、方法灵活、支持广泛。 VHDL语言可以支持自上而下和基于库的设计方法,而且支持同步电路、异步电路、FPGA以及其它随机电路的设计。 2、系统硬件描述能力强,能支持硬件的设计、验证、综合和测试,是一种多层次的硬件描述语言。 3、VHDL语言可以与工艺无关编程。当门级或门级以上的描述通过仿真验证后,再利用相应的工具将设计映射成不同的工艺(如MOS、CMOS等)。这样,在工艺更新时,就无须修改原设计程序,只要改变相应的映射工具就行了。 4、VHDL语言标准、规范,易于共享和重复利用。,二、VHDL的基本语法规则,1、词法规则 2、标识符 3、保留字 4、VHDL的数据类型 5、VHDL的运算操作符,2-1 词法规则,2-1-1 注释 由两个短线“-”开始的一行文字,如: - this is a counter 2-1-2 数字 十进制整数表示法:012 12_345(=12345) 以基数表示: 2#1110_1001#, 16#AB0#E1 实数:必需带小数点。12.0 3.144 0.0 5.54E-2 2-1-3 字符和字符串 字符:用单引号引起来的ASCII字符,可以是数字,也可以是符号或字母。 字符串:是一维的字符数组,需放在双引号中。如:“FALSE”, B “100”,2-2 标识符,短标识符(VHDL87) VHDL的短标识符必须遵守以下规则: 1、必须以英文字母开头; 2、英文字母、数字(09)和下划线都是有效的字符; 3、短标识符不区分大小写; 4、下划线(_)的前后都必须有英文字母或数字;如:A_1 5、不能和VHDL语言的保留字重名。 扩展标识符(VHDL93),2-1-4下标名和段名 下标名用于指示数组型变量或信号的某一元素。 下标段名则表示数组型变量或信号的某一段元素。 下标名的语句格式为: 标识符(表达式) SIGNAL a,b:STD_LOGIC_VECTOR(O TO 3); SIGNAL X, Y: STD_LOGIC; X = a(2); Y = b(3);,2-3 保留字,VHDL内部用的字符串,标识符不能与保留字重名 如:if else elsif end wait when case entity architecture package component xnor xor,2-4 VHDL的数据类型,客体:凡是可以赋予一个值的对象就称客体。 常数:对某一常数赋予一个固定值。 变量:在进程和子程序中使用,是一个局部量。 信号:是电路内部硬件连接的抽象。,常 数,常数说明格式为: CONSTANT 常数名:数据类型:=表达式; 如: CONSTANT VCC:REAL:=5.0; 常量是一个恒定不变的量,一旦被赋值就不能再改变。,变 量,变量只能在进程和子程序中使用,是一个局部量,不能将信息带出所定义的当前设计单元。与信号不同,变量的赋值是理想化数据传输,其赋值是立即生效的,不存在任何延迟。 变量定义语句的格式为: VARIABLE 变量名:数据类型 约束条件:=初始值; 例如: VARIABLE n:INTEGER RANGE 0 TO 15 :=2;,信 号,信号 信号定义语句的格式为: SIGNAL 信号名:数据类型 约束条件:=表达式; 例如: SIGNAL data:STD_LOGIC_VECTOR (7 DOWNTO 0); 信号赋值语句的格式为: 目标信号名= 表达式; 例如: y = 0 ;,信号与变量的区别,信号和变量是VHDL中的重要客体,它们之间的主要区别有: 信号赋值至少有延时;而变量赋值没有延时。 信号除当前值外有许多相关信息,如历史信息;而变量只有当前值。 进程对信号敏感而不对变量敏感。 信号可以是多个进程的全局信号。,数据类型 1、 标准数据类型 2、 用户自定义数据类型 3、 IEEE 预定义标准,标准数据类型(10种),整数(INTERGER) 自然数(Natural)和正整数(Positive) 实数(REAL) 位(BIT) 位数据类型也属于枚举型,取值只能是1和0 位矢量(BIT_VECTOR) 位矢量使用双引号括起来的一组位数据,如“1011”。 使用位矢量时必须注明位宽,即数组中元素个数和排列,如: SIGNAL S1:BIT_VECTOR(15 DOWNTO 0);,标准数据类型(10种),布尔量 :TRUE,FALSE 字符(CHARACTER) 字符串 时间 : 错误等级 在VHDL仿真器中,错误等级类型数据用来表征系统的状态,它共有4种:NOTE(注意),WARNING(警告),ERROR(出错),FAILLURE(失败)。,用户自定义数据类型,可以由用户定义的数据类型有: 枚举类型、整数类型、数组类型、存取类型 文件类型、时间类型、实数类型 用户用TYPE语句定义自己的数据类型。 TYPE语句的格式为: TYPE 数据类型名 IS 数据类型定义 OF 基本数据类型; 例如: TYPE word IS ARRAY(0 TO 15)OF STD_LOGIC;,IEEE 预定义标准,标准化数据类型 IEEE93 增加了多值逻辑包 STD_LOGIC_1164,使得“STD_LOGIC”数据具有9种不同的值。其定义如下: TYPE STD_LOGIC IS ( U, -初始值 X, -不定 0, -0 1, -1 Z, -高阻 W, -弱信号不定 L, -弱信号0 H, -弱信号1 - -不可能情况 ); “STD_LOGIC”和“STD_LOGIC_VECTOR”是IEEE新制定的标准化数据类型,将它们归属到用户定义的数据类型中。,其他预定义标准数据类型 无符号数据类型UNSIGNED、有符号数据类型SIGNED、小整形SMALL_INT。在包集合STD_LOGIC_ARITH中就定义了有符号数据类型和无符号数据类型。,数据类型转换 在VHDL语言中不同数据类型的对象之间是不能进行运算和直接代入的。为了实现正确的代入操作,必须将要代入的数据进行类型转换。类型转换可用转换函数实现,转换函数通常由VHDL语言的包集合提供。例如,在STD_LOGIC_1164,STD_LOGIC_ARITH,STD_LOGIC_UNSIGNED包集合中就提供了数据类型转换函数。 TO_STDLOGICVECTOR(A) -由BIT_VECTOR转换为STD_LOGIC_VECTOR,2-5 VHDL 运算操作符,算术运算:+,-,*,/,MOD,REM,+(正),-(负),*,ABS。 逻辑运算:AND,OR,NAND,NOR,XOR,NOR和NOT。 关系运算:=,/=, =。 并置运算:用于位连接。(0 & A) 运算符优先级:NOT,ABS,*,乘法运算符,正负, 加、减、并,关系,逻辑运算符。 括号可改变运算次序,下面以加法器为例说明并置运算符的用法:,LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_ARITH.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY addition IS PORT (A,B:IN STD_LOGIC_VECTOR( 3 DOWNTO 0); Q1: OUT STD_LOGIC_VECTOR( 4 DOWNTO 0); END addition; ARCHITECTURE behav OF addition IS BEGIN PROCESS (A,B) BEGIN Q1 = (0 ,三、VHDL程序的基本结构,一个完整的VHDL语言程序通常包含:实体(Entity)、构造体(Architecture)、配置(Configuration)、包集合(Package)和库(Library)五部分。 实体(Entity): “symbol” 构造体(Architecture): 配置(Configuration): 包集合(Package): 库(Library):,3-1 实体,实体说明 实体说明定义了一个给定的设计单元及该设计单元与周围 的接口,它具有如下结构: ENTITY 实体名 IS 类属参数说明 端口说明 END 实体名;,类属参数说明与端口说明,类属参数说明可选 GENERIC CONSTANT 名字表:IN 子类型标志 :=静态表达式, ; 端口说明 PORT(端口名,端口名 :方向 数据类型; 端口名,端口名 :方向 数据类型);,端口方向,端口方向用来定义外部引脚的信号方向是输入还是输出。表示方向的说明符及含义如下表所示:,实体举例1,下面为一个异步复位的D触发器的实体说明 entity dff_async_rst is port (D,CLK,RESET :in STD_LOGIC; Q :out STD_LOGIC); end dff_async_rst;,实体举例2,二选一电路的实体说明: entity mux is port ( a: in std_logic; b: in std_logic; s: in std_logic; f: out std_logic ) end mux;,A,B,S,F,实体举例3,带类属参数说明的实体: entity adder is generic (width: integer := 2); port ( in_a : in std_logic_vector(width-1 downto 0); in_b : in std_logic_vector(width-1 downto 0); z : out std_logic_vector(width-1 downto 0); carry: out std_logic) ); end entity adder;,3-2 构造体,构造体:确定基本设计单元输入输出关系,即它定义了设计单元的具体功能。 构造体说明 构造体的描述方式 行为描述 寄存器传输级描述(RTL描述) 结构描述,构造体的说明,一定要跟在实体的后面 ,书写格式: 可任意取,但一般用描述方式定义 ARCHITECTURE 构造体名 OF 实体名 IS 定义语句 内部信号,常数,数据类型,函数等的定义(可选) BEGIN 并行处理语句 END 构造体名;,behev,dataflow,structrual,构造体举例1,具有异步复位的D触发器的构造体: architecture behav of dff_async_rst is begin process (CLK, RESET) begin if ( RESET = 0 ) then Q = 0; elsif ( CLKEVENT AND CLK =1 ) then Q = D; endif; end process; end behav;,进程语句(并发),IF语句(顺序),构造体举例2,二选一的构造体描述1: architecture first_rtl of mux is begin mux_p: process (a,b,s) begin f = (a and s) or (b and not s); end process mux_p; end first_rtl;,构造体举例3,二选一的构造体描述2: architecture rtl of mux is begin mux_p: process (a,b,s) begin if ( s=1 ) then f = a; else f = b; end if; end process mux_p; end rtl;,3-3 配置,配置语句描述层与层之间的连接关系以及实体与构造体之间的连接关系。 配置语句的书写格式为: CONFIGURATION 配置名 OF 实体名 IS 说明语句 END 配置名; 下面以二选一电路来说明配置语句的用法: configuration mux_c of mux is for rtl end for; end mux_c;,3-4 包集合,为了实现数据的共享,可以将它们收集在一个包集合中。多个包集合可以并入一个VHDL库中 。 PACKAGE 包集合名 IS 说明语句 包集合头 END 包集合名; PACKAGE BODY 包集合名 IS 说明语句 包集合体 END BODY; 要使用包集合必须用USE语句说明: USE IEEE.STD_LOGIC_1164.ALL,包集合,常用的预定义包集合有: 1、STD_LOGIC_1164包集合 是IEEE的标准包集合 ,其中包含了一些数据类型、子类型和函数的定义 。包含数据类型STD_LOGIC和STD_LOGIC_VECTOR的定义。 2、STD_LOGIC_ARITH包集合 在STD_LOGIC_1164包集合的基础上扩展了 3个数据类型:UNSIGNED、SIGNED和SMALL_INT,并为其定义了相应的算术运算符和转换函数。 3、STD_LOGIC_UNSIGNED和STD_LOGIC_SIGNED包集合 这些包集合重载了可用于INTEGER型、STD_LOGIC及STD_LOGIC_VECTOR型混合运算的运算符,并定义了一个由STD_LOGIC_VECTOR型到INTEGER型的转换函数。,3-5 库,库是经编译后的数据的集合,它存放包集合的定义、实体定义、构造体定义和配置定义。 库的种类 (有5种库) IEEE库、STD库、ASIC矢量库、用户定义的库和WORK库。 库的使用 (库在使用前都首先要说明 ) LIBRARY 库名; USE LIBRARY_NASME.package_name.ITEM.name; 如: LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL;,库,库说明作用范围 从一个实体说明开始到它所属的构造体、配置为止。,四、VHDL语言构造体的描述方式,一、 行为描述 行为描述方式是对系统数学模型的描述,其抽象程度比RTL描述方式和结构描述方式更高。在行为描述方式的程序中大量采用算术运算、关系运算、惯性延时、传输延时等难以进行逻辑综合和不能进行逻辑综合的VHDL语句。一般来说,采用行为描述方式的VHDL程序主要用于系统数学模型的仿真或者系统工作原理的仿真。,二、 RTL描述方式,RTL描述方式也称为数据流描述方式,是一种明确规定积存器的描述方法。由于受综合的限制,在采用RTL描述方式时所使用的VHDL语句有一定的限制,所以必需查逻辑综合器手册,以确定哪些语句可以使用,哪些语句不能使用。,三、结构描述方式,指部件级的描述方式,可把已有的设计单元方便地用到新的设计中。 1、结构描述方式的基本框架 COMPONENT语句指明电路中所用的已生成的模块,用PORTMAP()语句将模块连接起来。,2、COMPONENT 语句 COMPONENT语句的书写格式为: COMPONENT 元件名 GENERIC 说明; -参数说明 PORT 说明; -端口说明 END COMPONENT; COMPONENT语句可以放在ARCHITECTURE,PACKAGE及BLOCK的说明部分中使用。 GENERIC通常用于该元件的可变参数的代入或赋值,而PORT则说明该元件的输入输出端口的信号规定。,下面以4BIT 伪随机序列产生器为例来说明结构描述的使用:,LIBRARY A40MX; -Actel公司A40MX系列器件库 USE A40MX.ALL; LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_ARITH.ALL; ENTITY TEST IS PORT ( QOUT: OUT STD_LOGIC; CLKIN, CLRIN: IN STD_LOGIC); END TEST;,ARCHITECTURE structual OF test IS COMPONENT DFCIB PORT( D: in std_logic; CLK : in std_logic; CLR : in std_logic; Q : out std_logic); END COMPONENT; COMPONENT XNOR2 PORT( A : in std_logic; B : in std_logic; Y : out std_logic); END COMPONENT; SIGNAL Q1,Q2,Q3,Q4,Y1 : std_logic; BEGIN QOUT = Q4; U1 : DFC1B PORT MAP (Y1, CLKIN, CLRIN, Q1); U2 : DFC1B PORT MAP (Q1, CLKIN, CLRIN, Q2); U3 : DFC1B PORT MAP (Q2, CLKIN, CLRIN, Q3); U4 : DFC1B PORT MAP (Q3, CLKIN, CLRIN, Q4); U5 : XNOR2 PORT MAP (Q3, Q4, Y1); END structual;,五、VHDL构造体的子结构描述方式,BLOCK语句结构 子结构描述语句: PROCESS语句结构 过程 SUBPROGRAMS结构 函数,1) BLOCK语句结构描述,l BLOCK语句的结构 采用BLOCK语句描述局部电路的书写格式如下: 块结构名: BLOCK BEGIN (并发语句) END BLOCK 块结构名;,BLOCK块和子电路原理图的关系 ARCHITECTURE BLOCK1:BLOCK BLOCK2: BLOCK3:,l BLOCK中语句的并发性 BLOCK中的语句是并行执行的,与书写顺序无关。,进程语句结构描述,l PROCESS语句的结构 采用PROCESS语句描述电路结构的书写格式如下: 进程名: PROCESS(信号1,信号2,) BEGIN (顺序执行语句) END PROCESS;,子程序语句结构描述,VHDL语言中子程序有两种类型: 过程(Procedure) 函数(Function),a) 过程(Procedure)语句,l 过程语句的结构 过程语句的书写格式为: PROCEDURE 过程名(参数1;参数2;) IS 定义语句 (变量等的定义) BEGIN 顺序处理语句 (过程的语句) END 过程名; l 过程结构中语句的顺序性 过程结构中的语句是按顺序执行的。,b) 函数(Function)语句,l 函数语句的结构 函数语句的书写格式为: FUNCTION 函数名(参数1;参数2;) RETURN 数据类型名 IS 定义语句 (变量等的定义) BEGIN 顺序处理语句 RETURN 返回变量名; END 函数名; l FUNCTION语句中括号内的所有参数都是输入参数或称输入信号。,六、VHDL的基本语句,6-1 顺序描述语句 l WAIT语句; l 信号代入语句; l 变量赋值语句; l IF语句; l CASE语句; l LOOP语句; l NEXT语句; l EXIT语句; l RETURN语句; l 过程调用语句; l 断言语句; l NULL语句。,WAIT语句,WAIT无限等待 WAIT ON敏感信号量变化 WAIT UNTIL条件满足 WAIT FOR时间到 通常只有WAIT UNTIL格式的等待语句可以被VHDL综合器综合。 WAIT UNTIL语句的书写格式为: WAIT UNTIL 表达式; WAIT UNTIL 信号=VALUE; WAIT UNTIL 信号EVENT AND 信号=VALUE; WAIT UNTIL NOT 信号STABLE AND 信号=VALUE;,WAIT语句举例,entity dff_async_rst is port (D,CLK :in STD_LOGIC; Q :out STD_LOGIC); end dff_async_rst; architecture wait_statement of dff_async_rst is begin process - 注意进程无敏感量表 begin - 进程在此等待直至条件满足 wait until rising_edge(CLK); Q =D; end process; end wait_statement;,信号代入语句,信号代入语句的书写格式为: 目的信号量 = 信号表达式; 如: Y = A AND B after 5ns; 注意:= 两边的信号量的类型和位长度应该一致。,变量赋值语句,变量赋值语句的书写格式为: 目的变量 := 表达式; 该语句表明,目的变量的值将由表达式的新值替代,但两者的类型必须相同。 书写变量赋值语句应注意以下几点: VHDL中变量赋值限定在进程、函数和过程等顺序区域内。 变量赋值无时间特性。 变量具有局部性。,IF语句,IF语句是根据指定的条件来确定执行那些语句的,按其书写格式,通常可分为三种类型。 1、门闩控制语句 门闩控制语句的书写格式为: IF条件 THEN 顺序处理语句; END IF; 其中:条件为布尔量,即:“真”或“假”,当条件为“真”时,执行顺序处理语句,否则,执行IF的后继语句。 2、选择控制语句 当IF语句用作二选择控制时的书写格式为: IF 条件 THEN 顺序处理语句; ELSE 顺序处理语句; END IF;,IF 语句,a) 3、 多选择控制的IF语句 多选择控制的IF语句又称为IF语句的嵌套,其书写格式为: IF 条件 THEN 顺序处理语句; ELSIF 条件 THEN 顺序处理语句; ELSIF 条件 THEN 顺序处理语句; ELSE 顺序处理语句; END IF;,IF 语句举例,下面以4 BIT 计数器为例说明IF语句的用法: -设计一个异步复位、同步预置的4 BIT 同步计数器 library IEEE; use IEEE.STD_LOGIC_1164.all; use IEEE.STD_LOGIC_UNSIGNED.all; entity counter4 is port ( CLK,RESETN,LOAD,ENABLE :in STD_LOGIC; CNT_IN : in STD_LOGIC_VECTOR( 3 downto 0); COUNT : out STD_LOGIC_VECTOR( 3 downto 0); end counter4;,IF 语句举例,architecture rtl of counter4 is SIGNAL TEMP_COUNT : STD_LOGIC_VECTOR( 3 downto 0); begin COUN_PROC: process (CLK, RESETN) begin if (RESETN = 0) then TEMP_COUNT 0); elsif RISING_EDGE(CLK) then if (LOAD = 1) then TEMP_COUNT = CNT_IN; elsif (ENABLE = 1 ) then TEMP_CONT = TEMP_COUNT + 1; end if; end if; end process; COUNT = TEMP_COUNT; -此语句也可放在process语句前 end rtl;,CASE语句,CASE语句可用来描述编、译码等行为,它从许多不同的语句序列中选择其中之一执行。 CASE语句的书写格式如下: CASE 表达式 IS WHEN 条件表达式 = 顺序处理语句; END CASE; 上述CASE语句中的条件表达式可选如下4种不同地表示形式: WHEN 值 = 顺序处理语句; -某个值 WHEN 值|值|值|值 = 顺序处理语句; -多个值“或” WHEN值 TO值 = 顺序处理语句; -取值范围 WHEN OTHERS = 顺序处理语句; -其它所有值,CASE 语句举例,下面以4选1多路选择器为例说明CASE语句的用法。 - 4:1 Multiplexor Using A Case Statement library IEEE; use IEEE.STD_LOGIC_1164.all; entity mux is port (C, D, E, F : in STD_LOGIC; S : in STD_LOGIC_VECTOR( 1 downto 0); MUXOUT : out STD_LOGIC); end mux;,CASE语句举例,architecture my_mux of mux is begin process (S, C, D, E, F ) begin case S is when “00” = MUXOUT MUXOUT MUXOUT MUXOUT = F; end case; end process; end my_mux;,LOOP 语句,LOOP语句就是循环语句,它可以使包含的一组顺序语句被循环执行,其执行次数受迭代算法控制。 LOOP语句有三种形式: 单个LOOP语句 FOR LOOP语句 WHILE LOOP语句,单个LOOP语句 单个LOOP语句的书写格式为: 标号:LOOP 顺序语句 END LOOP 标号; 这种循环语句需引入其它控制语句(如EXIT)后才能确定,否则为无限循环。其中的标号是可选的。,FOR LOOP语句 FOR LOOP 语句的书写格式为: 标号:FOR 循环变量 IN 离散范围 LOOP 顺序语句 END LOOP 标号; FOR后面的循环变量是一个属于LOOP语句的局部的、临时变量,无须事先定义。,下面以8位奇偶校验电路为例说明FOR LOOP 语句的用法: library ieee; use ieee.std_logic_1164.all; entity parity_check is port ( a: in std_logic_vector(7 downto 0); y: out std_logic); end parity_check;,architecture FOR_LOOP of parity_check is begin process(a) variable tmp: std_logic; begin tmp := 0; for I in 0 to 7 loop tmp := tmp XOR a(i); end loop; y= tmp; end process; end rtl;,WHILE LOOP语句 WHILE LOOP 语句的书写格式为: 标号:WHILE 条件 LOOP 顺序处理语句 END LOOP 标号; 在该LOOP语句中,没有给出循环次数的范围,而是给出了循环执行顺序语句的条件;没有自动递增循环变量的功能,所以必需在顺序处理语句中增加一条循环次数计算语句,用于循环控制。循环控制条件为布尔表达式,当条件为“真”时,则进行循环;如果条件为“假”,则结束循环。,8位奇偶校验电路也可采用WHILE LOOP语句实现: architecture rtl of parity_check is begin process(a) variable tmp: std_logic; begin tmp:= 0; i:=0; WHILE(i8)LOOP tmp:= tmp XOR a(i); i=i+1; end loop; y= tmp; end process; end rtl;,6-2 并发描述语句,PROCESS 进程语句; CONCURRENT SIGNAL ASSIGNMENT 并发信号代入语句; CONDITIONAL SIGNAL ASSIGNMENT 条件信号代入语句; SELECTIVE SIGNAL ASSIGNMENT 选择信号代入语句; CONCURRENT PROCEDURE CALL 并发过程调用语句; BLOCK 块语句。,6-2-1 进程语句,1、 PROCESS语句的结构 采用PROCESS语句描述电路结构的书写格式如下: 进程名: PROCESS(信号1,信号2,) BEGIN (顺序执行语句) END PROCESS; 进程名可省略。,6-2-1进程语句,2、 PROCESS语句中的顺序性 PROCESS结构中的语句是按顺序一条一条向下执行的。 3、进程(PROCESS)的启动 在进程语句中总是带有1个或几个信号量。这些信号量是进程的输入信号,在书写时跟在“PROCESS”后面的括号里。在VHDL语言中也称敏感量。这些信号无论哪一个发生变化都将启动该PROCESS语句。 4、 进程(PROCESS)的同步描述 当构造体中包含多个进程时,进程中的信号变化会使几个进程同步工作。,6-2-2 并发信号代入语句,信号代入语句用在并发执行场合就是并发信号代入语句。,6-2-3 条件信号代入语句,条件代入语句可根据不同条件将不同的表达式代入信号量。 其书写格式为: 目的信号量 = 表达式1 WHEN 条件1 ELSE表达式2 WHEN 条件2 ELSE表达式3 WHEN 条件3 ELSE表达式n;,6-2-3 条件信号代入语句举例,下面以比较相等的比较器为例来说明条件信号代入语句得用法: library IEEE; use IEEE.std_logic_1164.all; entity equality is port ( A: in STD_LOGIC_VECTOR (3 downto 0); B: in STD_LOGIC_VECTOR (3 downto 0); Q1: out STD_LOGIC; Q2: out STD_LOGIC ); end equality;,6-2-3 条件信号代入语句举例,architecture equality_arch of equality is begin Q1 = '1' when A =B else '0' - equality Q2 = '1' when A /=B else '0' - inequality end equality_arch;,6-2-4 选择信号代入语句,选择信号代入语句类似于CASE语句,它对表达式进行测试,当表达式取值不同时,将使不同的值代入目的信号量。 选择信号代入语句的书写格式为: WHITH 表达式 SELECT 目的信号量 = 表达式1 WHEN 条件1 表达式2 WHEN 条件2 表达式n WHEN 条件n,library ieee; use ieee.std_logic_1164.all; entity mux is port (output_signal : out std_logic; a, b, sel : in std_logic ); end mux; architecture with_select_when of mux is begin with sel select output_signal = a when '1', b when '0', 'X' when others; end with_select_when;,以二选一电路为例说明该语句用法,七、基本逻辑电路设计,1、组合电路设计 组合电路通常包括门电路、多路选择器、编码器、译码器等电路。 下面以3-8译码器为例说明组合电路的设计方法: library IEEE; use IEEE.std_logic_1164 .all; entity decode is port ( Ain : in std_logic_vector (2 downto 0); En: in std_logic; Yout : out std_logic_vector (7 downto 0); end decode;,7-1 组合电路设计举例,architecture decode_arch of decode is begin process (Ain) begin if (En='0') then Yout '0'); else case Ain is when “000“ = Yout Yout Yout Yout Yout Yout Yout Yout Yout = “00000000“; end case; end if; end process; end decode_arch;,2、时序电路设计,时序逻辑电路就是具有记忆(或内部状态)的电路,即:时序逻辑电路的输出不但与当前的输入状态有关,而且与以前的输入状态有关。时序电路的内部状态元件可以由边沿敏感的触发器或由电平敏感的锁存器实现,但大多数时序电路采用触发器来实现。 时序电路又可分为同步时序电路和异步时序电路两种,而大部分时序电路为同步时序电路 。,2、时序电路设计,1) 时钟信号的描述 用VHDL语言

    注意事项

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

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




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

    三一文库
    收起
    展开