VHDL语言入门教程

上传人:工**** 文档编号:567997938 上传时间:2024-07-23 格式:PPT 页数:112 大小:2.09MB
返回 下载 相关 举报
VHDL语言入门教程_第1页
第1页 / 共112页
VHDL语言入门教程_第2页
第2页 / 共112页
VHDL语言入门教程_第3页
第3页 / 共112页
VHDL语言入门教程_第4页
第4页 / 共112页
VHDL语言入门教程_第5页
第5页 / 共112页
点击查看更多>>
资源描述

《VHDL语言入门教程》由会员分享,可在线阅读,更多相关《VHDL语言入门教程(112页珍藏版)》请在金锄头文库上搜索。

1、3 VHDL语言语言VHDL: VHSIC Hardware Description Language.3.1 VHDL语言基础语言基础3.2 VHDL基本结构基本结构3.3 VHDL语句语句3.4 状态机在状态机在VHDL中的实现中的实现3.5 常用电路常用电路VHDL程序程序3.6 VHDL仿真仿真3.7 VHDL综合综合HDL-Hardware Description Language 一种用于描述数字电路的功能或行为的语言。目的是提为电路设计效率,缩一种用于描述数字电路的功能或行为的语言。目的是提为电路设计效率,缩短设计周期,减小设计成本,可在芯片制造前进行有效的仿真和错误检测。短设计

2、周期,减小设计成本,可在芯片制造前进行有效的仿真和错误检测。 优点:优点: HDL设计的电路能获得非常抽象级的描述。如基于设计的电路能获得非常抽象级的描述。如基于RTL(Register Transfer Level)描述的描述的IC,可用于不同的工艺。,可用于不同的工艺。 HDL设计的电路,在设计的前期,就可以完成电路的功能级的验证。设计的电路,在设计的前期,就可以完成电路的功能级的验证。 HDL设计的电路类似于计算机编程。设计的电路类似于计算机编程。 常用的常用的HDL语言:语言:VHDL 、Verilog HDL VHDL是美国国防部在是美国国防部在20世纪世纪80年代初为实现其高速集成

3、电路年代初为实现其高速集成电路硬件硬件VHSIC计划提出的描述语言计划提出的描述语言; IEEE从从1986年开始致力于年开始致力于VHDL标准化工作,融合了其它标准化工作,融合了其它ASIC芯片制造商开发的硬件描述语言的优点,于芯片制造商开发的硬件描述语言的优点,于93年形成了标准年形成了标准版本(版本()。)。 1995年,我国国家技术监督局推荐年,我国国家技术监督局推荐VHDL做为电子设计自动化做为电子设计自动化硬件描述语言的国家标准。硬件描述语言的国家标准。 VHDL 概述:概述:VHDL VHSIC Hardwarter Description Language Very High

4、speed integrated circuitVHSIC 覆盖面广,系统硬件描述能力强,是一个多层次的硬件描述语言覆盖面广,系统硬件描述能力强,是一个多层次的硬件描述语言; VHDL语言具有良好的可读性,既可以被计算机接受,也容易被人们语言具有良好的可读性,既可以被计算机接受,也容易被人们所理解所理解; VHDL语言可以与工艺无关编程语言可以与工艺无关编程; VHDL语言已做为一种语言已做为一种IEEE的工业标准,便于使用、交流和推广。的工业标准,便于使用、交流和推广。 VHDL语言的不足之处语言的不足之处: VHDL优点优点: 设计的最终实现取决于针对目标器件的编程器,工具的不同会导致综设

5、计的最终实现取决于针对目标器件的编程器,工具的不同会导致综合质量不一样。合质量不一样。3.1.1 标识符标识符(Identifiers)要求:要求:l 首字符必须是字母首字符必须是字母l 末字符不能为下划线末字符不能为下划线l 不允许出现两个连续的下划线不允许出现两个连续的下划线l 不区分大小写不区分大小写l VHDL定义的保留字(关键字),不能用作标识符定义的保留字(关键字),不能用作标识符l 标识符字符最长可以是标识符字符最长可以是32个字符。个字符。注释由两个连续的虚线()引导。注释由两个连续的虚线()引导。3.1 VHDL语言基础语言基础 标识符用来定义常数、变量、信号、端口、子程序或

6、参数的名字,标识符用来定义常数、变量、信号、端口、子程序或参数的名字,由字母由字母(AZ,az)、数字、数字(09)和下划线和下划线(_)字符组成。字符组成。例如:例如:ABSABS, ACCESS ACCESS,AFTERAFTER,ALLALL,ANDAND,ARCHITECTUREARCHITECTURE,ARRAYARRAY,ATTRIBUTEATTRIBUTE,BEGINBEGIN,BODYBODY,BUFFERBUFFER,BUSBUS,CASE CASE ,COMPONENTCOMPONENT,CONSTANTCONSTANT,DISCONNECTDISCONNECT,DOWNT

7、ODOWNTO,ELSEELSE,ELSIFELSIF,ENDEND,ENTITYENTITY,EXITEXIT,FILEFILE,FORFOR,FUNCTIONFUNCTION,GENERICGENERIC,GROUPGROUP,IFIF,INPUREINPURE,ININ,INOUTINOUT,ISIS,LABELLABEL,LIBRARYLIBRARY,LINKAGELINKAGE,LOOPLOOP,MAPMAP,MODMOD,NANDNAND,NEWNEW,NEXTNEXT,NOR NOR ,NOTNOT,NULLNULL,OFOF,ONON,OPEN OPEN ,OR OR ,OTH

8、ERSOTHERS,OUTOUT,PACKAGEPACKAGE,POUTPOUT,PROCEDURE PROCEDURE ,PROCESSPROCESS,PUREPURE,RANGE RANGE ,RECODERECODE,REMREM,REPORTREPORT,RETURNRETURN,ROLROL,RORROR,SELECTSELECT,SHAREDSHARED,SIGNALSIGNAL,SLASLA,SLLSLL,SRASRA,SUBTYPESUBTYPE,THENTHEN,TRANSPORTTRANSPORT,TOTO,TYPE TYPE ,UNAFFECTEDUNAFFECTED,U

9、NITSUNITS,UNTILUNTIL,USEUSE,VARIABLEVARIABLE,WAITWAIT,WHENWHEN,WHILEWHILE,WITHWITH,XOR XOR ,XNORXNOR 关键字(保留字):关键字(保留字): 关键字(关键字(keyword)是)是VHDL中具有特别含义的单词,只中具有特别含义的单词,只能做为固定的用途,用户不能用其做为标识符。能做为固定的用途,用户不能用其做为标识符。3.1.2 数据对象数据对象(Date Objects) 常量常量ConstantConstant bus_width: integer := 8; -定义总线宽度为常数定义总线宽度

