Advertisement
Guest User

Untitled

a guest
Dec 7th, 2018
96
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.10.2018 18:59:12
  7. // Design Name:
  8. // Module Name: pll
  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 pll(
  24.  
  25.   input clk,
  26.   input ref_clk,
  27.   output logic dac_sync,
  28.   output logic dac_din
  29.   );
  30.  
  31. // REF CLK DIV BY 125
  32.  
  33. logic ref_clk_div_out;
  34.  
  35. clk_odd_div(
  36.  
  37. .clk(ref_clk),  
  38. .reset(1'b0),
  39. .clk_out(ref_clk_div_out)
  40.  
  41. );
  42.  
  43. //VCSO CLK DIV BY 3072
  44.  
  45. logic [11:0] clk_count;
  46. logic clk_div_out;
  47.  
  48. always @ (posedge clk) begin
  49. clk_count <= clk_count + 1;
  50.  
  51.  if(clk_count == 1536) begin
  52.      clk_div_out <= !clk_div_out;
  53.      clk_count <= 0;
  54.  end
  55. end
  56.  
  57.  
  58. //PHASE DETECTOR
  59.  
  60. logic up, down;
  61. logic reset, xored;
  62.  
  63. always @ (posedge ref_clk_div_out or posedge reset) begin
  64.     if(reset) begin
  65.         up <= 0;
  66.     end else begin
  67.         up <= 1;
  68.     end
  69. end
  70.  
  71. always @ (posedge clk_div_out or posedge reset) begin
  72.     if(reset) begin
  73.         down <= 0;
  74.     end else begin
  75.         down <= 1;
  76.     end
  77. end
  78.  
  79.    
  80.  
  81. always @ * begin
  82.  
  83.     reset <= up & down;
  84.     xored <= up ^ down;
  85.  
  86. end
  87.  
  88. //ERR COUNTER
  89. logic [15:0] vio;
  90. logic [15:0] int_cnt;
  91. logic int_clk;
  92.  
  93. always @ (posedge clk) begin
  94. int_cnt <= int_cnt + 1;
  95.  
  96.  if(int_cnt == vio) begin
  97.      int_clk <= !int_clk;
  98.      int_cnt <= 0;
  99.  end
  100. end
  101.  
  102.  
  103. logic [15:0] alpha;
  104. logic [15:0] beta;
  105. logic [15:0] dacd;
  106.  
  107. logic flagup;
  108. logic flagdn;
  109. logic [7:0] upcnt;
  110. logic [7:0] dncnt;
  111.  
  112. logic [8:0] phase_err;
  113.  
  114. always @ (posedge int_clk) begin
  115.     if(up) begin
  116.         if(!flagup) begin
  117.             upcnt <= 8'b1;
  118.             flagup <= 1'b1;
  119.         end else begin
  120.             upcnt <= upcnt + 1;
  121.         end
  122.     end else begin
  123.     flagup <= 1'b0;
  124.     end
  125. end
  126.  
  127. always @ (posedge int_clk) begin
  128.     if(down) begin
  129.         if(!flagdn) begin
  130.             dncnt <= 8'b1;
  131.             flagdn <= 1'b1;
  132.         end else begin
  133.             dncnt <= dncnt + 1;
  134.         end
  135.     end else begin
  136.     flagdn <= 1'b0;
  137.     end
  138. end
  139.  
  140. always @ * phase_err <= upcnt - dncnt;
  141.  
  142.  
  143.  
  144. pll_filter_0 (
  145.   .data_in(phase_err),    // input wire [15 : 0] data_in
  146.   .beta(beta),        // input wire [15 : 0] betha
  147.   .alpha(alpha),        // input wire [15 : 0] alpha
  148.   .clk(dac_sync),            // input wire clk
  149.   .data_out(dacd)  // output wire [15 : 0] data_out
  150. );
  151.  
  152.  
  153.  
  154.  
  155.  
  156.  
  157.  //DAC_SPI_TX
  158.  ad5060 dac(
  159.    .clk(ref_clk),
  160.    .data(dacd),
  161.    .dac_sync(dac_sync),
  162.    .dac_din(dac_din)
  163.  );
  164.  
  165. vio_0  (
  166.   .clk(clk),                // input wire clk
  167.   .probe_out0(vio),  // output wire [15 : 0] probe_out0
  168.   .probe_out1(alpha),  // output wire [15 : 0] probe_out1
  169.   .probe_out2(beta)  // output wire [15 : 0] probe_out2
  170. );
  171.  
  172.    
  173. ila_0(
  174.      .clk(clk),
  175.  
  176.      .probe0(up),
  177.      .probe1(down),
  178.      .probe2(ref_clk_div_out),
  179.      .probe3({7'b0,phase_err})
  180.  );  
  181.    
  182. endmodule
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement