VHDL程序的基本结构.ppt_第1页
VHDL程序的基本结构.ppt_第2页
VHDL程序的基本结构.ppt_第3页
VHDL程序的基本结构.ppt_第4页
VHDL程序的基本结构.ppt_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

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

文档简介

可编程逻辑器件应用,主讲人:刘文怡,第五讲 VHDL程序的基本结构,VHDL语言设计的基本单元及其构成 结构体的子结构描述 包集合、库及配置 要求: 掌握硬件描述语言的基本框架结构; 了解硬件描述语言的库、程序包和配置;,前节内容回顾,EDA,CPLD,FPGA,HDL,VHDL VHDL,VERILOG,AHDL FPGA芯片公司 Altera, Xilinx, Microsemi (Actel), lattice FPGA,CPLD,单片机,DSP,ARM,如果把这个电路做成一个元件,别人使用的时候,只需知道两件事: 一是封装!二是功能!,漂亮的程序(回顾),Fengzhuang_kaishi port ( IN1:in ; IN2:in ; IN3:in ; IN4:in ; OUT4:out ) Fengzhuang_jieshu Gongneng_kaishi signal T1,T2; OUT4 = T1 or T2; T2 = IN3 and IN4; T1 = IN1 and IN2; Gongneng_jieshu,1、为了用起来像个函数的样子,不妨加个port关键词,把输入输出引脚象参数一样排列起来。 2、很好地表达了4个输入引脚,1个输出引脚。 3、提供给别人调用。,1、内部功能实现的细节 2、T1、T2似乎有点奇怪,哪来的? 3、那我们也规定先定义,后使用!,Library IEEE; Use IEEE.STD_LOGIC_1164.ALL; ENTITY mux IS PORT(d0,d1,sel:in bit; q:out bit); END mux;,Architecture dataflow of mux is signal tmp1,tmp2,tmp3:bit; Begin tmp1=d0 and sel; tmp2=d1 and (not sel); tmp3=tmp1 or tmp2; q=tmp3; End dataflow;,VHDL语言如何做的?,一个完整的VHDL语言程序通常包含5个部分: 库 (Library) 包集合 (Package) 实体 (Entity) 结构体 (Architecture) 配置 (Configuration),必备部分,VHDL程序的基本构成,实体: 描述所设计系统的外部接口信号,是可见的; 结构体:描述系统内部的结构和行为,是不可见的; 配置: 选取所需单元组成系统设 计的不同版本; 包集合:存放各种设计模块都能共享的数据类型、 常数、子程序和函数等; 库: 存放已经编译的实体、结构体、包集合和 配置。,VHDL程序的基本单元解释,实体声明,实体声明语法: ENTITY 实体名 IS 类属参数说明; 端口说明; END 实体名; 举例: ENTITY mux IS PORT(d0,d1,sel:IN BIT; q:OUT BIT );END mux;,实体的声明,实体名必须与文件名相同,否则编译时会出错。 实体用于定义电路的输入输出引脚,但并不描述电路的具体结构和实现的功能。 大小写不敏感。,实体声明注意事项,实体的类属参数说明(了解),类属参数说明是实体说明中的可选项,必须放在端口说明之前,用于指定参数, 如端口大小、总线宽度、时间等; 其一般书写格式为: GENERIC ( 常数名:数据类型 :设定值 ,); 举例:GENERIC(m:TIME:=1 ns); 这个参数说明是指在VHDL程序中,结构体内的参数m的值为1ns。,实体的端口说明,端口说明是对基本设计实体(单元)与外部接口的描 述,也可以说是对外部引脚信号的名称,数据类型和 输入、输出方向的描述; 其一般书写格式为: PORT(端口名,端口名n:方向 数据类型名; 端口名,端口名m:方向 数据类型名); 举例: PORT(d0,d1,sel : IN BIT; q : OUT BIT; bus : OUT BIT_VECTOR(7 DOWNTO 0) );,(1)端口名:赋予每个外部引脚名称,通常用一个或几个英文字母,或者用英文字母加数字命名之,例如:d0,d1,sel。 (2)端口方向:用来定义外部引脚的信号方向。,请注意OUT与BUFFER的区别,ENTITY test IS PORT(a: IN STD_LOGIC; b1,c1: OUT STD_LOGIC; b2: BUFFER STD_LOGIC; c2: OUT STD_LOGIC); END test; ARCHITECTURE a of test IS BEGIN b1 = not(a); c1 = b1; -Error b2 = not(a); c2 = b2; END a;,端口数据类型,标准类型: BIT 和 BIT_VECTOR 扩展类型: STD_LOGIC 和 STD_LOGIC_VECTOR 单点 多点(总线) 扩展类型需要库和程序包的支持,并且需要在程序中指明 使用时需要加入以下两个语句: LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL;,练习:,试写出半加器的实体描述: 如右图所示 a,b为半加器的输入端口 s,co为输出信号,s为和信号,co为进位信号。,结构体ARCHITECTURE,结构体的描述方法:行为级描述、RTL(数据流)级描述、结构描述(逻辑元件连接),结构体是用于描述设计实体的内部结构(元件及内部的连接关系)以及实体端口间的逻辑关系(实体的行为)。,注意:结构体一定要跟在实体说明的后面。,结构体的一般书写格式,ARCHITECTURE 结构体名 OF 实体名 IS 定义语句内部信号,常数,数据类型,函数等的定义; BEGIN 功能描述语句并行处理语句; END 结构体名;,实体名必须是所在设计实体的名字,结构体名由设计者定义,但当一个实体具有多个结构体时,结构体的取名不可重复。,结构体名称的命名,结构体名称由设计者自由命名,是结构体的唯一名称。OF后面的实体名称表明该结构体属于哪个设计实体,有些设计实体中可能含有多个结构体。这些结构体的命名可以从不同侧面反映结构体的特色,让人一目了然。例如: ARCHITECTURE behavioral OF mux IS 用结构体行为命名 ARCHITECTURE dataflow OF mux IS 用结构体数据流命名 ARCHITECTURE structural OF mux IS 用结构体组织结构命名 ARCHITECTURE bool OF mux IS 用结构体的数学表达方式命名 ARCHITECTURE latch OF mux IS 用结构体的功能来命名 ,定义语句,定义语句位于ARCHITECTURE 和BEGIN之间,用于对结构体内部所使用的信号、常数、数据类型和函数进行定义。 举例:ARCHITECTURE behave OF mux IS SIGNAL tmp: BIT; BEGIN END behave; 结构体的信号定义和实体的端口说明一样,应有信号名称和数据类型定义,不用说明信号方向,因为是结构体内部连接用信号。,结构体的语法格式,结构体中的说明语句是对结构体的功能描述语句中将要用到的信号(SIGNAL)、数据类型(TYPE)、常数(CONSTANT)、元件(COMPONENT)、函数(FUNCTION)和过程(PROCEDURE)等加以说明的语句。 在一个结构体中说明和定义的数据类型、常数、元件、函数和过程只能用于这个结构体中,若希望其能用于其他的实体或结构体中,则需要将其作为程序包来处理。,结构体的语法格式,结构体的并行处理语句,具体描述结构体的行为及其连接关系。 在结构体中的语句都可以是并行执行的, 语句的书写顺序不决定语句的执行顺序。 所谓“并行”,指的是这些并行语句之间没有执行顺序的先后之分。,并行处理语句的局部化,在实际逻辑设计时,我们不一定希望所有的逻辑语句同时工作,怎么办? 换句话:如何能让不同部分的语句“有条件地”起作用? 解决办法:挑出来、加条件! 使用条件语句吗? 不行! 用适当的语法来表达:就引入了 进程语句,PROCESS语句的书写格式,进程名: PROCESS (敏感信号表) IS 变量说明语句 变量说明语句 BEGIN 进程内逻辑语句 END PROCESS 进程名;,process语句使用的类型、常量、变量、子程序声明、子程序体、属性声明等,但不能有信号声明*,可有可无,区分不同进程,process (A, B) begin Output = A or B; end process;,process begin Output = A or B; wait on A, B; end process;,PROCESS语句的工作机理,任何一个敏感信号发生变化都将启动process内部的所有并行语句执行一次。 Process语句可以不带敏感表,但是要在end process; 前加入wait on 信号1,信号2,; 注意:process语句敏感表 和wait on语句只能有一个。,ENTITY mux IS PORT(d0,d1,sel :in bit; q :out bit ); END mux; Architecture dataflow of mux is SIGNAL tmp1,tmp2,tmp3:bit; Begin q=tmp3; process(d0,d1,sel) begin tmp1=d0 and sel; tmp2=d1 and (not sel); tmp3=tmp1 or tmp2; end process; End dataflow;,敏感信号d0,d1,sel任一信号发生变化就执行,28,进程语句举例,进程里面的语句,可以放置任何信号代入语句; 可以放置一般并行语句; 可以放置条件、分支、循环语句; 不可以放置进程语句(嵌套);,结构体三种描述方式,行为描述: 对设计实体按算法的路径来描述。采用进程语句顺序描述设计实体的行为和功能。 寄存器传输描述(数据流描述): 通过描述数据流程的运动路径、方向和运动结果,实现设计实体的行为和功能。 结构描述(逻辑元件连接描述): 采用并行处理语句描述设计实体内的结构组织和元件互连关系。通常用于层次式设计。,结构体描述的三种方法,例 二选一数据选择器,ENTITY mux IS PORT(d0, d1:IN BIT; sel:IN BIT; Q:OUT BIT); END mux; ARCHITECTURE behave OF mux IS BEGIN PROCESS(d0,d1,sel) BEGIN IF sel=0 THEN q=d0; ELSE q=d1; END IF; END PROCESS; END behave;,1) 行为级描述: 只表示输入和输出间转换的行为,它不包含任何结构的信息(硬件特性、连线方式、逻辑行为方式)。,ENTITY mux IS PORT( d0,d1:IN BIT; sel:IN BIT; q:OUT BIT ) ; END mux; ARCHITECTURE behave OF mux IS SIGNAL tmp1,tmp2,tmp3,nsel: BIT; BEGIN cale:PROCESS(d0,d1,sel) BEGIN Nsel=NOT sel; tmp1= d0 AND sel; tmp2= d1 AND nsel; tmp3= tmp1 OR tmp2; q= tmp3; END PROCESS; END behave;,2) 以规定设计中的各种寄存器形式为特征,然后在寄存器之间插入组合逻辑。 数据流描述方式能比较直观地表达底层逻辑行为。,RTL级描述(数据流描述方式),ARCHITECTURE stru OF mux IS BEGIN END structral;,SIGNAL tmp1,tmp2,tmp3,nsel: BIT; COMPONENT and2 PORT(a,b:IN BIT; c:OUT BIT); END COMPONENT; COMPONENT inv PORT(a:IN BIT; c:OUT BIT); END COMPONENT; COMPONENT or2 PORT(a,b:IN B

温馨提示

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

评论

0/150

提交评论