我寫了一個對浮點數組內容進行求和的進程。該陣列長度爲6,具有相同的值6次,0.5。所以數組的總和是3.0。[VHDL]爲什麼在sum循環中需要一個輔助變量
的過程是這樣的:
signal array_sum : float32 := to_float(0.0);
begin
....
sum_proc:process(clk)
begin
if(rising_edge(clk)) then
for i in 0 to size_array - 1 loop
array_sum <= array_sum + array_float(i);
end loop;
result <= array_sum;
end if;
end process;
這樣做的結果是1.5 ..
但是如果我使用輔助值,它的工作原理,其結果是3.0:
sum_proc:process(clk)
variable sum_aux : float32;
begin
sum_aux := to_float(0.0);
if(rising_edge(clk)) then
for i in 0 to size_array - 1 loop
sum_aux := sum_aux + array_float(i);
end loop;
result <= sum_aux;
end if;
end process;
我似乎無法理解爲什麼發生這種情況。有人可以解釋嗎?
此外,sum_aux
初始化爲0.0需要在開始內完成,否則結果不正確。這是因爲只有begin
內的代碼被執行多次?
很好的解釋!非常感謝 –