1 / 248

第三章 硬件描述语言 VHDL

第三章 硬件描述语言 VHDL. 3.1 概述 3.2 VHDL 语言设计单元的基本结构 3.3 VHDL 语言的语言要素 3.4 VHDL 语言的描述语句 3.5 VHDL 语言的库、程序包及配置 3.6 有限状态机设计技术. 3.1 硬件描述语言与 VHDL. HDL: Hardware Description Language VHDL── VHSIC Hardware Description Language ┖─Very High Speed Integrated Circuit

waylon
Télécharger la présentation

第三章 硬件描述语言 VHDL

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 3.1概述 3.2VHDL语言设计单元的基本结构 3.3 VHDL语言的语言要素 3.4VHDL语言的描述语句 3.5VHDL语言的库、程序包及配置 3.6 有限状态机设计技术

  2. 3.1 硬件描述语言与VHDL • HDL: Hardware Description Language • VHDL── VHSIC Hardware Description Language ┖─Very High Speed Integrated Circuit • IEEE国际标准:IEEE std 1076-1987, 1076-1993, 2个版本 • 包括模拟电路的扩充版本 VHDL-AMS ( AMS -- Analog and Mixed Signal )

  3. VHDL描述范围 • 系统级: C 或C的扩展:SystemC, SpecC • 行为算法级 • 寄存器传输级RTL: AHPL, DDL, CDL • 逻辑级LDL: GFHL, ndl, … • 开关级: Splice • 电路级: Spice • 版图级:制版语言 CIF, LEF, DEF VHDL-AMS VERILOG VHDL EDIF

  4. 3.2 VHDL语言设计单元的基本结构3.2.11个实体+ 若干个结构体 • 设计单元的概念 • 设计单元的构成 • 实体Entity; 结构体Architecture 模块接口 Entity Architectures 行为 描述 1 行为 描述 2 结构 描述 1 数据流 描述  

  5. X SUM CARRY Y 例 3.1:半加器 1. 实体(entity) entity Half_Adder is port ( X: in bit ; Y: in Bit ; Sum : out bit ; Carry : Out bit) ; end Half_adder;

  6. 2. 结构体 A1 Architecture A1 of Half_Adder is Begin Process(x,y) begin if x=‘0’ and y=‘0’ then sum<=‘0’;carry<=‘0’; Elsif x=‘1’ and y=‘1’ then sum<=‘0’;carry<=‘1’; Else sum<=‘1’;carry<=‘0’; End if; End process; End A1;

  7. 3. 结构体 A2 Architecture A2 of Half_Adder is component XOR2 port ( I1, I2: in BIT; Out1: out BIT); end component; component AND2 port ( I1, I2: BIT; Out1: out BIT); end component; begin A: XOR2 port map (X, Y, Sum); B: AND2 port map (X, Y, Carry); end A2;

  8. 4. 结构体 A3 Architecture A3 of Half_Adder is begin Sum <= X xor Y after 5 ns; Carry <= X and Y after 5 ns; end A3;

  9. 3.2.2 完整的VHDL设计结构 1. 一个完整的VHDL设计单元(设计文件),通常包括: ■实体说明(Entity) ■结构体(Architecture) ■配置(Configuration) ■库(Library)和程序包(Package)

  10. 2. VHDL设计单元的结构 组成 库、程序包 实体说明 结构体 进程 或其他并行结构 设计单元 配置

  11. 3.设计实体举例 【例 3.2】试用VHDL语言设计一个四选一数据选择器。 数据输入:D3 D2 D1 D0 数据输出:Y 选择控制:S1 S0

  12. VHDL程序如下: 库 LIBRARY IEEE; --IEEE库 USE IEEE.STD_LOGIC_1164.ALL; ---程序包 USE IEEE.STD_LOGIC_ARITH.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY mux41 IS---定义实体名 PORT ( S1, S0: IN STD_LOGIC; ---定义输入信号 D3, D2, D1, D0: IN STD_LOGIC; Y: OUT STD_LOGIC ---定义输出信号 ); END mux41; ARCHITECTURE behaveior OF mux41 IS---定义结构体名 BEGIN ---逻辑功能描述 Y<=D0 WHEN S1=‘0’ AND S0=‘0’ ELSE D1 WHEN S1=‘0’ AND S0=‘1’ ELSE D2 WHEN S1=‘1’ AND S0=‘0’ ELSE D3; END behaveior; 程序包 实体说明 结构体

  13. 4. VHDL设计单元中各结构 的作用 库:是用来存放已设计好的程序包、数据集合体、元件的仓库,供用户进行VHDL设计时调用。 程序包:用VHDL语言编写的共享文件,定义了将要使用的常数、数据类型、子程序和设计好的电路单元等。 实体说明:定义电路单元的输入、输出引脚信号。以标识符ENTITY开始,以END结束。 结构体:用来描述电路内部结构和逻辑功能。并以标识符ARCHITECTURE开头,以END结尾。

  14. 3.2.3 实体说明 1. 实体说明格式 entity实体名is [端口说明]; [类属参数说明]; end实体名;

  15. 2. 实体名标识符命名规则 • 由字母、数字、下划线字符组成 • 第一个字符必须是字母 • 不能有相邻的下划线字符,最后一个字符不能是下划线 • 不区分大小写 • VHDL程序保存文件名必须与实体名相同

  16. 端口说明格式 Port (端口名{,端口名}:方式 数据类型名; 端口名{,端口名}:方式 数据类型名); 类属参数说明 generic (名称:数据类型:=参数值);

  17. 端口方式

  18. 端口模式的符号: IN端口模式: INOUT端口模式: BUFFER端口模式: OUT端口模式:

  19. 类属(generic)声明 • 指定一些参数,例如时间参数,尺寸参数等。 • 该模块被调用时从外部传入参数值。 • 参数值为本实体所属的所有结构体使用。 • 传入的类属参数作为常量使用,在使用时不能修改。

  20. entity mux is port(in1,in2,sel: in bit ; output : out bit ); generic (delay : time:=5 ns); end mux ;

  21. 3.2.4 VHDL语言的结构体 结构体是设计实体的核心,它具体指明了设计实体的行为、元件及内部连接关系。 结构体所承担的任务: ① 定义结构体内部所使用的各项元素; ② 通过VHDL提供的语句来描述设计实体所要求的具体行为和功能; ③ 描述各元件之间的连接。

  22. 常数说明 结 构 体 说 明 数据类型说明 信号说明 结 构 体 例化元件说明 子程序说明 块语句 结 构 体 功 能 描 述 进程语句 信号赋值语句 子程序调用语句 元件例化语句 3.2.4 VHDL语言的结构体 结构体内部构造的描述层次和描述内容:

  23. 3.2.4 VHDL语言的结构体 结构体由两个基本部分组成: ①结构体说明,用来对数据类型、常数、信号、子程序和元件等进行说明。 ② 结构体功能描述,用来描述设计实体的逻辑行为,可以用不同的描述风格来表达设计实体的逻辑功能。

  24. 3.2.4 VHDL语言的结构体 1. 结构体的基本格式 ARCHITECTURE结构体名 OF实体名 IS [结构体说明语句;] BEGIN [功能描述语句;] END [ARCHITECTURE] [结构体名];

  25. 3.2.4 VHDL语言的结构体 2. 结构体说明语句 用于定义结构体中所用的数据对象和子程序,并对所引用的元件加以说明,如: ●信号(SIGNAL) ●类型(TYPE) ●常数(CONSTANT) ● 元件(COMPONENT) ●函数(FUNCTION) ●过程(PROCEDURE)

  26. 3.2.4 VHDL语言的结构体 块语句 结 构 体 功 能 描 述 进程语句 信号赋值语句 子程序调用语句 元件例化语句 3. 功能描述语句 用于描述实体的逻辑功能。 功能描述语句结构可以含有五种不同类型。

  27. 3.2.4 VHDL语言的结构体 3. 功能描述语句 ① 块语句(BLOCK) 块语句结构是由若干个并行执行语句构成的组合体,其功能是将结构体中的并行语句包装在一起,组成一个或多个模块(即子模块)。 ② 进程语句(PROCESS) 定义顺序语句模块,其内部为顺序语句,将从外部获得的信号值,或内部的运算数据向其他信号进行赋值。 ③ 信号赋值语句(SIGNAL) 用来将设计实体内的处理结果向所定义的信号或界面端口进行赋值。

  28. 3.2.4 VHDL语言的结构体 3. 功能描述语句 ④ 子程序调用语句 由过程(PROCEDURE)和函数(FUNCTION)组成,其内部是顺序语句。用来调用过程和函数,并将结果赋值给信号。 ⑤ 元件例化语句(COMPONENT) 元件例化语句用来调用另一个设计实体所描述的电路。调用时,元件例化语句对其他的设计实体做元件调用说明,并将元件的端口与其他元件、信号或高层设计实体的界面端口进行连接。

  29. 结构体说明 例:architecture behaviour of mux is begin if sel=‘1’then output<=in1 after delay; else output<=in2 after delay; end behaviour;

  30. 3.3 VHDL语言要素 3.3.1 VHDL语言数据类型 3.3.2 VHDL运算符 3.3.3 数据对象

  31. 3.3.1 VHDL语言的数据类型 • 标量类型:整数类型,浮点类型,物理类型       枚举类型 • 数值型数据说明的一般形式: type 数据名称 is <数据类型定义> <约束范围> • 例:  • type byte is range –127 to 127; • type num is integer range 0 to 9; • type resistance is range 1 to 10e8 units ohm; kohm=1000 ohm; end units;

  32. 文 字 类 型 整数:2,10E6 , 16#D2# 浮点:357.6, 8#43.2#e+5 字符:‘a’ 字符串:“sd89” 位串:B“110111” , O“712” , X”8BD” 物理: 1 kohm , 5 ns

  33. 枚举类型 • 枚举类型的定义格式 type 数据名称 is (元素,元素,......); 元素由标识符或文字组成 例:type boolean is (false,true); type two_level_logic is (‘0’,’1’);

  34. 复合类型 • 记录:异构复合类型,记录的元素可以是 不同类型 • 数组:同构复合结构,记录的元素具有 同一类型

  35. 记 录 • 记录的定义格式: type记录名称 is record 元素名:数据类型名; 元素名:数据类型名; ........ end record; 例:type pctbus is record adder : std_logic_vector(31 downto 0); data : std_logic_vector (0 to 31); end record;

  36. 数 组 • 限定性数组:确定每维的数据类型与范围 type 数组名 is array 范围 of 原数据类型 type word is array (15 downto 1) of bit • 非限定性数组:只确定数据类型不确定范围 type 数组名 is array(下标类型 range<>)of 原数据类型 type bit_vector is array (natural range<>) of bit; type string is array (positive range<>) of character;

  37. 子 类 型 • 通过对某个类型说明加以限制,定义该类型值域的一个子集。 格式:subtype 子类型名称 is 子类型说明 范围限制: subtype lower_letter is character range ‘a’ to ’z’; 下标限制: subtype register is bit_vector (0 to 7); 不加限制: subtype ascii is character;

  38. 2. VHDL的预定义数据类型 在标准程序包(STANDARD)中预先定义的数据类型,在实际使用中能自动包含在VHDL的源文件中。 (使用这些类型的数据时不用打开及调用对应的程序包) 分为:布尔数据类型 位数据类型 位矢量数据类型 字符数据类型 整数数据类型 自然数数据类型 正整数数据类型 实数数据类型 字符串数据类型 时间数据类型 错误等级数据类型

  39. 2. VHDL的预定义数据类型 (1)布尔(BOOLEAN)数据类型 二值枚举型数据类型,常用于关系运算和逻辑判断。 布尔数据量包括逻辑“假(FALSE)”和逻辑“真(TRUE)”两种取值。 TYPE BOOLEAN IS (FALSE,TRUE); 例如,在IF A>B语句中,若A>B成立,则布尔数据量为TRUE,否则布尔数据量为FALSE。 若某个信号或变量被定义为布尔数据,则在仿真中将自动对其赋值进行核查。 布尔数据没有数值的含义,不能进行算术运算,只能用于关系运算和逻辑判断。

  40. 2. VHDL的预定义数据类型 (2)位(BIT)数据类型 位数据类型也属于二值枚举型,通常用来表示信号的取值。 它的取值只有“0”和“1”。 定义格式: TYPE BIT IS (‘0’,‘1’); 位数据类型的数据对象为信号和变量,可以进行逻辑运算,其结果仍为位数据类型。

  41. 2. VHDL的预定义数据类型 (3)位矢量(BIT_VECTOR)数据类型 位矢量是基于位数据类型的数组,常用来表示总线的状态。 位矢量是用双引号括起来的数字序列,如“1011”,X“00EA”。 其中,“<>”表示数据范围未定界。 定义格式: TYPE BITVECTOR IS ARRAY (NATURAL RANGE < >) OF BIT; 规则:使用位矢量必须注明位宽,即数组中的元素个数和排列。 例如:SIGNAL b: BITVECTOR(0 TO 7); 定义b由b(0)~b(7)构成的矢量,左为b(0),右为b(7);

  42. 2. VHDL的预定义数据类型 (4)字符(CHARACTER)数据类型 字符数据类型是用单引号括起来的ASCII码字符,如‘X’、‘y’、‘6’、‘3’等。 定义格式: TYPE CHARACTER IS(ASCII码字符表中的全部字符); 规则:①字符型数据用单引号括起来; ②字符型数据的字母有大小写之分; ③字符型数据仅包括ASCII码字符表中的全部字符。

  43. 2. VHDL的预定义数据类型 (5)字符串(STRING)数据类型 字符串数据类型是用双引号括起来的字符序列,是由字符型数据组成的数组,也称字符矢量或字符串数组。 常用于程序的提示和说明。 定义格式: TYPESTRINGISARRAY(POSITIVERANGE < >)OFCHARACTER; 例如:“A BOY.”,“10101011”。

  44. 2. VHDL的预定义数据类型 (6)整数(INTEGER)数据类型 整数数据类型与数学中的整数定义相同。 包括:正整数、负整数和零。 取值范围:32位带符号数原码,-(231-1)~+(231-1) 即 -2147483647 ~ +2147483647。 定义格式: TYPE INTEGER IS RANGE -2147483647 TO +2147483647; 规则:①整数不能作为矢量,不能单独对某一位进行操作; ②整数不能用于逻辑运算,只能用于算术运算。 整数可以用进制来表示。 整数可以用来抽象地表达总线的状态。 如:15,10E3,16#D5#,2#11011010#,8#653#。

  45. 2. VHDL的预定义数据类型 (7)正整数(POSITIVE)数据类型 正整数数据类型是整数数据类型的子类型,是不包括0的正整数。 取值范围:32位带符号数原码,1~(231-1), 即 1~2147483647 定义格式: SUBTYPE POSITIVE IS INTEGER RANGE 1 TO INTEGER’HIGH; 其中,INTEGER’HIGH是数值类属性, 表示整数的上限值231-1。

  46. 2. VHDL的预定义数据类型 (8)自然数(NATURAL)数据类型 是整数数据类型的子类型,即非负的整数。 包括:0和正整数。 定义格式: SUBTYPE NATURAL IS INTEGER RANGE 0 TO INTEGER’HIGH;

  47. 2. VHDL的预定义数据类型 (9)实数(REAL)数据类型 实数数据类型类似于数学中的实数,也称为浮点数数据类型,只能在仿真中使用。 取值范围:-1.0E+38 ~ +1.0E+38 由正号、负号、小数点和数字组成。 例如:-2.5、-1.0E8。 定义格式: TYPE REAL IS RANGE -1.0E38TO+1.0E38;

  48. 2. VHDL的预定义数据类型 (10)时间(TIME)数据类型 用来表示时间的数据类型,由整数数据和单位两部分组成,取值范围是整数所定义的范围,仅在系统仿真时,用来表示信号延时的时间,不能用于逻辑综合。 例如:55 ms,20 ns。 定义格式: TYPE TIME IS RANGE –2147483647 TO 2147483647

  49. 2. VHDL的预定义数据类型 (10)时间(TIME)数据类型 units fs; --飞秒(10-15S) ps=1000fs; --皮秒 ns=1000ps; --纳秒 us=1000ns; --微秒 ms=1000us; --毫秒 sec=1000ms;--秒 min=60sec; --分 hr=60min; --时 END units;

  50. 2. VHDL的预定义数据类型 (11)错误等级(SEVERITY_LEVEL) 错误等级数据用于表征系统的工作状态。 包括:NOTE(注意),WARNING(警告), ERROR(出错),FAILURE(失败)。 在仿真过程中,可输出这4种值来提示被仿真系统当前的工作状态。 定义格式: TYPEseverity_levelIS(note,warning,error,failure);

More Related