第四章 VHDL语言构造体的描述
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一些专门用于行为描述的语句 代入语句:
格式: 信号量 <= 敏感信号量表达式;
例: z <= a OR (b NAND c); 上式中有3 个敏感量 a,b, c,无论哪一个 敏感量发生了变化,该代入语句将被执行。
例
a <= b AFTER 5 ns; --表示当b发生新的变化5ns后, 才被代入到信号a中
( 'U', 'X', '0', '1', 'W', 'W', 'W', 'W', 'X' ), -- | W | ( 'U', 'X', '0', '1', 'L', 'W', 'L', 'W', 'X' ), -- | L |
( 'U', 'X', '0', '1', 'H', 'W', 'W', 'H', 'X' ), -- | H |
( 'U', 'X', '0', 'X', '0', '0', '0', '0', 'X' ), -- | 0 | ( 'U', 'X', 'X', '1', '1', '1', '1', '1', 'X' ), -- | 1 |
( 'U', 'X', '0', '1', 'Z', 'W', 'L', 'H', 'X' ), -- | Z |
例:包集合STD-LOGIC-1164中判决函数 描述的部分源程序
PACKAGE std_logic_1164 IS -------------------------------------------------- logic state system (unresolved) ------------------------------------------------TYPE std_ulogic IS ( 'U', -- Uninitialized 'X', -- Forcing Unknown '0', -- Forcing 0 '1', -- Forcing 1 'Z', -- High Impedance 'W', -- Weak Unknown 'L', -- Weak 0 'H', -- Weak 1 '-' -- Don't care);
四选一电路真值表
b 0 0 1 1
a 0 1 0 1
q i0 i1 i2 i3
延时语句
有两类延时用于行为描述:惯性延时、传输延时。
惯性(Inertial)延时:在惯性模型中,系统或器件 输出信号要发生变化,必须有一段时间的延时,这 段延时时间,就是系统或元件的惯性延时。 特点:当一个系统或器件的输入信号周期,小于系 统或器件的惯性延时,其输出将保持不变。 如:在一个信号值维持期间,如果存在任何毛刺、 脉冲等周期小于器件本身的惯性延时的情况,输出 信号的值将不变,否则将引起信号的变化。
例:四选一电路的行为描述方式(2)
Begin with sel select q<=i0 after 10 ns when 0, i1 after 10 ns when 1, i2 after 10 ns when 2, i3 after 10 ns when 3, „X‟ after 10 ns when others; sel<= 0 when a=„0‟ and b=„0‟ else 1 when a=„1‟ and b=„0‟ else 2 when a=„0‟and b=„1‟ else 3 when a=„1‟and b=„1‟ else 4; End behav;
传输(Transport)延时
传输延时常用于描述总线延迟、连接线的延时,及 ASIC芯片的路径延时。 在 VHDL 语言中,传输延时不能缺省,必须在语句 中使用传输延时的前置词transport明确说明。 特点:输出端的信号在延时规定时间后,将完全复 现输入断的输入波形,而不管输入波形的形状和宽 窄如何。
( 'U', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X' ) -- | - | );
FUNCTION resolved ( s : std_ulogic_vector ) RETURN std_ulogic IS VARIABLE result : std_ulogic := „ Z ‟; -- weakest state default BEGIN IF (s'LENGTH = 1) THEN RETURN s(s'LOW);
传输延时示例
b <= TRANSPORT a AFTER 20 ns;
传输延时:不管 多短的脉冲都由 指定的延时值, 传给输出 一个延 时信号.
多驱动器描述语句
驱动(Driver)是有关信号驱动(激励)的源。 VHDL语言中,构造体内利用代入语句,为每一个 输出信号创建一个驱动器。 在设计逻辑电路的时候,我们经常会碰到的一种情 况:多个驱动器的输出同时连接到同一条信号线, 这时候我们怎么办? architecture sample1 of
sample is begin a <= b after 5 ns; a <= d after 5 ns; end sample1;
判决函数
具有两个驱动 (b 、 d) 的信号 a 到底应如何取值,这 一点在标准的数据类型是没有定义的。 为了解决多驱动同时驱动一个信号的行为描述,在 程序包STD_LOGIC_1164中,专门定义了一种描 述判决函数的数据类型,称为判决函数子类型。 判决函数( Resolution Function ):在多个驱动 器同时驱动一个信号时,定义输出哪一个的函数。 判决函数是由设计者编写的函数 每当一个信号的驱动值改变时,将请求判决函数, 判决函数返回一个单一的值。
PACKAGE BODY std_logic_1164 IS TYPE stdlogic_table IS ARRAY(std_ulogic, std_ulogic) OF std_ulogic; CONSTANT resolution_table : stdlogic_table := ( -----------------------------------------------------------| U X 0 1 Z W L H | |
第四章 VHDL语言构 造体的描述方式
引子
硬件系统的描述可以采用三种不同的描述风 格: 行为描述方式 数据流描述方式 结构化描述方式
4.1构造体的行为描述方式
1 什么是行为描述? 它是对系统数学模型的描述,与寄存器传输描述方 式和结构化描述方式相比,具有最高的抽象程度。 2 使用的语句具有什么样的特点? 采用 : 算术运算,关系运算,惯性延时,传输延时 等不易或不能进行逻辑综合的VHDL语句。 3 行为描述方式的VHDL语言程序的运用场合? 主要用于系统数学模型的仿真或系统工作原理的仿 真。
类属语句主要用于行为描述
使用GENERIC语句易于使器件 模块化和通用化
例如,要描述 2 输入与门的行为,其逻辑关系是明 确的 但在加工集成时: 材料、工艺不同,不同类型的输入与门的上升沿、 下降沿参数是不一致的 为了简化设计和供其它的设计人员方便地使用 需要开发一个通用的二输入与门的程序模块 在该模块中某些参数是待定的 在仿真或逻辑综合时,只要用GENERIIC语句 将待定参数初始化 就可以实现各种类型二输入与门的仿真与逻辑综合
--------------------------------------------------------( 'U', 'U', 'U', 'U', 'U', 'U', 'U', 'U', 'U' ), -- | U |
( 'U', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X' ), -- | X |
-- unconstrained array of std_ulogic for use with the resolution function TYPE std_ulogic_vector IS ARRAY ( NATURAL RANGE <> ) OF std_ulogic; -------------------------------------------------------------------- resolution function FUNCTION resolved ( s : std_ulogic_vector ) RETURN std_ulogic; -------------------------------------------------------------------- *** industry standard logic type *** SUBTYPE std_logic IS resolved std_ulogic; -------------------------------------------------------------------- unconstrained array of std_logic for use in declaring signal arrays TYPE std_logic_vector IS ARRAY ( NATURAL RANGE <>) OF std_logic; …… END std_logic_1164;
例4-4 将上升、下降时间作为类属参数的 二输入与门
ENTITY and2 IS GENERIC (rise,fall: TIME); PORT ( a,b: IN BIT; c: OUT BIT); END and2; ARCHITECTURE behave OF and2 IS SIGNAL internal:BIT; BEGIN internal <= a AND b; c <= internal AFTER (rise) WHEN internal = '1' ELSE internal AFTER (fall); END behave;
ELSE FOR i IN s'RANGE LOOP result := resolution_table(result, s(i)); END LOOP; END IF; RETURN result; END resolved; …… END std_logic_1164;
在FUNCTION resolved ( s : std_ulogic_vector ) RETURN std_ulogic IS中,
c <= a AND b AFTER 15 ns; --表示当a或b发生新的变化15ns后 它们与的结果才被代入到信号a中
A<=„0‟ after 5 ns,‟1‟ after 10 ns,‟0‟ after 15 ns;
例:四选一电路的行为描述方式(1)
library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity mux4 is port(i0,i1,i2,i3,a,b:in std_logic; q:out std_logic); end mux4; architecture behav of mux4 is signal sel: integer;
s是位矢量,它有多长就是多少个驱动源。
假设 s=“01X” S1<= resolved(s); --s1处于什么状态? 假设 s=“0ZZ”、“0X1” S1的状态又是什么呢?
„X‟ „0‟ „X‟
GENERIC语句(类属参数语句)
1. 2.
3.
常用于不同层次之间的信息传递 要把信息传递给实体的具体元件 就可用类属语句 例如, 把器件的上升和下降沿延时信息传给实体 类属也可用传送一些用户定义的数据类型,负载电 容和电阻 对综合参数,如数据通道宽度,信号宽度等均可用 类属传递
惯性延时示例
假设某门电路的惯性延时为20 ns
B<=inertial A after 20 ns;
所有器件都存在惯性延 时,为了仿真硬件电路 实际工作情况,可以在 代入语句中加上惯性延 时时间加以说明, 如: b <= a AFTER 10 ns; 或: b <= INERTIAL a AFTቤተ መጻሕፍቲ ባይዱR 10 ns; 惯性延时说明只在行为 仿真时才有意义,逻辑 综合时将被忽略。