VHDL硬件描述语言基础_第1页
VHDL硬件描述语言基础_第2页
VHDL硬件描述语言基础_第3页
VHDL硬件描述语言基础_第4页
VHDL硬件描述语言基础_第5页
已阅读5页,还剩82页未读 继续免费阅读

下载本文档

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

文档简介

1、VHDLVHDL用户入门教程用户入门教程 EDA工作室E-mail:Z2022-5-28湖北众友科技EDA工作室2第一章第一章 VHDLVHDL简介简介第二章第二章 VHDLVHDL程序基本结构程序基本结构第三章第三章 VHDLVHDL数据和表达式数据和表达式第四章第四章VHDLVHDL主要描述语句主要描述语句第五章元件及元件例化第五章元件及元件例化第六章配置第六章配置第七章子程序第七章子程序第八章第八章VHDLVHDL的模板的模板第九章常见错误第九章常见错误第十章保留字第十章保留字2022-5-28湖北众友科技EDA工作室3第一章第一章 VHDLVHDL简介简介l 传统数字电路设计方法不适合

2、设计大规模的系统。工程师不容易理解原理图设计的功能。l 众多软件公司开发研制了具有自己特色的电路硬件描述语言(Hardware Description Language,HDL),存在着很大的差异,工程师一旦选用某种硬件描述语言作为输入工具,就被束缚在这个硬件设计环境之中。因此,硬件设计工程师需要一种强大的、标准化的硬件描述语言,作为可相互交流的设计环境。返回目录2022-5-28湖北众友科技EDA工作室41.1 VHDL1.1 VHDL背景背景l 美国国防部在80年代初提出了VHSIC(Very High Speed Integrated Circuit)计划,其目标之一是为下一代集成电路的

3、生产,实现阶段性的工艺极限以及完成10万门级以上的设计,建立一项新的描述方法。1981年提出了一种新的HDL,称之为VHSIC Hardware Description Language,简称为VHDL,这种语言的成就有两个方面:l1.描述复杂的数字电路系统l2.成为国际的硬件描述语言标准 1987年被采纳为IEEE 1076标准 1993年被更新为IEEE 1164标准2022-5-28湖北众友科技EDA工作室51.2 VHDL1.2 VHDL的优点的优点1.用于设计复杂的、多层次的设计。支持设计库和设计的重复使用。2.与硬件独立,一个设计可用于不同的硬件结构,而且设计时不必了解过多的硬件细

4、节。3.有丰富的软件支持VHDL的综合和仿真,从而能在设计阶段就能发现设计中的Bug,缩短设计时间,降低成本。4.更方便地向ASIC过渡5.VHDL有良好的可读性,容易理解。2022-5-28湖北众友科技EDA工作室61.3 VHDL1.3 VHDL与计算机语言的区别与计算机语言的区别HDL的出现是为了适应电子系统设计的日益复杂性。若以计算机软件的设计与电路设计做个类比,机器码好比晶体管/MOS管;汇编语言好比网表;则HDL语言就如同高级语言,VHDL在语法和风格上类似于现代高级编程语言,如C语言。但要注意,VHDL毕竟描述的是硬件,它包含许多硬件特有的结构。 1.1.运行的基础运行的基础 计

5、算机语言是在CPURAM构建的平台上运行 VHDL设计的结果是由具体的逻辑、触发器组成的数字电路 2.2.执行方式执行方式 计算机语言基本上以串行的方式执行 VHDL在总体上是以并行方式工作 3.3.验证方式验证方式 计算机语言主要关注于变量值的变化 VHDL要实现严格的时序逻辑关系2022-5-28湖北众友科技EDA工作室71.4 VHDL1.4 VHDL与与VerilogVerilog HDL HDL的区别的区别 一般的硬件描述语言可以在三个层次上进行电路描述,其层次由高到低依次可分为行为级行为级、RTLRTL级级和和门电路级门电路级。VHDL语言通常更适于行为级和RTL级的描述,Veri

6、log通常只适于RTL级和门电路级的描述。任何一种语言源程序,最终都要转换成门电路级才能被布线器或适配器所接受。因此,VHDL语言源程序的综合通常要经过行为级十行为级十RTLRTL级级向门电路级的转化,而Venlog语言源程序的综合过程要稍简单,即经过RTL级十门电路级的转化。与Verilog相比,VHDL语言是一种高级描述语言,适用于电路高级建模,易于系统级设计易于系统级设计。随着VHDL综合器的进步,综合的效率和效果将越来越好。vedlog语言则是一种较低级的描述语言,最适于描述门级电路,尤其是开关级电路,易于控制电路资源易于控制电路资源。 显然,VHDL和Verilog主要的区别在于逻辑

