[Basic VHDL] Basic difference between signal and variable

There are some differences between signal and variable, but we just need to keep in mind the following basic differences:
+ Variables can only be used inside processes
+ Variables are assigned using the := assignment symbol; signals are assigned using the <= assignment symbol.
+ variables immediately take the value of their assignment; but, signal is going to take the value at the next clock cycle.

Let's take a look below VHDL code and testing result. We can see that the signal o_output_1_sl is asserted at the 16th clock cycle, while the signal o_output_2_sl is asserted at the 15th clock cycle.

VHDL code



 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.std_logic_unsigned.all;

entity signal_variable_test is
 port(
  --i_input_slv: in std_logic_vector(7 downto 0);
  i_clk_sl: in std_logic;
  o_output_1_sl: out std_logic;
  o_output_2_sl: out std_logic
 );
end signal_variable_test;

architecture Behavioral of signal_variable_test is
 signal r_signal_tmp_slv: std_logic_vector(7 downto 0) := (others => '0');
begin
 PRO_SIGNAL_TEST: process(i_clk_sl) is
  variable r_variable_tmp_slv: std_logic_vector(7 downto 0) := (others => '0');
 begin
  if rising_edge(i_clk_sl) then
  
   r_signal_tmp_slv <= r_signal_tmp_slv + 1;
   r_variable_tmp_slv := r_variable_tmp_slv + 1;
   
   
   -- signal is going to take the value at the next clock cycle
   if(r_signal_tmp_slv = X"0F") then -- 1111
    o_output_1_sl <= '1';
   else
    o_output_1_sl <= '0';
   end if;
   
   --  variables immediately take the value of their assignment
   if(r_variable_tmp_slv= X"0F") then
    o_output_2_sl <= '1';
   else
    o_output_2_sl <= '0';
   end if;
   
  end if;

 end process PRO_SIGNAL_TEST;


end Behavioral;

Testing Result:
(Click the image to enlarge the view)

2 comments:

  1. VHDL cơ bản.

    Sự khác nhau giữa signal và variable trong vhdl.

    Trong VHDL:
    + Variable chỉ có thể được khai báo trong process ( trước từ khóa begin )
    + ký hiệu để gán giá trị cho variable <=
    + variable được gán dữ liệu ngay tức thì. Còn signal thì được cập nhật dữ liệu ở clock kế tiếp.

    ReplyDelete
  2. VHDL cơ bản.

    Sự khác nhau giữa signal và variable trong vhdl.

    Trong VHDL:
    + Variable chỉ có thể được khai báo trong process ( trước từ khóa begin )
    + ký hiệu để gán giá trị cho variable <=
    + variable được gán dữ liệu ngay tức thì. Còn signal thì được cập nhật dữ liệu ở clock kế tiếp.

    ReplyDelete

Related Posts Plugin for WordPress, Blogger...