Browse Source

add timecode input

master
zhaohe 2 years ago
parent
commit
6f84d4105d
  1. 142
      led_test.pds
  2. 193
      source/src/timecode/timecode_decoder.v
  3. 53
      source/src/timecode/timecode_sample_sig_generator.v
  4. 113
      source/src/timecode_input.v
  5. 30
      source/src/top.v
  6. 84
      source/test/test_timecode_decoder.v

142
led_test.pds

@ -1,5 +1,5 @@
(_flow fab_demo "2021.1-SP7"
(_comment "Generated by Fabric Compiler (version on 2021.1-SP7<build 86875>) at Thu Jan 11 22:38:56 2024")
(_comment "Generated by Fabric Compiler (version on 2021.1-SP7<build 86875>) at Fri Jan 12 13:46:39 2024")
(_version "1.0.5")
(_status "initial")
(_project
@ -19,7 +19,7 @@
(_input
(_file "source/src/top.v" + "Top:"
(_format verilog)
(_timespec "2024-01-11T22:37:23")
(_timespec "2024-01-12T13:44:54")
)
(_file "source/src/spi_reg_reader.v"
(_format verilog)
@ -141,6 +141,18 @@
(_format verilog)
(_timespec "2024-01-11T20:33:06")
)
(_file "source/src/timecode/timecode_decoder.v"
(_format verilog)
(_timespec "2024-01-12T11:59:27")
)
(_file "source/src/timecode/timecode_sample_sig_generator.v"
(_format verilog)
(_timespec "2024-01-12T10:15:22")
)
(_file "source/src/timecode_input.v"
(_format verilog)
(_timespec "2024-01-12T13:46:21")
)
)
)
(_widget wgt_my_ips_src
@ -160,7 +172,7 @@
(_input
(_file "led_test.fdc"
(_format fdc)
(_timespec "2024-01-11T18:29:17")
(_timespec "2024-01-12T10:50:30")
)
)
)
@ -182,7 +194,7 @@
(_format verilog)
(_timespec "2023-12-13T19:30:23")
)
(_file "source/test/test_top.v" + "test_top:"
(_file "source/test/test_top.v"
(_format verilog)
(_timespec "2024-01-11T16:00:43")
)
@ -198,6 +210,10 @@
(_format verilog)
(_timespec "2024-01-10T21:54:42")
)
(_file "source/test/test_timecode_decoder.v" + "test_timecode_decoder:"
(_format verilog)
(_timespec "2024-01-12T13:15:41")
)
)
)
)
@ -207,17 +223,17 @@
(_db_output
(_file "compile/Top_comp.adf"
(_format adif)
(_timespec "2024-01-11T22:37:29")
(_timespec "2024-01-12T13:46:35")
)
)
(_output
(_file "compile/Top.cmr"
(_format verilog)
(_timespec "2024-01-11T22:37:28")
(_timespec "2024-01-12T13:46:33")
)
(_file "compile/cmr.db"
(_format text)
(_timespec "2024-01-11T22:37:29")
(_timespec "2024-01-12T13:46:35")
)
)
)
@ -227,27 +243,13 @@
)
(_task tsk_synthesis
(_command cmd_synthesize
(_gci_state (_integer 2))
(_gci_state (_integer 1))
(_option ads (_switch ON))
(_option selected_syn_tool_opt (_integer 2))
(_db_output
(_file "synthesize/Top_syn.adf"
(_format adif)
(_timespec "2024-01-11T22:37:48")
)
)
(_output
(_file "synthesize/Top_syn.vm"
(_format structural_verilog)
(_timespec "2024-01-11T22:37:49")
)
(_file "synthesize/Top.snr"
(_format text)
(_timespec "2024-01-11T22:37:50")
)
(_file "synthesize/snr.db"
(_format text)
(_timespec "2024-01-11T22:37:50")
(_timespec "2024-01-12T13:46:39")
)
)
)
@ -264,27 +266,7 @@
)
(_task tsk_devmap
(_command cmd_devmap
(_gci_state (_integer 2))
(_db_output
(_file "device_map/Top_map.adf"
(_format adif)
(_timespec "2024-01-11T22:37:55")
)
)
(_output
(_file "device_map/Top_dmr.prt"
(_format text)
(_timespec "2024-01-11T22:37:54")
)
(_file "device_map/Top.dmr"
(_format text)
(_timespec "2024-01-11T22:37:55")
)
(_file "device_map/dmr.db"
(_format text)
(_timespec "2024-01-11T22:37:55")
)
)
(_gci_state (_integer 0))
)
(_widget wgt_edit_placement_cons
(_attribute _click_to_run (_switch ON))
@ -301,39 +283,7 @@
)
(_task tsk_pnr
(_command cmd_pnr
(_gci_state (_integer 2))
(_db_output
(_file "place_route/Top_pnr.adf"
(_format adif)
(_timespec "2024-01-11T22:38:36")
)
)
(_output
(_file "place_route/Top.prr"
(_format text)
(_timespec "2024-01-11T22:38:36")
)
(_file "place_route/Top_prr.prt"
(_format text)
(_timespec "2024-01-11T22:38:36")
)
(_file "place_route/clock_utilization.txt"
(_format text)
(_timespec "2024-01-11T22:38:36")
)
(_file "place_route/Top_plc.adf"
(_format adif)
(_timespec "2024-01-11T22:38:19")
)
(_file "place_route/Top_pnr.netlist"
(_format text)
(_timespec "2024-01-11T22:38:36")
)
(_file "place_route/prr.db"
(_format text)
(_timespec "2024-01-11T22:38:36")
)
)
(_gci_state (_integer 0))
)
(_widget wgt_power_calculator
(_attribute _click_to_run (_switch ON))
@ -342,24 +292,8 @@
(_attribute _click_to_run (_switch ON))
)
(_command cmd_report_post_pnr_timing
(_gci_state (_integer 2))
(_gci_state (_integer 0))
(_attribute _auto_exe_lock (_switch OFF))
(_db_output
(_file "report_timing/Top_rtp.adf"
(_format adif)
(_timespec "2024-01-11T22:38:42")
)
)
(_output
(_file "report_timing/Top.rtr"
(_format text)
(_timespec "2024-01-11T22:38:42")
)
(_file "report_timing/rtr.db"
(_format text)
(_timespec "2024-01-11T22:38:42")
)
)
)
(_widget wgt_arch_browser
(_attribute _click_to_run (_switch ON))
@ -377,25 +311,7 @@
)
(_task tsk_gen_bitstream
(_command cmd_gen_bitstream
(_gci_state (_integer 2))
(_output
(_file "generate_bitstream/Top.sbit"
(_format text)
(_timespec "2024-01-11T22:38:55")
)
(_file "generate_bitstream/Top.smsk"
(_format text)
(_timespec "2024-01-11T22:38:55")
)
(_file "generate_bitstream/Top.bgr"
(_format text)
(_timespec "2024-01-11T22:38:55")
)
(_file "generate_bitstream/bgr.db"
(_format text)
(_timespec "2024-01-11T22:38:56")
)
)
(_gci_state (_integer 0))
)
)
)

193
source/src/timecode/timecode_decoder.v

@ -0,0 +1,193 @@
module timecode_decoder #(
parameter SYS_CLOCK_FREQ = 10000000
) (
input clk, //clock input
input rst_n, //asynchronous reset input, low active
input timecode_in,
output timecode_in_state,
/*******************************************************************************
* TIMECODE输出 *
*******************************************************************************/
output reg timecode_tigger_sig,
output reg [63:0] timecode_data,
// output [31:0] timecode_format,
output timecode_serial_data
);
// Rate 1/2Fe 1Fe
// 23.98 F/s 260.7 us 521.4 us
// 24.00 F/s 260.4 us 520.8 us
// 25.00 F/s 250.0 us 500.0 us
// 29.97 F/s 208.5 us 417.1 us
// 30.00 F/s 208.3 us 416.7 us
// 260->520 -->130
// 208->416 -->104
// ---> 117us 351us
//
// 由于TIMECODE的频率范围是固定的所以这里采用117,和351作为其采样点这样既可以采样23.98也可以采样30.00
// 对应的采样频率为1000000/117=8547HZ
//
// 原始数据输出
assign timecode_serial_data = timecode_in;
assign timecode_in_state = timecode_in;
wire timecode_sample_sig_generator_rest_sig;
wire timecode_in_edge;
assign timecode_sample_sig_generator_rest_sig = !timecode_in_edge & rst_n;
zutils_edge_detecter _signal_in (
.clk(clk),
.rst_n(rst_n),
.in_signal(timecode_in),
.in_signal_edge(timecode_in_edge)
);
wire sample_sig;
timecode_sample_sig_generator #(
.SYS_CLOCK_FREQ(SYS_CLOCK_FREQ),
.SAMPLE_RATE(854700)
) timecode_sample_sig_generator (
.clk(clk),
.rst_n(timecode_sample_sig_generator_rest_sig),
.sample_sig(sample_sig)
);
// 采样+缓存采样数据
reg [159:0] timecode_data_cache;
always @(posedge clk or negedge rst_n) begin
if (!rst_n) begin
timecode_data_cache <= 0;
end else begin
if (sample_sig) begin
timecode_data_cache <= {timecode_in,timecode_data_cache[159:1]};
end else begin
timecode_data_cache <= timecode_data_cache;
end
end
end
//译码
reg [79:0] timecode_bit_cache;
// integer i;
always @(*) begin
// for (i = 0; i < 79; i = i + 1) begin
// timecode_bit_cache[i] = timecode_data_cache[i*2] & !timecode_data_cache[i*2+1];
// end
timecode_bit_cache[0] = timecode_data_cache[0] ^ timecode_data_cache[1];
timecode_bit_cache[1] = timecode_data_cache[2] ^ timecode_data_cache[3];
timecode_bit_cache[2] = timecode_data_cache[4] ^ timecode_data_cache[5];
timecode_bit_cache[3] = timecode_data_cache[6] ^ timecode_data_cache[7];
timecode_bit_cache[4] = timecode_data_cache[8] ^ timecode_data_cache[9];
timecode_bit_cache[5] = timecode_data_cache[10] ^ timecode_data_cache[11];
timecode_bit_cache[6] = timecode_data_cache[12] ^ timecode_data_cache[13];
timecode_bit_cache[7] = timecode_data_cache[14] ^ timecode_data_cache[15];
timecode_bit_cache[8] = timecode_data_cache[16] ^ timecode_data_cache[17];
timecode_bit_cache[9] = timecode_data_cache[18] ^ timecode_data_cache[19];
timecode_bit_cache[10] = timecode_data_cache[20] ^ timecode_data_cache[21];
timecode_bit_cache[11] = timecode_data_cache[22] ^ timecode_data_cache[23];
timecode_bit_cache[12] = timecode_data_cache[24] ^ timecode_data_cache[25];
timecode_bit_cache[13] = timecode_data_cache[26] ^ timecode_data_cache[27];
timecode_bit_cache[14] = timecode_data_cache[28] ^ timecode_data_cache[29];
timecode_bit_cache[15] = timecode_data_cache[30] ^ timecode_data_cache[31];
timecode_bit_cache[16] = timecode_data_cache[32] ^ timecode_data_cache[33];
timecode_bit_cache[17] = timecode_data_cache[34] ^ timecode_data_cache[35];
timecode_bit_cache[18] = timecode_data_cache[36] ^ timecode_data_cache[37];
timecode_bit_cache[19] = timecode_data_cache[38] ^ timecode_data_cache[39];
timecode_bit_cache[20] = timecode_data_cache[40] ^ timecode_data_cache[41];
timecode_bit_cache[21] = timecode_data_cache[42] ^ timecode_data_cache[43];
timecode_bit_cache[22] = timecode_data_cache[44] ^ timecode_data_cache[45];
timecode_bit_cache[23] = timecode_data_cache[46] ^ timecode_data_cache[47];
timecode_bit_cache[24] = timecode_data_cache[48] ^ timecode_data_cache[49];
timecode_bit_cache[25] = timecode_data_cache[50] ^ timecode_data_cache[51];
timecode_bit_cache[26] = timecode_data_cache[52] ^ timecode_data_cache[53];
timecode_bit_cache[27] = timecode_data_cache[54] ^ timecode_data_cache[55];
timecode_bit_cache[28] = timecode_data_cache[56] ^ timecode_data_cache[57];
timecode_bit_cache[29] = timecode_data_cache[58] ^ timecode_data_cache[59];
timecode_bit_cache[30] = timecode_data_cache[60] ^ timecode_data_cache[61];
timecode_bit_cache[31] = timecode_data_cache[62] ^ timecode_data_cache[63];
timecode_bit_cache[32] = timecode_data_cache[64] ^ timecode_data_cache[65];
timecode_bit_cache[33] = timecode_data_cache[66] ^ timecode_data_cache[67];
timecode_bit_cache[34] = timecode_data_cache[68] ^ timecode_data_cache[69];
timecode_bit_cache[35] = timecode_data_cache[70] ^ timecode_data_cache[71];
timecode_bit_cache[36] = timecode_data_cache[72] ^ timecode_data_cache[73];
timecode_bit_cache[37] = timecode_data_cache[74] ^ timecode_data_cache[75];
timecode_bit_cache[38] = timecode_data_cache[76] ^ timecode_data_cache[77];
timecode_bit_cache[39] = timecode_data_cache[78] ^ timecode_data_cache[79];
timecode_bit_cache[40] = timecode_data_cache[80] ^ timecode_data_cache[81];
timecode_bit_cache[41] = timecode_data_cache[82] ^ timecode_data_cache[83];
timecode_bit_cache[42] = timecode_data_cache[84] ^ timecode_data_cache[85];
timecode_bit_cache[43] = timecode_data_cache[86] ^ timecode_data_cache[87];
timecode_bit_cache[44] = timecode_data_cache[88] ^ timecode_data_cache[89];
timecode_bit_cache[45] = timecode_data_cache[90] ^ timecode_data_cache[91];
timecode_bit_cache[46] = timecode_data_cache[92] ^ timecode_data_cache[93];
timecode_bit_cache[47] = timecode_data_cache[94] ^ timecode_data_cache[95];
timecode_bit_cache[48] = timecode_data_cache[96] ^ timecode_data_cache[97];
timecode_bit_cache[49] = timecode_data_cache[98] ^ timecode_data_cache[99];
timecode_bit_cache[50] = timecode_data_cache[100] ^ timecode_data_cache[101];
timecode_bit_cache[51] = timecode_data_cache[102] ^ timecode_data_cache[103];
timecode_bit_cache[52] = timecode_data_cache[104] ^ timecode_data_cache[105];
timecode_bit_cache[53] = timecode_data_cache[106] ^ timecode_data_cache[107];
timecode_bit_cache[54] = timecode_data_cache[108] ^ timecode_data_cache[109];
timecode_bit_cache[55] = timecode_data_cache[110] ^ timecode_data_cache[111];
timecode_bit_cache[56] = timecode_data_cache[112] ^ timecode_data_cache[113];
timecode_bit_cache[57] = timecode_data_cache[114] ^ timecode_data_cache[115];
timecode_bit_cache[58] = timecode_data_cache[116] ^ timecode_data_cache[117];
timecode_bit_cache[59] = timecode_data_cache[118] ^ timecode_data_cache[119];
timecode_bit_cache[60] = timecode_data_cache[120] ^ timecode_data_cache[121];
timecode_bit_cache[61] = timecode_data_cache[122] ^ timecode_data_cache[123];
timecode_bit_cache[62] = timecode_data_cache[124] ^ timecode_data_cache[125];
timecode_bit_cache[63] = timecode_data_cache[126] ^ timecode_data_cache[127];
timecode_bit_cache[64] = timecode_data_cache[128] ^ timecode_data_cache[129];
timecode_bit_cache[65] = timecode_data_cache[130] ^ timecode_data_cache[131];
timecode_bit_cache[66] = timecode_data_cache[132] ^ timecode_data_cache[133];
timecode_bit_cache[67] = timecode_data_cache[134] ^ timecode_data_cache[135];
timecode_bit_cache[68] = timecode_data_cache[136] ^ timecode_data_cache[137];
timecode_bit_cache[69] = timecode_data_cache[138] ^ timecode_data_cache[139];
timecode_bit_cache[70] = timecode_data_cache[140] ^ timecode_data_cache[141];
timecode_bit_cache[71] = timecode_data_cache[142] ^ timecode_data_cache[143];
timecode_bit_cache[72] = timecode_data_cache[144] ^ timecode_data_cache[145];
timecode_bit_cache[73] = timecode_data_cache[146] ^ timecode_data_cache[147];
timecode_bit_cache[74] = timecode_data_cache[148] ^ timecode_data_cache[149];
timecode_bit_cache[75] = timecode_data_cache[150] ^ timecode_data_cache[151];
timecode_bit_cache[76] = timecode_data_cache[152] ^ timecode_data_cache[153];
timecode_bit_cache[77] = timecode_data_cache[154] ^ timecode_data_cache[155];
timecode_bit_cache[78] = timecode_data_cache[156] ^ timecode_data_cache[157];
timecode_bit_cache[79] = timecode_data_cache[158] ^ timecode_data_cache[159];
end
// 识别信号捕获
wire [15:0] synccode;
assign synccode = timecode_bit_cache[79:64];
assign detect_sync_code = (synccode == 16'b1011_1111_1111_1100);
wire detect_sync_code_sig;
zutils_edge_detecter detect_sync_code_detect (
.clk(clk),
.rst_n(rst_n),
.in_signal(detect_sync_code),
.in_signal_rising_edge(detect_sync_code_sig)
);
//输出时码识别信号
always @(posedge clk or negedge rst_n) begin
if (!rst_n) begin
timecode_tigger_sig <= 0;
timecode_data <= 0;
end else begin
if (detect_sync_code_sig) begin
timecode_tigger_sig <= 1;
timecode_data <= timecode_bit_cache[63:0];
end else begin
timecode_tigger_sig <= 0;
end
end
end
endmodule

53
source/src/timecode/timecode_sample_sig_generator.v

@ -0,0 +1,53 @@
module timecode_sample_sig_generator #(
parameter SYS_CLOCK_FREQ = 10000000,
parameter SAMPLE_RATE = 8547
) (
input clk, //clock input
input rst_n, //asynchronous reset input, low active
output reg sample_sig
);
//
// sampleSig ______|____________|____________|____________|
//
localparam COUNT = (SYS_CLOCK_FREQ * 100) / SAMPLE_RATE;
reg [31:0] counter;
reg [1:0] sub_counter;
wire counter_clear;
always @(posedge clk or negedge rst_n) begin
if (!rst_n) begin
counter <= 0;
sub_counter <= 1;
end else begin
if (counter == COUNT) begin
counter <= 0;
if (sub_counter == 1) begin
sample_sig <= 1;
sub_counter <= 0;
end else begin
sub_counter <= 1;
end
end else begin
counter <= counter + 1;
sample_sig <= 0;
end
end
end
endmodule

