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.
This repo is archived. You can view files and clone it, but cannot push or open issues/pull-requests.

111 lines
3.0 KiB

2 years ago
2 years ago
2 years ago
1 year ago
2 years ago
1 year ago
2 years ago
1 year ago
2 years ago
1 year ago
2 years ago
2 years ago
2 years ago
1 year ago
2 years ago
1 year ago
2 years ago
2 years ago
1 year ago
2 years ago
1 year ago
2 years ago
2 years ago
2 years ago
1 year ago
2 years ago
2 years ago
2 years ago
1 year ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
1 year ago
2 years ago
1 year ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
1 year ago
2 years ago
2 years ago
2 years ago
1 year ago
2 years ago
2 years ago
1 year 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, //!timecode格式
  7. input timecode0_wen, //!timecode[0:31]写信号
  8. input [31:0] timecode0, //!timecode[0:31]写数据
  9. output [31:0] timecode0_export, //!timecode[0:31]输出
  10. input timecode1_wen, //!timecode[32:63]写信号
  11. input [31:0] timecode1, //!timecode[32:63]写数据
  12. output [31:0] timecode1_export, //!timecode[32:63]输出
  13. input en, //!使能信号,只有在失能的情况才能修改timecode
  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. wire [7:0] out_frame_num;
  20. wire out_drop_frame;
  21. wire frame_trigger_sig;
  22. wire first_frame_sig;
  23. timecode_basesig_generator #(
  24. .SYS_CLOCK_FREQ(SYS_CLOCK_FREQ)
  25. ) basesig_generator (
  26. .clk (clk),
  27. .rst_n (rst_n),
  28. .timecode_format (timecode_format),
  29. .en (en),
  30. .out_timecode_trigger_sig(frame_trigger_sig), //帧时钟触发信号
  31. .out_first_frame_sig (first_frame_sig),
  32. .out_frame_num (out_frame_num),
  33. .out_drop_frame (out_drop_frame)
  34. );
  35. reg [63:0] timecode;
  36. wire [63:0] timecode_next;
  37. timecode_nextcode nextcode (
  38. .frame_mum (out_frame_num),
  39. .drop (out_drop_frame),
  40. .timecode (timecode),
  41. .timecode_next(timecode_next)
  42. );
  43. reg timecode_trigger_sig;
  44. always @(posedge clk or negedge rst_n) begin
  45. if (!rst_n) begin
  46. timecode <= 0;
  47. timecode_trigger_sig <= 0;
  48. end else begin
  49. if (!en) begin
  50. if (timecode0_wen || timecode1_wen) begin
  51. if (timecode0_wen) begin
  52. timecode[31:0] <= timecode0;
  53. end
  54. if (timecode1_wen) begin
  55. timecode[63:32] <= timecode1;
  56. end
  57. end
  58. end else begin
  59. if (frame_trigger_sig) begin
  60. // if (!first_frame_sig) begin
  61. timecode <= timecode_next;
  62. // end
  63. timecode_trigger_sig <= 1;
  64. end else begin
  65. timecode_trigger_sig <= 0;
  66. end
  67. end
  68. end
  69. end
  70. assign timecode0_export = timecode[31:0];
  71. assign timecode1_export = timecode[63:32];
  72. wire [63:0] out_timecode;
  73. timecode_serialization #(
  74. .SYS_CLOCK_FREQ(SYS_CLOCK_FREQ)
  75. ) serialization (
  76. .clk (clk),
  77. .rst_n (rst_n),
  78. .timecode_format(timecode_format),
  79. .trigger_sig(timecode_trigger_sig),
  80. .timecode (timecode),
  81. .out_timecode_serial_data(out_timecode_serial_data),
  82. .out_trigger_sig (out_trigger_sig),
  83. .out_timecode (out_timecode)
  84. );
  85. // out_timecode0
  86. // out_timecode1
  87. assign out_timecode0 = out_timecode[31:0];
  88. assign out_timecode1 = out_timecode[63:32];
  89. endmodule