как я контролирую данные, которые я хочу прочитать из ip-ядра BRAM, чтобы получить правильное значение с адресом - PullRequest
0 голосов
/ 20 октября 2019

Я попытался найти нечеткое выравнивание гистограммы. В следующей программе у меня проблема с тем, что данные для 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;
...