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.

161 lines
3.9 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
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. module timecode_basesig_generator #(
  2. parameter SYS_CLOCK_FREQ = 10000000
  3. ) (
  4. input clk,
  5. input rst_n,
  6. input [31:0] timecode_format,
  7. input wire en,
  8. output out_timecode_trigger_sig,
  9. output reg out_first_frame_sig,
  10. output reg [7:0] out_frame_num,
  11. output reg out_drop_frame
  12. );
  13. localparam FPS2398Format = 0;
  14. localparam FPS2400Format = 1;
  15. localparam FPS2500Format = 2;
  16. localparam FPS2997Format = 3;
  17. localparam FPS2997DropFormat = 4;
  18. localparam FPS3000Format = 5;
  19. /*******************************************************************************
  20. * clk generator *
  21. *******************************************************************************/
  22. wire fps2398format_clk;
  23. wire fps2400format_clk;
  24. wire fps2500format_clk;
  25. wire fps2997format_clk;
  26. wire fps2997dropformat_clk;
  27. wire fps3000format_clk;
  28. zutils_pwm_generator_advanced #(
  29. .SYS_CLOCK_FREQ(SYS_CLOCK_FREQ),
  30. .OUTPUT_FREQ_P00(2398)
  31. ) fps2398format (
  32. .clk(clk),
  33. .rst_n(rst_n),
  34. .ctrl_sig(en),
  35. .output_signal(fps2398format_clk)
  36. );
  37. zutils_pwm_generator_advanced #(
  38. .SYS_CLOCK_FREQ(SYS_CLOCK_FREQ),
  39. .OUTPUT_FREQ_P00(2400)
  40. ) fps2400format (
  41. .clk(clk),
  42. .rst_n(rst_n),
  43. .ctrl_sig(en),
  44. .output_signal(fps2400format_clk)
  45. );
  46. zutils_pwm_generator_advanced #(
  47. .SYS_CLOCK_FREQ(SYS_CLOCK_FREQ),
  48. .OUTPUT_FREQ_P00(2500)
  49. ) fps2500format (
  50. .clk(clk),
  51. .rst_n(rst_n),
  52. .ctrl_sig(en),
  53. .output_signal(fps2500format_clk)
  54. );
  55. zutils_pwm_generator_advanced #(
  56. .SYS_CLOCK_FREQ(SYS_CLOCK_FREQ),
  57. .OUTPUT_FREQ_P00(2997)
  58. ) fps2997format (
  59. .clk(clk),
  60. .rst_n(rst_n),
  61. .ctrl_sig(en),
  62. .output_signal(fps2997format_clk)
  63. );
  64. zutils_pwm_generator_advanced #(
  65. .SYS_CLOCK_FREQ(SYS_CLOCK_FREQ),
  66. .OUTPUT_FREQ_P00(2997)
  67. ) fps2997dropformat (
  68. .clk(clk),
  69. .rst_n(rst_n),
  70. .ctrl_sig(en),
  71. .output_signal(fps2997dropformat_clk)
  72. );
  73. zutils_pwm_generator_advanced #(
  74. .SYS_CLOCK_FREQ(SYS_CLOCK_FREQ),
  75. .OUTPUT_FREQ_P00(3000)
  76. ) fps3000format (
  77. .clk(clk),
  78. .rst_n(rst_n),
  79. .ctrl_sig(en),
  80. .output_signal(fps3000format_clk)
  81. );
  82. zutils_multiplexer_32t1_v2 timecode_clk_output_mult (
  83. .chooseindex(timecode_format),
  84. //in
  85. .in0(fps2398format_clk),
  86. .in1(fps2400format_clk),
  87. .in2(fps2500format_clk),
  88. .in3(fps2997format_clk),
  89. .in4(fps2997dropformat_clk),
  90. .in5(fps3000format_clk),
  91. //out
  92. .out(out_timecode_sig_clk_pwm)
  93. );
  94. zutils_edge_detecter timecode_sig_clk_output_edge_detecter (
  95. .clk(clk),
  96. .rst_n(rst_n),
  97. .in_signal(out_timecode_sig_clk_pwm),
  98. .in_signal_rising_edge(out_timecode_trigger_sig)
  99. );
  100. always @(posedge clk or negedge rst_n) begin
  101. if (!rst_n || !en) begin
  102. out_first_frame_sig <= 1;
  103. end else begin
  104. if (out_first_frame_sig && out_timecode_trigger_sig) begin
  105. out_first_frame_sig <= 0;
  106. end
  107. end
  108. end
  109. /*******************************************************************************
  110. * 格式解析 *
  111. *******************************************************************************/
  112. always @(*) begin
  113. case (timecode_format)
  114. FPS2398Format: begin
  115. out_frame_num <= 24;
  116. out_drop_frame <= 0;
  117. end
  118. FPS2400Format: begin
  119. out_frame_num <= 24;
  120. out_drop_frame <= 0;
  121. end
  122. FPS2500Format: begin
  123. out_frame_num <= 25;
  124. out_drop_frame <= 0;
  125. end
  126. FPS2997Format: begin
  127. out_frame_num <= 30;
  128. out_drop_frame <= 0;
  129. end
  130. FPS2997DropFormat: begin
  131. out_frame_num <= 30;
  132. out_drop_frame <= 0;
  133. end
  134. default begin
  135. out_frame_num <= 30;
  136. out_drop_frame <= 0;
  137. end
  138. endcase
  139. end
  140. endmodule