Advertisement
Guest User

Untitled

a guest
Mar 21st, 2017
101
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. `timescale 1ns / 1ps
  2. //////////////////////////////////////////////////////////////////////////////////
  3. // Company:
  4. // Engineer:
  5. //
  6. // Create Date: 03/07/2017 10:11:08 AM
  7. // Design Name:
  8. // Module Name: i2s_inf
  9. // Project Name:
  10. // Target Devices:
  11. // Tool Versions:
  12. // Description:
  13. //
  14. // Dependencies:
  15. //
  16. // Revision:
  17. // Revision 0.01 - File Created
  18. // Additional Comments:
  19. //
  20. //////////////////////////////////////////////////////////////////////////////////
  21.  
  22.  
  23. module i2s_inf(
  24. input sys_clk, //sys_clk = 98.304 Mhz
  25. input rst,
  26. input bclk,
  27. input lrclk,
  28. input adc_in, // codec adc_sdata kimenete
  29. //input [23:0] dac_sdata, //modul 24 bit-es bemenete
  30. output [23:0] adc_sdata , //modul 24 bit-es kimenete
  31. output left_valid,
  32. output right_valid,
  33. output mclk
  34. );
  35.  
  36. reg [9:0] clk_div = 0;
  37. reg [1:0] bclk_shr;
  38. reg [1:0] lrclk_shr;
  39. reg [4:0] bcnt = 0;
  40. (* mark_debug = "true" *) (* dont_touch = "true" *) reg [23:0] adc_shr=0; //adc shiftregiszter
  41. (* mark_debug = "true" *) (* dont_touch = "true" *) reg reg_left_valid = 0;
  42. (* mark_debug = "true" *) (* dont_touch = "true" *) reg reg_right_valid = 0;
  43.  
  44. always @ (posedge sys_clk)
  45. if (!rst)
  46.    clk_div <= 0;
  47. else
  48.    clk_div <= clk_div + 1;
  49.    
  50. assign mclk = clk_div[2]; //el?állítjuk a sys_clk-ból a 49.152 MHz-t az CODEC-nek
  51.  
  52. //bitcount
  53. assign right_valid = reg_right_valid;
  54. assign left_valid = reg_left_valid;
  55. assign adc_sdata =(reg_right_valid == 1 || reg_left_valid == 1 ? adc_shr: 24'd0);
  56.  
  57. //bclk = 64*LRCLK = 6.144Mhz, minden 16. sys_clk
  58. //bclk,lrclk mintavételezése
  59. always @ (posedge sys_clk)
  60. begin
  61.     if(!rst)
  62.         begin
  63.               bclk_shr <= 0;
  64.         end
  65.     else
  66.         begin
  67.               bclk_shr <= {bclk_shr[0],bclk};
  68.  
  69.         end
  70. end
  71.    
  72. //adc_sdata beshiftelése
  73. always @ (posedge sys_clk)
  74. begin
  75.     if(!rst)
  76.          begin
  77.               bcnt <= 5'd0;
  78.          end
  79.     else
  80.          begin
  81.               if (bclk_shr == 2'b01) //bclk felfutó él
  82.                   begin
  83.                         adc_shr <= {adc_shr[22:0], adc_in};
  84.                         bcnt <= bcnt + 1;
  85.                   end
  86.               else if (bclk_shr == 2'b10) //bclk lefutó él
  87.                   begin
  88.                         lrclk_shr <= {lrclk_shr[0],lrclk};
  89.                   end
  90.          end         
  91. end
  92.  
  93. always @ (posedge sys_clk)
  94. begin
  95.     if (!rst)
  96.         begin
  97.             reg_left_valid <= 0;
  98.             reg_right_valid <= 0;
  99.         end
  100.     else
  101.         begin
  102.             if (bcnt==31 & lrclk_shr == 2'b01)
  103.                 reg_left_valid <= 1;
  104.             else
  105.                 reg_left_valid <= 0;
  106.  
  107.             if (bcnt==31 & lrclk_shr == 2'b10)
  108.                 reg_right_valid <= 1;
  109.             else
  110.                 reg_right_valid <= 0;
  111.         end
  112. end
  113.  
  114. endmodule
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement