1、Comment d1: 单向引脚Comment d2: 双向引脚Comment d3: 这几种数据类型分别可以进行什么操作?1VHDL是 一 种 硬 件 描 述 语 言 , 用 于 对 电 子 电 路 和 系 统 的 行 为 进 行 描 述 。VHDL是 VHSIC Hardware Description Language的缩写。所有的 VHDL代码都可以仿真,但不是所有的 VHDL代码都可以综合。Very high speed integrated circuitVHDL和 Verilog HDL都与工艺和工具无关,可以方便的进行移植和重用。可编程逻辑器件包括:复杂可编程逻辑器件(CPLD
2、:Complex Programmable Logic Devices) ,现场可编程门阵列(FPGA:Field Programmable Gate Arrays) 。VHDL语言从根本上讲是并发执行的。因此常称之为代码,而不是程序。VHDL 中,只有在进程(PROCESS) 、函数(FUNCTION) 、和过程( PROCEDURE)内部的语句才是顺序执行的。第二章 VHDL代码结构VHDL代码的三个基本组成部分:库(LIBRARY)声明、实体(ENTITY)、构造体(ARCHITECTURE)库声明:列出当前设计中需要的所有库文件实体:定义电路的 I/O引脚;构造体:包含的代码描述电路要
3、实现的功能。库的建立有利于设计重用和代码共享同时使代码结构更加清晰常用库:IEEE 库,Std 库,work 库std_logic_1164:当用到 std_logic及其衍生类型时,需要声明;std_logic_arith:定义了 signed和 unsigned类型和相关算数运算和比较运算。std_logic_signed:使 std_logic_vector 类型的数据同 signed一样执行。std_logic_unsigned:std ,work 库在程序中都是默认可见的,直接使用就可,不需要再对其进行声明;只有ieee库在使用前需要声明。实体(ENTITY)用来描述电路所有的输入
4、/输出引脚,端口的信号模式 4种:IN,OUT,INOUT,BUFFER 。信号类型:BIT,STD_LOGIC,INTEGER 等构造体(ARCHITECTURE)描述电路的行为和实现功能。一个 ARCHITECTURE包含两个部分:声明部分:用于对信号和常量进行声明;代码部分:用来描述电路功能。注:ARCHITECTURE 部分名称可以和 ENTITY部分相同。程序分析:1) VHDL不区分大小写,2) PROCESS 敏感信号列表3) 输入端口的信号模式只能是 IN;输出端口信号的模式可以是 OUT,INOUT,BUFFER.第三章 数据类型std库的 standard包集:定义了 bi
5、t,boolean,integer,real数据类型。标准逻辑矢量类型(STD_LOGIC)同位类型(BIT)的区别是:它可以取0 、 1、不定态和高阻态等 8中不同的值。1) 可综合的只有 0,1,Z。其他用于仿真。VHDL不允许不同类型的数据间直接进行操作运算。问题:第四章 运算操作符和属性2赋值运算:逻辑运算:Bit,STD_LOGIC 及其扩展类型算术运算:Real 类型不可综合关系运算:适用于所有数据类型/=不等于移位操作符:sll,srl,sla,sra,rol,ror并置运算符:IF GENERATE:Label:IF condition GENERATE(concurrent
6、assignments)END GENERATE;3.块语句:VHDL 中的两种类型块:simple BLOCK,guarded BLOCK.Simple BLOCKSimple BLOCK 仅仅是一种对原有代码进行分割的一种方式。Label:BLOCKdeclarative partBEGIN(concurrent statement)END BLOCK label;BLOCK 语句结构相对独立,并且不调用 PACKAGE(包集),COMPONENT (元件),FUNCTION(函数),或 PROCEDURE(过程) 。4Guarded BLOCKLabel:BLOCK(卫士表达式)声明部分
7、BEGIN(卫士语句和其他并发描述语句 )END BLOCK label;第六章 顺序代码VHDL 本质上是一种并发执行的代码,但在 PROCESS,FUNCTION,PROCEDURE 内部的代码都是顺序执行的。顺序代码并非只能与时序逻辑相对应,同样可以用他们来实现组合逻辑电路。顺序代码也可以称为行为描述代码。变量(Variable )只能在顺序代码中使用,相对于信号而言,变量只能是局部的,所以它的值不能传递到 PROCESS,FUNCTION,PROCEDURE 外部。PROCESS 语句具有敏感信号列表(sensitivity list) 。在 VHDL 中有两种方法进行动态数值传递:信
8、号和变量。其中信号可以在PACKAGE,ENTITY,ARCHITECTURE 中声明,而变量只能在一段顺序代码中声明。因此信号通常是全局的,而变量通常是局部的。变量的值无法直接传递到 PROCESS 的外部。如果需要进行变量值的传递,则必须把这个值赋给一个信号,然后又该信号将变量的值传递到 PROCSEE 的外部。另一方面,赋予变量的值是立即生效的,在此后的代码中,此变量将使用新的变量值。而 PROCESS 中的信号,只有整个 PROCESS 运行完毕以后,新的信号值才开始生效。信号与变量的这一点区别足够一章的内容,于是第七章将用一章的内容来解释这个问题。1)IF;2)WAIT;3)CASE
9、;4)LOOP;1.IFIF conditions THENassignments;ELSEIF conditions THENassignments;ELSE assignments;END IF;2.WAIT 语句如果在 PROCESS 中用了 WAIT 语句就不可以在使用敏感信号列表了。WAIT 语句的使用有如下三种方法 :WAIT UNTIL signal_condition;含义:直到信号条件(signal_condition)满足时才进行后面的操作。WAIT ON signal1,signal2含义:当后面列出的信号有一个发生变化时,开始进行后面的操作。WAIT FOR time;
10、-只能用来仿真不可以综合含义:等待 time 所确定时间后进行后面的操作。Comment d4: Case When 的区别5由于 WAIT UNTIL 语句后面只有一个信号条件表达式,因此更适合于实现同步电路。由于使用 WAIT语句时,PROCESS 没有敏感向量列表,所以它必须是 PROCESS中第一条语句。3.CASE语句CASE 表达式 ISWHEN 条件表达式 = 顺序执行语句;WHEN 条件表达式 = 顺序执行语句;END CASE;同 WHEN 语句, CASE语句中:WHEN OTHERS=NULL;同样非常重要CASE语句允许在每个测试条件下执行多个赋值操作,然而 WHEN语
11、句只允许执行一个赋值操作。4.LOOP语句1)FOR/LOOP:循环固定次数label:FOR 循环变量 IN 范围 LOOP(顺序描述代码)END LOOP label;2) WHILE/LOOP:循环执行到某个条件不再满足 label :WHILE 条件表达式 LOOP (顺序描述语句)END LOOP label;3)EXIT:结束整个循环操作label:EXIT label WHEN 条件表达式 ;4) NEXT:跳出本次循环label:NEXT loop_label WHEN 条件表达式;同步时序电路中的时钟问题在代码中,如果在参考时钟的两个边沿(上升沿和下降沿)都可以触发对同一信号
12、的赋值操作,那么这样的代码通常是不可综合的。如果一个信号出现在了敏感信号列表中,但没有在 PROCESS内部的任何语句中出现,通常编译器会把它忽略掉。如果确希望两个边沿(上升沿和下降沿)都可以触发对同一信号的赋值操作,可以写两个PROCESS。第 10章包集和元件包集:PACHAGE 中包含的类型有元件,函数,过程,类型,常量。分为程序包首和程序包体两个部分,其中程序包体不一定时必需的。PACKAGE 部分只是做一些声明,与 ENTITY比较类似。元件:元件首先是能够实现一定功能的完整代码。然后可以依据这些代码的 ENTITY名在包集中(PACKAGE)或在主程序(ARCHITECTURE 中
13、)中声明一些 COMPONENT。元件不需要程序包体只需要在程序包首中声明一下就可以了。端口映射:两种。第 11章 函数和过程函数和过程统称为子程序。两者很相似:6函数:FUNCTION 存放于包集和主代码(ARCHITECTURE 中)中,由于函数和过程需要写具体的代码实现,而不是像元件一样那现成的代码声明一下便可,所以除了声明,还要写具体的代码实现,这就要求必须要有程序包体。函数有零个或多个输入参数和一个返回值。输入参数只能是常量(默认)或信号(不允许是变量) 。过程可以带多个输入、输出或双向参数。这些参数可以是信号,变量,或常量。输入模式参数,默认为常量,输出模式参数,默认是变量。函数的
14、调用作为表达式的一部分出现,过程可以直接调用。在函数和过程的内部 WAIT 和 COMPONMENT 都是不可综合的。附录:可编程逻辑器件的主要厂家及其产品的特点:1) Altera 亚洲应用比较广泛,仿真综合工具,MAX+PLUSII,Quartus2) Xilinx 欧洲应用比较广泛,仿真综合工具,ISE,Foundition这是世界两大可编程逻辑器件的公司,都是美国公司,在北美所占份额相当。3) Lattices-Vantis 产品保密性好4) Actel 大多采用反熔丝技术,稳定性好,多应用于航空航天等稳定性要求极高的行业。其他公司有 Cypress,QuickLogic,Lucent,Atmel,ClearLogic,WSI 等。PLA,PAL,RPAL,GALCPLD,FPGA.CPLD 基于乘积项结构,FPGA 基于查找表结构,CPLD 组合逻辑更强一点,FPGA 时序逻辑更强。