Я попытался найти нечеткое выравнивание гистограммы. В следующей программе у меня проблема с тем, что данные для CL, CU (которые хранятся в ip-ядре BRAM и CL, CU состоят из 17-битного бита для целого числа и 16-битного дляс фиксированной точкой) не читайте правильные значения и, следовательно, t_out не рассчитывается правильно при моделировании значений, приходящих в случайные значения.
-- Last step ----------------------------------------------------------------------------------
when last_step=>
if(r_i<=X"000f") then
--weas_v<="0";webs_v<="1";addrb_v<=r_i(13 downto 0);dinb_v(15 downto 0)<=ft_res;
temp_r:=douta_m;
step<=last_step_1;
else
i_v:=X"0000";
weas_v<="0";webs_v<="0";addra_v<=i_v(13 downto 0);
step<=disp_v;
end if;
-- Last_stap_1 --------------------------------------------------------------------------------
when last_step_1=>
weas_p<="0";webs_p<="0";addrb_p<=r_i(13 downto 0);
if(temp_r<=mid_m) then
step<=LLL;
else
step<=UUU;
end if;
when LLL=>
cli_1:=doutb_p;
weas_CL<="0";webs_CL<="0";addrb_CL<=cli_1;
step<=LLL_1;
when LLL_1=>
cliv(15 downto 0):=doutb_CL(15 downto 0) ;
temp_ttl:=(range_l1-range_l0);
temp_tl:=temp_ttl*cliv; --17+17=34
ft_res:= range_l0 + temp_tl(31 downto 15);
step<=cntt;
when UUU=>
cli_2:=doutb_p;
weas_CU<="0";webs_CU<="0";addrb_CU<=cli_2;
step<=UUU_1;
when UUU_1=>
cliv(15 downto 0):=doutb_CU(15 downto 0) ;
temp_ttl:=(range_u1-range_u0);
temp_tl:=temp_ttl*cliv; --17+17=34
ft_res:= range_u0 + temp_tl(31 downto 15);
step<=cntt;
when cntt=>
weas_v<="0";webs_v<="1";addrb_v<=r_i(13 downto 0);dinb_v(15 downto 0)<=ft_res(15 downto 0);
r_i:=r_i+1;
weas_m<="0";webs_m<="0";addra_m<=r_i(13 downto 0);
step<=last_step;
-- Disp_v --------------------------------------------------------------------------------
when disp_v=>
if(i_v<=X"0012") then
a_t_out<=i_v;
t_out<=douta_v;
i_v:=i_v+1;
weas_v<="0";webs_v<="0";addra_v<=i_v(13 downto 0);
step<=disp_v;
else
ls:=X"0000";
a_f_out<=X"FFFF";
f_out<='1' & X"FFFFFF";
weas_p<="0";webs_p<="0";addrb_p<=ls(13 downto 0);
weas_v<="0";webs_v<="0";addrb_v<=ls(13 downto 0);
step<=last_step_out;
end if;