10、为常数8 数据对象包括常量、变量、信号和文件四种类型。数据对象包括常量、变量、信号和文件四种类型。 常量是对某一常量名赋予一个固定的值,而且只能赋值一次。通常赋值常量是对某一常量名赋予一个固定的值,而且只能赋值一次。通常赋值在程序开始前进行,该值的数据类型则在说明语句中指明。在程序开始前进行,该值的数据类型则在说明语句中指明。Constant 常数名:数据类型:表达式常数名:数据类型:表达式Constant Vcc:real:=5.0;常量所赋的值应和定义的数据类型一致;常量所赋的值应和定义的数据类型一致;常量在程序包、实体、构造体或进程的说明性区域内必须加以说明。定义在程序包常量在程序包、实

11、体、构造体或进程的说明性区域内必须加以说明。定义在程序包内的常量可供所含的任何实体、构造体所引用,定义在实体说明内的常量只能在该内的常量可供所含的任何实体、构造体所引用,定义在实体说明内的常量只能在该实体内可见,定义在进程说明性区域中的常量只能在该进程内可见。实体内可见,定义在进程说明性区域中的常量只能在该进程内可见。Variable 变量名:数据类型变量名:数据类型 :初始值初始值;Variable count: integer 0 to 255:=20 ; - 定义定义count整数变量,变化整数变量,变化 范围范围0255,初始值为,初始值为20。 变量变量Variable 变量只能在进

12、程语句、函数语句和过程语句结构中使用。变量变量只能在进程语句、函数语句和过程语句结构中使用。变量的赋值是直接的,非预设的,分配给变量的值立即成为当前值,的赋值是直接的,非预设的,分配给变量的值立即成为当前值,变量不能表达变量不能表达“连线连线”或存储元件,不能设置传输延迟量。或存储元件,不能设置传输延迟量。变量赋值语句:变量赋值语句: 目标变量名目标变量名 := 表达式表达式;变量定义语句:变量定义语句:x:=10.0;Y:=1.5+x; - 运算表达式赋值,注意表达式必须与目标变量的数据类型相同运算表达式赋值,注意表达式必须与目标变量的数据类型相同A(3 to 6):=(“1101”); -

13、位矢量赋值位矢量赋值Signal 信号名信号名: 数据类型数据类型 :初始值初始值Signal clock:bit :=; -定义时钟信号类型,初始值为定义时钟信号类型,初始值为0 信号信号Signal 信号表示逻辑门的输入或输出,类似于连接线,也可以表达存信号表示逻辑门的输入或输出,类似于连接线,也可以表达存储元件的状态。信号通常在构造体、程序包和实体中说明。储元件的状态。信号通常在构造体、程序包和实体中说明。信号定义语句:信号定义语句:Signal count:BIT_VECTOR(3 DOWNTO 0); -定义定义count为为4位位矢量位位矢量信号赋值语句:信号赋值语句: 目标信号名

14、目标信号名 = 表达式表达式; x=9;Z=x after 5 ns; - 在在5ns后将后将x的值赋予的值赋予z3.1.2 数据类型数据类型l 布尔:布尔:(Boolean)l 位位: ( Bit ) TYPE BIT IS (0,1); -取值为取值为0和和1,用于逻辑运算,用于逻辑运算 l 位矢量位矢量: ( Bit_Vector ) TYPE BIT_VECTOR IS ARRAY (Natural range) OF BIT; - 基于基于Bit类型的数类型的数 组,用于逻辑运算组,用于逻辑运算 SIGNAL a:Bit_Vector(0 TO 7); SIGNAL a:Bit_Ve

15、ctor ( 7 DOWNTO 0) VHDL的预定义数据类型的预定义数据类型 在在VHDL标准程序包标准程序包STANDARD中定义好,实际使用过程中,已中定义好,实际使用过程中,已自动包含进自动包含进VHDL源文件中,不需要通过源文件中,不需要通过USE语句显式调用。语句显式调用。 TYPE BOOLEAN IS (FALSE, TRUE); - 取值为取值为FALSE和和TRUE,不是数值,不,不是数值,不 能运算,一般用于关系运算符能运算,一般用于关系运算符l 整数:整数:(Integer) 取值范围取值范围 -(231-1) (231-1),可用,可用32位有符号的二进制数表示位有符

16、号的二进制数表示 variable a:integer range -63 to 63 在实际应用中,在实际应用中,VHDL仿真器将仿真器将Integer做为有符号数处理,而做为有符号数处理,而VHDL综合器将综合器将Integer做为无符号数处理;做为无符号数处理; 要求用要求用RANGE子句为所定义的数限定范围,以便根据范围来决定表示此子句为所定义的数限定范围,以便根据范围来决定表示此信号或变量的二进制数的位数。信号或变量的二进制数的位数。 l 字符:字符:(Character) TYPE CHARACTER IS (NUL, SOH,STX, , , !,); -通常用通常用引起引起 来

17、,区分大小写;来,区分大小写;l 字符串:字符串:(String)VARIABLE string_var: STRING (1 TO 7);string_var:=“A B C D” ; - 通常用通常用“”引起来,区分大小写;引起来,区分大小写;l 实数:实数:(Real) 取值范围取值范围 -1.0E38 ,仅用于仿真不可综合,仅用于仿真不可综合 1.0 -十进制浮点数十进制浮点数 8e+4 -八进制浮点数八进制浮点数 43.6E-4 -十进制浮点数十进制浮点数l 时间:时间:(Time) 物理量数据,完整的包括整数和单位两个部分物理量数据,完整的包括整数和单位两个部分,用至少一个空格隔,

18、用至少一个空格隔开,仅用于仿真不可综合;开,仅用于仿真不可综合; fs,ps,ns,us,ms,sec,min,hrl 错误等级错误等级(Severity Level) : 表示系统状态,表示系统状态,仅用于仿真不可综合;仅用于仿真不可综合;TYPE severity_level IS (NOTE、WARNING、ERROR、FAILURE); IEEE预定义标准逻辑位与矢量预定义标准逻辑位与矢量l 标准逻辑位标准逻辑位(Std_Logic)l 标准逻辑位矢量标准逻辑位矢量( Std_Logic_vector)基于基于Std_Logic类型的数组;类型的数组; 使用使用Std_Logic和和

19、Std_Logic_Vector要调用要调用IEEE库中的库中的Std_Logic_1164 程序包;就综合而言,能够在数字器件中实现的是程序包;就综合而言,能够在数字器件中实现的是“、0、1、Z”四种状态。四种状态。 在条件语句中,必须要全面考虑在条件语句中,必须要全面考虑Std_Logic的所有可能取值情况,否则综的所有可能取值情况,否则综合器可能会插入不希望的锁存器。合器可能会插入不希望的锁存器。U:Uninitialized; X:Forcing Unkown; 0: Forcing 0 1: Forcing 1 Z:High Impedance W:Weak UnknownL: We

20、ak 0 H: Weak 1 :Dont care枚举:枚举:type states is (idle,decision,read,write); type boolean is (false,true); type bit is (0,1);数组:数组:type value_type is array (127 downto 0) of integer; type matrix_type is array (0 to 15, 0 to 31) of std_logic; 用户自定义用户自定义l TYPE 数据类型名数据类型名 IS 数据类型定义数据类型定义 OF 基本数据类型基本数据类型 或

