我想在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配置的辅助构造,而不是任何合成的。但如果我在这里错了,请纠正我,因为我仍然没有百分百肯定。如果我拿到一块板,我会尝试验证我的观察结果。
答案 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