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.
152 lines
4.5 KiB
152 lines
4.5 KiB
|
|
// module internal_timecode_generator #(
|
|
// parameter SYS_CLOCK_FREQ = 100000000
|
|
// ) (
|
|
// input clk, //clock input
|
|
// input rst_n, //asynchronous reset input, low active
|
|
|
|
// input ctrl_sig,
|
|
|
|
// input [31:0] timecode_format,
|
|
|
|
// input timecode_tc_wr_en,
|
|
// input [31:0] timecode_tc_wr_data,
|
|
// output reg [31:0] out_timecode_uc_reg,
|
|
|
|
// input timecode_uc_wr_en,
|
|
// input [31:0] timecode_uc_wr_data,
|
|
// output reg [31:0] out_timecode_tc_reg,
|
|
|
|
// output reg out_timecode_tirgger_sig
|
|
// );
|
|
|
|
// localparam FPS2398Format = 0;
|
|
// localparam FPS2400Format = 1;
|
|
// localparam FPS2500Format = 2;
|
|
// localparam FPS2997Format = 3;
|
|
// localparam FPS2997DropFormat = 4;
|
|
// localparam FPS3000Format = 5;
|
|
|
|
// /*******************************************************************************
|
|
// * smpte_timecode_clk_generator *
|
|
// *******************************************************************************/
|
|
|
|
// wire timecode_sig_clk_output;
|
|
// zutils_smpte_timecode_clk_generator #(
|
|
// .SYS_CLOCK_FREQ(SYS_CLOCK_FREQ)
|
|
// ) smpte_timecode_clk_generator (
|
|
// .clk(clk),
|
|
// .rst_n(rst_n),
|
|
// .ctrl_sig(ctrl_sig),
|
|
// .fps2398format_clk(fps2398format_clk),
|
|
// .fps2400format_clk(fps2400format_clk),
|
|
// .fps2500format_clk(fps2500format_clk),
|
|
// .fps2997format_clk(fps2997format_clk),
|
|
// .fps2997dropformat_clk(fps2997dropformat_clk),
|
|
// .fps3000format_clk(fps3000format_clk)
|
|
// );
|
|
|
|
// zutils_multiplexer_32t1_v2 timecode_clk_output_mult (
|
|
// .chooseindex(timecode_format),
|
|
// //in
|
|
// .in0(fps2398format_clk),
|
|
// .in1(fps2400format_clk),
|
|
// .in2(fps2500format_clk),
|
|
// .in3(fps2997format_clk),
|
|
// .in4(fps2997dropformat_clk),
|
|
// .in5(fps3000format_clk),
|
|
// //out
|
|
// .out(timecode_sig_clk_output)
|
|
// );
|
|
|
|
// zutils_edge_detecter timecode_sig_clk_output_edge_detecter (
|
|
// .clk(clk),
|
|
// .rst_n(rst_n),
|
|
// .in_signal(timecode_sig_clk_output),
|
|
// .in_signal_rising_edge(timecode_sig_clk_output_rising_edge)
|
|
// );
|
|
|
|
// reg [7:0] frameNum;
|
|
// reg timecode_drop_frame;
|
|
// wire [31:0] timecode_next;
|
|
|
|
// always @(*) begin
|
|
// case (timecode_format)
|
|
// FPS2398Format: begin
|
|
// frameNum <= 24;
|
|
// timecode_drop_frame <= 0;
|
|
// end
|
|
// FPS2400Format: begin
|
|
// frameNum <= 24;
|
|
// timecode_drop_frame <= 0;
|
|
// end
|
|
// FPS2500Format: begin
|
|
// frameNum <= 25;
|
|
// timecode_drop_frame <= 0;
|
|
// end
|
|
// FPS2997Format: begin
|
|
// frameNum <= 30;
|
|
// timecode_drop_frame <= 0;
|
|
// end
|
|
// FPS2997DropFormat: begin
|
|
// frameNum <= 30;
|
|
// timecode_drop_frame <= 0;
|
|
// end
|
|
// default begin
|
|
// frameNum <= 30;
|
|
// timecode_drop_frame <= 0;
|
|
// end
|
|
// endcase
|
|
// end
|
|
|
|
// ztutils_timecode_next_code ztutils_timecode_next_code_inst (
|
|
// .timecode(out_timecode_tc_reg),
|
|
// .frameNum(frameNum),
|
|
// .drop(timecode_drop_frame),
|
|
// .timecode_next(timecode_next)
|
|
// );
|
|
|
|
// reg n_first_timecode_sig;
|
|
|
|
// always @(posedge clk or negedge rst_n) begin
|
|
// if (!rst_n || !ctrl_sig) begin
|
|
// n_first_timecode_sig <= 0;
|
|
// end else begin
|
|
// if (!n_first_timecode_sig && timecode_sig_clk_output_rising_edge) begin
|
|
// n_first_timecode_sig <= 1;
|
|
// end
|
|
// end
|
|
// end
|
|
|
|
// // always @(posedge clk or negedge rst_n) begin
|
|
// // if (!rst_n) begin
|
|
// // out_timecode_tc_reg <= 0;
|
|
// // out_timecode_uc_reg <= 0;
|
|
// // end else begin
|
|
|
|
// // if (timecode_tc_wr_en) begin
|
|
// // //外都写入时间码
|
|
// // out_timecode_tc_reg <= timecode_tc_wr_data;
|
|
// // end else if (timecode_uc_wr_en) begin
|
|
// // //外都写入时间码-用户码
|
|
// // out_timecode_uc_reg <= timecode_uc_wr_data;
|
|
// // end else begin
|
|
|
|
// // if (timecode_sig_clk_output_rising_edge) begin
|
|
// // //第一次触发,不改变时间码
|
|
// // if (!n_first_timecode_sig) begin
|
|
// // out_timecode_tc_reg <= out_timecode_tc_reg;
|
|
// // end else begin
|
|
// // out_timecode_tc_reg <= timecode_next;
|
|
// // end
|
|
// // out_timecode_tirgger_sig <= 1;
|
|
// // end else begin
|
|
// // out_timecode_tirgger_sig <= 0;
|
|
// // end
|
|
// // end
|
|
// // end
|
|
// // end
|
|
|
|
|
|
|
|
// endmodule
|