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

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,
input timecode0_wen,
input [31:0] timecode0,
output [31:0] timecode0_export,
input timecode1_wen,
input [31:0] timecode1,
output [31:0] timecode1_export,
input en,
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