第七章VHDL语言属性描述
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第七章 VHDL语言属性描述
1. 2. 3. • • • •
属性是指关于设计实体、结构体、类型、信号等项 目的指定特性。 属性提供了描述特定对象的多个侧面值的手段 信号属性在检测信号变化和建立详细的时域模型时非常 重要 为什么要有属性: 电路元件需要时钟信号同步 需要控制信号控制整个电路的行为(进程的执行) 时钟信号与控制信号的使用多种多样 利用属性可以使VHDL源代码更加简明扼要,便于理解
7.2 函数类属性 7.2.3 信号类型属性函数 主要用来得到信号的各种行为功能信息:包括信号值的变化、
信号变化后经过的时间、变化前的信号值等。共有5种属性:
(1)’EVENT --当前很短的时间内信号发生了变化,则返回TRUE, 否则返回FALSE。 (2)’ACTIVE --当前很短的时间内信号活跃,则返回TRUE,否则返 回FALSE。 (3)’LAST_EVENT --返回信号从前一个事件发生到现在的时间值。 (4)’LAST_VALUE --返回信号在最近一个事件发生以前的值 (5)’LAST_ACTIVE --返回信号从前一次活跃到现在的时间值
7.3 信号类属性 1 属性 ’DELAYED(t)
可以用’DELAYED(t) 属性的信号建立一个延迟信号附加在该信号
上。
例7-11 二输入与门附加延迟的描述
a
a_ipd
inta
c_opd
c
b
b_ipd
intb
7.3 信号类属性
library ieee; use ieee.std_logic_1164.all; entity and2 IS GENERIC (a_ipd, b_ipd, c_opd: TIME); PORT(a, b: IN cal_resist std_logic; c: OUT std_logic); end and2 ; ARCHITECTURE int_signals OF and2 IS SIGNAL inta, intb : std_logic; BEGIN inta <= TRANSPORT a AFTER a_ipd; intb <= TRANSPORT b AFTER b_ipd; c <= inta AND intb AFTER c_opd; END int_signals ; ARCHITECTURE attr OF and2 IS BEGIN c <= a’DELAYED(a_ipd) AND b’DELAYED(b_ipd) AFTER c_opd; END attr;
7.1 数值类属性
例7-1:PROCESS(a) TYPE bit16 IS Array(15 downto 0) OF std_logic; VARIABLE lef, rig, up, low: NATURAL; BEGIN 在递减区间 lef:=bit16’LEFT; --15 ‘LEFT=‘HIGH rig:=bit16’RIGHT; --0 ‘RIGHT=‘LOW up:=bit16’HIGH; --15 low:=bit16’LOW; --0 END PROCESS; PROCESS(a) TYPE bit16 IS Array(0 to 15) OF std_logic; 在递增区间 VARIABLE lef, rig, up, low: NATURAL; ‘LEFT=‘LOW BEGIN ‘RIGHT=‘HIGH lef:=bit16’LEFT; --0 rig:=bit16’RIGHT; --15 up:=bit16’HIGH; --15 low:=bit16’LOW; --0 END PROCESS;
• ’low:返回一个数据类型或子类型的最小值。
7.1 数值类属性 属性规则: 上下限:对数值取最大、最小值;对枚举类型数据下限取 左边界值,上限取右边界值;对数组取数组区间的最大最 小值。 左右边界:按书写顺序取左边或右边值。 例: SUBTYPE nat IS Natural Range 0 to 255; X:=nat’HIGH; --x等于255 X:=nat’LOW; --x等于0 X:=nat’RIGHT; --x等于255 X:=nat’LEFT; --x等于0
(1)’LEFT (n) --得到n区间的左端边界号 (2)’RIGHT(n) --得到n区间的右端边界号 (3)’HIGH(n) --得到n区间的高端边界号 (4)’ LOW(n) --得到n区间的低端边界号 其中n表示数组的区间序号(即维数)。当n=1时可以缺省,默认为一维 数组。 在递减区间 ‘LEFT=‘HIGH ‘RIGHT=‘LOW 在递增区间 ‘LEFT=‘LOW ‘RIGHT=‘HIGH
TYPE matrix IS ARRAY(0 TO 7, 15 DOWNTO 0) OF std_logic; i <= matrix ’ left (1); i <= matrix ’ right (1); i <= matrix ’ high (1); i <= matrix ’ low (1); i <= matrix ’ left (2); i <= matrix ’ right (2); i <= matrix ’ high (2); i <= matrix ’ low (2); -- i = 0; -- i = 7; -- i = 7; -- i = 0; -- i = 15; -- i = 0; -- i = 15; -- i = 0;
7.2 函数类属性 例7-4
PACKAGE w_pack IS TYPE week IS (sun, mon, tue, wed, thu, fri, sat); TYPE r_week IS week RANGE sat DOWNTO sun; END w_pack;
求自定义类型的属性: week’SUCC(mon) week’PRED(mon) week’LEFTOF(mon) week ’RIGHTOF(mon)
7.2 函数类属性 7.2.1 数据类型属性函数 主要用来得到数据类型的各种相关信息,共6种:
(1)’POS(数据值) --返回数据类型定义中输入的X值的位置序号 (2)’VAL(位置序号) --返回输入的位置序号X处的值 (3)’SUCC(数据值) --返回数据类型定义中该值的下一个对应值 (4)’PRED(数据值) --返回数据类型定义中该值的前一个对应值 (5)’LEFTOF(数据值) --返回数据类型定义中该值的左边值 (6)’RIGHTOF(数据值) --返回数据类型定义中该值的右边值 • 对于递增区间: • ’SUCC(x) = ’RIGHTOF(x) • ’PRED(x) = ’LEFTOF(x) • 对于递减区间: • ’SUCC(x) = ’LEFTOF(x) • ’PRED(x) = ’RIGHTOF(x)
7.2 函数类属性 2 属性函数’ LAST_ EVENT
例7-10 D触发器建立时间的检测
library ieee; use ieee.std_logic_1164.all; entity dff IS GENERIC(setup_time,hold_time: TIME); PORT(d,clk: IN cal_resist std_logic; q: OUT std_logic); end dff ; ARCHITECTURE dff_behav OF dff IS BEGIN Setup_check:PROCESS(clk) BEGIN IF clk’LAST_VALUE =‘0’ AND clk’EVENT THEN ASSERT(d’LAST_EVENT >= setup_time) REPORT “SETUP VIOLATON” SEVERITY ERROR; END IF;
属性
VHDL提供5类预定义属性:
1、数值类属性 2、函数类属性 3、信号类属性
4、数据类型类属性
5、数组范围类属性
7.1 数值类属性
7.1.1 常用数据的数值属性
主要用于返回常用数据类型、数组或是块的有关值: 例如:返回数组长度、数据类型的’left:返回一个数据类型或子类型最左边的值。 • ’right:返回一个数据类型或子类型最右边的 值。 • ’high:返回一个数据类型或子类型的最大值。
7.2 函数类属性 1 属性函数’EVENT和’ LAST_VALUE
’EVENT主要用来检测脉冲信号的正跳变或负跳变边沿,也可以检
查信号是否刚发生变化并且正处于某一个电平值。
例7-9 D触发器时钟脉冲上升沿的检测
library ieee; use ieee.std_logic_1164.all; entity dff IS PORT(d,clk: IN cal_resist std_logic; q: OUT std_logic); end dff ; ARCHITECTURE dff OF dff IS BEGIN PROCESS(clk) BEGIN IF clk=‘1’ AND clk’EVENT THEN q <= d; END IF; END PROCESS; END dff;
7.1 数值类属性
例7-2 枚举类型数据数值属性描述
Architecture voltb of volta IS TYPE volt IS (uV,mV,V,kV); SUBTYPE s_volt IS volt RANGE (V DOWNTO mV); SIGNAL S1,S2,S3,S4: VOLT; BEGIN S1<=volt’HIGH; --kV S2<=volt’LOW; --uV S3<=s_volt’LEFT; --V S4<=s_volt’RIGHT; --mV END voltb;
7.2 函数类属性
END PROCESS; Dff_process: PROCESS(clk) BEGIN IF clk’LAST_VALUE=‘0’ AND clk’EVENT THEN q <= d; END IF; END PROCESS; END dff_behav ; Setup time Hold time
--得tue --得sun --得sun --得tue
r_week’SUCC(mon) r_week’PRED(mon) r_week’LEFTOF(mon) r_week ’RIGHTOF(mon)
--得tue --得sun --得tue --得sun
7.2 函数类属性 7.2.2 数组属性函数 主要用来得到数组的信息。共有4种属性:
7.2 函数类属性
指属性以函数的形式返回有关数据类型、数组或是信号的信 息。 函数类属性使用时以函数表达式的形式出现,属性根据输 入的自变量值去执行函数,返回一个相应的值。该返回值可能 是数组区间的某一个值,也可能是信号的变化值,或是枚举数 据的位置序号等。
函数类属性分三类: 1. 数据类型属性函数 2. 数组类型属性函数 3. 信号属性函数
d
clk q
7.3 信号类属性 根据所加属性的信号去建立一个新的信号,称信号类 属性。 信号类属性有4种: 1. ’DELAYED(t) : t 为时间表达式,该属性将产生 一个特别的延迟信号,该信号使主信号按t确定的 时间产生附加的延迟。新信号与主信号类型相同。 该属性可以用来检查信号的保持时间。 2. ’STABLE(t) : 当所加属性的信号在时间t内没有 发生变化,则返回true,否则返回false. 该属性中当 t=0时可以得到与属性’EVENT相反的值。 3. ’QUIET(t) : 信号在时间t内不活跃,则返回true, 否则返回false。典型应用是用来对中断优先处理 机制进行建模。 4. ‘TRANSACTION: 所加属性的信号活跃时将对 所建立的bit数据取反。
7.1 数值类属性
7.1.1 数组的数值属性
数组属性只有一个:取数组的长度值。格式: <数组名>‘LENGTH(n); 其中n是多维数组的维数;如二维数组n=2; 对一维数组n缺省。
例7-3 一维数组数值属性描述
PROCESS(b) TYPE bit8 IS array (7 downto 0) of bit; TYPE bit31_8 IS array (31 downto 8) of bit; VARIABLE b1,b2: integer; BEGIN b1:=bit8’LENGTH; --b1=8 B2:=BIT31_8’LENGTH; --b2=24 END PROCESS
1. 2. 3. • • • •
属性是指关于设计实体、结构体、类型、信号等项 目的指定特性。 属性提供了描述特定对象的多个侧面值的手段 信号属性在检测信号变化和建立详细的时域模型时非常 重要 为什么要有属性: 电路元件需要时钟信号同步 需要控制信号控制整个电路的行为(进程的执行) 时钟信号与控制信号的使用多种多样 利用属性可以使VHDL源代码更加简明扼要,便于理解
7.2 函数类属性 7.2.3 信号类型属性函数 主要用来得到信号的各种行为功能信息:包括信号值的变化、
信号变化后经过的时间、变化前的信号值等。共有5种属性:
(1)’EVENT --当前很短的时间内信号发生了变化,则返回TRUE, 否则返回FALSE。 (2)’ACTIVE --当前很短的时间内信号活跃,则返回TRUE,否则返 回FALSE。 (3)’LAST_EVENT --返回信号从前一个事件发生到现在的时间值。 (4)’LAST_VALUE --返回信号在最近一个事件发生以前的值 (5)’LAST_ACTIVE --返回信号从前一次活跃到现在的时间值
7.3 信号类属性 1 属性 ’DELAYED(t)
可以用’DELAYED(t) 属性的信号建立一个延迟信号附加在该信号
上。
例7-11 二输入与门附加延迟的描述
a
a_ipd
inta
c_opd
c
b
b_ipd
intb
7.3 信号类属性
library ieee; use ieee.std_logic_1164.all; entity and2 IS GENERIC (a_ipd, b_ipd, c_opd: TIME); PORT(a, b: IN cal_resist std_logic; c: OUT std_logic); end and2 ; ARCHITECTURE int_signals OF and2 IS SIGNAL inta, intb : std_logic; BEGIN inta <= TRANSPORT a AFTER a_ipd; intb <= TRANSPORT b AFTER b_ipd; c <= inta AND intb AFTER c_opd; END int_signals ; ARCHITECTURE attr OF and2 IS BEGIN c <= a’DELAYED(a_ipd) AND b’DELAYED(b_ipd) AFTER c_opd; END attr;
7.1 数值类属性
例7-1:PROCESS(a) TYPE bit16 IS Array(15 downto 0) OF std_logic; VARIABLE lef, rig, up, low: NATURAL; BEGIN 在递减区间 lef:=bit16’LEFT; --15 ‘LEFT=‘HIGH rig:=bit16’RIGHT; --0 ‘RIGHT=‘LOW up:=bit16’HIGH; --15 low:=bit16’LOW; --0 END PROCESS; PROCESS(a) TYPE bit16 IS Array(0 to 15) OF std_logic; 在递增区间 VARIABLE lef, rig, up, low: NATURAL; ‘LEFT=‘LOW BEGIN ‘RIGHT=‘HIGH lef:=bit16’LEFT; --0 rig:=bit16’RIGHT; --15 up:=bit16’HIGH; --15 low:=bit16’LOW; --0 END PROCESS;
• ’low:返回一个数据类型或子类型的最小值。
7.1 数值类属性 属性规则: 上下限:对数值取最大、最小值;对枚举类型数据下限取 左边界值,上限取右边界值;对数组取数组区间的最大最 小值。 左右边界:按书写顺序取左边或右边值。 例: SUBTYPE nat IS Natural Range 0 to 255; X:=nat’HIGH; --x等于255 X:=nat’LOW; --x等于0 X:=nat’RIGHT; --x等于255 X:=nat’LEFT; --x等于0
(1)’LEFT (n) --得到n区间的左端边界号 (2)’RIGHT(n) --得到n区间的右端边界号 (3)’HIGH(n) --得到n区间的高端边界号 (4)’ LOW(n) --得到n区间的低端边界号 其中n表示数组的区间序号(即维数)。当n=1时可以缺省,默认为一维 数组。 在递减区间 ‘LEFT=‘HIGH ‘RIGHT=‘LOW 在递增区间 ‘LEFT=‘LOW ‘RIGHT=‘HIGH
TYPE matrix IS ARRAY(0 TO 7, 15 DOWNTO 0) OF std_logic; i <= matrix ’ left (1); i <= matrix ’ right (1); i <= matrix ’ high (1); i <= matrix ’ low (1); i <= matrix ’ left (2); i <= matrix ’ right (2); i <= matrix ’ high (2); i <= matrix ’ low (2); -- i = 0; -- i = 7; -- i = 7; -- i = 0; -- i = 15; -- i = 0; -- i = 15; -- i = 0;
7.2 函数类属性 例7-4
PACKAGE w_pack IS TYPE week IS (sun, mon, tue, wed, thu, fri, sat); TYPE r_week IS week RANGE sat DOWNTO sun; END w_pack;
求自定义类型的属性: week’SUCC(mon) week’PRED(mon) week’LEFTOF(mon) week ’RIGHTOF(mon)
7.2 函数类属性 7.2.1 数据类型属性函数 主要用来得到数据类型的各种相关信息,共6种:
(1)’POS(数据值) --返回数据类型定义中输入的X值的位置序号 (2)’VAL(位置序号) --返回输入的位置序号X处的值 (3)’SUCC(数据值) --返回数据类型定义中该值的下一个对应值 (4)’PRED(数据值) --返回数据类型定义中该值的前一个对应值 (5)’LEFTOF(数据值) --返回数据类型定义中该值的左边值 (6)’RIGHTOF(数据值) --返回数据类型定义中该值的右边值 • 对于递增区间: • ’SUCC(x) = ’RIGHTOF(x) • ’PRED(x) = ’LEFTOF(x) • 对于递减区间: • ’SUCC(x) = ’LEFTOF(x) • ’PRED(x) = ’RIGHTOF(x)
7.2 函数类属性 2 属性函数’ LAST_ EVENT
例7-10 D触发器建立时间的检测
library ieee; use ieee.std_logic_1164.all; entity dff IS GENERIC(setup_time,hold_time: TIME); PORT(d,clk: IN cal_resist std_logic; q: OUT std_logic); end dff ; ARCHITECTURE dff_behav OF dff IS BEGIN Setup_check:PROCESS(clk) BEGIN IF clk’LAST_VALUE =‘0’ AND clk’EVENT THEN ASSERT(d’LAST_EVENT >= setup_time) REPORT “SETUP VIOLATON” SEVERITY ERROR; END IF;
属性
VHDL提供5类预定义属性:
1、数值类属性 2、函数类属性 3、信号类属性
4、数据类型类属性
5、数组范围类属性
7.1 数值类属性
7.1.1 常用数据的数值属性
主要用于返回常用数据类型、数组或是块的有关值: 例如:返回数组长度、数据类型的’left:返回一个数据类型或子类型最左边的值。 • ’right:返回一个数据类型或子类型最右边的 值。 • ’high:返回一个数据类型或子类型的最大值。
7.2 函数类属性 1 属性函数’EVENT和’ LAST_VALUE
’EVENT主要用来检测脉冲信号的正跳变或负跳变边沿,也可以检
查信号是否刚发生变化并且正处于某一个电平值。
例7-9 D触发器时钟脉冲上升沿的检测
library ieee; use ieee.std_logic_1164.all; entity dff IS PORT(d,clk: IN cal_resist std_logic; q: OUT std_logic); end dff ; ARCHITECTURE dff OF dff IS BEGIN PROCESS(clk) BEGIN IF clk=‘1’ AND clk’EVENT THEN q <= d; END IF; END PROCESS; END dff;
7.1 数值类属性
例7-2 枚举类型数据数值属性描述
Architecture voltb of volta IS TYPE volt IS (uV,mV,V,kV); SUBTYPE s_volt IS volt RANGE (V DOWNTO mV); SIGNAL S1,S2,S3,S4: VOLT; BEGIN S1<=volt’HIGH; --kV S2<=volt’LOW; --uV S3<=s_volt’LEFT; --V S4<=s_volt’RIGHT; --mV END voltb;
7.2 函数类属性
END PROCESS; Dff_process: PROCESS(clk) BEGIN IF clk’LAST_VALUE=‘0’ AND clk’EVENT THEN q <= d; END IF; END PROCESS; END dff_behav ; Setup time Hold time
--得tue --得sun --得sun --得tue
r_week’SUCC(mon) r_week’PRED(mon) r_week’LEFTOF(mon) r_week ’RIGHTOF(mon)
--得tue --得sun --得tue --得sun
7.2 函数类属性 7.2.2 数组属性函数 主要用来得到数组的信息。共有4种属性:
7.2 函数类属性
指属性以函数的形式返回有关数据类型、数组或是信号的信 息。 函数类属性使用时以函数表达式的形式出现,属性根据输 入的自变量值去执行函数,返回一个相应的值。该返回值可能 是数组区间的某一个值,也可能是信号的变化值,或是枚举数 据的位置序号等。
函数类属性分三类: 1. 数据类型属性函数 2. 数组类型属性函数 3. 信号属性函数
d
clk q
7.3 信号类属性 根据所加属性的信号去建立一个新的信号,称信号类 属性。 信号类属性有4种: 1. ’DELAYED(t) : t 为时间表达式,该属性将产生 一个特别的延迟信号,该信号使主信号按t确定的 时间产生附加的延迟。新信号与主信号类型相同。 该属性可以用来检查信号的保持时间。 2. ’STABLE(t) : 当所加属性的信号在时间t内没有 发生变化,则返回true,否则返回false. 该属性中当 t=0时可以得到与属性’EVENT相反的值。 3. ’QUIET(t) : 信号在时间t内不活跃,则返回true, 否则返回false。典型应用是用来对中断优先处理 机制进行建模。 4. ‘TRANSACTION: 所加属性的信号活跃时将对 所建立的bit数据取反。
7.1 数值类属性
7.1.1 数组的数值属性
数组属性只有一个:取数组的长度值。格式: <数组名>‘LENGTH(n); 其中n是多维数组的维数;如二维数组n=2; 对一维数组n缺省。
例7-3 一维数组数值属性描述
PROCESS(b) TYPE bit8 IS array (7 downto 0) of bit; TYPE bit31_8 IS array (31 downto 8) of bit; VARIABLE b1,b2: integer; BEGIN b1:=bit8’LENGTH; --b1=8 B2:=BIT31_8’LENGTH; --b2=24 END PROCESS