在VHDL过程中访问for循环中的一个变量

时间:2018-05-04 16:35:55

标签: variables process parallel-processing vhdl fpga

我想在for循环中增加一个变量,这表明在一个向量中条件语句的频率是多少。知道VHDL中的for循环会创建n个并行实例,这些" access"一个变量?考虑到以下场景,它在模拟中运行得非常好,我怀疑它在现实中也有效。有人可以澄清它在现实中是如何运作的吗?

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.NUMERIC_STD.ALL;

entity var_p is
  Port (
    clk : in std_logic;
    some_vector : in std_logic_vector( 7 downto 0 );
    other_vector : out std_logic_vector( 7 downto 0 )
  );
end var_p;

architecture Behavioral of var_p is
begin
  var_p : process( clk )
    variable var : integer range 0 to 7;
  begin
    if rising_edge( clk ) then
      var := 0;
      for i in some_vector'range loop
        if some_vector(i) = '1' then
          var := var + 1;
          other_vector(var) <= '1';
        end if;
      end loop;
    end if;
  end process;
end Behavioral;

更新

我合成了以下设计:

res.render('test.ejs', {"date":"2018-5-3"})

这导致每个 other_vector 元素的LUT将多个 some_vector 元素[1]作为输入。由此我得出结论,var确实会增加&#39;对于每个&#39; 1&#39;在 some_vector 中。我现在也更好地理解变量只是用于确定LUT配置的辅助构造,而不是任何合成的。但如果我在这里错了,请纠正我,因为我仍然没有百分百肯定。如果我拿到一块板,我会尝试验证我的观察结果。

[1] https://imgur.com/a/pBL0Diy

1 个答案:

答案 0 :(得分:1)

当我终于找到了我的Basys3板时,我可以尝试一下这个设计。实际上,合成和实现的设计可以按照需要工作:

数字&#39; 1&#39;在 other_vector 中,确切地说是&#39; 1&#39;在 some_vector

在我的测试中,我将输入矢量连接到开关,将输出矢量连接到LED(见下文)。

这证实了在每次迭代中#39; for循环var的每个元素的增量为&#39; 1&#39;。

ld: warning: cannot find entry symbol _start; defaulting to 00000000004000b0
main.o: in function 'main':
main.c:(.text+0xa): undefined reference to 'printout1'
main.c:(.text+0x14): undefined reference to 'printout2'
makefile:2 recipe for target 'all' failed
make:***[all] Error 1