113
source/src/timecode_input.v

@ -0,0 +1,113 @@
module timecode_input_parser #(
parameter REG_START_ADD = 0,
parameter SYS_CLOCK_FREQ = 10000000
) (
input clk, //clock input
input rst_n, //asynchronous reset input, low active
//寄存器读写接口
input [31:0] addr,
input [31:0] wr_data,
input wr_en,
output wire [31:0] rd_data,
input timecode_bnc_in,
input timecode_headphone_in,
/*******************************************************************************
* TIMECODE输出 *
*******************************************************************************/
output timecode_tigger_sig,
output [31:0] timecode_format,
output [63:0] timecode_data,
output timecode_serial_data,
/*******************************************************************************
* 指示灯状态输出 *
*******************************************************************************/
output timecode_headphone_in_state_led,
output timecode_bnc_in_state_led
);
reg [31:0] r0_timecode_sig_selt; //信号源选择 0:off,1:bnc,2:headphone
reg [31:0] r1_timecode_format; //
reg [31:0] r2_timecode0; //
reg [31:0] r3_timecode1; //
wire [31:0] reg_wr_index;
zutils_register_advanced #(
.REG_START_ADD(REG_START_ADD)
) _register (
.clk(clk),
.rst_n(rst_n),
.addr(addr),
.wr_data(wr_data),
.wr_en(wr_en),
.rd_data(rd_data),
.reg0(r0_timecode_sig_selt),
.reg1(r1_timecode_format),
.reg2(r2_timecode0),
.reg3(r3_timecode1),
.reg_wr_sig(reg_wr_sig),
.reg_index (reg_wr_index)
);
always @(posedge clk or negedge rst_n) begin
if (!rst_n) begin
r0_timecode_sig_selt <= 0;
r1_timecode_format <= 0;
end else begin
if (reg_wr_sig) begin
case (reg_wr_index)
31'h0: r0_timecode_sig_selt <= wr_data;
31'h1: r1_timecode_format <= wr_data;
default: begin
end
endcase
end
end
end
wire timecode_in_af_selt;
zutils_multiplexer_4t1 _signal_select (
.chooseindex(r0_timecode_sig_selt),
.signal0(1'b0),
.signal1(timecode_bnc_in),
.signal2(timecode_headphone_in),
.signalout(timecode_in_af_selt)
);
timecode_decoder #(
.SYS_CLOCK_FREQ(10000000)
) timecode_decoder_ins (
.clk(clk),
.rst_n(rst_n),
.timecode_in(timecode_in_af_selt), // 时码输入
.timecode_tigger_sig(timecode_tigger_sig), //
.timecode_data(timecode_data), //[63:0]
.timecode_serial_data(timecode_serial_data) //
);
always @(posedge clk or negedge rst_n) begin
if (!rst_n) begin
r2_timecode0 <= 0;
r3_timecode1 <= 0;
end else begin
if (timecode_tigger_sig) begin
r2_timecode0 <= timecode_data[31:0];
r3_timecode1 <= timecode_data[63:32];
end
end
end
assign timecode_format = r1_timecode_format;
assign timecode_headphone_in_state_led = 1;
assign timecode_bnc_in_state_led = 1;
endmodule

