VHDL中的signal(信号)variable(变量)的定义与赋值

variable(变量)

1.变量只能在process(进程)和子程序中定义和使用

  process (clk)
  variable v1 : integer := 0;   --在说明语句部分定义变量
  begin	                    --在begin之后被赋值
  v1 := 2;	                --v1值由0变为2
  end process;

2.变量定义格式
Variable 变量名称 :数据类型 := 初值;
Variable 变量名称 :数据类型;
Variable 变量名称 :数据类型 范围;

Variable v1 : integer := 1; 
Variable v1 : integer;
Variable v1 : integer range 0 to 20;

3.对已定义变量赋值
变量名称 := 表达式; --与signal不同,其赋值都是用 :=。

4.变量特点
赋值需要同数据类型
变量的赋值是立即发生的
变量赋值语句属于顺序执行
变量仅在所定义的进程内部起作用,不能被多个进程共用。

Signal(信号)

外部信号

1.外部信号有in out inout buffer四种类型。在entity(实体)中定义。Buffer是可反馈的输出端口。

内部信号

1.内部信号可在结构体,包体,块语句中定义。

以结构体为例

architecture teststr of test is
signal s1 : integer := 0;       	--在说明语句部分定义信号s1
begin	                     --在begin之后被赋值
 s1 <= 2;	                 --s1值由0变为2
end teststr;

2.内部信号定义格式

Signal 变量名称 :数据类型 := 初值;
Signal 变量名称 :数据类型;
Signal 变量名称 :数据类型 范围;

Signal s1 : integer := 1; 
Signal s1 : integer;
Signal s1 : integer range 0 to 20;

3.对已定义变量赋值
s1 <= 2; --与变量不同,信号使用 <=

4.内部信号的特点
赋值需要同数据类型。
信号在进程外定义,但可在进程中/进程外使用。
在进程外的信号的赋值是并行执行的。
在进程内的信号是顺序处理,并行赋值的。
对进程内的信号的赋值,在下一次进程中才有效。(故同一进程内同一信号可被多次赋值,只有最后一次有效)

#学习代码

library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;

entity test is
port(
  i1 : in std_logic;
  o1 : out integer 
  );
end test;
architecture  teststr of test is

 signal s1 : integer := 0; 
 signal s2 : integer := 1;
 begin
  s1 <= 2;             --信号过程外赋值
  process(i1)
  variable v1 : integer := 0;  --定义变量
  begin
   v1 := 0;           --变量赋值
   s2 <= 3;           --信号过程内赋值        
  end process;
end teststr;

#如果有错,请在评论区指出
#如果能帮到您,还请给个赞,谢谢 ^ __ ^

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