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

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