好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

eda第三章 硬件描述语言(HHDL)基础.ppt

109页
  • 卖家[上传人]:M****1
  • 文档编号:575626796
  • 上传时间:2024-08-18
  • 文档格式:PPT
  • 文档大小:932KB
  • / 109 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 第三章第三章 VHDLVHDL硬件描述语言硬件描述语言Very high speed integration circuits HDLVery high speed integration circuits HDL起源:起源: 19851985年,美国国防部提出计划;年,美国国防部提出计划;19871987年成为年成为IEEE1076IEEE1076标准;标准;19931993年进一步修订完善;年进一步修订完善;是目前标准化程度最高,适应性最广的是目前标准化程度最高,适应性最广的HDLHDL语言;语言; 一种集成电路的硬一种集成电路的硬件描述语言;件描述语言;用于进行数字集成用于进行数字集成电路的设计;电路的设计; 数字集成电路数字集成电路数字逻辑电路,通常由基本门电路构成数字逻辑电路,通常由基本门电路构成;在一块半导体芯片上设计制作;;在一块半导体芯片上设计制作;目前以目前以CMOSCMOS工艺为主进行制备;工艺为主进行制备;在信息技术领域得到广泛的应用在信息技术领域得到广泛的应用 数字集成电路的发展数字集成电路的发展SSI SSI ((1 1——20gates20gates)) 基本单元组合基本单元组合 ((P.13P.13))MSIMSI((2020——200200)) 简单功能电路:简单功能电路:译码器、数据选择器、寄存器、计数器译码器、数据选择器、寄存器、计数器LSILSI((200200——2020万)万) 小规模系统组件:小规模系统组件:存储器、微处理器、可编程逻辑器件存储器、微处理器、可编程逻辑器件VLSIVLSI(可达上亿)大型系统组件或小型系统(可达上亿)大型系统组件或小型系统 SOCSOC::Systems on chip !Systems on chip ! 数字集成电路的设计数字集成电路的设计 数字集成电路的设计特点数字集成电路的设计特点电路复杂程度高,开发时间长;电路复杂程度高,开发时间长;目标:短周期、低成本、高性能目标:短周期、低成本、高性能方案:层次化、模块化、标准化方案:层次化、模块化、标准化自顶至下的多层次设计:自顶至下的多层次设计:TOP-DOWNTOP-DOWN 系统设计系统设计 系统描述:芯片功能、性能、系统描述:芯片功能、性能、 成本、尺寸等成本、尺寸等功能设计功能设计 功能级描述:功能框图、时序功能级描述:功能框图、时序 图等图等逻辑设计逻辑设计 逻辑描述:逻辑电路图逻辑描述:逻辑电路图 电路设计电路设计 电路描述:电路图、门级网表电路描述:电路图、门级网表版图设计版图设计 版图网表版图网表数字集成电路的设计层次数字集成电路的设计层次 采用文本形式进行程序设计,便于编写和修改;采用文本形式进行程序设计,便于编写和修改;具有硬件特征的语句,可以描述数字系统的结具有硬件特征的语句,可以描述数字系统的结构、功能、行为和接口;构、功能、行为和接口;全面支持电路硬件的设计、验证、综合和测试;全面支持电路硬件的设计、验证、综合和测试;设计与具体工艺无关,适合于多层次设计;设计与具体工艺无关,适合于多层次设计;具有良好的开放性和并行设计能力、便于交流具有良好的开放性和并行设计能力、便于交流保存共享。

      保存共享设计交流的语言:设计交流的语言:HDLHDL MOSMOS晶体管模型晶体管模型典型尺度参数为:典型尺度参数为:沟道宽度沟道宽度W W、沟道长度、沟道长度L L,逻辑面积,逻辑面积A A;; MOSMOS晶体管电学模型晶体管电学模型典型参数为:典型参数为:导通电阻、栅极电容、漏极电容和源极电容导通电阻、栅极电容、漏极电容和源极电容 电学参数与尺度参数的关系电学参数与尺度参数的关系在电路单元设计时,为了提高集成度,通常沟在电路单元设计时,为了提高集成度,通常沟道长度总是希望保持最小值,而沟道宽度却可道长度总是希望保持最小值,而沟道宽度却可以进行加长;以进行加长; CMOSCMOS基本电路结构基本电路结构通常采用通常采用N N网络与网络与P P网络互补连接构成:网络互补连接构成:N N网络实现逻辑,并联为网络实现逻辑,并联为““与与””,串联为,串联为““或或”” 典型典型CMOSCMOS基本电路基本电路CMOSCMOS反相器反相器 典型典型CMOSCMOS基本电路基本电路与非门和或非门与非门和或非门 典型典型CMOSCMOS基本电路基本电路与或非结构(与或非结构(AOIAOI)) 一个简单数字电路的设计描述一个简单数字电路的设计描述4 4位加法器标准模块:位加法器标准模块:a+b+ci=sa+b+ci=s3 3组输入,组输入,1 1组输出;组输出; 4 4位加法的实现过程位加法的实现过程可以采用可以采用4 4个全加器模块(个全加器模块(FAFA)连接实现;)连接实现;每个模块有每个模块有3 3个输入,个输入,2 2个输出;个输出; VHDLVHDL对电路模块的描述对电路模块的描述entity add4 is  port (a,b: in bit_vector( 3 downto 0 );         ci : in bit;          s : out bit_vector(4 downto 0));end add4;采用实体(采用实体(entityentity)描述模块的外部端口)描述模块的外部端口 VHDLVHDL对电路内部结构的描对电路内部结构的描述述architecture str of add4 issignal c: bit_vector(2 downto 0);component fa is  port (a,b,ci: in bit;        s,co : out bit);end component;begin  u1:fa port map (a(0),b(0),ci,s(0),c(0));  u2:fa port map (a(1),b(1),c(0),s(1),c(1));  u3:fa port map (a(2),b(2),c(1),s(2),c(2));  u4:fa port map (a(3),b(3),c(2),s(3),s(4));end str;采用结构体(采用结构体(archtecturearchtecture)描述模块)描述模块的内部连接关系的内部连接关系 对上述描述程序的电路综合对上述描述程序的电路综合程序准确体现了希望实现的电路结构程序准确体现了希望实现的电路结构 全加器的设计全加器的设计VHDLVHDL不仅可以通过连线描述进行电路设计,不仅可以通过连线描述进行电路设计,也可以通过运算关系或电路的行为特征进行也可以通过运算关系或电路的行为特征进行电路设计。

      电路设计根据数字电路的基本知识,全加器的功能可根据数字电路的基本知识,全加器的功能可以由下列逻辑运算描述:以由下列逻辑运算描述: 为提高逻辑网络的性能,工程师在设计高效数字逻辑电路时,经常会避而不用哪些简单的、直接的设计尽管上面的加法器电路是有效设计,但也有可能变换表达式而获得与直接表达式等价的,以不同形式实现的逻辑,这就看出一个优秀的设计师的不可或缺的本领了考虑全加器的进位输出: VHDLVHDL硬件描述语言硬件描述语言Very high speed integration circuits HDLVery high speed integration circuits HDL特点:特点:全方位硬件描述全方位硬件描述——从系统到电路从系统到电路多种描述方式多种描述方式——适应层次化设计适应层次化设计数据类型丰富,语法严格清晰数据类型丰富,语法严格清晰串行和并行通用,物理过程清楚串行和并行通用,物理过程清楚与工艺结构无关,可用于各类与工艺结构无关,可用于各类EDAEDA工具工具 全加器的全加器的VHDLVHDL程序程序entity fa is  port (a,b,ci: in bit;        s,co : out bit);end fa; architecture rtl of fa isbegin  s<=a xor b xor ci;  co<=(a and b) or (a and ci)           or (b and ci);end rtl; 全加器全加器VHDLVHDL程序的综合结果程序的综合结果 对全加器电路描述的修改对全加器电路描述的修改在在CMOSCMOS电路结构中,电路结构中,3 3输入异或门不是一个输入异或门不是一个基本单元器件,为了使设计能够更直接地反基本单元器件,为了使设计能够更直接地反映晶体管电路的构成,可以将该计算采用两映晶体管电路的构成,可以将该计算采用两输入逻辑替代,设置一个中间信号表达输入逻辑替代,设置一个中间信号表达2 2个个输入量的异或,然后再将其与第输入量的异或,然后再将其与第3 3个变量进个变量进行异或;行异或; 对全加器电路描述的修改对全加器电路描述的修改architecture rtl of fa issignal s1:bit;Begin  -- s<=a xor b xor ci;  s1<=a xor b;s<=s1 xor ci  co<=(a and b) or (a and ci)            or (b and ci);end rtl;只是改变结构体中的相应描述语句只是改变结构体中的相应描述语句 修改后电路的综合结果修改后电路的综合结果通过简单改变通过简单改变VHDLVHDL的语句,就可以改变电路的语句,就可以改变电路中使用的逻辑单元和连接方式。

      中使用的逻辑单元和连接方式 电路基本单元的结构电路基本单元的结构考虑到晶体管级和版图级的性能优化问题,考虑到晶体管级和版图级的性能优化问题,异或门可以采用传输门结构实现,而异或门可以采用传输门结构实现,而““与与- -或或””结构则通常采用与非门实现结构则通常采用与非门实现 数字集成电路的优化设计数字集成电路的优化设计在系统一级,需要考虑使功能模块的数量在系统一级,需要考虑使功能模块的数量最小化,减少相互连线;最小化,减少相互连线;在功能模块一级,需要考虑逻辑单元的使在功能模块一级,需要考虑逻辑单元的使用量和运算速度问题;用量和运算速度问题;对于逻辑单元,则需要考虑基本单元的使对于逻辑单元,则需要考虑基本单元的使用及其连接方式;用及其连接方式;晶体管级和版图的优化则限制着基本逻辑晶体管级和版图的优化则限制着基本逻辑单元的规模单元的规模 数字集成电路设计的基本条件数字集成电路设计的基本条件熟悉电路的基本结构,设计方法和设计流程;熟悉电路的基本结构,设计方法和设计流程;掌握硬件描述语言的特点和描述方法;掌握硬件描述语言的特点和描述方法;掌握相关综合工具和仿真工具的应用掌握相关综合工具和仿真工具的应用。

      VHDLVHDL描述形式描述形式硬件电路模型:硬件电路模型:电路模块,具有外部接口和内部结构电路模块,具有外部接口和内部结构VHDLVHDL:用于描述硬件的结构性程序,采:用于描述硬件的结构性程序,采用文本文件编写;用程序模块表达硬件用文本文件编写;用程序模块表达硬件模块:设定外部端口,设计内部结构模块:设定外部端口,设计内部结构 VHDLVHDL的程序结构的程序结构VHDLVHDL程序由模块构成,每个模块对应于程序由模块构成,每个模块对应于一个电路块;一个电路块;模块由三部分组成:模块由三部分组成:库和包库和包 librarylibrary(设计资源)(设计资源)实体实体 entity entity (外部端口)(外部端口)结构体结构体 architecturearchitecture(内部结构)(内部结构) VHDLVHDL的程序示例的程序示例library ieee;use ieee.std_logic_1164.all; entity  inhibit  is  port ( x,y: in std_logic ;          z: out std_logic);end inhibit; architecture rtl of inhibit isbegin z<='1' when x='1' and y='0'else '0';end rtl; 简单的实体简单的实体entity  entity-name  isport (signal-name : mode  signal-type;……signal-name : mode  signal-type);end entity-name; 比较复杂的实体比较复杂的实体ENTITY ENTITY 实体名实体名 ISISGENERICGENERIC语句;语句;PORTPORT语句;语句;((BEGIN BEGIN 决断语句、过程调用、进程说明等)决断语句、过程调用、进程说明等)END END 实体名;实体名; VHDLVHDL的实体:的实体: entity要点:要点:实体以实体以 entity entity 实体名实体名 is is 开始;开始;以以end end 实体名实体名; ; 结束;结束;实体的主要内容为端口(实体的主要内容为端口(portport)说明,)说明,其中主要包括:其中主要包括:实体名、信号名、信号模式、信号类型实体名、信号名、信号模式、信号类型 实体名称和信号名称实体名称和信号名称每个实体在设计中对应一个电路模块,每个实体在设计中对应一个电路模块,实体中的每个信号在设计中对应模块的实体中的每个信号在设计中对应模块的一个端口;实体名称和信号名称应具有一个端口;实体名称和信号名称应具有意义,方便记忆;名称不能重复使用;意义,方便记忆;名称不能重复使用;对模块进行编译时,文件名和项目名必对模块进行编译时,文件名和项目名必须与实体名相同;须与实体名相同; 实体名称和信号名称实体名称和信号名称名称由英文字母和数字构成,英文字母名称由英文字母和数字构成,英文字母开头;可在名称中使用不连接的下划线开头;可在名称中使用不连接的下划线符号符号_ _;字母不分大小写;;字母不分大小写;不能与关键字冲突。

      不能与关键字冲突 实体名称和信号名称实体名称和信号名称例:合法的名称例:合法的名称name , name2, name_a, name_2_3m; 非法的名称非法的名称ill__egle、_illegle、illegle_、2bad、ill egle、ill/egle特殊的名称特殊的名称\74LS04\、\vhdl\、\VHDL\ 信号模式信号模式每个端口信号都必须规定信号模式;每个端口信号都必须规定信号模式;信号模式规定信号流动的方向;信号模式规定信号流动的方向;in in 输入端口输入端口out out 输出端口输出端口inout inout 双向端口双向端口buffer buffer 缓冲输出端口缓冲输出端口 内部端口内部端口Y Y与外部端口与外部端口X X的连接规则的连接规则从外向内:从外向内: X X Y Y in in in in out out out out inout inout 任意任意 (可通过多源控制)(可通过多源控制) buffer buffer 任意任意 (只能通过单源控制)(只能通过单源控制) 内部端口内部端口Y Y与外部端口与外部端口X X的连接规则的连接规则从内向外:从内向外: Y Y X X in in in in、、inoutinout、、bufferbuffer out out out out、、inoutinout inout inout inout inout (可通过多源控制)(可通过多源控制) buffer buffer buffer buffer (只能通过单源控制)(只能通过单源控制) 信号数据类型信号数据类型所有信号都必须规定其类型;所有信号都必须规定其类型;数字电路设计中最简单的类型为:数字电路设计中最简单的类型为:bit bit_vector bit bit_vector 最常用的类型为:最常用的类型为:std_logic std_logic 单个逻辑量单个逻辑量std_logic_vector std_logic_vector 逻辑数组、总线逻辑量逻辑数组、总线逻辑量 实体的其它语法要点实体的其它语法要点除了第一行除了第一行 entity entity …… is is 以外,每一句以外,每一句以分号以分号““;;””结束结束 ;;编写程序时,一行可以含若干句(以分号间隔)编写程序时,一行可以含若干句(以分号间隔),一句也可以写若干行;,一句也可以写若干行;可以用可以用““----””符号后接说明文字,这些文字用符号后接说明文字,这些文字用于帮助理解程序,不会对编译产生影响;于帮助理解程序,不会对编译产生影响;单词之间必须使用空格;并列信号间使用逗号;单词之间必须使用空格;并列信号间使用逗号; 实体编写的示例实体编写的示例4 4选选1 1数据选择器数据选择器 kmux4kmux4entity kmux4 isentity kmux4 isport ( d0,d1,d2,d3: in std_logic;port ( d0,d1,d2,d3: in std_logic; a0,a1 : in std_logic; a0,a1 : in std_logic; s : in std_logic; s : in std_logic; y : out std_logic); y : out std_logic);end kmux4;end kmux4; 实体编写的示例实体编写的示例4 4选选1 1数据选择器数据选择器 kmux4kmux4entity kmux4 isentity kmux4 isport ( d: in std_logic_vector (0 to 3);port ( d: in std_logic_vector (0 to 3); a : in std_logic_vector (1 downto 0); a : in std_logic_vector (1 downto 0); s : in std_logic;s : in std_logic; y : out std_logic); y : out std_logic);end kmux4;end kmux4; 类属说明类属说明 genericgeneric实体中可以设置类属说明语句实体中可以设置类属说明语句; ;类属说明位于类属说明位于portport语句之前;语句之前;类属是对电路模块可变常数的说明;类属是对电路模块可变常数的说明;类属值在编写本模块时可以设置为一个确定值;类属值在编写本模块时可以设置为一个确定值;在其他程序调用该模块时,可以对类属值进行在其他程序调用该模块时,可以对类属值进行重新设定;重新设定; 看两个例子:看两个例子:LIBRARY ieee;USE ieee.std_logic_1164.all;USE ieee.std_logic_arith.all;ENTITY half_adder ISPORT (a,b: IN  bit;  s,c: OUT bit);END half_adder;ARCHITECTURE aa OF half_adder ISBEGIN    s<=a xor b;    c<=a and b;END ; •library IEEE;•use IEEE.STD_LOGIC_1164.ALL;•use IEEE.STD_LOGIC_ARITH.ALL;•use IEEE.STD_LOGIC_UNSIGNED.ALL;•entity adder1 is• port(  a,b:in std_logic;•            ci:in std_logic;•            sum:out std_logic;•            co: out std_logic•);•end adder1;•architecture Behavioral of adder1 is •begin•   sum<=a xor b xor ci;•    co<=(a and b) or ((a xor b) and ci);•end Behavioral; 3.1 VHDL3.1 VHDL的模型结构的模型结构 完整的完整的VHDLVHDL语言程序通常包含:语言程序通常包含:•实体(实体(EntityEntity))•结构体(结构体(ArchitectureArchitecture))•配置(配置(ConfigurationConfiguration))•包集合(包集合(PackagePackage))•库(库(LibraryLibrary)) •实体实体用于描述所设计的系统的外部用于描述所设计的系统的外部接口信号;接口信号;•结构体结构体用于描述系统内部的结构和用于描述系统内部的结构和行为;行为;•配置配置用于从用于从库中中选取所需取所需单元来元来组成系成系统;;•包集合包集合存放各存放各设计模模块能共享的数能共享的数据据类型、常数、程序等;型、常数、程序等; •库库用于存放已编译的实体、构造体、用于存放已编译的实体、构造体、包集合、配置。

      包集合、配置   1.1.实体(实体(ENTITYENTITY)) 实体是设计的基本模块和设计的初级单元实体是设计的基本模块和设计的初级单元. .在分层次设计中,顶层有顶层实体,含在在分层次设计中,顶层有顶层实体,含在顶层实体中的较低层次的描述为低层实体顶层实体中的较低层次的描述为低层实体依靠配置把顶层实体和底层实体连接起来依靠配置把顶层实体和底层实体连接起来  实体的一般格式实体的一般格式ENTITY ENTITY 实体名实体名 ISIS[GENERIC [GENERIC (类属表)(类属表);];] PORT ( PORT (端口表端口表) );;ENDEND 端口信息和类属信息端口信息和类属信息•端口信息端口信息表示该设计单元与其它设计单元相表示该设计单元与其它设计单元相连接的端口名、端口模式和信号取值的类型;连接的端口名、端口模式和信号取值的类型; •类属信息类属信息表示该设计单元的默认类属参数值,表示该设计单元的默认类属参数值,例如规定端口的大小、实体中子元件的数目、例如规定端口的大小、实体中子元件的数目、实体的定时特性等参数下面举几个简单的实体的定时特性等参数。

      下面举几个简单的实体设计例子加以说明实体设计例子加以说明  实体设计例题实体设计例题例例: :如如图图所所示示半半加加器器的的VHDLVHDL描描述述( (只只有有端端口口说说明明的实体描述的实体描述) )ENTITY half_adder IS ENTITY half_adder IS PORT( PORT(a,ba,b: :ININ BitBit; ; s,c s,c: :OUTOUT BitBit); ); END half_adder;END half_adder;半加器端口名端口模式端口类型 说明说明:实体类似于原理图中的模块符(实体类似于原理图中的模块符(SymbolSymbol),它并),它并不描述模块的具体功能不描述模块的具体功能§端口名端口名: :在实体中必须是唯一的在实体中必须是唯一的. .§端端口口模模式式: :是是用用来来说明明数数据据传输通通过该端端口口的的方方向§端口端口类型型: :是端口所采用的数据是端口所采用的数据类型型. . 端口模式的类型端口模式的类型v输入(输入(ININ):):输入模式入模式仅允允许数据流入端口。

      数据流入端口v输出(出(OUTOUT ):):输出模式出模式仅允允许数据流从内部数据流从内部流向流向实体体输出端口v缓冲(缓冲(BufferBuffer ):):缓冲用于有内部反馈需求缓冲用于有内部反馈需求时缓冲模式不允许用作双向端口使用时缓冲模式不允许用作双向端口使用 v双向(双向(InoutInout ):):对于双向信号,设计时必须对于双向信号,设计时必须定义端口为双向模式定义端口为双向模式 端口类型端口类型 布尔型(布尔型(BooleanBoolean):):布布尔尔类型可以取型可以取值“TRUETRUE”(真)或(真)或“FALSEFALSE”(假)(假) 位(位(BitBit ):):位可以取位可以取值“0 0”或或“1 1” 位矢量(位矢量(Bit_VectorBit_Vector ):):位矢量由位矢量由IEEEIEEE库中中的的标准包准包Numeric_BitNumeric_Bit支持该程序包中定程序包中定义的基本元素的基本元素类型型为BitBit类型,而不是型,而不是Std_logicStd_logic类型型 整数(整数(Integer):Integer):整数可以用作循整数可以用作循环的指的指针或或常数,通常不用于常数,通常不用于I/OI/O信号信号 。

      非非标准准逻辑((Std_ulogicStd_ulogic)和)和标准准逻辑((Std_logicStd_logic))::非非标准准逻辑和和标准准逻辑由由IEEE.std_logic_1164IEEE.std_logic_1164支持程序包支持程序包预先在先在IEEEIEEE库中中编译,,该程序包中定程序包中定义的数据的数据类型包型包括括Std_ulogicStd_ulogic,,Std_ulogic_vectorStd_ulogic_vector,,Std_logicStd_logic,,Std_logic_vectorStd_logic_vector包中还定定义了一些了一些转换函数访问IEEE.std_logic_1164IEEE.std_logic_1164程序包中的程序包中的项目需要由目需要由LIBRARYLIBRARY子句和子句和USEUSE子句子句. .Library ieee;Library ieee;Use ieee.std_logic_1164.all;Use ieee.std_logic_1164.all; Std_logic:工业标准的逻辑类型,取值如下:工业标准的逻辑类型,取值如下:‘0’(强(强0););‘1’(强(强1););‘Z’(高阻态)(高阻态)‘X’(强未知);(强未知); ‘W’(弱未知);(弱未知);‘L’(弱(弱0););‘H’(弱(弱1))‘-’(忽略);(忽略); ‘U’(未初始化的);(未初始化的);其中只有前其中只有前4种取值具有实际物理意义,其他的种取值具有实际物理意义,其他的是为了和模拟环境相容才保留的。

      是为了和模拟环境相容才保留的 用户自定义类型用户自定义类型是VHDL语言的一大特色,是普通编程语言所不具备的语法如下:TYPE 数据类型名{ ,数据类型名} 数据类型定义例:TYPE BYTE IS array( 7 downto 0) of bit;Variable adder : BYTE ; 实体的表述方法实体的表述方法例例7 7..1 1 全加器的实体描述全加器的实体描述3位全加器abciS iCi+1图7-4  3位全加器方框图 实体的表述方法实体的表述方法 例例7 7..1 31 3位全加器的实体描述位全加器的实体描述Library ieee;Library ieee;Use ieee.std_logic_1164.all;Use ieee.std_logic_1164.all;Entity adder3 is portEntity adder3 is port(( ););End adder3End adder3;; a,b:in std_logic_vector(2 downto 0);Ci:in std_logic;S i:out std_logic_vector(2 downto 0);Ci+1:out std_logic 类属声明语法如下:类属声明语法如下:Generic( 常数名称:类型常数名称:类型[::=值值]{;; 常数名称:类型常数名称:类型[::=值值]););例:定义一个名为例:定义一个名为COMP的实体,它有两个的实体,它有两个Nbit输入和输入和一个布尔型输出。

      一个布尔型输出Entity COMP is      generic(N: INTEGER :=8);      port (X, Y : BIT_VECTOR(0 TO N-1);               EQUQL: OUT BOOLEAN             );End COMP; 2.结构体(结构体(Architecture ))  结构体描述主要用来描述实体的内部结构,即结构体描述主要用来描述实体的内部结构,即描述一个描述一个实体的功能实体的功能一般格式:一般格式:ARCHITECTURE  (结构体名)(结构体名)  OF  (实体名)(实体名)   IS         [常量定义常量定义]         [信号定义信号定义]         [类型定义类型定义]         [元件定义元件定义]         [子程序定义子程序定义]  BEGIN         [并行信号赋值语句并行信号赋值语句]  [进程语句进程语句]         [生成语句生成语句]         [元件例化语句元件例化语句]  END [结构体名结构体名];; VHDLVHDL的结构体:的结构体: architecturearchitecturearchitecture arch_name of architecture arch_name of entity_name isentity_name is 说明部分说明部分 declarations and definitions; declarations and definitions; beginbegin 语句部分语句部分 concurrent statement; concurrent statement; end arch_name;end arch_name; 结构体语法要点结构体语法要点每个结构体必须属于一个实体;每个结构体必须属于一个实体;每个结构体必须有一个名称:每个结构体必须有一个名称:通常可以根据描述方式起名:通常可以根据描述方式起名: str rtl behstr rtl beh结构体分为两部分:结构体分为两部分:is is –– bigin: bigin: 说明语句;说明语句;bigin bigin –– end: end: 并行语句;并行语句; 结构体的说明语句结构体的说明语句type declarations; type declarations; 类型说明类型说明signal declarations; signal declarations; 信号说明信号说明constant declarations; constant declarations; 常量说明常量说明component declarations; component declarations; 元件说明元件说明function definitions; function definitions; 函数说明函数说明procedure definitions; procedure definitions; 过程说明过程说明 结构体的并行语句结构体的并行语句信号赋值语句信号赋值语句 数据流描述数据流描述rtlrtl元件例化语句元件例化语句 结构描述结构描述strstr进程语句进程语句 行为描述行为描述behbeh每条并行语句形成一个电路逻辑单元。

      每条并行语句形成一个电路逻辑单元 结构体的其他语法要点结构体的其他语法要点除了第一句和除了第一句和beginbegin句外,其余各句均句外,其余各句均以分号结束;以分号结束;在每一部分中,各语句处于并列状态,在每一部分中,各语句处于并列状态,执行时不分先后次序;执行时不分先后次序;定义语句需要考虑使用的顺序定义语句需要考虑使用的顺序 VHDL允许采用允许采用3种描述格式:种描述格式:•行为描述行为描述::描述该设计单元的功能,即该硬件能做什描述该设计单元的功能,即该硬件能做什么,主要使用函数、过程和进程语句,以算法形式描么,主要使用函数、过程和进程语句,以算法形式描述数据的变换和传送述数据的变换和传送•结构描述结构描述::描述该设计单元的硬件结构,即该硬件是描述该设计单元的硬件结构,即该硬件是如何构成的主要使用配置指定语句及元件例化语句如何构成的主要使用配置指定语句及元件例化语句描述元件的类型和元件的互连关系描述元件的类型和元件的互连关系 •数据流数据流::主要使用并行的信号赋值语句,既显式表示主要使用并行的信号赋值语句,既显式表示了该设计单元的行为,也隐式表示了该设计单元的结了该设计单元的行为,也隐式表示了该设计单元的结构。

      构 例:一个一位等值比较器的设计例:一个一位等值比较器的设计实体描述:实体描述:library ieee;library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_1164.all;entity eqcomp is entity eqcomp is port(a,b:in std_logic;port(a,b:in std_logic; equals:out std_logic); equals:out std_logic);end;end; 行为描述方式:行为描述方式:architecture behavioral of eqcomp isarchitecture behavioral of eqcomp isbeginbegincomp:process(a,b)comp:process(a,b) begin begin if a=b then if a=b then equals<='1'; equals<='1'; else else equals<='0'; equals<='0'; end if; end if;end process comp;end process comp;end behavioral;end behavioral; 结构描述方式:结构描述方式:architecture struct of eqcomp isarchitecture struct of eqcomp iscomponent xnor2component xnor2 port(a,b:in std_logic; port(a,b:in std_logic; equals:out std_logic); equals:out std_logic);end component;end component;beginbeginu0:xnor2 port map (a,b,equals);u0:xnor2 port map (a,b,equals);end struct;end struct; 数据流描述方式:数据流描述方式:architecture dataflow of eqcomp isarchitecture dataflow of eqcomp isbeginbeginequals<='1'when (a=b) else '0';equals<='1'when (a=b) else '0';end dataflow;end dataflow;根据以上给出的VHDL代码可知,数据流描述是采用并行的信号赋值语句来描述它的功能的 3.2 VHDL3.2 VHDL语言要素语言要素•标识符(标识符(IdentifierIdentifier)) •数据对象(数据对象(Data ObjectsData Objects ))•保留字及运算符保留字及运算符  1.标识符标识符(Identifier )标识符由英文字母标识符由英文字母“a a”~~“z z”、、“A A”~~“Z Z”、、数字数字“0 0”~~“9 9”以及下划线以及下划线“____”组成。

      使用时组成使用时应注意以下几点:应注意以下几点:1)1)VHDLVHDL不区分大小写;不区分大小写; 2)2)标识符一定要以字母开符一定要以字母开头 ;;3)3)下划下划线不能放在不能放在结尾尾 ;;4)4)下划下划线不能不能连用用   如:a_h_1、show_new_state、COUNTER_A a%h_1、show-new-state、COUNTER_、T_ _1 2.数据对象数据对象VHDLVHDL的数据对象包括信号、常量、变量和文的数据对象包括信号、常量、变量和文件件4 4类v信号信号v常量常量v变量变量每个数据对象必须有特定的名称;每个数据对象必须有特定的名称;数据对象的命名规则与实体名相同;数据对象的命名规则与实体名相同; 1)信号)信号 信号代表连线,也可内连元件端口也是信号代表连线,也可内连元件端口也是信号格式如下格式如下 : :SIGNAL signal_nameSIGNAL signal_name::signal type[signal type[::=initial_value]=initial_value] 例子如下:例子如下:((1 1))signal countsignal count:: bit_vectorbit_vector((3 downto 03 downto 0););((2 2))signal enablesignal enable,,clkclk::bitbit:=:=’0 0’; ; VHDLVHDL的信号:的信号:signal电路中端口、连接线的体现,具有具体物电路中端口、连接线的体现,具有具体物理含义,在构造体内为全局变量;理含义,在构造体内为全局变量;信号使用前必须先进行说明:信号使用前必须先进行说明: 输入输入/ /输出信号在实体中说明;输出信号在实体中说明; 通用信号在包集合中进行说明;通用信号在包集合中进行说明; 模块内部信号在结构体内说明;模块内部信号在结构体内说明; 信号说明语句基本格式信号说明语句基本格式signal signal_name : signal_type; signal signal_name : signal_type; 信号名信号名 信号类型信号类型 例:例:signal temp : std_logic;signal temp : std_logic;signal bus_a : std_logic_vector(7 signal bus_a : std_logic_vector(7 downto 0);downto 0);注意:端口(输入注意:端口(输入/ /输出)信号已在实体输出)信号已在实体中说明,在结构体中就不再说明;中说明,在结构体中就不再说明; 信号的赋值信号的赋值在程序中采用在程序中采用““<=<=””(赋值语句)进行:(赋值语句)进行: 信号名信号名 <= <= 信号值(表达式);信号值(表达式);例:例: temp<='1'temp<='1';;z<=x and not yz<=x and not y;; d<=d<=““01100110””;;赋值号两边的信号原则上必须为相同类型;赋值号两边的信号原则上必须为相同类型; 信号可在构造体内、过程、进程内赋值;信号可在构造体内、过程、进程内赋值;信号不能在函数内赋值;信号不能在函数内赋值; 2)常量常量常量是指那些设计描述中不会变化的值,常量是指那些设计描述中不会变化的值,这个值通常用来赋值,而且只能赋值一次。

      这个值通常用来赋值,而且只能赋值一次说明格式为说明格式为 ::CONSTANT constant_name{CONSTANT constant_name{,,constant_name}constant_name}::type_name[:=value]type_name[:=value] (1)  constant fifo_width:integer:=8; (2)  constant delay1,delay2:Time:=10ns; (3) constant add:std_logic_vector(2 downto 0):=“000” ; 3)变量)变量 变量用于进程语句和子程序(函数和过程)变量用于进程语句和子程序(函数和过程)中作局部数据存储中作局部数据存储和信号不同,分配给信号的值必须经过一和信号不同,分配给信号的值必须经过一段时间延迟后才能成为当前值,而分配给变量段时间延迟后才能成为当前值,而分配给变量的值则立即成为当前值;信号与硬件中的的值则立即成为当前值;信号与硬件中的“连连线线”相对应,而变量不能表达连线或存储元件相对应,而变量不能表达连线或存储元件。

      变量的说明格式为:变量的说明格式为:VARIABLE variable_name{VARIABLE variable_name{,,variable_name}variable_name}::variable_type[variable_type[::==value]value] 变量的赋值是直接的变量不具有变量的赋值是直接的变量不具有像信号的值必须进过一段时间延迟后,像信号的值必须进过一段时间延迟后,才能成为当前值的赋值,即才能成为当前值的赋值,即“<=<=”符符号用来表示信号赋值变量在某一时号用来表示信号赋值变量在某一时刻仅包含一个值,变量赋值和初始化刻仅包含一个值,变量赋值和初始化的符号的符号“:=:=”表示立即赋值表示立即赋值  变量说明的例子如下:变量说明的例子如下:((1 1))variable tepvariable tep::bitbit;;((2 2))variablevariableaddressaddress:: std_logic_vectorstd_logic_vector((31 downto 031 downto 0););((3 3))variable avariable a,,b b::bit_vectorbit_vector ((0 0 to widthto width--1 1););  3.保留字及运算符保留字及运算符 •保留字保留字•运算符运算符 (1) VHDL保留字保留字 ABS    ACCESS    AFTER    ALIAS    ALL    AND   ARCHITECTURE    ARRAY    ATTRIBUTE      BEGIN     BLOCK      BODY    BUFFER      BUS      CASE   COMPONENT   CONSTANT   DOWNTO  ELSE  ELSIF  END      ENTITY    EXIT      FILE      FOR      FUNCTION     GENERIC   IF   IN   INOUT   IS   LABLE  LIBRARY   LINKAGE   LOOP   MAP   NAND   NEW  NEXT  NOR  NOT   NULL   OF  ON  OPEN  OR  OTHERS  OUT  PACKAGE  PORT  PROCEDURE  PROCESS  RANGE  RECORD    REGISTER    REM      REPORT    RETURN   SELECT    SIGNAL    SUBTYPE    THEN    TO   TRANSPORT  TYPE  UNITS  UNTIL  USE  VARIABLE  WAIT  WHEN  WHILE  WITH  XOR  XNOR ((2))VHDL运算符运算符•算术运算符算术运算符 •关系运算符关系运算符 •逻辑运算符逻辑运算符 •连接运算符连接运算符  算术运算符算术运算符•+(加)+(加)•-(减)-(减)•* *(乘)(乘)•/ /(除)(除)•****(乘方)(乘方)•MODMOD(求模)(求模)•REMREM(求余)(求余)•ABSABS(求绝对值)(求绝对值) 关系运算符关系运算符•= =(等于)(等于)•/=/=(不等于)(不等于)•< <(小于)(小于)•<=<=(小于等于)(小于等于)•> >(大于)(大于)•>=>=(大于等于)(大于等于)•其中其中‘<=<=’也用于表示信号的赋值操作也用于表示信号的赋值操作 逻辑运算符逻辑运算符•ANDAND(逻辑与)(逻辑与)•OROR(逻辑或)(逻辑或)•NANDNAND(与非)(与非)•NORNOR(或非)(或非)•XORXOR(异或)(异或)•XNORXNOR(同或)(同或)•NOTNOT(逻辑非)(逻辑非)  连接运算符连接运算符•& &(连接)(连接)•连接符将多个对象或是两连接成维数更大的矢量连接符将多个对象或是两连接成维数更大的矢量可通过连接运算将字符组合为字符串,或将短字符可通过连接运算将字符组合为字符串,或将短字符串连接成长字符串:串连接成长字符串: & &字符串的例子:字符串的例子: " string" & " literal"    。

      点击阅读更多内容
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.