30
source/src/top.v

@ -197,6 +197,8 @@ module Top (
wire [31:0] camera_sync_out_rd_data;
wire [31:0] debuger_rd_data;
//
/*******************************************************************************
* TEST_SPI_REG *
@ -314,6 +316,34 @@ module Top (
);
/*******************************************************************************
* 时码解析器 *
*******************************************************************************/
timecode_input_parser #(
.REG_START_ADD (REG_ADD_OFF_TIMECODE_IN),
.SYS_CLOCK_FREQ(SYS_CLOCK_FREQ)
) timecode_input_parser_ins (
.clk (sys_clk),
.rst_n(sys_rst_n),
.addr(reg_reader_bus_addr),
.wr_data(reg_reader_bus_wr_data),
.wr_en(reg_reader_bus_wr_en),
.rd_data(timecode_in_rd_data),
//input
.timecode_bnc_in(timecode_bnc_in),
.timecode_headphone_in(timecode_headphone_in),
//output
.timecode_tigger_sig(ISIG_timecode_frame_sync_internal),
.timecode_format(ISIGBUS32_timecode_format_internal), //[31:0]
.timecode_data(ISIGBUS64_timecode_data_internal), //[63:0]
.timecode_serial_data(ISIG_timecode_serial_data_internal),
.timecode_headphone_in_state_led(timecode_headphone_in_state_led),
.timecode_bnc_in_state_led(timecode_bnc_in_state_led)
);
/*******************************************************************************
* ISIG_internal_100hz信号生成 *
*******************************************************************************/
zutils_pwm_generator #(

