《可编程逻辑器件讲义》由会员分享,可在线阅读,更多相关《可编程逻辑器件讲义(218页珍藏版)》请在金锄头文库上搜索。
1、可编程逻辑器件讲义,第三讲 VHDL程序设计,本讲主要内容,常用实例及其语法 多路选择器、寄存器、全加器、计数器等 VHDL基本语法 基本语言要素(信号、变量等)、常用用语句(IF、CASE)、进程和并行语句的概念等 VHDL进阶 类属参数、子程序(函数、过程)、自定义库使用、顺序并行语句(LOOP、NEXT等)、属性描述与定义语句,1、常用实例及其语法,2选1多路选择器,mux21a实体,mux21a结构体,1、常用实例及其语法,2选1多路选择器,ENTITY mux21a IS PORT ( a, b : IN BIT; s : IN BIT;y : OUT BIT); END ENTIT
2、Y mux21a; ARCHITECTURE one OF mux21a IS BEGIN y = a WHEN s =0 ELSE b ; END ARCHITECTURE one ;,行为描述,1、常用实例及其语法,2选1多路选择器,ENTITY mux21a IS PORT ( a, b : IN BIT;s : IN BIT; y : OUT BIT ); END ENTITY mux21a; ARCHITECTURE one OF mux21a IS SIGNAL d,e : BIT; -定义中间节点信号 BEGIN d = a AND (NOT S); e = b AND s; y
3、 = d OR e; END ARCHITECTURE one ;,数据流(RTL)描述,1、常用实例及其语法,2选1多路选择器,ENTITY mux21a IS PORT ( a, b, s: IN BIT;y : OUT BIT ); END ENTITY mux21a;,ARCHITECTURE one OF mux21a IS BEGIN PROCESS (a,b,s) BEGIN IF s = 0 THEN y = a;ELSE y= b; END IF; END PROCESS; END ARCHITECTURE one ;,行为描述(含进程),1、常用实例及其语法,2选1多路选择
4、器 从上面的程序分析得到如下点启示:VHDL程序构成主要包含两块:实体和结构体一个实体可以采用不同的结构体设计,1、常用实例及其语法,2选1多路选择器相关语法现象 实体表达,ENTITY e_name IS PORT ( p_name : port_m data_type;.p_name : port_m data_type); END ENTITY e_name;,实体定义语句,e_name为实体名,一般英文字母开头,数字结尾,要见名识义,不要与关键字和以定义的元件名重名,端口定义语句由PORT引导,p_name为端口名,语法要求和实体名一致。port_m为端口模式,data_type为端口
5、数据类型,1、常用实例及其语法,2选1多路选择器相关语法现象 端口模式 IN 输入端口,定义的通道为单向只读模式 OUT 输出端口,定义的通道为单向输出模式 INOUT 定义的通道确定为输入输出双向端口 BUFFER 缓冲端口,其功能与INOUT类似 数据类型 INTEGER、BOOLEAN、BIT、STD_LOGIC; 0或1解释为BIT,无引号解释为INTEGER;,1、常用实例及其语法,2选1多路选择器相关语法现象 结构体表达,ARCHITECTURE arch_name OF e_name IS 说明语句 BEGIN(功能描述语句) END ARCHITECTURE arch_name
6、 ;,结构体描述由关键字ARCHITECTURE引导,arch_name为 结构名,语法要求和实体名一致。,说明语句用于定义数据对象、数据类型和元件调用声明等,并非必要,功能描述语句是必要的,以并行语句、顺序语句或两者的混合形式出现,1、常用实例及其语法,2选1多路选择器相关语法现象 赋值符号和数据比较符号 信号赋值号:“=” y=a 并非立即发生 “=”没有赋值的含义,只是一种数据比较符号,IF a THEN . -注意,a的数据类型必须是booleanIF (s1=0) AND (s2=1) OR (cb+1) THEN ,1、常用实例及其语法,2选1多路选择器相关语法现象 逻辑操作符 A
7、ND、OR、NOT、NAND、NOR、XOR、XNOR条件语句 IF _ THEN _ ELSE 支持嵌套 IF语句必须以语句 “END IF;”结束 此语句为顺序执行语句,常在进程中使用,顺序语句和并行语句(模块)的区别?,1、常用实例及其语法,2选1多路选择器相关语法现象 WHEN_ELSE条件信号赋值语句,赋值目标 = 表达式 WHEN 赋值条件 ELSE表达式 WHEN 赋值条件 ELSE.表达式 ;,Z = a WHEN p1 = 1 ELSEb WHEN p2 = 1 ELSEc;,该语句为并行语句, 在结构体中直接使用,1、常用实例及其语法,2选1多路选择器相关语法现象 进程语句
8、和顺序语句,在一个结构体中可以包含任意个进程语句结构,所有的进程语句都是并行语句,而由任一进程PROCESS引导的语句(包含在其中的语句)结构属于顺序语句。 PROCESS(敏感信号列表) (顺序语句) END PROCESS;,进程自身是并行的,但 进程内部是顺序的,敏感信号列表是指用于激活进程的信号列表,1、常用实例及其语法,D触发器的VHDL描述,LIBRARY IEEE ; USE IEEE.STD_LOGIC_1164.ALL ; ENTITY DFF1 IS PORT (CLK : IN STD_LOGIC ;D : IN STD_LOGIC;Q : OUT STD_LOGIC )
9、; END ;,库调用语句,1、常用实例及其语法,D触发器的VHDL描述,ARCHITECTURE bhv OF DFF1 IS SIGNAL Q1: STD_LOGIC; BEGIN PROCESS (CLK,Q1) BEGIN IF CLKEVENT AND CLK =1 THEN Q1 = D; END IF; END PROCESS ; Q = Q1;-将内部的暂存数据向端口输出(双横线-是注释符号) END bhv;,类似于在芯片内部定义一个数据的暂存节点,检测时钟上升沿,1、常用实例及其语法,D触发器的相关语法现象 设计库和标准程序包 VHDL库可以看成是一种用来存储预先完成的程序
10、包、数据集合体和元件的仓库 VHDL语言库的种类: 资源库:常规元件和标准模块存放的库(IEEE,STD) 设计库:用户库WORK,1、常用实例及其语法,D触发器的相关语法现象 设计库和标准程序包 IEEE库:包含有IEEE标准的程序包和其他一些支持工业标准的程序包。 IEEE库中常用的四个程序包: STD_LOGIC_1164 STD_LOGIC_ARITH STD_LOGIC_SIGNED STD_LOGIC_UNSIGED,1、常用实例及其语法,D触发器的相关语法现象 设计库和标准程序包 STD库:定义了两个标准程序包STANDARD和TEXTIO。两个程序包在综合和编译译过程中是自动被
11、包含进去的(不用专门的库调用语句,自动打开) WORK库:是用户的VHDL设计现行工作库,用于存放用户设计和定义的一些设计单元和程序包。VHDL综合器将保存设计的目录文件夹默认为WORK库 VITAL库:用于门级时序仿真,但一般并不需要,1、常用实例及其语法,D触发器的相关语法现象 设计库和标准程序包 使用库和程序包的一般定义表式是: LIBRARY ; USE ALL;LIBRARY IEEE ; USE IEEE.STD_LOGIC_1164.ALL;,1、常用实例及其语法,D触发器的相关语法现象 标准逻辑位数据类型STD_LOGIC,STD_LOGIC数据类型在IEEE库std_logi
12、c_1164程序包中定义: TYPE STD_LOGIC IS (U,X,0,1,Z,W,L,H,-);,BIT数据类型定义在STD库的STANDARD程序包中: TYPE BIT IS(0,1);,调用该数据类型要不要事先打开STD库?,有些状态仿真时才有用,注意事先打开IEEE库,1、常用实例及其语法,D触发器的相关语法现象 信号定义和数据对象 “SIGNAL Q1:STD_LOGIC;” 信号定义在结构体的说明部分,在整个结构体有效,往往是作为进程之间信息通信的一种手段,信号的赋值存在一个延时 ( b1 THEN q1 = 1; ELSIF a1 b1 THEN q1 b1 THEN q
13、1 = 1; ELSE q1 = 0; END IF; ,1、常用实例及其语法,D触发器的相关语法现象 时钟触发方式(边沿、电平)的VHDL表述 边沿触发:, PROCESS (CLK) BEGIN IF CLKEVENT AND (CLK=1) AND (CLKLAST VALUE=0) THEN Q = D; -确保CLK的变化是一次上升沿的跳变 END IF; END PROCESS ;,考虑到CLK的数据类型std_logic为9种取值,1、常用实例及其语法,D触发器的相关语法现象 时钟触发方式(边沿、电平)的VHDL表述 边沿触发:,. PROCESS (CLK) BEGIN IF
14、CLK=1 AND CLKLAST_VALUE = 0 -同上例 THEN Q = D; END IF; END PROCESS ;,注意进程的敏感信号,1、常用实例及其语法,D触发器的相关语法现象 时钟触发方式(边沿、电平)的VHDL表述 边沿触发:,LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; PROCESS (CLK) BEGIN IF rising_edge(CLK) -必须打开STD_LOGIC_1164程序包 THEN Q1 = D; END IF; END PROCESS; ,下降沿:falling_edge() CLKEVENT AND CLK=0,1、常用实例及其语法,D触发器的相关语法现象 时钟触发方式(边沿、电平)的VHDL表述 边沿触发:, PROCESS BEGIN Wait until CLK = 1; -利用wait语句 Q = D ; END PROCESS;,进程可以没有敏感信号列表,