1 / 218

可编程逻辑器件讲义

可编程逻辑器件讲义. 第三讲  VHDL 程序设计. 本讲主要内容. 常用实例及其语法 多路选择器、寄存器、全加器、计数器等 VHDL 基本语法 基本语言要素(信号、变量等)、常用用语句( IF 、 CASE )、进程和并行语句的概念等 VHDL 进阶 类属参数、子程序(函数、过程)、自定义库使用、顺序并行语句( LOOP 、 NEXT 等)、属性描述与定义语句. 1 、常用实例及其语法. 2 选 1 多路选择器. mux21a 实体. mux21a 结构体. 实体描述. 结 构 体 描 述. 1 、常用实例及其语法. 行为描述.

borka
Télécharger la présentation

可编程逻辑器件讲义

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 可编程逻辑器件讲义 第三讲 VHDL程序设计

  2. 本讲主要内容 • 常用实例及其语法 多路选择器、寄存器、全加器、计数器等 • VHDL基本语法 基本语言要素(信号、变量等)、常用用语句(IF、CASE)、进程和并行语句的概念等 • VHDL进阶 类属参数、子程序(函数、过程)、自定义库使用、顺序并行语句(LOOP、NEXT等)、属性描述与定义语句

  3. 1、常用实例及其语法 • 2选1多路选择器 mux21a实体 mux21a结构体

  4. 实体描述 结 构 体 描 述 1、常用实例及其语法 行为描述 • 2选1多路选择器 ENTITY mux21a IS PORT ( a, b:INBIT; s:INBIT; y:OUTBIT); ENDENTITYmux21a; ARCHITECTUREoneOFmux21aIS BEGIN y<= a WHEN s =‘0’ELSE b ; END ARCHITECTURE one ;

  5. 1、常用实例及其语法 数据流(RTL)描述 • 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 <= d OR e; END ARCHITECTURE one ;

  6. 进程 1、常用实例及其语法 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 ; • 2选1多路选择器 行为描述(含进程) ENTITY mux21a IS PORT ( a, b, s: IN BIT; y : OUT BIT ); END ENTITY mux21a;

  7. 1、常用实例及其语法 • 2选1多路选择器 从上面的程序分析得到如下点启示: • VHDL程序构成主要包含两块:实体和结构体 • 一个实体可以采用不同的结构体设计

  8. 1、常用实例及其语法 实体定义语句,e_name为实体名,一般英文字母开头,数字结尾,要见名识义,不要与关键字和以定义的元件名重名 • 2选1多路选择器相关语法现象 • 实体表达 ENTITY e_name IS PORT ( p_name : port_m data_type; ... p_name : port_m data_type); END ENTITY e_name; 端口定义语句由PORT引导,p_name为端口名,语法要求和实体名一致。port_m为端口模式,data_type为端口数据类型

  9. 1、常用实例及其语法 • 2选1多路选择器相关语法现象 • 端口模式 • IN输入端口,定义的通道为单向只读模式 • OUT输出端口,定义的通道为单向输出模式 • INOUT定义的通道确定为输入输出双向端口 • BUFFER缓冲端口,其功能与INOUT类似 • 数据类型 • INTEGER、BOOLEAN、BIT、STD_LOGIC; • ‘0’或‘1’解释为BIT,无引号解释为INTEGER;

  10. 1、常用实例及其语法 说明语句用于定义数据对象、数据类型和元件调用声明等,并非必要 • 2选1多路选择器相关语法现象 • 结构体表达 ARCHITECTURE arch_name OF e_name IS [说明语句] BEGIN (功能描述语句) END ARCHITECTURE arch_name ; 功能描述语句是必要的,以并行语句、顺序语句或两者的混合形式出现 结构体描述由关键字ARCHITECTURE引导,arch_name为 结构名,语法要求和实体名一致。

  11. 1、常用实例及其语法 • 2选1多路选择器相关语法现象 • 赋值符号和数据比较符号 • 信号赋值号:“<=”y<=a 并非立即发生 • “=”没有赋值的含义,只是一种数据比较符号 IFaTHEN... --注意,a的数据类型必须是boolean IF(s1=‘0’)AND(s2=‘1’)OR(c<b+1)THEN ..

  12. 1、常用实例及其语法 • 2选1多路选择器相关语法现象 • 逻辑操作符 • AND、OR、NOT、NAND、NOR、XOR、XNOR • 条件语句 • IF _ THEN _ ELSE… 支持嵌套 • IF语句必须以语句 “END IF;”结束 • 此语句为顺序执行语句,常在进程中使用 顺序语句和并行语句(模块)的区别?

  13. 1、常用实例及其语法 • 2选1多路选择器相关语法现象 • WHEN_ELSE条件信号赋值语句 赋值目标 <= 表达式 WHEN 赋值条件 ELSE         表达式 WHEN 赋值条件 ELSE ...         表达式 ; Z <= a WHEN p1 = '1' ELSE b WHEN p2 = '1' ELSE c; 该语句为并行语句, 在结构体中直接使用

  14. 1、常用实例及其语法 • 2选1多路选择器相关语法现象 • 进程语句和顺序语句 • 在一个结构体中可以包含任意个进程语句结构,所有的进程语句都是并行语句,而由任一进程PROCESS引导的语句(包含在其中的语句)结构属于顺序语句。 • PROCESS(敏感信号列表) • …(顺序语句) • END PROCESS; 敏感信号列表是指用于激活进程的信号列表 进程自身是并行的,但 进程内部是顺序的

  15. 1、常用实例及其语法 • D触发器的VHDL描述 LIBRARY IEEE ; USE IEEE.STD_LOGIC_1164.ALL ; ENTITY DFF1IS PORT (CLK :IN STD_LOGIC ; D : IN STD_LOGIC; Q : OUT STD_LOGIC ); END ; 库调用语句,

  16. 1、常用实例及其语法 类似于在芯片内部定义一个数据的暂存节点 • D触发器的VHDL描述 ARCHITECTURE bhv OF DFF1 IS SIGNAL Q1: STD_LOGIC; BEGIN PROCESS (CLK,Q1) BEGIN IF CLK'EVENT AND CLK ='1' THEN Q1 <= D; END IF; END PROCESS ; Q <= Q1;--将内部的暂存数据向 端口输出(双横线--是注释符号) END bhv; 检测时钟上升沿

  17. 1、常用实例及其语法 • D触发器的相关语法现象 • 设计库和标准程序包 VHDL库可以看成是一种用来存储预先完成的程序包、数据集合体和元件的仓库 • VHDL语言库的种类: 资源库:常规元件和标准模块存放的库(IEEE,STD) 设计库:用户库WORK

  18. 1、常用实例及其语法 • D触发器的相关语法现象 • 设计库和标准程序包 • IEEE库:包含有IEEE标准的程序包和其他一些支持工业标准的程序包。 IEEE库中常用的四个程序包: STD_LOGIC_1164 STD_LOGIC_ARITH STD_LOGIC_SIGNED STD_LOGIC_UNSIGED

  19. 1、常用实例及其语法 • D触发器的相关语法现象 • 设计库和标准程序包 • STD库:定义了两个标准程序包STANDARD和TEXTIO。两个程序包在综合和编译译过程中是自动被包含进去的(不用专门的库调用语句,自动打开) • WORK库:是用户的VHDL设计现行工作库,用于存放用户设计和定义的一些设计单元和程序包。VHDL综合器将保存设计的目录文件夹默认为WORK库 • VITAL库:用于门级时序仿真,但一般并不需要

  20. 1、常用实例及其语法 • D触发器的相关语法现象 • 设计库和标准程序包 • 使用库和程序包的一般定义表式是: LIBRARY <设计库名>; USE <设计库名>.<程序包名>.ALL; LIBRARY IEEE ; USE IEEE.STD_LOGIC_1164.ALL;

  21. 1、常用实例及其语法 调用该数据类型要不要事先打开STD库? • D触发器的相关语法现象 • 标准逻辑位数据类型STD_LOGIC BIT数据类型定义在STD库的STANDARD程序包中: TYPE BIT IS('0','1'); 有些状态仿真时才有用 STD_LOGIC数据类型在IEEE库std_logic_1164程序包中定义: TYPE STD_LOGIC IS ('U','X','0','1','Z','W','L','H','-'); 注意事先打开IEEE库

  22. 1、常用实例及其语法 • D触发器的相关语法现象 • 信号定义和数据对象 “SIGNAL Q1:STD_LOGIC;” 信号定义在结构体的说明部分,在整个结构体有效,往往是作为进程之间信息通信的一种手段,信号的赋值存在一个延时δ (<=) 输入输出端口理解为可见信号 其他数据对象:常量、变量 变量往往定义在进程,子程序的说明部分,是局部量,变量的赋值是立即的 (:=)

  23. 1、常用实例及其语法 • D触发器的相关语法现象 • 上升沿检测表式和信号属性函数EVENT “CLK'EVENT AND CLK='1'” <信号名>'EVENT 下降沿的检测?

  24. 1、常用实例及其语法 CLK语句是电路引入时序环节的关键? • D触发器的相关语法现象 • 不完整条件语句与时序电路 ENTITYCOMP_BADIS PORT( a1,b1 : IN BIT; q1 : OUT BIT); END; ARCHITECTURE one OF COMP_BAD IS BEGIN

  25. 1、常用实例及其语法 • D触发器的相关语法现象 • 不完整条件语句与时序电路 PROCESS (a1,b1) BEGIN IF a1 > b1 THEN q1 <= '1'; ELSIF a1< b1 THEN q1 <= '0'; --未提及当a1=b1时,q1作何操作 END IF; END PROCESS ; END ;

  26. 1、常用实例及其语法 不完整条件语句是构成时序电路的关键 • D触发器的相关语法现象 • 不完整条件语句与时序电路

  27. 1、常用实例及其语法 • D触发器的相关语法现象 • 不完整条件语句与时序电路 … IFa1>b1THEN q1<='1'; ELSE q1<= '0'; END IF; …

  28. 1、常用实例及其语法 • D触发器的相关语法现象 • 时钟触发方式(边沿、电平)的VHDL表述 边沿触发: 考虑到CLK的数据类型std_logic为9种取值 … PROCESS (CLK) BEGIN IF CLK'EVENT AND (CLK='1') AND (CLK'LAST VALUE='0') THEN Q <= D; --确保CLK的变化是一次上升沿的跳变 END IF; END PROCESS ;

  29. 1、常用实例及其语法 • D触发器的相关语法现象 • 时钟触发方式(边沿、电平)的VHDL表述 边沿触发: 注意进程的敏感信号 ... PROCESS (CLK) BEGIN IF CLK=‘1‘ AND CLK’LAST_VALUE = ’0‘ --同上例 THEN Q <= D; END IF; END PROCESS ;

  30. 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() CLK’EVENT AND CLK=‘0’

  31. 1、常用实例及其语法 • D触发器的相关语法现象 • 时钟触发方式(边沿、电平)的VHDL表述 边沿触发: 进程可以没有敏感信号列表 … PROCESS BEGIN Wait until CLK = '1'; --利用wait语句 Q <= D ; END PROCESS; 下降沿如何表述?

  32. 1、常用实例及其语法 • D触发器的相关语法现象 • 时钟触发方式(边沿、电平)的VHDL表述 边沿触发: 注意敏感信号列表 … PROCESS (CLK) BEGIN IF CLK = '1‘ THEN Q <= D ; --利用进程的启动特性产生对CLK的边沿检测 END IF; END PROCESS ;

  33. 1、常用实例及其语法 • D触发器的相关语法现象 • 时钟触发方式(边沿、电平)的VHDL表述 边沿触发: 边沿(上升沿)触发方式的工作时序

  34. 1、常用实例及其语法 • D触发器的相关语法现象 • 时钟触发方式(边沿、电平)的VHDL表述 电平触发: … PROCESS (CLK,D) BEGIN IF CLK = '1‘ --电平触发型寄存器 THEN Q <= D; END IF; END PROCESS ; 敏感信号列表不只CLK 信号

  35. 1、常用实例及其语法 • D触发器的相关语法现象 • 时钟触发方式(边沿、电平)的VHDL表述 电平触发: 电平(高电平)触发方式的工作时序

  36. 1、常用实例及其语法 异步时序电路可由多 个进程来实现,每个 进程的激活时钟不为 同一个 • D触发器的相关语法现象 • 异步时序电路设计 何为异步? 不同时序部分时钟信号不 为同一个

  37. 1、常用实例及其语法 注意到两进程的时 钟敏感信号不一样 • D触发器的相关语法现象 • 异步时序电路设计 … ARCHITECTURE bhv OF MULTI_DFF IS SIGNAL Q1,Q2 : STD_LOGIC; BEGIN PRO1: PROCESS (CLK) BEGIN IF CLK'EVENT AND CLK='1' THEN Q1 <= NOT (Q2 OR A); END IF; END PROCESS; PRO2: PROCESS (Q1) BEGIN IF Q1'EVENT AND Q1='1' THEN Q2 <= D; END IF; END PROCESS; QQ <=Q2; …

  38. 1、常用实例及其语法 • 1位二进制全加器的VHDL描述  通过该实例,主要掌握VHDL语言的层次化设计方法。整个设计的顶层和底层都将采用VHDL语言描述。

  39. 1、常用实例及其语法 • 1位二进制全加器的VHDL描述 ain和bin为1位加数和被 加法,cin为进位输入, sum为1位求和结果,cout 为进位输出 1位全加器可以由两个半加器构成

  40. 1、常用实例及其语法 • 1位二进制全加器的VHDL描述 半加器可以由原理图实现,也可以由VHDL设计完成

  41. 1、常用实例及其语法 • 1位二进制全加器的VHDL描述 • 采用两种VHDL方法来描述半加器 方法一:数据流(布尔方程)

  42. 1、常用实例及其语法 • 1位二进制全加器的VHDL描述 • 采用两种VHDL方法来描述半加器 方法一:数据流(布尔方程) 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 is BEGIN so <= NOT(a XOR (NOT b)); co <= a AND b; END ARCHITECTURE fh1;

  43. 1、常用实例及其语法 • 1位二进制全加器的VHDL描述 • 采用两种VHDL方法来描述半加器 方法二:行为描述(真值表)

  44. 1、常用实例及其语法 • 1位二进制全加器的VHDL描述 • 采用两种VHDL方法来描述半加器 方法二:行为描述(真值表) 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 is SIGNAL abc : STD_LOGIC_VECTOR(1 DOWNTO 0) ;

  45. 1、常用实例及其语法 BEGIN abc <= a & b; --a相并b,即a与b并置操作 PROCESS(abc) BEGIN CASE abc IS --类似于真值表的CASE语句 WHEN "00“ => so<='0'; co<='0'; WHEN "01“ => so<='1'; co<='0'; WHEN "10“ => so<='1'; co<='0'; WHEN "11“ => so<='0'; co<='1‘ ; WHEN OTHERS => NULL ; END CASE; END PROCESS; END ARCHITECTURE fh1 ; 两种方法描述的的半加器 选择其中一种即可

  46. 1、常用实例及其语法 • 1位二进制全加器的VHDL描述 • 全加器使用到的或门描述 LIBRARYIEEE;--或门逻辑描述 USEIEEE.STD_LOGIC_1164.ALL; ENTITYor2aIS PORT(a,b:INSTD_LOGIC; c: OUTSTD_LOGIC); ENDENTITYor2a; ARCHITECTURE oneOFor2aIS BEGIN c<= a OR b; END ARCHITECTURE one ;

  47. 1、常用实例及其语法 • 1位二进制全加器的VHDL描述 底层的半加器和或门用VHDL语言描述完成,做成封装。顶 层按上图完成原理图设计,即为前面所介绍的混合设计法。 但现在,我们将采用顶层VHDL语言描述法。

  48. 1、常用实例及其语法 • 1位二进制全加器的VHDL描述 LIBRARYIEEE;USE IEEE.STD_LOGIC_1164.ALL; ENTITYf_adderIS PORT (ain,bin,cin: INSTD_LOGIC; cout,sum:OUTSTD_LOGIC); ENDENTITYf_adder; ARCHITECTUREfd1OFf_adderIS COMPONENTh_adder–在结构体说明部分声明元件 PORT(a,b:INSTD_LOGIC; co,so :OUT STD_LOGIC); ENDCOMPONENT;

  49. 1、常用实例及其语法 • 1位二进制全加器的VHDL描述 COMPONENTor2a--声明被调用的或门元件 PORT(a,b : IN STD_LOGIC; c:OUTSTD_LOGIC); ENDCOMPONENT; SIGNALd,e,f:STD_LOGIC; --定义3个信号作为内部的连接线。 BEGIN--例化元件 u1 : h_adder PORT MAP(a=>ain,b=>bin,co=>d,so=>e); u2 : h_adder PORT MAP(a=>e, b=>cin, co=>f,so=>sum); u3 : or2a PORT MAP(a=>d, b=>f, c=>cout); END ARCHITECTURE fd1; 例化元件的同时,通过中 间信号节点完成电气连接 注意顶层和底层的VHDL文件应在同一设计目录中

  50. 1、常用实例及其语法 • 全加器的VHDL描述的相关语法 • CASE语句(多条件分支语句) 给出表达式可能的取值 CASE<表达式>IS When <选择值或标识符> => <顺序语句>; ... ; <顺序语句>; When <选择值或标识符> => <顺序语句>; ... ; <顺序语句>; ... WHEN OTHERS => <顺序语句>; END CASE ; “=>”相当于“THEN” “WHEN OTHERS”不可少 和IF语句一样,CASE语句也是顺序语句。

More Related