21、或 TYPE 数据类型名数据类型名 IS 数据类型定义数据类型定义l SUBTYPE 子类型名子类型名 IS 基本数据类型定义基本数据类型定义 RANGE 约束范围约束范围subtype digit is integer range 0 to 9;3.1.3 数据类型转换数据类型转换VHDL为强定义类型语言,不同类型的数据不能进行运算和直接赋值。为强定义类型语言,不同类型的数据不能进行运算和直接赋值。l 类型标记法类型标记法Variable A: integer; Variable B: real;A= integer (B); B=real (A);l 函数法函数法Conv_interger

22、 (A);-由由std_logic转换为转换为integer型,在型,在std_logic_unsigned包。包。l 常数转换法常数转换法 / 常量转换法常量转换法Type conv_table is array(std_logic) of bit;Constant table: conv_table:=(0|L=0, 1|H=1, others=0);Signal a: bit; signal b: std_logic;A=table(b); - 将将std_logic型转换为型转换为bit型型具有转换表性质的常数具有转换表性质的常数 在在“STD_LOGIC_1164”、“STD_LOG

23、IC_ARITH”和和 “STD_LOGIC_UNSIGNED”的程序包中提供的数据类型变换函数。的程序包中提供的数据类型变换函数。 属性属性属性提供的是关于信号、类型等的指定特性。属性提供的是关于信号、类型等的指定特性。 event:若属性对象有事件发生,则生成布尔值若属性对象有事件发生,则生成布尔值“true”,常用来检查时,常用来检查时钟边沿是否有效。钟边沿是否有效。上升沿:上升沿:Clock EVENT AND Clock=1 range:生成一个限制性数组对象的范围生成一个限制性数组对象的范围left:生成数据类型或数据子类型的左边界值;生成数据类型或数据子类型的左边界值;right

24、 , high, low, lengthrange: “0 to n” ; reverse_range:“n downto 0” 运算符运算符l 算术运算符:算术运算符:, , *, / , MOD, REM ,SLL ,SRL ,SLA, SRA ,ROL ,ROR ,*,ABSl 关系运算符:关系运算符:, /, , =l 逻辑运算符:逻辑运算符:AND,OR,NAND,NOR,XNOR,NOT,XORl 赋值运算符:赋值运算符:l 其他运算符:其他运算符:, ,& 并置操作符并置操作符 SIGNAL a : STD_LOGIC_VECTOR (3 DOWNTO 0) ;SIGNAL d

