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.

206 lines
5.5 KiB

2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
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. .reg5(r5_ttlin1_filter_factor),
  64. .reg6(r6_ttlin2_filter_factor),
  65. .reg7(r7_ttlin3_filter_factor),
  66. .reg8(r8_ttlin4_filter_factor),
  67. .reg_wr_sig(reg_wr_sig),
  68. .reg_index(reg_wr_index)
  69. );
  70. always @(posedge clk or negedge rst_n) begin
  71. if (!rst_n) begin
  72. r0_ttlin_en <= 32'hffff_ffff;
  73. r1_ttlin1_devide_factor <= 0;
  74. r2_ttlin2_devide_factor <= 0;
  75. r3_ttlin3_devide_factor <= 0;
  76. r4_ttlin4_devide_factor <= 0;
  77. r5_ttlin1_filter_factor <= 32'd02;
  78. r6_ttlin2_filter_factor <= 32'd02;
  79. r7_ttlin3_filter_factor <= 32'd02;
  80. r8_ttlin4_filter_factor <= 32'd02;
  81. end else begin
  82. if (reg_wr_sig) begin
  83. case (reg_wr_index)
  84. 0: r0_ttlin_en <= wr_data;
  85. 1: r1_ttlin1_devide_factor <= wr_data;
  86. 2: r2_ttlin2_devide_factor <= wr_data;
  87. 3: r3_ttlin3_devide_factor <= wr_data;
  88. 4: r4_ttlin4_devide_factor <= wr_data;
  89. 5: r5_ttlin1_filter_factor <= wr_data;
  90. 6: r6_ttlin2_filter_factor <= wr_data;
  91. 7: r7_ttlin3_filter_factor <= wr_data;
  92. 8: r8_ttlin4_filter_factor <= wr_data;
  93. default: begin
  94. end
  95. endcase
  96. end
  97. end
  98. end
  99. // 使能 --> 滤波 --> 分频 --> 输出
  100. // 使能
  101. assign ttlin1_sig = r0_ttlin_en[0] & ttlin1;
  102. assign ttlin2_sig = r0_ttlin_en[1] & ttlin2;
  103. assign ttlin3_sig = r0_ttlin_en[2] & ttlin3;
  104. assign ttlin4_sig = r0_ttlin_en[3] & ttlin4;
  105. // 滤波
  106. wire ttlin1_sig_af_filter;
  107. wire ttlin2_sig_af_filter;
  108. wire ttlin3_sig_af_filter;
  109. wire ttlin4_sig_af_filter;
  110. zutils_signal_filter_advance filter1 (
  111. .clk(clk),
  112. .rst_n(rst_n),
  113. .filter_delay_count(r5_ttlin1_filter_factor),
  114. .in(ttlin1_sig),
  115. .out(ttlin1_sig_af_filter)
  116. );
  117. zutils_signal_filter_advance filter2 (
  118. .clk(clk),
  119. .rst_n(rst_n),
  120. .filter_delay_count(r6_ttlin2_filter_factor),
  121. .in(ttlin2_sig),
  122. .out(ttlin2_sig_af_filter)
  123. );
  124. zutils_signal_filter_advance filter3 (
  125. .clk(clk),
  126. .rst_n(rst_n),
  127. .filter_delay_count(r7_ttlin3_filter_factor),
  128. .in(ttlin3_sig),
  129. .out(ttlin3_sig_af_filter)
  130. );
  131. zutils_signal_filter_advance filter4 (
  132. .clk(clk),
  133. .rst_n(rst_n),
  134. .filter_delay_count(r8_ttlin4_filter_factor),
  135. .in(ttlin4_sig),
  136. .out(ttlin4_sig_af_filter)
  137. );
  138. //分频
  139. wire ttlin1_sig_af_devide;
  140. wire ttlin2_sig_af_devide;
  141. wire ttlin3_sig_af_devide;
  142. wire ttlin4_sig_af_devide;
  143. ztuils_sig_devide sig_devide1 (
  144. .clk(clk),
  145. .rst_n(rst_n),
  146. .devide(r1_ttlin1_devide_factor),
  147. .in(ttlin1_sig_af_filter),
  148. .out(ttlin1_sig_af_devide)
  149. );
  150. ztuils_sig_devide sig_devide2 (
  151. .clk(clk),
  152. .rst_n(rst_n),
  153. .devide(r1_ttlin1_devide_factor),
  154. .in(ttlin2_sig_af_filter),
  155. .out(ttlin2_sig_af_devide)
  156. );
  157. ztuils_sig_devide sig_devide3 (
  158. .clk(clk),
  159. .rst_n(rst_n),
  160. .devide(r1_ttlin1_devide_factor),
  161. .in(ttlin3_sig_af_filter),
  162. .out(ttlin3_sig_af_devide)
  163. );
  164. ztuils_sig_devide sig_devide4 (
  165. .clk(clk),
  166. .rst_n(rst_n),
  167. .devide(r1_ttlin1_devide_factor),
  168. .in(ttlin4_sig_af_filter),
  169. .out(ttlin4_sig_af_devide)
  170. );
  171. assign ttlin1_state_led = 1;
  172. assign ttlin2_state_led = 1;
  173. assign ttlin3_state_led = 1;
  174. assign ttlin4_state_led = 1;
  175. //原始信号输入
  176. assign ttlin1_ext = ttlin1_sig_af_filter;
  177. assign ttlin2_ext = ttlin2_sig_af_filter;
  178. assign ttlin3_ext = ttlin3_sig_af_filter;
  179. assign ttlin4_ext = ttlin4_sig_af_filter;
  180. //分频后的信号
  181. assign ttlin1_divide = ttlin1_sig_af_devide;
  182. assign ttlin2_divide = ttlin2_sig_af_devide;
  183. assign ttlin3_divide = ttlin3_sig_af_devide;
  184. assign ttlin4_divide = ttlin4_sig_af_devide;
  185. endmodule