7、表达的描述级别:VHDL虽然也可以直接描述门电路,但这方面的能力却不如Verilog语言:反之,Verilog在高级描述方面不如VHDL。 两种语言功能侧重点不同两种语言功能侧重点不同, ,最好两种语言都会最好两种语言都会, , 两种语言具体功能可两种语言具体功能可参考光盘中附带的参考光盘中附带的VerilogHDLVerilogHDL教程和教程和VHDLVHDL实用教程两本实用教程两本EDAEDA学习电子书学习电子书, ,它它们详细讲述了两种语言基本结构功能及用法们详细讲述了两种语言基本结构功能及用法, ,我们在这里以我们在这里以VHDLVHDL为重点为重点, ,此此课件仅供学生快速入门,详

8、细学习可参考电子书或其它相关资料与教材。课件仅供学生快速入门,详细学习可参考电子书或其它相关资料与教材。2022-5-28湖北众友科技EDA工作室81.4 VHDL1.4 VHDL设计过程设计过程 采用VHDL及自顶向下方法在大型数字系统设计中被广泛采用。在设计中你可采用较抽象的语言(行为/算法)来描述系统结构,然后细化成各模块,最后可借助编译器将VHDL描述综合为门级。 本教程仅对用于CPLD/FPGA设计描述的VHDL语言作一简单说明。其设计过程一般如下: 1. 代码编写; 2. 由综合器(如Synplify,Synopsys等)综合成门级网表; 3. 前仿真/功能仿真; 4. 布局/布线

