A simple vhdl fir description.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

43 lines
1.2KB

  1. LIBRARY ieee;
  2. USE ieee.std_logic_1164.ALL;
  3. USE work.GENERAL_INCLUDES.ALL;
  4. ENTITY SHIFT_REG IS
  5. GENERIC(nb_samples_temp : natural := cst_nb_samples_shiftreg_temp_in;
  6. nb_samples_line_matrix : natural := cst_nb_coeffs_subfilter_in
  7. );
  8. PORT(i_clk : IN std_logic;
  9. i_data : IN vect_adc_data_out;
  10. o_data : OUT matrix_reg_data_out
  11. );
  12. END SHIFT_REG;
  13. ARCHITECTURE Fill_Matrix OF SHIFT_REG IS
  14. SIGNAL data_matrix : matrix_reg_data_out;
  15. SIGNAL data_clk : vect_reg_data;
  16. BEGIN
  17. PROCESS(i_clk) IS
  18. BEGIN
  19. IF(rising_edge(i_clk)) THEN
  20. data_clk(0 TO nb_samples_temp-cst_nb_samples_adc_in-1) <= data_clk(cst_nb_samples_adc_in TO nb_samples_temp-1);
  21. FOR i IN 0 TO cst_nb_samples_adc_in-1 LOOP
  22. data_clk(nb_samples_temp-cst_nb_samples_adc_in+i) <= i_data(i);
  23. END LOOP; -- i
  24. FOR lines IN 0 TO cst_nb_samples_adc_in-1 LOOP
  25. -- the smaller line, the older samples
  26. FOR samples IN 0 TO nb_samples_line_matrix-1 LOOP
  27. data_matrix(lines)(samples) <= data_clk(lines+samples);
  28. END LOOP;
  29. END LOOP;
  30. ELSE
  31. data_clk <= data_clk;
  32. END IF;
  33. o_data <= data_matrix;
  34. END PROCESS;
  35. END Fill_Matrix;