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.

200 lines
5.1 KiB

2 years ago
  1. //
  2. // @功能:
  3. // 1. 分频
  4. // 2. 滤波(add later)
  5. //
  6. module ttl_input #(
  7. parameter REG_START_ADD = 0,
  8. parameter SYS_CLOCK_FREQ = 10000000,
  9. // parameter TEST = 0,
  10. parameter ID = 1
  11. ) (
  12. input clk, //clock input
  13. input rst_n, //asynchronous reset input, low active
  14. //寄存器读写接口
  15. input [31:0] addr,
  16. input [31:0] wr_data,
  17. input wr_en,
  18. output wire [31:0] rd_data,
  19. input ttlin1,
  20. input ttlin2,
  21. input ttlin3,
  22. input ttlin4,
  23. //指示灯
  24. output ttlin1_state_led,
  25. output ttlin2_state_led,
  26. output ttlin3_state_led,
  27. output ttlin4_state_led,
  28. //原始信号输入
  29. output ttlin1_ext,
  30. output ttlin2_ext,
  31. output ttlin3_ext,
  32. output ttlin4_ext,
  33. //分频后的信号
  34. output ttlin1_divide,
  35. output ttlin2_divide,
  36. output ttlin3_divide,
  37. output ttlin4_divide
  38. );
  39. reg [31:0] r0_ttlin_en; //信号源选择 0:off,1:bnc,2:headphone
  40. reg [31:0] r1_ttlin1_devide_factor; // 分频因子
  41. reg [31:0] r2_ttlin2_devide_factor; // 分频因子
  42. reg [31:0] r3_ttlin3_devide_factor; // 分频因子
  43. reg [31:0] r4_ttlin4_devide_factor; // 分频因子
  44. reg [31:0] r5_ttlin1_filter_factor; // 滤波
  45. reg [31:0] r6_ttlin2_filter_factor; // 滤波
  46. reg [31:0] r7_ttlin3_filter_factor; // 滤波
  47. reg [31:0] r8_ttlin4_filter_factor; // 滤波
  48. wire [31:0] reg_wr_index;
  49. zutils_register_advanced #(
  50. .REG_START_ADD(REG_START_ADD)
  51. ) _register (
  52. .clk(clk),
  53. .rst_n(rst_n),
  54. .addr(addr),
  55. .wr_data(wr_data),
  56. .wr_en(wr_en),
  57. .rd_data(rd_data),
  58. .reg0(r0_ttlin_en),
  59. .reg1(r1_ttlin1_devide_factor),
  60. .reg2(r2_ttlin2_devide_factor),
  61. .reg3(r3_ttlin3_devide_factor),
  62. .reg4(r4_ttlin4_devide_factor),
  63. .reg_wr_sig(reg_wr_sig),
  64. .reg_index (reg_wr_index)
  65. );
  66. always @(posedge clk or negedge rst_n) begin
  67. if (!rst_n) begin
  68. r0_ttlin_en <= 0;
  69. r1_ttlin1_devide_factor <= 0;
  70. r2_ttlin2_devide_factor <= 0;
  71. r3_ttlin3_devide_factor <= 0;
  72. r4_ttlin4_devide_factor <= 0;
  73. r5_ttlin1_filter_factor <= 0;
  74. r6_ttlin2_filter_factor <= 0;
  75. r7_ttlin3_filter_factor <= 0;
  76. r8_ttlin4_filter_factor <= 0;
  77. end else begin
  78. if (reg_wr_sig) begin
  79. case (reg_wr_index)
  80. 0: r0_ttlin_en <= wr_data;
  81. 1: r1_ttlin1_devide_factor <= wr_data;
  82. 2: r2_ttlin2_devide_factor <= wr_data;
  83. 3: r3_ttlin3_devide_factor <= wr_data;
  84. 4: r4_ttlin4_devide_factor <= wr_data;
  85. 5: r5_ttlin1_filter_factor <= wr_data;
  86. 6: r6_ttlin2_filter_factor <= wr_data;
  87. 7: r7_ttlin3_filter_factor <= wr_data;
  88. 8: r8_ttlin4_filter_factor <= wr_data;
  89. default: begin
  90. end
  91. endcase
  92. end
  93. end
  94. end
  95. // 使能 --> 滤波 --> 分频 --> 输出
  96. // 使能
  97. assign ttlin1_sig = r0_ttlin_en[0] & ttlin1;
  98. assign ttlin2_sig = r0_ttlin_en[1] & ttlin2;
  99. assign ttlin3_sig = r0_ttlin_en[2] & ttlin3;
  100. assign ttlin4_sig = r0_ttlin_en[3] & ttlin4;
  101. // 滤波
  102. wire ttlin1_sig_af_filter;
  103. wire ttlin2_sig_af_filter;
  104. wire ttlin3_sig_af_filter;
  105. wire ttlin4_sig_af_filter;
  106. zutils_signal_filter_advance filter1 (
  107. .clk(clk),
  108. .rst_n(rst_n),
  109. .filter_delay_count(r5_ttlin1_filter_factor),
  110. .in(ttlin1_sig),
  111. .out(ttlin1_sig_af_filter)
  112. );
  113. zutils_signal_filter_advance filter2 (
  114. .clk(clk),
  115. .rst_n(rst_n),
  116. .filter_delay_count(r6_ttlin2_filter_factor),
  117. .in(ttlin2_sig),
  118. .out(ttlin2_sig_af_filter)
  119. );
  120. zutils_signal_filter_advance filter3 (
  121. .clk(clk),
  122. .rst_n(rst_n),
  123. .filter_delay_count(r7_ttlin3_filter_factor),
  124. .in(ttlin3_sig),
  125. .out(ttlin3_sig_af_filter)
  126. );
  127. zutils_signal_filter_advance filter4 (
  128. .clk(clk),
  129. .rst_n(rst_n),
  130. .filter_delay_count(r8_ttlin4_filter_factor),
  131. .in(ttlin4_sig),
  132. .out(ttlin4_sig_af_filter)
  133. );
  134. //分频
  135. wire ttlin1_sig_af_devide;
  136. wire ttlin2_sig_af_devide;
  137. wire ttlin3_sig_af_devide;
  138. wire ttlin4_sig_af_devide;
  139. ztuils_sig_devide sig_devide1 (
  140. .clk(clk),
  141. .rst_n(rst_n),
  142. .in(ttlin1_sig_af_filter),
  143. .out(ttlin1_sig_af_devide)
  144. );
  145. ztuils_sig_devide sig_devide2 (
  146. .clk(clk),
  147. .rst_n(rst_n),
  148. .in(ttlin2_sig_af_filter),
  149. .out(ttlin2_sig_af_devide)
  150. );
  151. ztuils_sig_devide sig_devide3 (
  152. .clk(clk),
  153. .rst_n(rst_n),
  154. .in(ttlin3_sig_af_filter),
  155. .out(ttlin3_sig_af_devide)
  156. );
  157. ztuils_sig_devide sig_devide4 (
  158. .clk(clk),
  159. .rst_n(rst_n),
  160. .in(ttlin4_sig_af_filter),
  161. .out(ttlin4_sig_af_devide)
  162. );
  163. assign ttlin1_state_led = 1;
  164. assign ttlin2_state_led = 1;
  165. assign ttlin3_state_led = 1;
  166. assign ttlin4_state_led = 1;
  167. //原始信号输入
  168. assign ttlin1_ext = ttlin1_sig_af_filter;
  169. assign ttlin2_ext = ttlin2_sig_af_filter;
  170. assign ttlin3_ext = ttlin3_sig_af_filter;
  171. assign ttlin4_ext = ttlin4_sig_af_filter;
  172. //分频后的信号
  173. assign ttlin1_divide = ttlin1_sig_af_devide;
  174. assign ttlin2_divide = ttlin2_sig_af_devide;
  175. assign ttlin3_divide = ttlin3_sig_af_devide;
  176. assign ttlin4_divide = ttlin4_sig_af_devide;
  177. endmodule