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.

115 lines
2.6 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
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
  1. module timecode_generator #(
  2. parameter SYS_CLOCK_FREQ = 10000000
  3. ) (
  4. input clk, //clock input
  5. input rst_n, //asynchronous reset input, low active
  6. input [31:0] timecode_format,
  7. input timecode0_wen,
  8. input [31:0] timecode0,
  9. output [31:0] timecode0_export,
  10. input timecode1_wen,
  11. input [31:0] timecode1,
  12. output [31:0] timecode1_export,
  13. input en,
  14. output wire out_timecode_serial_data,
  15. output wire out_trigger_sig,
  16. output wire [31:0] out_timecode0,
  17. output wire [31:0] out_timecode1
  18. );
  19. //
  20. wire [7:0] out_frame_num;
  21. wire out_drop_frame;
  22. wire frame_trigger_sig;
  23. wire first_frame_sig;
  24. timecode_basesig_generator #(
  25. .SYS_CLOCK_FREQ(SYS_CLOCK_FREQ)
  26. ) basesig_generator (
  27. .clk(clk),
  28. .rst_n(rst_n),
  29. .timecode_format(timecode_format),
  30. .en(en),
  31. .out_timecode_trigger_sig(frame_trigger_sig), //帧时钟触发信号
  32. .out_first_frame_sig(first_frame_sig),
  33. .out_frame_num(out_frame_num),
  34. .out_drop_frame(out_drop_frame)
  35. );
  36. reg [63:0] timecode;
  37. wire [63:0] timecode_next;
  38. timecode_nextcode nextcode (
  39. .frame_mum(out_frame_num),
  40. .drop(out_drop_frame),
  41. .timecode(timecode),
  42. .timecode_next(timecode_next)
  43. );
  44. reg timecode_trigger_sig;
  45. always @(posedge clk or negedge rst_n) begin
  46. if (!rst_n) begin
  47. timecode <= 0;
  48. timecode_trigger_sig <= 0;
  49. end else begin
  50. if (!en) begin
  51. if (timecode0_wen || timecode1_wen) begin
  52. if (timecode0_wen) begin
  53. timecode[31:0] <= timecode0;
  54. end
  55. if (timecode1_wen) begin
  56. timecode[63:32] <= timecode1;
  57. end
  58. end
  59. end else begin
  60. if (frame_trigger_sig) begin
  61. if (!first_frame_sig) begin
  62. timecode <= timecode_next;
  63. end
  64. timecode_trigger_sig <= 1;
  65. end else begin
  66. timecode_trigger_sig <= 0;
  67. end
  68. end
  69. end
  70. end
  71. assign timecode0_export = timecode[31:0];
  72. assign timecode1_export = timecode[63:32];
  73. wire [63:0] out_timecode;
  74. timecode_serialization #(
  75. .SYS_CLOCK_FREQ(SYS_CLOCK_FREQ)
  76. ) serialization (
  77. .clk(clk),
  78. .rst_n(rst_n),
  79. .timecode_format(timecode_format),
  80. .trigger_sig(timecode_trigger_sig),
  81. .timecode(timecode),
  82. .out_timecode_serial_data(out_timecode_serial_data),
  83. .out_trigger_sig(out_trigger_sig),
  84. .out_timecode(out_timecode)
  85. );
  86. // out_timecode0
  87. // out_timecode1
  88. assign out_timecode0 = out_timecode[31:0];
  89. assign out_timecode1 = out_timecode[63:32];
  90. endmodule