9、至某一类CPLD/FPGA中; 5. 后仿真/时序仿真。返回目录第二章第二章 VHDLVHDL程序基本结构程序基本结构一个VHDL设计由若干个VHDL文件构成,每个文件主要包含如下三个部分中的一个或全部: 1. 1. 程序包(程序包(PackagePackage););2.2.实体(实体(EntityEntity););3.3.结构体(结构体(ArchitectureArchitecture)。)。VHDL设计设计VHDL文件文件程序包(程序包(Packages)声明在设计或实体中将用到的常数,数据类型,元件及子程序等实体(实体(Entities) 声明到其他实体及其他设计的接口,即定义本设计

10、的输入/输出端口。结构体(结构体(Architectures) 定义了实体的实现。即电路的具体描述其各自作用如右图所示: 一个完整的VHDL设计必须包含一一个实体和一个与之对应的结构体。一个实体可对应多个结构体,以说明采用不同方法来描述电路。返回目录-eqcomp4 is a four bit equality comparatorLibrary IEEE;use IEEE.std_logic_1164.all;entity eqcomp4 isport(a, b:in std_logic_vector(3 downto 0); equal :out std_logic);end eqcomp

11、4;architecture dataflow of eqcomp4 isbegin equal = 1 when a=b else 0;End dataflow;VHDL 大小大小写不敏感写不敏感eqcomp4.vhd包实体构造体文件名和实体名一致每行;结尾关键字begin关键字end后跟实体名关键字end后跟构造体名库2.1 2.1 实例基本结构图实例基本结构图注:各完整语句均以“;”结尾,除此处外。以“-” 开始的语句为注释语句,不参与编译。A3.0B3.0equalEntity eqcomp4 isport(a, b: in std_logic_vector(3 downto 0);

12、equal:out std_logic );end eqcomp4;l描述设计功能输入输出端口(Port)l在层次化设计时,Port为模块之间的接口l在芯片级,则代表具体芯片的管脚注意:此处不用“;”实体的格式如下: entityentityis is port port end end; 2022-5-28湖北众友科技EDA工作室13输入(Input)输出(Output)双向(Inout):可代替所有其他模式,但降低了程序的可读性,一般用于与CPU的数据总线接口缓冲(Buffer):与Output类似,但允许该管脚名作为一些逻辑的输入信号lEntity test1 is port(a: in

13、 std_logic; b,c: out std_logic); end test1; architecture a of test1 is begin b = not(a); c = b;c = b;-ErrorError end a;lEntity test2 is port(a: in std_logic; b: buffer std_logic; c: out std_logic); end test2; architecture a of test2 is begin b = not(a); c = b;c = b; end a;描述实体的行为结构体有三种描述方式: A.行为描述(b

14、ehavioral) B.数据流描述(dataflow) C.结构化描述(structural)结构体(结构体(Architecture)声明区(声明区(Declarations)信号声明;声明用于该结构体的类型,常数,元件,子程序。并发语句并发语句信号赋值(信号赋值(Signal Assignments)计算结果,并赋值给信号元件例化元件例化(Component Instantiations)调用另一个实体所描述的电路。即元件调用过程调用(过程调用(Procedure Calls)调用一个预先定义好的一个算法。过程(过程(Processes)定义一个新算法实现电路功能。在过程中赋值顺序语句。

15、语句按放置的顺序执行。2022-5-28湖北众友科技EDA工作室16高层次的功能描述,不必考虑在电路中到底是怎样实现的。ArchitectureArchitecture behavioralbehavioral ofof eqcomp4 eqcomp4 isis beginbegincomp: process (a,b)comp: process (a,b) begin beginif a=b thenif a=b then equal = 1; equal = 1; elseelse equal =0; equal =0;end if;end if; end process comp; en

16、d process comp;endend behavioralbehavioral ; ;当a和b的宽度发生变化时,需要修改设计,当宽度过大时,设计非常繁琐Architecture dataflow1 of eqcomp4 is begin equal = 1 when a=b else 0;end dataflow1;Architecture dataflow2 of eqcomp4 is Begin equal RETURN 1; WHENWHEN 1=RETURN 0; WHENWHEN Z=RETURN Z; ENDEND CASECASE; ENDEND invert;ENDEND

17、 Logic;2022-5-28湖北众友科技EDA工作室23 一个程序包所定义的项对另一个单元并不是自动可见的,如果在某个VHDL单元之前加上USE语句,则可以使得程序包说明中的定义项在该单元中可见。-假定上述程序包Logic的说明部分已经存在,下面的USE语句使得Three-level-logic 和 Invert;对实体说明成为可见。USE Logic. Three_level_logic.Logic;USE Logic. Three_level_logic. Invert;-或USE Logic.all。保留字all代表程序包中所有的都可见。即表示使用库/程序包中的所有定义。 ENTIT

18、Y Inverter IS PORT (x; IN Three_level_logic; y: OUT Three_level_logic); END Inverter;2022-5-28湖北众友科技EDA工作室24-结构体部分继承了实体说明部分的可见性,-所以不必再使用USE语句ARCHITECTURE Three_level_logic OF Inverter ISBEGIN PROCESS BEGIN Y=Invert (x) ; WAIT ON x; END PROCESS;END Inverter_body; 函数调用函数调用返回目录2022-5-28湖北众友科技EDA工作室25库库

19、是专门存放预先编译好的程序包(package)的地方,这样它们就可以在其它设计中被调用。它实际上对应一个目录,预编译程序包的文件就放在此目录中。用户自建的库即为设计文件所在的目录,库名与目录名的对应关系可在编译软件中指定。 例如: LIBRARYLIBRARY ieee; USE USE ieee.std_logic_1164.ALLALL; USE USE ieee. std_logic_unsigned.ALLALL; ieeeieee是ieee标准库的标志名,下面两个USE语句使实体和结构体可使用程序std_logic_1164、std_logic_unsigned中预定义的内容。202

20、2-5-28湖北众友科技EDA工作室26库库 名名 程序包名程序包名 包中预定义内容包中预定义内容 stdstandardVHDL类型,如bit, bit_vector ieeestd_logic_1164 定义std_logic, srd_logic_vector等ieeenumeric_std定义了一组基于 std_logic_1164中定义的类型的算术运算符,如“+”,“-”,SHL,SHR等。 ieeestd_logic_arith 定义有符号与无符号类型,及基于这些类型上的算术运算。ieeestd_logic_signed 定义了基于std_logic与std_logic_vecto

21、r类型上的有符号的算术运算。 ieeestd_logic_unsigned 定义了基于std_logic与std_logic_vector类型上的无符号的算术运算。 以下是IEEE两个标库”std”与”ieee”中所包含的程序包的简单解释。2022-5-28湖北众友科技EDA工作室27库分为设计库和资源库:设计库包含STD库和WORK库,已隐式说明,不用再Library STD/WORK说明,可以直接调用;STD已在上表介绍,WORK库是我们的工作库,是我们的设计项目目录,所有设计的资源都可调用。资源库:除了设计库外都是资源库,资源库必须显式说明才可使用。最常用的资源库为IEEE库;MuxPl

22、usII软件提供的74系列等是ALTERA公司开发的资源库,在MuxPlusII软件中可以直接调用,不用显示说明。2022-5-28湖北众友科技EDA工作室28第三章第三章 VHDLVHDL数据和表达式数据和表达式VHDL语言和其他高级语言一样,具有多种数据类型,对于多数类型的定义,它也与其它高级语言是一致的。但在VHDL语言中,用户可以定义数据类型,这一点在其它高级语言中是做不到的。返回目录2022-5-28湖北众友科技EDA工作室29 基本的标识符由字母、数字以及下划线字母、数字以及下划线组成,且具有如下特征: 第一个字符必须为字母; 最后一个字符不能是下划线; 不允许连续2个下划线。 最

23、长32个字符,不区分大小写; 不能和VHDL的保留字相同。 l 大小写是等效的返回目录2022-5-28湖北众友科技EDA工作室30l常数(Constant)固定值,不能在程序中被改变增强程序的可读性,便于修改程序在综合后,连接到电源和地可在Library、Entity、Architecture、Process中进行定义,其有效范围也相应限定Constant data_bus_width: integer := 8;2022-5-28湖北众友科技EDA工作室31l信号(Signals)代表连线,Port也是一种信号没有方向性,可给它赋值,也可当作输入在Entity中和Architecture中

24、定义设定的初始值在综合时没有用,只是在仿真时在开始设定一个起始值。在MaxPlusII中被忽略。用 = 进行赋值signal count:bit_vector(3 downto 0):=“0011”;2022-5-28湖北众友科技EDA工作室32l变量(Variable)临时数据,没有物理意义只能在Process和Function中定义,并只在其内部有效要使其全局有效,先转换为Signal。用 := 进行赋值 variable result : std_logic := 0;2022-5-28湖北众友科技EDA工作室33下例为一位BCD码的加法器,从中可看出信号、常量、变量的定义及使用方法。E

25、NTITY bcdadder ISPORT (op1, op2: IN integer range 0 to 9; result : OUT integer range 0 to 31); END bcdadder; ARCHITECTURE behavior OF bcdadder IS constant adjustnum: integer:=6; -定义一常量:整数型,值为6signal binadd: integer range 0 to 18; -定义一个信号,保存两数和BEGIN binadd9 then tmp:=adjustnum; -变量赋值,立即起作用。 else tmp:

26、=0; end if; result = binadd+tmp; end process; END behavior;信号与变量赋值是不同的。在进程中,信号赋值在进程结束时起作用,而变量赋值是立即起作用的。p1: process(A,B,C) begin D=A; -D为外部定义的信号 X=B+D; D=C; Y=B+D; end process p1;在进程结束更新时,D的值为C因此执行结果X=B+C; Y=B+C;p2: process(A,B,C) variable d:std_logic; begin D:=A; -立即赋值 X=B+D; D:=C; Y=B+D; end proces

27、s p2; 此执行结果X=B+A; Y=B+C;2022-5-28湖北众友科技EDA工作室36返回目录2022-5-28湖北众友科技EDA工作室37l列举数据对象可能存在的值,一般用于定义状态机的状态Type states is (idle, start, running, pause, stop)Signal current_state : states;lIEEE1076IEEE1076标准中预定义了两个枚举类型Type boolean is (False, True)Type bit is (0, 1) Signal a : bit;lIEEE1164IEEE1164标准中预定义了一个枚

28、举类型lType std_logic is(U, X,0, 1, Z, W, L, H, -);该类型能比较全面地包括数字电路中信号会出现的几种状态,因此一般情况把这种类型代替bitSignal a : std_logic;注意:注意:这里的大小写是敏感的,如我们用高阻态时必须 大写Z Z。2022-5-28湖北众友科技EDA工作室38整数、浮点数方便用于数值方面的运算:加减乘除整数范围:-231 231 1,经常用于计数器实数范围:-1.0E38+1.0E38,不被MaxPLusII支持Variable a : integer range 255 to +255;物理类型主要用于调试,如时间

29、类型。lArray Types(数组类型)多个相同类型成员组成的队列,一般用于定义数据总线、地址总线等。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;lRecord Types(记录类型)相同或不同类型的元素组成,类似C中的结构具有模型抽象能力,用于描述一个功能模块 Type i

30、ocell is record Enable :bit; DataBus :bit_vector(7 downto 0); end record; singal bus : iocell; bus.Enable = 1; bus.DataBus = “00110110”;2022-5-28湖北众友科技EDA工作室40lVHDL是强类型语言,必须用类型转换函数才能进行不同类型之间的转换type byte_size is integer range 0 to 255;signal a : byte_size;signal b : integer range 0 to 255;if a=b then

31、 l采用以下方式 subtype byte_size is integer range 0 to 255;属性指的是关于实体、结构体、类型、信号的一些特征。有些属性对综合(设计)非常有用,如:值类属性、信号类属性、范围类属性。以下简单列出这些属性的含义:值类属性值类属性 值类属性分为left, right, low, high, length。其中用符号“”隔开对象名及其属性。left表示类型最左边的值;right表示类型最右边的值;low表示类型中最小的值;high表示类型中最大的值;length表示限定型数组中元素的个数。 例: sdown:in std_logic_vector(8 do

32、wnto 0); sup:in std_logic_vector(0 to 8); 则这两个信号的各属性值如下:sdownleft=8; sdownright=0; sdownlow=0; sdownhigh=8; sdownlength=9;supleft=0; supright=8; suplow=0; suphigh=8; suplength=9;返回目录信号类属性信号类属性 这里仅介绍一个对综合及模拟均很有用的信号类属性:eventevent,它的值为布尔型,如果刚好有事件发生在该属性所附着的信号上(即信号有变化),则其取值为Ture,否则为False。利用此属性可决定时钟边沿是否有效

33、,即时钟是否发生。 例:若有如下定义: signal clk :in std_logic;则:时钟边沿表示时钟边沿表示clk=1 and clk event event 和 clkevent and clk=1表示时钟的上升沿。即时钟变化了,且其值为1,因此表示上升沿。 clk=0 and clkevent 和 clkevent and clk=0表示时钟的下降沿。即时钟变化了,且其值为1,因此表示下降沿。此外,还可利用预定义好的两个函数来表示时钟的边沿。rising_edge(clk) 表示时钟的上升沿falling_edge(clk) 表示时钟的下降沿范围类属性范围类属性 range属性,

34、其生成一个限制性数据对象的范围。 例如:signal data_bus : std_logic_vector(15 downto 0); data_busrange=15 downto 0;2022-5-28湖北众友科技EDA工作室43 VHDL为构造计算数值的表达式提供了许多预定义算符。预定义算符可分为四种类型:算术运算符,关系运算符,逻辑运算符与连接运算符。分别叙述如下:算术运算符算术运算符(Arithmetic operators) +加-减*乘/除*乘方mod求模rem求余abs求绝对值关系运算符关系运算符=等于/=不等于小于大于=大于或等于注:其中注:其中=操作符也用于表示信号的赋值

35、操作操作符也用于表示信号的赋值操作逻辑运算符逻辑运算符 and逻辑与 or逻辑或 nand与非 nor或非 xor异或 xnor同或 not逻辑非 连接运算符连接运算符“&”连接符,将两个对象或矢量连接成维数更大的矢量 2022-5-28湖北众友科技EDA工作室45第四章第四章 VHDLVHDL主要描述语句主要描述语句并行语句(Concurrent):并行语句总是处于(PROCESS)的外部。所有并行语句都是并行执行的,即与它们出现的先后次序无关。 如when.else语句顺序语句(Sequential):顺序语句总是处于进程(PROCESS)的内部,并且从仿真的角度来看是顺序执行的。如if-

36、then-else语句。下面先看一下进程: VHDL常用语句分并行(Concurrent)语句和顺序(Sequential)语句:返回目录 进程(PROCESS)用于描述顺序顺序(sequential)事件并且包含在结构中。一个结构体可以包含多个进程语句。下图为进程语句的构成:进程(进程(Process)声明区(声明区(Declarations)内部变量声明;声明用于该进程的常数,元件,子程序。信号赋值(=)过程调用变量赋值(:=)if语句case语句loop语句(循环)next语句(跳过剩余循环)exit语句(退出循环)wait语句(等待时钟信号)null语句(空语句,值保持不变)以下为进程

37、语句的语法描述: : process -此处声明局部变量,数据类型及其他局部声明(用于进程中) begin -进程开始-进程中为顺序语句,如: -signal and variable assignments 信号与变量的赋值 -if and case statements -if-then-else语句 case-when语句 -while and for loops -function and procedure calls 函数,过程调用 end process; -进程结束其中,进程标号是可选项,可有可无。敏感表(Sensitivity list)包括进程的一些信号,当敏感表中的某个信

38、号变化时进程才被激活。进程(敏感表进程(敏感表)If语句语句lPROCESS (clk,nreset)l BEGINl IF(nreset=0) THEN l qcnt=0000;l ELSIF (clkEVENT AND clk = 1) THENl if(ci=1) thenl qcnt=qcnt+1;l end if;lEND IF; lEND PROCESS;在敏感表中,信号nreset,clk被列为敏感信号,当此两个信号变化时,此进程才被执行。注意信号ci并没有被列入敏感表,这是因为,ci起作用必须发生在时钟的上升沿,这时clk必定发生变化,引起进程的执行。2022-5-28湖北众友

39、科技EDA工作室49同样,若为同步清零,敏感表中也可无nreset信号,此时进程如下: PROCESS (clk)BEGIN IF (clkEVENT AND clk = 1) THEN IF(nreset=0) THEN qcnt=0000; elsif(ci=1) then qcnt=qcnt+1; end if; END IF;END PROCESS;进程(敏感表)进程(敏感表)返回目录2022-5-28湖北众友科技EDA工作室50一个设计既可用并行语句描述也可用顺序语句描述。进程与进程之间是并行处理的,以下以四选一的数据选择器为例说明各常用语句。并行并行(Concurrent)(Con

40、current)语句语句: :并行语句之间值的更新是同时进行的,与语句所在的顺序无关。并行语句包括:v 布尔方程v 条件赋值(如whenelse语句)v 例化语句四选一的数据选择器的库声明、程序包声明及实体定义如下:library ieee; use ieee.std_logic_1164.all; entity mux4 is port ( s:in std_logic_vector(1 downto 0); a0,a1,a2,a3:in std_logic; y:out std_logic); end mux4;以布尔方程实现的结构体如下:architecture archmux of m

41、ux4 is begin y=(a0 and not(s(0) or (a1 and s(0) and not(s(1) or (a2 and not(s(0) or (a3 and s(0) and s(1); end archmux;-采用WITH-SELECT-WHEN实现的结构体architecture archmux of mux4 is begin with s select y=a0 when 00, a1 when 01, a2 when 10, a3 when others; end archmux;虽然这些取值组合在实际电路中不出现,但也应列出。为避免此麻烦可以用“othe

42、rs”others”代替其他各种组合。并行语句中条件赋值语句为:WITH-SELECT-WHEN语句及WHEN-ELSE语句。分别如下: -采用WHEN-ELSE实现的结构体 architecture archmux of mux4 is begin y=a0 when s=00 else a1 when s=01 else a2 when s=10 else a3 ;end archmux;注意:WITH-SELECT-WHEN语句必须指明所有互斥条件,在这里即“s”的所有取值组合,因为“s”的类型为“std_logic_vector”,取值组合除了00,01,10,11外还有0 x,0z,

43、x1等。2022-5-28湖北众友科技EDA工作室53例化即元件调用,可参见第五章 “元件及元件例化” 及第六章 “配置”内容。另外还有一些BLOCK语句,WAIT语句都是并行语句,有兴趣的同学找相关资料学习一下。第五章第五章 “ “元件及元件例化元件及元件例化” ” 第六章第六章 “ “配置配置”内容。内容。2022-5-28湖北众友科技EDA工作室54一个设计既可用并行语句描述也可用顺序语句描述。以下以四选一的数据选择器为例说明各常用语句。并行并行(Concurrent)(Concurrent)语句语句: :并行语句之间值的更新是同时进行的,与语句所在的顺序无关。并行语句包括:v 布尔方程

44、v 条件赋值(如whenelse语句)v 例化语句最常用的顺序语句是IF-THEN-ELSE语句和CASE-WHEN语句。顺序语句总是处于进程(PROCESS)的内部,并且从仿真的角度来看是顺序执行的。IF-THEN-ELSEIF-THEN-ELSE语句只在进程中使用,它根据一个或一组条件的布尔运算而选择某一特定的执行通道。architecture archmux of mux4 is begin process(s,a0,a1,a2,a3) begin if s=00 then y=a0; elsif s=01 then y=a1; elsif s=10 then y=a2; else y

45、y y y y=a3; end case; end process;end archmux; CAE-WHEN语句常用于状态机的描述中,另外还有循环FOR,LOOP语句等参考相关VHDL教材。2022-5-28湖北众友科技EDA工作室57 语句With-select-whenWhen-elseIf-elseCase-when选择条件 一个信号的不同值,互斥多个信号多种组合,不必互斥多个信号多种组合,不必互斥一个信号的不同值,互斥语句属性 并行并行顺序顺序用途编码、译码、多路选择器优先编码器,地址译码器优先编码器,地址译码器编码、译码、多路选择器状态机返回目录2022-5-28湖北众友科技EDA

46、工作室58元件声明是对VHDL模块(即底层设计,也是完整的VHDL设计)的说明,使之可在其他模块中被调用,元件声明可放在程序包中,也可在某个设计的结构体中声明。 元件例化指元件的调用。元件声明及元件例化的语法分别如下:元件声明:元件声明: componentcomponent portport (); end componentend component;元件例化:元件例化: : : port mapport map ();返回目录2022-5-28湖北众友科技EDA工作室59例如,在一个设计中调用一个模为10的计数器cntm10和一个七段译码器decode47构成如下电路,则该调用过程即元件

47、例化过程的VHDL描述如下:library IEEE;use IEEE.std_logic_1164.all;entity cntvh10 IS port ( Rd,ci,clk: in std_logic; co: out std_logic; qout: out std_logic_vector(6 downto 0);end cntvh10;ARCHITECTURE arch OF cntvh10 ISComponent decode47 port(ci: INstd_logic;nreset: IN std_logic;clk: IN std_logic; co: out std_lo

48、gic;qcnt: buffer std_logic_vector(3 downto 0); end Component;Component cntm10 port(ci: IN std_logic;nreset: IN std_logic;clk: INstd_logic; co: out std_logic;qcnt: buffer std_logic_vector(3 downto 0); end Component;元件声明元件声明,没有没有IS元件声明元件声明,没有没有ISsignal qa: std_logic_vector(3 downto 0);BEGIN u1: cntm10

49、 port map(ci,Rd,clk,co,qa); u2: decode47 port map(decodeout=qout, adr=qa);END arch; 元件例化时的端口列表可按位置关联方法,如u1,这种方法要求的实参(该设计中连接到端口的实际信号,如ci,Rd等)所映射的形参(元件的对外接口信号)的位置同元件声明中一样;元件例化时的端口列表也可按名称关联方法映射实参与形参,如u2。格式为(形参1=实参1,形参2=实参2,.)。这种方法与位置无关。元件例化元件例化其描述的电路为下图所示: 参数化元件可增加元件例化的灵活性。所谓参数化元件是指元 件的规模(或特性)可以通过引用参数的

50、形式指定的一类元件。例如,下面定义了一个位数可调的计数器:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;ENTITY cntnbits IS generic(cntwidth:integer:=4); -定义了一个可调参数PORT(ci: INstd_logic;nreset: IN std_logic;clk: INstd_logic; co : out std_logic;qcnt: buffer std_logic_vector(cntwidth-1 downto 0) );END cnt

51、nbits;PROCESS (clk,nreset) BEGIN IF(nreset=0) THEN qcnt0); ELSIF (clkEVENT AND clk = 1) THEN if(ci=1) then qcnt1); BEGIN co1)(others=1)赋值。(others=1)(others=1)表示一个集合,集合中各元素用,格开。表示各元素都为1。others必须出现在集合的最后。例: signal: sa:std_logic_vector(7 downto 0); sa1)其结果是给信号sa赋值“1011 1111 ”。我们可看到在实体处增加了一行: generic(ge

52、neric(cntwidth:integer:integer:=:=4););该行定义了一个整数cntwidth并赋初值4,用它代替原来的固定的计数器长度,若想设计的计数器位数为8位,仅需将cntwidth的初值赋为8: generic(generic(cntwidth:integer:integer:=:=8););若以此计数器为元件,则元件声明为:若以此计数器为元件,则元件声明为: ComponentComponent cntnbits ISIS generic( generic(cntwidth:integer:integer:=:=4); ); PORTPORT(ci,nreset,c

53、lk: IN std_logic; co: out std_logic; qcnt: buffer std_logic_vector(cntwidth-1 downto 0); END END ComponentComponent ;元件例化时按如下格式: : generic mapgeneric map () port mapport map ();-元件例化例如,例化为6位计数器: u1: cntnbits generic map(6) port mapu1: cntnbits generic map(6) port map(ci,Rd,clk,co,qa); ; 2022-5-28湖北众

54、友科技EDA工作室66 前面说过,一个实体可用多个结构体描述,在具体综合时选择哪一个结构体来综合,则由配置来确定。即配置语句来安装连接具体设计(元件)到一个实体-结构体对。配置被看作是设计的零件清单, 它描述对每个实体用哪一种行为,所以它非常象一个描述设计每部分用哪一种零件的清单。返回目录2022-5-28湖北众友科技EDA工作室67配置语句举例:这是一个两位相等比较器的例子,它用四种不同描述来实现,即有四个结构体。 ENTITY equ2 IS PORT (a,b: INstd_logic_vector(1 downto 0); equ : OUTstd_logic ); END equ2;

55、结构体一:用元件例化来实现,即网表形式(结构化)结构体一:用元件例化来实现,即网表形式(结构化):ARCHITECTURE netlist OF equ2 IS COMPONENT nor2 PORT (a, b: IN std_logic; C: OUT std_logic); END COMPONENT; COMPONENT xor2 PORT (a, b: IN std_logic; C: OUT std_logic); END COMPONENT; signal x: std_logic_vector(1 downto 0);BEGIN U1: xor2 PORT MAP(a(0),

56、b(0), x(0); U2: xor2 PORT MAP(a(1), b(1), x(1); U3: nor2 PORT MAP(x(0), x(1), equ);END netlist; 结构体二:用布尔方程来实现(数据流):结构体二:用布尔方程来实现(数据流):ARCHITECTURE equation of equ2 ISBEGIN equ=(a(0) XOR b(0) NOR (a(1) XOR b(1);END equation; 结构体三:用行为描述来实现,采用并行语句:结构体三:用行为描述来实现,采用并行语句:ARCHITECTURE con_behave of equ2 IS

57、BEGIN equ=1 when a=b else 0;END con_behave;结构体四:用行为描述来实现,采用顺序语句:ARCHITECTURE seq_behave of equ2 ISBEGINprocess(a,b) begin if a=b then equ=1; else equ=0; end if; end process;END seq_behave; 在上述的实例中,实体equ拥有四个结构体:netlist、equation、con_behave、seq_behave,若用其例化一个相等比较器aequb,那么实体究竟对应于哪个结构体呢?配置语句(CONFIGURATIO

58、N)很灵活地解决了这个问题:如选用结构体netlist,则用CONFIGURATION aequb OF equ2 IS FOR netlist END FOR;END CONFIGURATION;如选用结构体con_behave, 则用CONFIGURATION aequb OF equ2 IS FOR con_behave END FOR;END CONFIGURATION;返回目录2022-5-28湖北众友科技EDA工作室72 子程序由过程(PROCEDURE)和函数(FUNCTION)组成。函数只能用以计算数值,而不能用以改变与函数形参相关的对象的值。因此,函数的参量只能是方式为IN的

59、信号与常量,而过程的参量可以为IN, OUT, INOUT方式。过程能返回多个变量,函数只能有一个返回值。函数和过程常见于面向逻辑综合的设计中,主要进行高层次的数值运算或类型转换、运算符重载,也可用来元件例化。返回目录2022-5-28湖北众友科技EDA工作室73函数:函数:FUNCTION (parameter types) RETURN IS begin end; 过程:过程: procedure () is begin end; 2022-5-28湖北众友科技EDA工作室74函数举例:此函数返回两数中的较小数FUNCTION Min(x, y : INTEGER) RETURN INTE

60、GER ISBEGIN IF xy THEN RETURN x; ELSE RETURN y; END IF;END Min;2022-5-28湖北众友科技EDA工作室75过程举例:此过程将向量转换成整数类型USE ieee. std_logic_1164. ALLPROCEDURE vetor_to_int (z: IN std_logic_vector; xflag:OUT BOOLEAN; q:INOUT INTEGER) IS BEGIN q :=0; xflag :=false; FOR I IN z RANGE LOOP q :=q*2; IF z (i) /=0 THEN q :

温馨提示

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

最新文档

评论

0/150

提交评论