|
|
module timecode_generator #( parameter SYS_CLOCK_FREQ = 10000000 ) ( input clk, //clock input input rst_n, //asynchronous reset input, low active
input [31:0] timecode_format, //!timecode格式
input timecode0_wen, //!timecode[0:31]写信号 input [31:0] timecode0, //!timecode[0:31]写数据 output [31:0] timecode0_export, //!timecode[0:31]输出 input timecode1_wen, //!timecode[32:63]写信号 input [31:0] timecode1, //!timecode[32:63]写数据 output [31:0] timecode1_export, //!timecode[32:63]输出
input en, //!使能信号,只有在失能的情况才能修改timecode
output wire out_timecode_serial_data, output wire out_trigger_sig, output wire [31:0] out_timecode0, output wire [31:0] out_timecode1 );
wire [7:0] out_frame_num; wire out_drop_frame;
wire frame_trigger_sig; wire first_frame_sig;
timecode_basesig_generator #( .SYS_CLOCK_FREQ(SYS_CLOCK_FREQ) ) basesig_generator ( .clk (clk), .rst_n (rst_n), .timecode_format (timecode_format), .en (en), .out_timecode_trigger_sig(frame_trigger_sig), //帧时钟触发信号 .out_first_frame_sig (first_frame_sig), .out_frame_num (out_frame_num), .out_drop_frame (out_drop_frame) );
reg [63:0] timecode; wire [63:0] timecode_next; timecode_nextcode nextcode ( .frame_mum (out_frame_num), .drop (out_drop_frame), .timecode (timecode), .timecode_next(timecode_next) );
reg timecode_trigger_sig; always @(posedge clk or negedge rst_n) begin if (!rst_n) begin timecode <= 0; timecode_trigger_sig <= 0;
end else begin if (!en) begin if (timecode0_wen || timecode1_wen) begin if (timecode0_wen) begin timecode[31:0] <= timecode0; end if (timecode1_wen) begin timecode[63:32] <= timecode1; end end end else begin if (frame_trigger_sig) begin // if (!first_frame_sig) begin timecode <= timecode_next; // end timecode_trigger_sig <= 1; end else begin timecode_trigger_sig <= 0; end end
end end
assign timecode0_export = timecode[31:0]; assign timecode1_export = timecode[63:32];
wire [63:0] out_timecode; timecode_serialization #( .SYS_CLOCK_FREQ(SYS_CLOCK_FREQ) ) serialization ( .clk (clk), .rst_n (rst_n), .timecode_format(timecode_format),
.trigger_sig(timecode_trigger_sig), .timecode (timecode),
.out_timecode_serial_data(out_timecode_serial_data), .out_trigger_sig (out_trigger_sig), .out_timecode (out_timecode) );
// out_timecode0 // out_timecode1
assign out_timecode0 = out_timecode[31:0]; assign out_timecode1 = out_timecode[63:32];
endmodule
|