84
source/test/test_timecode_decoder.v

@ -0,0 +1,84 @@
`timescale 10ns / 10ns
module test_timecode_decoder;
reg sys_clk;
reg rst_n;
reg timecode_in;
reg one_timecode_end;
reg datanow;
wire timecode_in_state;
wire timecode_tigger_sig;
wire [63:0] timecode_data;
wire timecode_serial_data;
reg [7:0] offset;
timecode_decoder #(
.SYS_CLOCK_FREQ(10000000)
) timecode_decoder_inst (
.clk (sys_clk),
.rst_n(rst_n),
.timecode_in(timecode_in),
.timecode_in_state(timecode_in_state),
.timecode_tigger_sig(timecode_tigger_sig),
.timecode_data(timecode_data),
.timecode_serial_data(timecode_serial_data)
);
// 250us
task timecode_generator;
input [79:0] data;
integer i;
begin
for (i = 0; i < 80; i = i + 1) begin
offset = i;
if (data[i]) begin
datanow = 1;
end else begin
datanow = 0;
end
timecode_in = ~timecode_in;
#25000;
if (data[i]) begin
timecode_in = ~timecode_in;
end
#25000;
end
end
endtask
initial begin
sys_clk = 0;
rst_n = 0;
#100;
rst_n = 1;
timecode_in = 0;
one_timecode_end = 0;
#100;
//
// timecode_generator(79'h1234_4321_1234_4321_CFFB);
// timecode_generator(79'h0000_0000_0000_0000_CFFB);
timecode_generator(80'hBFFC_0000_0000_0000_0000);
// timecode_generator(79'b1011_1111_1111_1100_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000);
//FFFF
//4444
//16+16+16+16+16
// 32 32 80
//
// timecode_generator(79'hBFFC_0000_0000_0000_0000);
// timecode_generator(79'hBFFC_0000_0000_0000_0000);
one_timecode_end = 1;
#1000000;
timecode_generator(80'hBFFC_0102_0304_0506_0102);
#100000000;
$stop;
end
always #5 sys_clk = ~sys_clk; // 50MHZ时钟
endmodule
Loading…
Cancel
Save