25、: STD_LOGIC_VECTOR (1 DOWNTO 0) ; .a = 1 0 d(1) 1 ; - 元素与元素并置,并置后的数组长度为元素与元素并置,并置后的数组长度为4 .IF a d = 101011 THEN . - 在在IF条件句中可以使用并置符条件句中可以使用并置符 运算符优先级别运算符优先级别逻辑、算术运算符(逻辑、算术运算符( NOT, *,ABS) 乘法运算符(乘法运算符(/ , MOD, REM, * ) 正负运算符:,正负运算符:, , 加减、并置运算符:,加减、并置运算符:, , & 关系运算符:,关系运算符:, /, , =逻辑运算符:逻辑运算符:AND,OR,

26、NAND,NOR,XNOR,NOT,XOR 移位运算符的左边为一维数组,其类型必须是移位运算符的左边为一维数组,其类型必须是BIT或或BOOLEAN,右边必须是整数移位次数为整数的绝对值。右边必须是整数移位次数为整数的绝对值。移位运算符操作示意图移位运算符操作示意图“1100”SLL1 =“1000” “1100”SRL1 =“0110” “1100”SLA1 =“1000” “1100”SRA1 =“1110” “1100”ROL1 =“1001” “1100”ROR1 =“0110” SLL:将位向量左移,右边移空位补零;:将位向量左移,右边移空位补零;SRL:将位向量右移,左边移空位补零

27、;:将位向量右移,左边移空位补零;SLA:将位向量左移,右边第一位的数值保持原值不变;:将位向量左移,右边第一位的数值保持原值不变;SRA:将位向量右移,左边第一位的数值保持原值不变;:将位向量右移,左边第一位的数值保持原值不变;ROL和和ROR:自循环左右移位。:自循环左右移位。取余运算(取余运算(a REM b)的符号与)的符号与a相同,其绝对值小于相同,其绝对值小于b的绝对值。的绝对值。 例如:(例如:(-5)REM 2=(-1) 5 REM 2=(1) 取模运算(取模运算(a MOD b)的符号与)的符号与b相同,其绝对值小于相同,其绝对值小于b的绝对值。的绝对值。 例如:(例如:(-

28、5)MOD 2=1 5 MOD (- 2)=(-1)3.2 VHDL基本结构基本结构 实体(实体(Entity):描述所设计的系统的外部接口信号,定义电路设计中所):描述所设计的系统的外部接口信号,定义电路设计中所有的输入和输出端口;有的输入和输出端口; 结构体结构体 (Architecture):描述系统内部的结构和行为;:描述系统内部的结构和行为; 包集合包集合 (Package):存放各设计模块能共享的数据类型、常数和子程序等;:存放各设计模块能共享的数据类型、常数和子程序等; 配置配置 (Configuration):指定实体所对应的结构体;:指定实体所对应的结构体; 库库 (Libr

29、ary):存放已经编译的实体、结构体、包集合和配置。:存放已经编译的实体、结构体、包集合和配置。LIBRARY IEEE; - 库、程序包的说明调用库、程序包的说明调用 USE IEEE.Std_Logic_1164.ALL;ENTITY FreDevider IS - 实体声明实体声明PORT(Clock: IN Std_logic; Clkout: OUT Std_logic);END;ARCHITECTURE Behavior OF FreDevider IS - 结构体定义结构体定义SIGNAL Clk:Std_Logic;BEGIN PROCESS(Clock)BEGIN IF ri

30、sing_edge(Clock) THEN Clk=NOT Clk; END IF;END PROCESS;Clkout=Clk;END;VHDL的基本设计单元结构:程序包说明、实体说明和结构体说明三部分。的基本设计单元结构:程序包说明、实体说明和结构体说明三部分。3.2.1 实体(实体(Entity)ENTITY 实体名实体名 IS GENERIC(常数名:数据类型:设定值)(常数名:数据类型:设定值)PORT( 端口名端口名1:端口方向:端口方向 端口类型;端口类型; 端口名端口名2:端口方向:端口方向 端口类型;端口类型; . . 端口名端口名n:端口方向:端口方向 端口类型端口类型);

31、END 实体名实体名; 实体描述了设计单元的输入输出接口信号或引脚,是设计实体实体描述了设计单元的输入输出接口信号或引脚,是设计实体经封装后对外的一个通信界面。经封装后对外的一个通信界面。ENTITY FreDevider ISPORT(Clock: IN Std_logic; Clokout: OUT Std_logic);END;实体名实体名最后一条端口声明语句无分号最后一条端口声明语句无分号端口方向端口方向端口类型端口类型端口名端口名 实体名实体名由设计者自由命名,用来表示被设计电路芯片的名称,由设计者自由命名,用来表示被设计电路芯片的名称,但是必须与但是必须与VHDL程序的文件名称相同

32、。程序的文件名称相同。要与文件名一致;要与文件名一致;例如:例如: GENERIC(wide:integer:=32);); -说明宽度为说明宽度为32 GENERIC(tmp:integer:=1ns);); -说明延时说明延时1 ns 类属说明类属说明 类属为设计实体与外界通信的静态信息提供通道,用来规类属为设计实体与外界通信的静态信息提供通道,用来规定端口的大小、实体中子元件的数目和实体的定时特性等。定端口的大小、实体中子元件的数目和实体的定时特性等。格式:格式: GENERIC(常数名:数据类型:设定值;(常数名:数据类型:设定值; 常数名:数据类型:设定值);常数名:数据类型:设定值

33、); 端口方向:端口方向:IN, OUT,INOUT,BUFFERINOUTINOUTBUFFER“OUT”和和“BUFFER”都可定义输出端口都可定义输出端口;若实体内部需要反馈输出若实体内部需要反馈输出信号,则输出端口必须被信号,则输出端口必须被设置为设置为“BUFFER”,而不,而不能为能为“OUT”。 同方向、同类型的端口可放在同一个说明语句中。同方向、同类型的端口可放在同一个说明语句中。ENTITY Full_adder IS PORT( a, b, c: IN BIT; sum, carry: OUT BIT ); END Full_adder;3.2.2 结构体结构体 (Arch

34、itecture)ARCHITECTURE 结构体名结构体名 OF 实体名实体名 IS 声明语句声明语句BEGIN 功能描述语句功能描述语句END 结构体名结构体名;用于声明该结构体将用到的信号、数据类型、常数、子程用于声明该结构体将用到的信号、数据类型、常数、子程序和元件等。声明的内容是局部的。序和元件等。声明的内容是局部的。具体描述结构体的功能和行为。具体描述结构体的功能和行为。 结构体定义了设计单元具体的功能,描述了该基本设计单元的结构体定义了设计单元具体的功能,描述了该基本设计单元的行为、元件和内部的连接关系。行为、元件和内部的连接关系。 一个实体可对应多个结构体,每个结构体代表该实体

35、功能的不同实现方案或不同实一个实体可对应多个结构体,每个结构体代表该实体功能的不同实现方案或不同实现方式。同一时刻只有一个结构体起作用,通过现方式。同一时刻只有一个结构体起作用,通过CONFIGURATION决定用哪个结构体决定用哪个结构体进行仿真或综合。进行仿真或综合。 在结构体描述中,具体给出了输入、输出信号之间的逻辑关系。在结构体描述中,具体给出了输入、输出信号之间的逻辑关系。ARCHITECTURE Behavior OF FreDevider IS - 结构体定义结构体定义SIGNAL Clk:Std_Logic; -信号声明信号声明BEGIN PROCESS(Clock)BEGIN

36、 IF rising_edge(Clock) THEN Clk=NOT Clk; END IF;END PROCESS;Clkout=Clk;END;功能描述语句功能描述语句进程进程顺序顺序语句语句3.2.3 库、程序包的调用库、程序包的调用LIBRARY IEEE; ;LIBRARY 库名库名;USE 库名库名.程序包名程序包名.项目名;项目名;调用此程序包中所有的资源调用此程序包中所有的资源LIBRARY IEEE; ;3.3 VHDL语句语句3.3.1 并行语句并行语句在结构体中的执行是同时进行,执行顺序与书写顺序无关。在结构体中的执行是同时进行,执行顺序与书写顺序无关。 并行信号赋值语

37、句并行信号赋值语句l 简单赋值语句简单赋值语句目标信号名目标信号名 = 表达式表达式目标信号的数据类型与右边表达式一致目标信号的数据类型与右边表达式一致ARCHITECTURE Behavior OF FreDevider IS SIGNAL Clk:Std_Logic;BEGIN PROCESS(Clock)BEGIN IF rising_edge(Clock) THEN Clk=NOT Clk; END IF;END PROCESS;Clkout=Clk;l 选择信号赋值语句选择信号赋值语句WITH 选择表达式选择表达式 SELECT赋值目标信号赋值目标信号 = 表达式表达式1 WHEN

38、选择值选择值1, 表达式表达式2 WHEN 选择值选择值1, 表达式表达式n WHEN OTHERS; 选择值要覆盖所有可能情况,若不能一一指定,用选择值要覆盖所有可能情况,若不能一一指定,用OTHERS为其他情为其他情况找个出口;况找个出口; 选择值必须互斥,不能出现条件重复或重叠的情况。选择值必须互斥,不能出现条件重复或重叠的情况。LIBRARY IEEE;USE IEEE.Std_Logic_1164.ALL;ENTITY MUX ISPORT( Data0,Data1,Data2,Data3:IN Std_Logic_VECTOR(7 DOWNTO 0); Sel:IN Std_Log

39、ic_Vector(1 DOWNTO 0); DOUT:OUT Std_Logic_Vector(7 DOWNTO 0);END;ARCHITECTURE DataFlow OF MUX ISBEGIN WITH Sel SELECT DOUT= Data0 WHEN “00”, Data1 WHEN “01”, Data2 WHEN “10”, Data3 WHEN “11”,“00000000” WHEN OTHERS;END;地址选线地址选线Sel输出输出DOUT00Data001Data110Data211Data34X1多路选择器多路选择器l 条件信号赋值语句条件信号赋值语句赋值目标

40、信号赋值目标信号 = 表达式表达式1 WHEN 赋值条件赋值条件1 ELSE 表达式表达式2 WHEN 赋值条件赋值条件2 ELSE 表达式表达式n WHEN 赋值条件赋值条件n ELSE 表达式;表达式;各赋值语句有各赋值语句有优先级优先级的差别,按书写顺序从高到低排列;的差别,按书写顺序从高到低排列;各赋值条件可以各赋值条件可以重叠重叠。8输入优先编码器输入优先编码器I7I6I5 A2I4 A1I3 A0 I2I1I0高高低低优优先先级级LIBRARY IEEE;USE IEEE.Std_Logic_1164.ALL;ENTITY Priority_Encoder ISPORT( I:IN

41、 Std_Logic_VECTOR(7 DOWNTO 0); A:OUT Std_Logic_Vector(2 DOWNTO 0);END;ARCHITECTURE DataFlow OF Priority_Encoder ISBEGIN A=“111” WHEN I(7)=1 ELSE “110” WHEN I(6)=1 ELSE “101” WHEN I(5)=1 ELSE “100” WHEN I(4)=1 ELSE “011” WHEN I(3)=1 ELSE “010” WHEN I(2)=1 ELSE “001” WHEN I(1)=1 ELSE “000” WHEN I(0)=1

42、 ELSE “111”;END; 进程语句进程语句l 进程本身是并行语句,但内部是顺序语句;进程本身是并行语句,但内部是顺序语句;l 进程只有在特定的时刻(敏感信号发生变化)才会被激活。进程只有在特定的时刻(敏感信号发生变化)才会被激活。 进程标号:进程标号: PROCESS (敏感信号参数表)(敏感信号参数表) 声明区;声明区; BEGIN 顺序语句顺序语句END PROCESS 进程标号;进程标号;在进程中起作用的局部变量在进程中起作用的局部变量 一个进程可以有多个敏感信号,任一个进程可以有多个敏感信号,任一敏感信号发生变化都会激活进程一敏感信号发生变化都会激活进程 进程语句定义顺序语句模

43、块,用于将从外部获得的信号值,进程语句定义顺序语句模块,用于将从外部获得的信号值,或内部的运算数据向其他的信号进行赋值。或内部的运算数据向其他的信号进行赋值。l 进程的工作原理进程的工作原理当某个敏感信号的值发生当某个敏感信号的值发生变化时,每个进程语句立变化时,每个进程语句立即完成进程内顺序语句所即完成进程内顺序语句所定义的功能行为。定义的功能行为。执行过程终止执行过程终止 顺序语句所定义的功顺序语句所定义的功能行为的结果可以赋值给能行为的结果可以赋值给信号,并通过信号被其他信号,并通过信号被其他的进程读取或赋值。的进程读取或赋值。l 进程与时钟进程与时钟在每个上升沿启动一次进程(执行进程内

44、所有的语句)。在每个上升沿启动一次进程(执行进程内所有的语句)。上升沿描述:上升沿描述:Clock EVENT AND Clock=1下降沿描述:下降沿描述:Clock EVENT AND Clock=0上升沿描述:上升沿描述: rising_edge (Clock)下降沿描述:下降沿描述: falling_edge (Clock)LIBRARY IEEE; USE IEEE.Std_Logic_1164.ALL;ENTITY FreDevider ISPORT( Clock: IN Std_logic; Clkout: OUT Std_logic);END;ARCHITECTURE Beha

45、vior OF FreDevider IS SIGNAL Clk: Std_Logic;BEGIN PROCESS (Clock) 将时钟作为进程的敏感信号将时钟作为进程的敏感信号BEGIN IF rising_edge (Clock) THEN Clk=NOT Clk; 在时钟上升沿执行在时钟上升沿执行Clk=NOT Clk END IF;END PROCESS;Clkout=Clk;END;LIBRARY IEEE; USE IEEE.Std_Logic_1164.ALL;ENTITY Counter ISPORT( RESET:IN Std_Logic; 异步复位信号异步复位信号 Clo

46、ck: IN Std_logic; 时钟信号时钟信号 NUM: BUFFER Integer RANGE 0 TO 3); 计数器输出值计数器输出值END;ARCHITECTURE Behavior OF Counter IS BEGIN PROCESS (RESET, Clock) 将复位、时钟作为进程的敏感信号将复位、时钟作为进程的敏感信号BEGIN IF RESET=1 THEN Num=0; 复位时复位时Num清清0 ELSIF rising_edge (Clock) THEN IF Num=3 THEN Num=0; 如果如果Num3就清就清0 ELSE Num=Num+1; 否则自

47、加否则自加1 END IF; END IF;END PROCESS;END;仿真波形:仿真波形:LIBRARY IEEE; USE IEEE.Std_Logic_1164.ALL;USE IEEE.Std_Logic_unsigned.ALL;ENTITY Counter ISPORT( clr :IN Std_Logic; inl: in std_logic_vector(3 downto 0); outl: out std_logic_vector(3 downto 0) 计数器输出值计数器输出值);END;ARCHITECTURE Behavior OF Counter IS BEGIN

48、 PROCESS (clr, inl) 进程的敏感信号进程的敏感信号BEGIN IF (clr=1 or inl=“1001”) THEN outl=“0000”; ELSE outl=inl+1; END IF;END PROCESS;END;LIBRARY IEEE; USE IEEE.Std_Logic_1164.ALL;USE IEEE.Std_Logic_unsigned.ALL;ENTITY Counter ISPORT( clr,clk:IN Std_Logic; cnt: buffer std_logic_vector(3 downto 0) 计数器输出值计数器输出值);END

49、;ARCHITECTURE Behavior OF Counter IS BEGIN PROCESS BEGINWait until clkevent and clk=1; IF (clr=1 or cnt=9) THEN cnt=“0000”; ELSE cnt output output output output = s1; END CASE; END IF;END PROCESS;END;l 进程注意事项:进程注意事项:l 进程本身是并行语句,但内部为顺序语句;进程本身是并行语句,但内部为顺序语句;l 进程在敏感信号发生变化时被激活,在使用了敏感表的进程中不能含进程在敏感信号发生变化时

50、被激活,在使用了敏感表的进程中不能含wait语句;语句;l 在同一进程中对同一信号多次赋值,只有最后一次生效;在同一进程中对同一信号多次赋值,只有最后一次生效;l 在不同进程中,不可对同一信号进行赋值;在不同进程中,不可对同一信号进行赋值;l 一个进程不可同时对时钟上、下沿敏感。一个进程不可同时对时钟上、下沿敏感。l 进程中的信号赋值是在进程挂起时生效的,而变量赋值是即时生效。进程中的信号赋值是在进程挂起时生效的,而变量赋值是即时生效。l 相对于结构体而言,信号具有全局性,是进程间进行并行联系的重要相对于结构体而言,信号具有全局性,是进程间进行并行联系的重要途径。途径。l 进程为综合器支持,且

51、其建模方式直接影响仿真和综合结果,综合后进程为综合器支持,且其建模方式直接影响仿真和综合结果,综合后对应于进程的硬件结构对进程中所有可读入信号都是敏感的。对应于进程的硬件结构对进程中所有可读入信号都是敏感的。SIGNAL A,B: Integer RANGE 0 TO 7; : PROCESS (Clock) BEGIN IF rising_edge (Clock) THEN : B=A+1; B连接端口名连接端口名 , );要插在电路系统板上的芯片要插在电路系统板上的芯片较大的电路系统较大的电路系统电路板上准备接受芯片的插座电路板上准备接受芯片的插座元件定元件定义语句义语句元件例元件例化语句

52、化语句列出对外通信的各端口名列出对外通信的各端口名 当前系统与准备接当前系统与准备接入的元件对应端口相连入的元件对应端口相连的通信端口。的通信端口。名字关联方式:名字关联方式:port map语句中位置可以任意;语句中位置可以任意;位置关联方式:位置关联方式:端口名和关联连接符号可省去,连端口名和关联连接符号可省去,连接端口名的排列方式与所需例化的元件端口定义中接端口名的排列方式与所需例化的元件端口定义中的端口名相对应。的端口名相对应。LIBRARY IEEE; USE IEEE.Std_Logic_1164.ALL;ENTITY nd2 ISPORT( a, b:IN Std_Logic;

53、c: out std_logic);END;ARCHITECTURE nd2behv OF nd2 IS BEGIN yc1, c=y, b=d1); 名字关联方式名字关联方式u3:nd2 PORT MAP( x, y, c=z1); 混和关联方式混和关联方式END;元件例化:元件例化:1位二进制全加器位二进制全加器内部端口外部端口外部端口内部端口端口连线3.3.2 顺序语句顺序语句 顺序语句仅出现在进程和子程序中。顺序语句仅出现在进程和子程序中。 顺序语句综合后,映射为实际的门电路,系统一上电,门电路开始工顺序语句综合后,映射为实际的门电路,系统一上电,门电路开始工作。电路可实现逻辑上的顺序

54、执行,实际上所有门电路是并行工作的。作。电路可实现逻辑上的顺序执行,实际上所有门电路是并行工作的。l 赋值语句赋值语句l 流程控制语句流程控制语句l 空操作语句空操作语句l 等待语句等待语句l 子程序调用语句子程序调用语句l 返回语句返回语句 赋值语句赋值语句ENTITY TEST_Signal ISPORT( Reset, Clock: IN Std_logic; NumA, NumB: OUT Integer RANGE 0 TO 255);END;ARCHITECTURE TEST OF TEST_Signal IS SIGNAL A, B: Integer RANGE 0 TO 255

55、; BEGIN PROCESS (RESET,Clock) VARIABLE C: Integer RANGE 0 TO 255; BEGIN IF RESET=1 THEN A=0; B=2;C:=0; ELSEIF rising_edge(Clock) THEN C:=C+1;A=C+1;B=A+2; END IF; END PROCESS; Num A=A; NumB=B;END; 流程控制语句流程控制语句l IF语句:语句:IF 条件式条件式 THEN 顺序语句顺序语句END IF;IF 条件式条件式 THEN 顺序语句顺序语句ELSE 顺序语句顺序语句END IF;IF 条件式条件式

56、 THEN 顺序语句顺序语句ELSEIF 条件式条件式2 THEN 顺序语句顺序语句 ELSE 顺序语句顺序语句END IF;有优先级有优先级 用用IF语句描述组合逻辑电路时,务必涵盖所有的情况,否则语句描述组合逻辑电路时,务必涵盖所有的情况,否则综合后将引入锁存器!综合后将引入锁存器!ENTITY Encoder ISPORT( En: IN Std_logic; I: IN Std_logic_Vetor(7 DOWNTO 0); A: OUT Std_logic_Vetor(2 DOWNTO 0); Idle: OUT Std_logic);END;ARCHITECTURE Behavi

57、or OF Encoder IS BEGIN PROCESS (En, I)BEGIN IF En=1 THEN IF I(7)=1 THEN A=“111”; Idle=0; ELSIF IF I(6)=1 THEN A=“110”; Idle=0; ELSIF IF I(5)=1 THEN A=“101”; Idle=0; ELSIF IF I(4)=1 THEN A=“100”; Idle=0; ELSIF IF I(3)=1 THEN A=“011”; Idle=0; ELSIF IF I(2)=1 THEN A=“010”; Idle=0; ELSIF IF I(1)=1 THEN

58、A=“001”; Idle=0; ELSIF IF I(0)=1 THEN A=“000”; Idle=0; ELSE A=“000”; Idle b1 THEN q1 = 1 ; ELSIF a1 b1 THEN q1 b1 THEN q1 = 1 ; ELSE q1 顺序语句顺序语句; WHEN 选择值选择值|选择值选择值 =顺序语句顺序语句; WHEN OTHERS=顺序语句顺序语句;END CASE;l 选择值不可重复或重叠选择值不可重复或重叠;l 当当CASE语句的选择值无法覆盖所有的情况时语句的选择值无法覆盖所有的情况时,要用要用OTHERS指定指定未能列出的其他所有情况的输出值未

59、能列出的其他所有情况的输出值;LIBRARY IEEE;USE IEEE.Std_Logic_1164.ALL;ENTITY MUX ISPORT( Data0,Data1,Data2,Data3:IN Std_Logic_VECTOR(7 DOWNTO 0); Sel:IN Std_Logic_Vector(1 DOWNTO 0); DOUT:OUT Std_Logic_Vector(7 DOWNTO 0);END; ARCHITECTURE DataFlow OF MUX IS BEGIN CASE Sel IS WHEN “00”= DOUT DOUT DOUT DOUT DOUTNUL

60、L; END CASE; END IF;END PROCESS; WAIT语句语句 在进程或过程中执行到在进程或过程中执行到WAIT语句时,程序将被挂起,并设置语句时,程序将被挂起,并设置好再次执行的条件。好再次执行的条件。WAIT ON 信号表信号表UNTIL 条件表达式条件表达式FOR 时间表达式时间表达式;WAIT ;未设置停止挂起的条件,表示永远挂起。未设置停止挂起的条件,表示永远挂起。WAIT ON 信号表;信号表;敏感信号等待语句,敏感信号的变化将结束敏感信号等待语句,敏感信号的变化将结束挂起,再次启动进程。挂起,再次启动进程。WAIT UNTIL 条件表达式;条件表达式;条件表达

61、式为中所含的信号发生变化,条件表达式为中所含的信号发生变化,且满足且满足WAIT语句所设条件,则结束挂起,再次启动进程。语句所设条件,则结束挂起,再次启动进程。WAIT FOR 时间表达式;时间表达式;超时等待语句,从执行当前的超时等待语句,从执行当前的WAIT语语句开始,在此时间段内,进程处于挂起状态,超过这一时间段后,程句开始,在此时间段内,进程处于挂起状态,超过这一时间段后,程序自动恢复执行。序自动恢复执行。Configuration 配置名配置名 of 实体名实体名 is 配置说明配置说明End 配置名;配置名;3.3.3 配置语句配置语句 配置主要为顶层设计实体指定结构体,或为参与例

62、化的元配置主要为顶层设计实体指定结构体,或为参与例化的元件实体指定所希望的结构体件实体指定所希望的结构体 ,以层次方式来对元件例化做结构,以层次方式来对元件例化做结构配置。配置。Configuration 配置名配置名 of 实体名实体名 is 配置说明配置说明End 配置名;配置名; 为顶层设计实体指定结构体为顶层设计实体指定结构体Entity nand is port ( a, b: in std_logic; c: out std_logic );End entity nand;Architecture one of nand is begin c=not (a and b);End a

63、rchitecture one;Architecture two of nand is begin cs, b=qf, c=q); u2:nand PORT MAP ( a=q, b=r, c=qf); END rsf; Configuration sel of rs is for rsf for u1,u2:nand use entity work.nand (two);end for;end for;End sel; 为参与例化的元件实体指定所希望的结构体为参与例化的元件实体指定所希望的结构体 ,以层次方式来对,以层次方式来对元件例化做结构配置。元件例化做结构配置。3.4 状态机在状态机在

64、VHDL中的实现中的实现3.4.1 Moore 状态机的状态机的VHDL描述描述输出输出仅取决于其仅取决于其所处的状态所处的状态。LIBRARY IEEE; USE IEEE.Std_ Logic_1164.ALL;ENTITY Moore ISPORT( Reset, Clock, DIN :IN Std_Logic; DOUT:OUT Std_Logic_Vetor(2 DOWNTO 0);END;ARCHITECTURE Mooremachine OF Moore ISTYPE State_type IS (S0,S1,S2,S3); 定义定义State_type为枚举型数据类型为枚举型

65、数据类型SIGNAL State:State_type;BEGINChange_State: PROCESS (Reset, Clock) 时序逻辑进程时序逻辑进程BEGINIF Reset=1 THEN State=S0;ELSEIF rising_edge(Clock) THEN CASE State IS WHEN S0=IF DIN=1 THEN State=S1;END IF; WHEN S1=IF DIN=1 THEN State=S2;END IF; WHEN S2=IF DIN=1 THEN State=S3;END IF; WHEN S3=IF DIN=1 THEN Stat

66、e=S0; ELSE StateDOUT DOUT DOUT DOUT =“111”; END CASE; END PROCESS;END;仿真波形图:仿真波形图:时钟同步时钟同步Moore状态机结构图:状态机结构图:LIBRARY IEEE; USE IEEE.Std_ Logic_1164.ALL;ENTITY Moore ISPORT( Reset,Clock, DIN :in Std_Logic; DOUT:out Std_Logic_Vetor(2 DOWNTO 0) );END;ARCHITECTURE Mooremachine OF Moore IS TYPE State_typ

67、e IS (S0,S1,S2,S3); SIGNAL PresentState, NextState :State_type; 定义状态转换信号定义状态转换信号 BEGINState_Reg: PROCESS (Reset, Clock) 状态寄存器状态寄存器 BEGIN IF Reset=1 THEN 异步复位异步复位 PresentState=S0; ELSEIF rising_edge(Clock) THEN PresentState=NextState; 时钟上升沿,转换至下一状态时钟上升沿,转换至下一状态 END IF; END PROCESS;Change_State:PROCES

68、S (PresentState,DIN) 组合逻辑进程组合逻辑进程BEGIN CASE Present State IS WHEN S0=if DIN=1 then NextState=S1; else NextState=S0; end if; DOUT =“001”; WHEN S1=if DIN=1 then NextState=S2; else NextState=S1; end if ; DOUT =“011”; WHEN S2=if DIN=1 then NextState=S3; else NextState=S2; end if ; DOUT =“101”; WHEN S3=i

69、f DIN=1 then NextState=S0; else NextState=S1; end if ; DOUT =“111”; END CASE;END PROCESS;END;仿真波形图:仿真波形图:3.4.2 Mealy 状态机的状态机的VHDL描述:描述: 输出输出由当前状态与输入共同决定。由当前状态与输入共同决定。LIBRARY IEEE; USE IEEE.Std_ Logic_1164.ALL;ENTITY MealyMachine ISPORT( Reset ,Clock,DIN:IN Std_Logic; DOUT:OUT Std_Logic_Vetor(2 DOWNT

70、O 0);END;ARCHITECTURE Statemachine OF MealyMachine ISTYPE State_type IS (S0,S1,S2,S3);SIGNAL State:State_type;BEGINChange_State: PROCESS (Reset,Clock)BEGINIF Reset=1 THEN State=S0;ELSIF rising_edge(Clock) THEN CASE State IS WHEN S0=IF DIN=1 THEN State=S1;END IF; WHEN S1=IF DIN=1 THEN State=S2;END IF

71、; WHEN S2=IF DIN=1 THEN State=S3;END IF; WHEN S3=IF DIN=1 THEN State=S0; ELSE StateIF DIN=0 THEN DOUT =“000”; ELSE DOUTIF DIN=0 THEN DOUT =“010”; ELSE DOUT IF DIN=0 THEN DOUT =“100”; ELSE DOUT IF DIN=0 THEN DOUT =“110”; ELSE DOUTState=Error; 使状态机从未定义的状态跳转到处理出错情况的状态;使状态机从未定义的状态跳转到处理出错情况的状态;l 直接回复到其他已

72、设定的状态。直接回复到其他已设定的状态。 3.4.4 状态机设计与寄存器状态机设计与寄存器l 对于所有可能的输入条件,当进程中的输出信号如果没有被完对于所有可能的输入条件,当进程中的输出信号如果没有被完全地与之对应指定,此信号将自动被指定,即在未列出的条件下全地与之对应指定,此信号将自动被指定,即在未列出的条件下保持原值,这意味着引入了寄存器。保持原值,这意味着引入了寄存器。l 在状态机中,如果存在一个或更多的状态没有被明确指定转换在状态机中,如果存在一个或更多的状态没有被明确指定转换方式,或者对于状态机中的状态值没有规定所有的输出值,就可方式,或者对于状态机中的状态值没有规定所有的输出值,就

73、可能引入寄存器。能引入寄存器。计数器:计数器: 3.5 常用电路的常用电路的VHDL程序程序比较器:比较器: 奇数倍分频:奇数倍分频:8位奇偶校验电路位奇偶校验电路LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY p_check IS PORT (a: IN STD_LOGIC_VECTOR (7 DOWNTO 0);y: OUT STD_LOGIC);END p_check; ARCHITECTURE opt OF p_check IS SIGNAL tmp: STD_LOGIC;BEGIN PROCESS (a) BEGIN tmp=0; FO

74、R n IN 0 TO 7 LOOP -此循环语此循环语 句作为进程语句中的顺序语句使用句作为进程语句中的顺序语句使用tmp = tmp XOR a(n); END LOOP;y = tmp END.PROCESS; END opt;LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY h_adder IS PORT (a,b : IN STD_LOGIC; co, so : OUT STD_LOGIC); END ENTITY h_adder; ARCHITECTURE fh1 OF h_adder IBEGIN so = (a OR b)AND

75、(a NAND b); co = NOT( a NAND b); END ARCHITECTURE fh1;1位二进制半位二进制半加器加器 半加器半加器含异步清含异步清0和同步时钟使能的和同步时钟使能的4位加法计数器位加法计数器LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY CNT4B IS PORT (CLK : IN STD_LOGIC; RST : IN STD_LOGIC; ENA : IN STD_LOGIC; OUTY : OUT STD_LOGIC_VECTOR(3 D

76、OWNTO 0); COUT : OUT STD_LOGIC ); END CNT4B;ARCHITECTURE behav OF CNT4B IS SIGNAL CQI : STD_LOGIC_VECTOR(3 DOWNTO 0);SIGNAL CQI : STD_LOGIC_VECTOR(3 DOWNTO 0);BEGINP_REG: PROCESS(CLK, RST, ENA) BEGIN P_REG: PROCESS(CLK, RST, ENA) BEGIN IF RST = 1 THEN CQI = 0000; ELSIF CLKEVENT AND CLK = 1 THEN IF E

77、NA = 1 THEN CQI = CQI + 1; ELSE CQI = 0000; END IF; END IF; OUTY = CQI ; END PROCESS P_REG ; COUT = CQI(0) AND CQI(1) AND CQI(2) AND CQI(3); -进位输出进位输出END behav;表决器:表决器: 三态门:三态门: 三态总线:三态总线:八位锁存器: 移位寄存器:移位寄存器:键盘消抖电路:键盘消抖电路:3.6 VHDL仿真仿真 仿真(仿真(SimulationSimulation,也称模拟),不接触具体的硬件系统利用,也称模拟),不接触具体的硬件系统利用计算

78、机对电路设计的逻辑行为和运行功能进行模拟检测,较大规模计算机对电路设计的逻辑行为和运行功能进行模拟检测,较大规模的的VHDLVHDL系统设计的最后完成必须经历多层次的仿真测试过程,包括系统设计的最后完成必须经历多层次的仿真测试过程,包括针对系统的针对系统的VHDLVHDL行为仿真、分模块的时序仿真和硬件仿真,直至最行为仿真、分模块的时序仿真和硬件仿真,直至最后系统级的硬件仿真测试。后系统级的硬件仿真测试。对对VHDLVHDL源文件进行语法及语义检查,源文件进行语法及语义检查,将其转换为中间数据格式。将其转换为中间数据格式。保存中间数据结果,提供保存中间数据结果,提供VHDLVHDL源程源程序中

79、需要的设计库和程序包。序中需要的设计库和程序包。功能仿真是在未经布线和适配前,功能仿真是在未经布线和适配前,用用VHDLVHDL源程序综合后的文件进行源程序综合后的文件进行仿真。时序仿真是将设计综合后,仿真。时序仿真是将设计综合后,由适配器完成具体芯片的映射后由适配器完成具体芯片的映射后得到的文件进行仿真。得到的文件进行仿真。3.6.1 仿真激励信号的产生仿真激励信号的产生LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY ADDER4 ISPORT ( a, b : IN INTEGER RANGE 0 TO 15; c : OUT INTEGER

80、 RANGE 0 TO 15 );END ADDER4;ARCHITECTURE one OF ADDER4 ISBEGINc = a + b;END one;ENTITY SIGGEN ISPORT ( sig1 : OUT INTEGER RANGE 0 TO 15; sig2 : OUT INTEGER RANGE 0 TO 15 );END;ARCHITECTURE Sim OF SIGGEN ISBEGINsig1 = 10, 5 AFTER 200 ns, 8 AFTER 400 ns;sig2 a, sig2=b);END;将波形信号发生器与将波形信号发生器与ADDER4组装为一

81、个组装为一个VHDL仿真测试模块仿真测试模块BENCH仿真波形图仿真波形图force a 0 (强制信号的当前值为(强制信号的当前值为0)force b 0 0, 1 10 (强制信号(强制信号b在时刻在时刻0的值为的值为0,在时刻,在时刻10的值为的值为1)force clk 0 0, 1 15 repeat 20 (clk为周期信号,周期为为周期信号,周期为20) 利用仿真器的波形设置命令施加激励信号利用仿真器的波形设置命令施加激励信号 force命令的格式如下:命令的格式如下:force , -repeat force a 10 0, 5 200, 8 400force b 3 0, 4

82、 100, 6 300BENCH仿真波形图仿真波形图 初始化仿真过程后,在命令行中输入命令:初始化仿真过程后,在命令行中输入命令: 执行执行RUN命令。命令。对对ADDER4的结构体进行仿真:的结构体进行仿真:3.6.2 VHDL测试基准(测试基准(Test Bench)Library IEEE;use IEEE.std_logic_1164.all;entity counter8 isport (CLK, CE, LOAD, DIR, RESET: in STD_LOGIC;DIN: in INTEGER range 0 to 255;COUNT: out INTEGER range 0 t

83、o 255 );end counter8;architecture counter8_arch of counter8 isbegin process (CLK, RESET) variable COUNTER: INTEGER range 0 to 255;beginif RESET=1 then COUNTER := 0;elsif CLK=1 and CLKevent then if LOAD=1 then COUNTER := DIN;8位计数器源程序:位计数器源程序:Elseif CE=1 then if DIR=1 thenif COUNTER =255 then COUNTER

84、:= 0; else COUNTER := COUNTER + 1;end if; else if COUNTER =0 then COUNTER := 255; else COUNTER := COUNTER-1; end if; end if; end if; end if; end if; COUNT CLK,RESET = RESET,CE = CE, LOAD = LOAD,DIR = DIR, DIN = DIN,COUNT = COUNT );CLK_IN: processBeginif end_sim = false then CLK = 0;Wait for 15 ns;CL

85、k =1;Wait for 15 ns; ElseWait;end if;end process;STIMULUS: processBeginRESET = 1; CE = 1; 计数使能计数使能 DIR = 1; 加法计数加法计数 DIN = 250; 输入数据输入数据 LOAD = 0; 禁止加载输入的数据禁止加载输入的数据 wait for 15 ns; RESET = 0;wait for 1 us;CE = 0; 禁止计数脉冲信号进入禁止计数脉冲信号进入wait for 200 ns;CE = 1;wait for 200 ns; DIR = 0;wait for 500 ns;LO

86、AD = 1;wait for 60 ns;LOAD = 0;wait for 500 ns;DIN = 60;DIR = 1;LOAD = 1;wait for 60 ns;LOAD = 0;wait for 1 us;CE = 0;wait for 500 ns;CE = 1;wait for 500 ns;end_sim :=true;wait;end process;WRITE_TO_FILE: WRITE_RESULTS(CLK,RESET,CE,LOAD,DIR,DIN,COUNT);End testbench_arch;8位计数器测试基准仿真部分波形图位计数器测试基准仿真部分波形

87、图 (1) (1) 从自然语言转换到从自然语言转换到VHDLVHDL语言算法表示,即自然语言综合;语言算法表示,即自然语言综合; (2) (2) 从从算算法法表表示示转转换换到到寄寄存存器器传传输输级级(Register (Register Transport Transport LevelLevel,RTL)RTL),即从行为域到结构域的综合,即行为综合;,即从行为域到结构域的综合,即行为综合; (3) RTL (3) RTL级表示转换到逻辑门级表示转换到逻辑门( (包括触发器包括触发器) )的表示,即逻辑综合;的表示,即逻辑综合; (4) (4) 从从逻逻辑辑门门表表示示转转换换到到版版图图表表示示(ASIC(ASIC设设计计) ),或或转转换换到到FPGAFPGA的的配配置置网网表表文文件件,可可称称为为版版图图综综合合或或结结构构综综合合。有有了了版版图图信信息息就就可可以以把把芯芯片片生生产产出出来来了了。有有了了对对应应的的配配置置文文件件,就就可可以以使使对对应应的的FPGAFPGA变变成成具具有有专专门功能的电路器件。门功能的电路器件。3.7 VHDL综合综合 把把VHDL描述转化为门级电路描述,设计过程中的每一步都描述转化为门级电路描述,设计过程中的每一步都可称为一个综合环节。可称为一个综合环节。

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 研究生课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号