内容发布更新时间 : 2025/2/2 20:04:48星期一 下面是文章的全部内容请认真阅读。
变量与信号的异同:
1)变量是局部量,只能在进程和子程序中使用,不能将信息带出对它做出定义的当前结构,主要用作进程中的临时数据存储单元;信号是电路内部硬件实体相互连接的抽象表示,相当于电路内部的连接线,具有全局性特征,信号定义和使用的范围是实体、结构体和程序包,可以作为设计实体中的并行语句模块(进程)之间交流信息的通道。
2)变量的赋值是理想化的数据传输,立即发生,不存在延时;信号的赋值可以设置延时量,即使是零延时,也要经历一个特定的延时,即δ延时,与实际器件的传播延迟特性相吻合,在进程的最后才对信号赋值。 3)变量定义在进程或子程序中,信号不可以。 4)信号可以列入进程的敏感表,但是变量不行。
5)信号赋值有并行赋值和顺序赋值,并行赋值不允许有多个驱动源,进程中的顺序信号赋值语句可以有多个驱动源,但是只有最后的赋值语句被启动。
6)很多情况下,综合后对应的硬件电路结构中信号和变量是没有什么区别的。 A<=5
例1 D触发器之变量 LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL; ENTITY dff1 IS
PORT(CLK,D1:IN STD_LOGIC; Q1:OUT STD_LOGIC); END;
ARCHITECTURE behav OF dff1 IS BEGIN
PROCESS(CLK,d1)
VARIABLE QQ:STD_LOGIC; BEGIN IF CLK'EVENT AND CLK='1' THEN QQ:=D1; END IF; Q1<=QQ; END PROCESS; --Q1<=QQ; END;
QQD1CLKPREDQQ1ENACLR 例2 D触发器之信号 LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL; ENTITY dff1 IS
PORT(CLK,D1:IN STD_LOGIC; Q1:OUT STD_LOGIC); END;
ARCHITECTURE behav OF dff1 IS SIGNAL QQ:STD_LOGIC; BEGIN
PROCESS(CLK)
--VARIABLE QQ:STD_LOGIC; BEGIN IF CLK'EVENT AND CLK='1' THEN QQ<=D1; END IF; --Q1<=QQ; END PROCESS; Q1<=QQ; END;
例3触发器之变量 LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL; ENTITY dff1 IS
PORT(CLK,D1:IN STD_LOGIC; Q1:OUT STD_LOGIC); END;
ARCHITECTURE behav OF dff1 IS BEGIN
PROCESS(CLK)
VARIABLE A,B:STD_LOGIC; BEGIN IF CLK'EVENT AND CLK='1' THEN A:=D1;B:=A;Q1<=B; END IF; END PROCESS; END;
Q1~reg0D1CLKPREDQQ1ENACLR 例4触发器之信号
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL; ENTITY dff1 IS
PORT(CLK,D1:IN STD_LOGIC; Q1:OUT STD_LOGIC); END;
ARCHITECTURE behav OF dff1 IS SIGNAL A,B:STD_LOGIC; BEGIN
PROCESS(CLK) BEGIN IF CLK'EVENT AND CLK='1' THEN A<=D1;B<=A;Q1<=B; END IF; END PROCESS; END;
AD1CLKPREDQDBPREQQ1~reg0PREDQQ1ENACLRENACLRENACLR 信号的赋值需要一个δ延时,进程中的所有信号赋值语句在进程启动的一瞬间立即启动各自的延时为δ的定时器,在定时结束时完成赋值操作,而顺序赋值的执行时间间隔几乎为0,在顺序执行到END PROCESS语句时,δ延时才结束,进程中的所有信号几乎同时完成赋值(更新)。执行赋值操作是一个过程,具有顺序的特征,完成赋值是一种结果,它的发生具有VHDL的信号赋值最有特色的并行行为特征。
顺序信号赋值语句允许多源驱动,其执行具有顺序性,完成赋值即赋值对象的值发生更新的信号是最接近end process语句的信号。
并行信号赋值语句是并行执行的,其执行顺序与书写顺序无关。并行信号赋值语句不允许有多个驱动源驱动。并行信号赋值语句是靠事件来驱动的,只有当信号赋值符号右边表达式中的信号上有事件发生时,该语句才会执行,一条并行信号赋值语句就相当于一个进程语句,可以改写成相应的进程语句。 LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL; ENTITY fuzhi IS
PORT(CLK,a,b,c,d:IN STD_LOGIC; Q1,q2:OUT STD_LOGIC); END;
ARCHITECTURE behav OF fuzhi IS