//+FHDR------------------------------------------------------------------------
|
//+FHDR------------------------------------------------------------------------
|
//Copyright (c) 2013 Latin Group American Integhrated Circuit, Inc. All rights reserved
|
//Copyright (c) 2013 Latin Group American Integhrated Circuit, Inc. All rights reserved
|
//GLADIC Open Source RTL
|
//GLADIC Open Source RTL
|
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
//FILE NAME :
|
//FILE NAME :
|
//DEPARTMENT : IC Design / Verification
|
//DEPARTMENT : IC Design / Verification
|
//AUTHOR : Felipe Fernandes da Costa
|
//AUTHOR : Felipe Fernandes da Costa
|
//AUTHOR’S EMAIL :
|
//AUTHOR’S EMAIL :
|
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
//RELEASE HISTORY
|
//RELEASE HISTORY
|
//VERSION DATE AUTHOR DESCRIPTION
|
//VERSION DATE AUTHOR DESCRIPTION
|
//1.0 YYYY-MM-DD name
|
//1.0 YYYY-MM-DD name
|
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
//KEYWORDS : General file searching keywords, leave blank if none.
|
//KEYWORDS : General file searching keywords, leave blank if none.
|
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
//PURPOSE : ECSS_E_ST_50_12C_31_july_2008
|
//PURPOSE : ECSS_E_ST_50_12C_31_july_2008
|
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
//PARAMETERS
|
//PARAMETERS
|
//PARAM NAME RANGE : DESCRIPTION : DEFAULT : UNITS
|
//PARAM NAME RANGE : DESCRIPTION : DEFAULT : UNITS
|
//e.g.DATA_WIDTH [32,16] : width of the DATA : 32:
|
//e.g.DATA_WIDTH [32,16] : width of the DATA : 32:
|
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
//REUSE ISSUES
|
//REUSE ISSUES
|
//Reset Strategy :
|
//Reset Strategy :
|
//Clock Domains :
|
//Clock Domains :
|
//Critical Timing :
|
//Critical Timing :
|
//Test Features :
|
//Test Features :
|
//Asynchronous I/F :
|
//Asynchronous I/F :
|
//Scan Methodology :
|
//Scan Methodology :
|
//Instantiations :
|
//Instantiations :
|
//Synthesizable (y/n) :
|
//Synthesizable (y/n) :
|
//Other :
|
//Other :
|
//-FHDR------------------------------------------------------------------------
|
//-FHDR------------------------------------------------------------------------
|
|
|
`timescale 1ns/1ns
|
`timescale 1ns/1ns
|
|
|
module TX_SPW (
|
module TX_SPW (
|
input pclk_tx,
|
input pclk_tx,
|
//
|
//
|
input [8:0] data_tx_i,
|
input [8:0] data_tx_i,
|
input txwrite_tx,
|
input txwrite_tx,
|
//
|
//
|
input [7:0] timecode_tx_i,
|
input [7:0] timecode_tx_i,
|
input tickin_tx,
|
input tickin_tx,
|
//
|
//
|
input enable_tx,
|
input enable_tx,
|
input send_null_tx,
|
input send_null_tx,
|
input send_fct_tx,
|
input send_fct_tx,
|
|
|
//
|
//
|
input gotfct_tx,
|
input gotfct_tx,
|
input send_fct_now,
|
input send_fct_now,
|
//
|
//
|
output reg tx_dout,
|
output reg tx_dout,
|
output reg tx_sout,
|
output reg tx_sout,
|
//
|
//
|
output reg ready_tx_data,
|
output reg ready_tx_data,
|
output reg ready_tx_timecode
|
output reg ready_tx_timecode
|
|
|
);
|
);
|
|
|
localparam [2:0] tx_spw_start = 3'b000,
|
localparam [2:0] tx_spw_start = 3'b000,
|
tx_spw_null = 3'b001,
|
tx_spw_null = 3'b001,
|
tx_spw_null_fct = 3'b010,
|
tx_spw_null_fct = 3'b010,
|
tx_spw_full = 3'b100;
|
tx_spw_full = 3'b100;
|
|
|
localparam [5:0] NULL = 6'b000001,
|
localparam [5:0] NULL = 6'b000001,
|
FCT = 6'b000010,
|
FCT = 6'b000010,
|
EOP = 6'b000100,
|
EOP = 6'b000100,
|
EEP = 6'b001000,
|
EEP = 6'b001000,
|
DATA = 6'b010000,
|
DATA = 6'b010000,
|
TIMEC = 6'b100000;
|
TIMEC = 6'b100000;
|
|
|
|
|
|
localparam [7:0] null_s = 8'b01110100;
|
|
localparam [2:0] fct_s = 3'b100;
|
|
localparam [3:0] eop_s = 4'b0101;
|
|
localparam [3:0] eep_s = 4'b0110;
|
|
localparam [13:0] timecode_ss = 14'b01110000000000;
|
|
|
|
|
|
|
reg [2:0] state_tx;
|
reg [2:0] state_tx;
|
reg [2:0] next_state_tx;
|
reg [2:0] next_state_tx;
|
|
|
reg [7:0] null_s;
|
//reg [7:0] null_s;
|
reg [3:0] fct_s;
|
//reg [2:0] fct_s;
|
reg [3:0] eop_s;
|
//reg [3:0] eop_s;
|
reg [3:0] eep_s;
|
//reg [3:0] eep_s;
|
reg [13:0] timecode_s;
|
reg [13:0] timecode_s;
|
|
|
reg [5:0] last_type;
|
reg [5:0] last_type;
|
reg [8:0] txdata_flagctrl_tx_last;
|
reg [8:0] txdata_flagctrl_tx_last;
|
reg [7:0] last_timein_control_flag_tx;
|
reg [7:0] last_timein_control_flag_tx;
|
|
|
reg first_time;
|
reg first_time;
|
|
|
reg hold_null;
|
reg hold_null;
|
reg hold_fct;
|
reg hold_fct;
|
reg hold_data;
|
reg hold_data;
|
reg hold_time_code;
|
reg hold_time_code;
|
|
|
reg enable_null;
|
reg enable_null;
|
reg enable_fct;
|
reg enable_fct;
|
reg enable_n_char;
|
reg enable_n_char;
|
reg enable_time_code;
|
reg enable_time_code;
|
|
|
reg [2:0] fct_send;
|
reg [2:0] fct_send;
|
reg [2:0] fct_flag;
|
reg [2:0] fct_flag;
|
|
|
reg [5:0] fct_counter;
|
reg [5:0] fct_counter;
|
reg [5:0] fct_counter_receive;
|
reg [5:0] fct_counter_receive;
|
|
|
reg last_tx_dout;
|
reg last_tx_dout;
|
reg last_tx_sout;
|
reg last_tx_sout;
|
|
|
reg block_sum;
|
reg block_sum;
|
reg block_sum_fct_send;
|
reg block_sum_fct_send;
|
|
|
reg [3:0] global_counter_transfer;
|
reg [3:0] global_counter_transfer;
|
|
|
|
|
|
|
always@(*)
|
always@(*)
|
begin
|
begin
|
tx_dout = 1'b0;
|
tx_dout = 1'b0;
|
|
|
if(!enable_tx)
|
if(!enable_tx)
|
begin
|
begin
|
tx_dout = 1'b0;
|
tx_dout = 1'b0;
|
end
|
end
|
else if( enable_null & first_time & global_counter_transfer == 4'd0)
|
else if( enable_null & first_time & global_counter_transfer == 4'd0)
|
begin
|
begin
|
tx_dout = null_s[7];
|
tx_dout = null_s[7];
|
end
|
end
|
else if( enable_null & !first_time & last_type == NULL & global_counter_transfer == 4'd0)
|
else if( enable_null & !first_time & last_type == NULL & global_counter_transfer == 4'd0)
|
begin
|
begin
|
tx_dout = !(null_s[6]^null_s[0]^null_s[1]);
|
tx_dout = !(null_s[6]^null_s[0]^null_s[1]);
|
end
|
end
|
else if( enable_null & !first_time & last_type == FCT & global_counter_transfer == 4'd0)
|
else if( enable_null & !first_time & last_type == FCT & global_counter_transfer == 4'd0)
|
begin
|
begin
|
tx_dout = !(null_s[6]^fct_s[0]^fct_s[1]);
|
tx_dout = !(null_s[6]^fct_s[0]^fct_s[1]);
|
end
|
end
|
else if( enable_null & !first_time & last_type == EOP & global_counter_transfer == 4'd0)
|
else if( enable_null & !first_time & last_type == EOP & global_counter_transfer == 4'd0)
|
begin
|
begin
|
tx_dout = !(null_s[6]^eop_s[0]^eop_s[1]);
|
tx_dout = !(null_s[6]^eop_s[0]^eop_s[1]);
|
end
|
end
|
else if( enable_null & !first_time & last_type == EEP & global_counter_transfer == 4'd0)
|
else if( enable_null & !first_time & last_type == EEP & global_counter_transfer == 4'd0)
|
begin
|
begin
|
tx_dout = !(null_s[6]^eep_s[0]^eep_s[1]);
|
tx_dout = !(null_s[6]^eep_s[0]^eep_s[1]);
|
end
|
end
|
else if( enable_null & !first_time & last_type == DATA & global_counter_transfer == 4'd0)
|
else if( enable_null & !first_time & last_type == DATA & global_counter_transfer == 4'd0)
|
begin
|
begin
|
tx_dout = !(null_s[6]^txdata_flagctrl_tx_last[0]^txdata_flagctrl_tx_last[1]^txdata_flagctrl_tx_last[2]^txdata_flagctrl_tx_last[3]^ txdata_flagctrl_tx_last[4]^txdata_flagctrl_tx_last[5]^txdata_flagctrl_tx_last[6]^txdata_flagctrl_tx_last[7]);
|
tx_dout = !(null_s[6]^txdata_flagctrl_tx_last[0]^txdata_flagctrl_tx_last[1]^txdata_flagctrl_tx_last[2]^txdata_flagctrl_tx_last[3]^ txdata_flagctrl_tx_last[4]^txdata_flagctrl_tx_last[5]^txdata_flagctrl_tx_last[6]^txdata_flagctrl_tx_last[7]);
|
end
|
end
|
else if( enable_null & !first_time & last_type == TIMEC & global_counter_transfer == 4'd0)
|
else if( enable_null & !first_time & last_type == TIMEC & global_counter_transfer == 4'd0)
|
begin
|
begin
|
tx_dout = !(null_s[6]^last_timein_control_flag_tx[7]^last_timein_control_flag_tx[6]^last_timein_control_flag_tx[5]^last_timein_control_flag_tx[4]^last_timein_control_flag_tx[3]^last_timein_control_flag_tx[2]^last_timein_control_flag_tx[1]^last_timein_control_flag_tx[0]);
|
tx_dout = !(null_s[6]^last_timein_control_flag_tx[7]^last_timein_control_flag_tx[6]^last_timein_control_flag_tx[5]^last_timein_control_flag_tx[4]^last_timein_control_flag_tx[3]^last_timein_control_flag_tx[2]^last_timein_control_flag_tx[1]^last_timein_control_flag_tx[0]);
|
end
|
end
|
else if( enable_null & !first_time & global_counter_transfer == 4'd1)
|
else if( enable_null & !first_time & global_counter_transfer == 4'd1)
|
begin
|
begin
|
tx_dout = null_s[6];
|
tx_dout = null_s[6];
|
end
|
end
|
else if( enable_null & !first_time & global_counter_transfer == 4'd2)
|
else if( enable_null & !first_time & global_counter_transfer == 4'd2)
|
begin
|
begin
|
tx_dout = null_s[5];
|
tx_dout = null_s[5];
|
end
|
end
|
else if( enable_null & !first_time & global_counter_transfer == 4'd3)
|
else if( enable_null & !first_time & global_counter_transfer == 4'd3)
|
begin
|
begin
|
tx_dout = null_s[4];
|
tx_dout = null_s[4];
|
end
|
end
|
else if( enable_null & !first_time & global_counter_transfer == 4'd4)
|
else if( enable_null & !first_time & global_counter_transfer == 4'd4)
|
begin
|
begin
|
tx_dout = null_s[3];
|
tx_dout = null_s[3];
|
end
|
end
|
else if( enable_null & !first_time & global_counter_transfer == 4'd5)
|
else if( enable_null & !first_time & global_counter_transfer == 4'd5)
|
begin
|
begin
|
tx_dout = null_s[2];
|
tx_dout = null_s[2];
|
end
|
end
|
else if( enable_null & !first_time & global_counter_transfer == 4'd6)
|
else if( enable_null & !first_time & global_counter_transfer == 4'd6)
|
begin
|
begin
|
tx_dout = null_s[1];
|
tx_dout = null_s[1];
|
end
|
end
|
else if( enable_null & !first_time & global_counter_transfer == 4'd7)
|
else if( enable_null & !first_time & global_counter_transfer == 4'd7)
|
begin
|
begin
|
tx_dout = null_s[0];
|
tx_dout = null_s[0];
|
end
|
end
|
else if( enable_fct & !first_time & last_type == NULL & global_counter_transfer == 4'd0)
|
else if( enable_fct & !first_time & last_type == NULL & global_counter_transfer == 4'd0)
|
begin
|
begin
|
tx_dout = !(fct_s[2]^null_s[0]^null_s[1]);
|
tx_dout = !(fct_s[2]^null_s[0]^null_s[1]);
|
end
|
end
|
else if( enable_fct & !first_time & last_type == FCT & global_counter_transfer == 4'd0)
|
else if( enable_fct & !first_time & last_type == FCT & global_counter_transfer == 4'd0)
|
begin
|
begin
|
tx_dout = !(fct_s[2]^fct_s[0]^fct_s[1]);
|
tx_dout = !(fct_s[2]^fct_s[0]^fct_s[1]);
|
end
|
end
|
else if( enable_fct & !first_time & last_type == EOP & global_counter_transfer == 4'd0)
|
else if( enable_fct & !first_time & last_type == EOP & global_counter_transfer == 4'd0)
|
begin
|
begin
|
tx_dout = !(fct_s[2]^eop_s[0]^eop_s[1]);
|
tx_dout = !(fct_s[2]^eop_s[0]^eop_s[1]);
|
end
|
end
|
else if( enable_fct & !first_time & last_type == EEP & global_counter_transfer == 4'd0)
|
else if( enable_fct & !first_time & last_type == EEP & global_counter_transfer == 4'd0)
|
begin
|
begin
|
tx_dout = !(fct_s[2]^eep_s[0]^eep_s[1]);
|
tx_dout = !(fct_s[2]^eep_s[0]^eep_s[1]);
|
end
|
end
|
else if ( enable_fct & !first_time & last_type == DATA & global_counter_transfer == 4'd0)
|
else if ( enable_fct & !first_time & last_type == DATA & global_counter_transfer == 4'd0)
|
begin
|
begin
|
tx_dout = !(fct_s[2]^txdata_flagctrl_tx_last[0]^txdata_flagctrl_tx_last[1]^txdata_flagctrl_tx_last[2]^txdata_flagctrl_tx_last[3]^ txdata_flagctrl_tx_last[4]^txdata_flagctrl_tx_last[5]^txdata_flagctrl_tx_last[6]^txdata_flagctrl_tx_last[7]);
|
tx_dout = !(fct_s[2]^txdata_flagctrl_tx_last[0]^txdata_flagctrl_tx_last[1]^txdata_flagctrl_tx_last[2]^txdata_flagctrl_tx_last[3]^ txdata_flagctrl_tx_last[4]^txdata_flagctrl_tx_last[5]^txdata_flagctrl_tx_last[6]^txdata_flagctrl_tx_last[7]);
|
end
|
end
|
else if( enable_fct & !first_time & last_type == TIMEC & global_counter_transfer == 4'd0)
|
else if( enable_fct & !first_time & last_type == TIMEC & global_counter_transfer == 4'd0)
|
begin
|
begin
|
tx_dout = !(fct_s[2]^last_timein_control_flag_tx[7]^last_timein_control_flag_tx[6]^last_timein_control_flag_tx[5]^last_timein_control_flag_tx[4]^last_timein_control_flag_tx[3]^last_timein_control_flag_tx[2]^last_timein_control_flag_tx[1]^last_timein_control_flag_tx[0]);
|
tx_dout = !(fct_s[2]^last_timein_control_flag_tx[7]^last_timein_control_flag_tx[6]^last_timein_control_flag_tx[5]^last_timein_control_flag_tx[4]^last_timein_control_flag_tx[3]^last_timein_control_flag_tx[2]^last_timein_control_flag_tx[1]^last_timein_control_flag_tx[0]);
|
end
|
end
|
else if( enable_fct & !first_time & global_counter_transfer == 4'd1)
|
else if( enable_fct & !first_time & global_counter_transfer == 4'd1)
|
begin
|
begin
|
tx_dout = fct_s[2];
|
tx_dout = fct_s[2];
|
end
|
end
|
else if( enable_fct & !first_time & global_counter_transfer == 4'd2)
|
else if( enable_fct & !first_time & global_counter_transfer == 4'd2)
|
begin
|
begin
|
tx_dout = fct_s[1];
|
tx_dout = fct_s[1];
|
end
|
end
|
else if( enable_fct & !first_time & global_counter_transfer == 4'd3)
|
else if( enable_fct & !first_time & global_counter_transfer == 4'd3)
|
begin
|
begin
|
tx_dout = fct_s[0];
|
tx_dout = fct_s[0];
|
end
|
end
|
else if( enable_time_code & !first_time & last_type == NULL & global_counter_transfer == 4'd0)
|
else if( enable_time_code & !first_time & last_type == NULL & global_counter_transfer == 4'd0)
|
begin
|
begin
|
tx_dout = !(timecode_s[12]^null_s[0]^null_s[1]);
|
tx_dout = !(timecode_s[12]^null_s[0]^null_s[1]);
|
end
|
end
|
else if( enable_time_code & !first_time & last_type == FCT & global_counter_transfer == 4'd0)
|
else if( enable_time_code & !first_time & last_type == FCT & global_counter_transfer == 4'd0)
|
begin
|
begin
|
tx_dout = !(timecode_s[12]^fct_s[0]^fct_s[1]);
|
tx_dout = !(timecode_s[12]^fct_s[0]^fct_s[1]);
|
end
|
end
|
else if ( enable_time_code & !first_time & last_type == EOP & global_counter_transfer == 4'd0)
|
else if ( enable_time_code & !first_time & last_type == EOP & global_counter_transfer == 4'd0)
|
begin
|
begin
|
tx_dout = !(timecode_s[12]^eop_s[0]^eop_s[1]);
|
tx_dout = !(timecode_s[12]^eop_s[0]^eop_s[1]);
|
end
|
end
|
else if( enable_time_code & !first_time & last_type == EEP & global_counter_transfer == 4'd0)
|
else if( enable_time_code & !first_time & last_type == EEP & global_counter_transfer == 4'd0)
|
begin
|
begin
|
tx_dout = !(timecode_s[12]^eep_s[0]^eep_s[1]);
|
tx_dout = !(timecode_s[12]^eep_s[0]^eep_s[1]);
|
end
|
end
|
else if( enable_time_code & !first_time & last_type == DATA & global_counter_transfer == 4'd0)
|
else if( enable_time_code & !first_time & last_type == DATA & global_counter_transfer == 4'd0)
|
begin
|
begin
|
tx_dout = !(timecode_s[12]^txdata_flagctrl_tx_last[0]^txdata_flagctrl_tx_last[1]^txdata_flagctrl_tx_last[2]^txdata_flagctrl_tx_last[3]^ txdata_flagctrl_tx_last[4]^txdata_flagctrl_tx_last[5]^txdata_flagctrl_tx_last[6]^txdata_flagctrl_tx_last[7]);
|
tx_dout = !(timecode_s[12]^txdata_flagctrl_tx_last[0]^txdata_flagctrl_tx_last[1]^txdata_flagctrl_tx_last[2]^txdata_flagctrl_tx_last[3]^ txdata_flagctrl_tx_last[4]^txdata_flagctrl_tx_last[5]^txdata_flagctrl_tx_last[6]^txdata_flagctrl_tx_last[7]);
|
end
|
end
|
else if( enable_time_code & !first_time & last_type == TIMEC & global_counter_transfer == 4'd0)
|
else if( enable_time_code & !first_time & last_type == TIMEC & global_counter_transfer == 4'd0)
|
begin
|
begin
|
tx_dout = !(timecode_s[12]^last_timein_control_flag_tx[7]^last_timein_control_flag_tx[6]^last_timein_control_flag_tx[5]^last_timein_control_flag_tx[4]^last_timein_control_flag_tx[3]^last_timein_control_flag_tx[2]^last_timein_control_flag_tx[1]^last_timein_control_flag_tx[0]);
|
tx_dout = !(timecode_s[12]^last_timein_control_flag_tx[7]^last_timein_control_flag_tx[6]^last_timein_control_flag_tx[5]^last_timein_control_flag_tx[4]^last_timein_control_flag_tx[3]^last_timein_control_flag_tx[2]^last_timein_control_flag_tx[1]^last_timein_control_flag_tx[0]);
|
end
|
end
|
else if( enable_time_code & !first_time & global_counter_transfer == 4'd1)
|
else if( enable_time_code & !first_time & global_counter_transfer == 4'd1)
|
begin
|
begin
|
tx_dout = timecode_s[12];
|
tx_dout = timecode_s[12];
|
end
|
end
|
else if( enable_time_code & !first_time & global_counter_transfer == 4'd2)
|
else if( enable_time_code & !first_time & global_counter_transfer == 4'd2)
|
begin
|
begin
|
tx_dout = timecode_s[11];
|
tx_dout = timecode_s[11];
|
end
|
end
|
else if( enable_time_code & !first_time & global_counter_transfer == 4'd3)
|
else if( enable_time_code & !first_time & global_counter_transfer == 4'd3)
|
begin
|
begin
|
tx_dout = timecode_s[10];
|
tx_dout = timecode_s[10];
|
end
|
end
|
else if( enable_time_code & !first_time & global_counter_transfer == 4'd4)
|
else if( enable_time_code & !first_time & global_counter_transfer == 4'd4)
|
begin
|
begin
|
tx_dout = timecode_s[9];
|
tx_dout = timecode_s[9];
|
end
|
end
|
else if( enable_time_code & !first_time & global_counter_transfer == 4'd5)
|
else if( enable_time_code & !first_time & global_counter_transfer == 4'd5)
|
begin
|
begin
|
tx_dout = timecode_s[8];
|
tx_dout = timecode_s[8];
|
end
|
end
|
else if( enable_time_code & !first_time & global_counter_transfer == 4'd6)
|
else if( enable_time_code & !first_time & global_counter_transfer == 4'd6)
|
begin
|
begin
|
tx_dout = timecode_s[0];
|
tx_dout = timecode_s[0];
|
end
|
end
|
else if( enable_time_code & !first_time & global_counter_transfer == 4'd7)
|
else if( enable_time_code & !first_time & global_counter_transfer == 4'd7)
|
begin
|
begin
|
tx_dout = timecode_s[1];
|
tx_dout = timecode_s[1];
|
end
|
end
|
else if( enable_time_code & !first_time & global_counter_transfer == 4'd8)
|
else if( enable_time_code & !first_time & global_counter_transfer == 4'd8)
|
begin
|
begin
|
tx_dout = timecode_s[2];
|
tx_dout = timecode_s[2];
|
end
|
end
|
else if( enable_time_code & !first_time & global_counter_transfer == 4'd9)
|
else if( enable_time_code & !first_time & global_counter_transfer == 4'd9)
|
begin
|
begin
|
tx_dout = timecode_s[3];
|
tx_dout = timecode_s[3];
|
end
|
end
|
else if( enable_time_code & !first_time & global_counter_transfer == 4'd10)
|
else if( enable_time_code & !first_time & global_counter_transfer == 4'd10)
|
begin
|
begin
|
tx_dout = timecode_s[4];
|
tx_dout = timecode_s[4];
|
end
|
end
|
else if( enable_time_code & !first_time & global_counter_transfer == 4'd11)
|
else if( enable_time_code & !first_time & global_counter_transfer == 4'd11)
|
begin
|
begin
|
tx_dout = timecode_s[5];
|
tx_dout = timecode_s[5];
|
end
|
end
|
else if( enable_time_code & !first_time & global_counter_transfer == 4'd12)
|
else if( enable_time_code & !first_time & global_counter_transfer == 4'd12)
|
begin
|
begin
|
tx_dout = timecode_s[6];
|
tx_dout = timecode_s[6];
|
end
|
end
|
else if( enable_time_code & !first_time & global_counter_transfer == 4'd13)
|
else if( enable_time_code & !first_time & global_counter_transfer == 4'd13)
|
begin
|
begin
|
tx_dout = timecode_s[7];
|
tx_dout = timecode_s[7];
|
end
|
end
|
else if( enable_n_char & !data_tx_i[8] & !first_time & last_type == NULL & global_counter_transfer == 4'd0)
|
else if( enable_n_char & !data_tx_i[8] & !first_time & last_type == NULL & global_counter_transfer == 4'd0)
|
begin
|
begin
|
tx_dout = !(data_tx_i[8]^null_s[0]^null_s[1]);
|
tx_dout = !(data_tx_i[8]^null_s[0]^null_s[1]);
|
end
|
end
|
else if( enable_n_char & !data_tx_i[8] & !first_time & last_type == FCT & global_counter_transfer == 4'd0)
|
else if( enable_n_char & !data_tx_i[8] & !first_time & last_type == FCT & global_counter_transfer == 4'd0)
|
begin
|
begin
|
tx_dout = !(data_tx_i[8]^fct_s[0]^fct_s[1]);
|
tx_dout = !(data_tx_i[8]^fct_s[0]^fct_s[1]);
|
end
|
end
|
else if( enable_n_char & !data_tx_i[8] & !first_time & last_type == EOP & global_counter_transfer == 4'd0)
|
else if( enable_n_char & !data_tx_i[8] & !first_time & last_type == EOP & global_counter_transfer == 4'd0)
|
begin
|
begin
|
tx_dout = !(data_tx_i[8]^eop_s[0]^eop_s[1]);
|
tx_dout = !(data_tx_i[8]^eop_s[0]^eop_s[1]);
|
end
|
end
|
else if( enable_n_char & !data_tx_i[8] & !first_time & last_type == EEP & global_counter_transfer == 4'd0)
|
else if( enable_n_char & !data_tx_i[8] & !first_time & last_type == EEP & global_counter_transfer == 4'd0)
|
begin
|
begin
|
tx_dout = !(data_tx_i[8]^eep_s[0]^eep_s[1]);
|
tx_dout = !(data_tx_i[8]^eep_s[0]^eep_s[1]);
|
end
|
end
|
else if( enable_n_char & !data_tx_i[8] & !first_time & last_type == DATA & global_counter_transfer == 4'd0)
|
else if( enable_n_char & !data_tx_i[8] & !first_time & last_type == DATA & global_counter_transfer == 4'd0)
|
begin
|
begin
|
tx_dout = !(data_tx_i[8]^txdata_flagctrl_tx_last[0]^txdata_flagctrl_tx_last[1]^txdata_flagctrl_tx_last[2]^txdata_flagctrl_tx_last[3]^ txdata_flagctrl_tx_last[4]^txdata_flagctrl_tx_last[5]^txdata_flagctrl_tx_last[6]^txdata_flagctrl_tx_last[7]);
|
tx_dout = !(data_tx_i[8]^txdata_flagctrl_tx_last[0]^txdata_flagctrl_tx_last[1]^txdata_flagctrl_tx_last[2]^txdata_flagctrl_tx_last[3]^ txdata_flagctrl_tx_last[4]^txdata_flagctrl_tx_last[5]^txdata_flagctrl_tx_last[6]^txdata_flagctrl_tx_last[7]);
|
end
|
end
|
else if( enable_n_char & !data_tx_i[8] & !first_time & last_type == TIMEC & global_counter_transfer == 4'd0)
|
else if( enable_n_char & !data_tx_i[8] & !first_time & last_type == TIMEC & global_counter_transfer == 4'd0)
|
begin
|
begin
|
tx_dout = !(data_tx_i[8]^last_timein_control_flag_tx[7]^last_timein_control_flag_tx[6]^last_timein_control_flag_tx[5]^last_timein_control_flag_tx[4]^last_timein_control_flag_tx[3]^last_timein_control_flag_tx[2]^last_timein_control_flag_tx[1]^last_timein_control_flag_tx[0]);
|
tx_dout = !(data_tx_i[8]^last_timein_control_flag_tx[7]^last_timein_control_flag_tx[6]^last_timein_control_flag_tx[5]^last_timein_control_flag_tx[4]^last_timein_control_flag_tx[3]^last_timein_control_flag_tx[2]^last_timein_control_flag_tx[1]^last_timein_control_flag_tx[0]);
|
end
|
end
|
else if( enable_n_char & data_tx_i[8] & data_tx_i[1:0] == 2'b00 & !first_time & last_type == NULL & global_counter_transfer == 4'd0)
|
else if( enable_n_char & data_tx_i[8] & data_tx_i[1:0] == 2'b00 & !first_time & last_type == NULL & global_counter_transfer == 4'd0)
|
begin
|
begin
|
tx_dout = !(eop_s[3]^null_s[0]^null_s[1]);
|
tx_dout = !(eop_s[3]^null_s[0]^null_s[1]);
|
end
|
end
|
else if( enable_n_char & !data_tx_i[8] & data_tx_i[1:0] == 2'b00 & !first_time & last_type == FCT & global_counter_transfer == 4'd0)
|
else if( enable_n_char & !data_tx_i[8] & data_tx_i[1:0] == 2'b00 & !first_time & last_type == FCT & global_counter_transfer == 4'd0)
|
begin
|
begin
|
tx_dout = !(eop_s[3]^fct_s[0]^fct_s[1]);
|
tx_dout = !(eop_s[3]^fct_s[0]^fct_s[1]);
|
end
|
end
|
else if( enable_n_char & !data_tx_i[8] & data_tx_i[1:0] == 2'b00 & !first_time & last_type == EOP & global_counter_transfer == 4'd0)
|
else if( enable_n_char & !data_tx_i[8] & data_tx_i[1:0] == 2'b00 & !first_time & last_type == EOP & global_counter_transfer == 4'd0)
|
begin
|
begin
|
tx_dout = !(eop_s[3]^eop_s[0]^eop_s[1]);
|
tx_dout = !(eop_s[3]^eop_s[0]^eop_s[1]);
|
end
|
end
|
else if( enable_n_char & !data_tx_i[8] & data_tx_i[1:0] == 2'b00 & !first_time & last_type == EEP & global_counter_transfer == 4'd0)
|
else if( enable_n_char & !data_tx_i[8] & data_tx_i[1:0] == 2'b00 & !first_time & last_type == EEP & global_counter_transfer == 4'd0)
|
begin
|
begin
|
tx_dout = !(eop_s[3]^eep_s[0]^eep_s[1]);
|
tx_dout = !(eop_s[3]^eep_s[0]^eep_s[1]);
|
end
|
end
|
else if( enable_n_char & !data_tx_i[8] & data_tx_i[1:0] == 2'b00 & !first_time & last_type == DATA & global_counter_transfer == 4'd0)
|
else if( enable_n_char & !data_tx_i[8] & data_tx_i[1:0] == 2'b00 & !first_time & last_type == DATA & global_counter_transfer == 4'd0)
|
begin
|
begin
|
tx_dout = !(eop_s[3]^txdata_flagctrl_tx_last[0]^txdata_flagctrl_tx_last[1]^txdata_flagctrl_tx_last[2]^txdata_flagctrl_tx_last[3]^ txdata_flagctrl_tx_last[4]^txdata_flagctrl_tx_last[5]^txdata_flagctrl_tx_last[6]^txdata_flagctrl_tx_last[7]);
|
tx_dout = !(eop_s[3]^txdata_flagctrl_tx_last[0]^txdata_flagctrl_tx_last[1]^txdata_flagctrl_tx_last[2]^txdata_flagctrl_tx_last[3]^ txdata_flagctrl_tx_last[4]^txdata_flagctrl_tx_last[5]^txdata_flagctrl_tx_last[6]^txdata_flagctrl_tx_last[7]);
|
end
|
end
|
else if( enable_n_char & !data_tx_i[8] & data_tx_i[1:0] == 2'b00 & !first_time & last_type == TIMEC & global_counter_transfer == 4'd0)
|
else if( enable_n_char & !data_tx_i[8] & data_tx_i[1:0] == 2'b00 & !first_time & last_type == TIMEC & global_counter_transfer == 4'd0)
|
begin
|
begin
|
tx_dout = !(eop_s[3]^last_timein_control_flag_tx[7]^last_timein_control_flag_tx[6]^last_timein_control_flag_tx[5]^last_timein_control_flag_tx[4]^last_timein_control_flag_tx[3]^last_timein_control_flag_tx[2]^last_timein_control_flag_tx[1]^last_timein_control_flag_tx[0]);
|
tx_dout = !(eop_s[3]^last_timein_control_flag_tx[7]^last_timein_control_flag_tx[6]^last_timein_control_flag_tx[5]^last_timein_control_flag_tx[4]^last_timein_control_flag_tx[3]^last_timein_control_flag_tx[2]^last_timein_control_flag_tx[1]^last_timein_control_flag_tx[0]);
|
end
|
end
|
else if( enable_n_char & data_tx_i[8] & data_tx_i[1:0] == 2'b00 & !first_time & global_counter_transfer == 4'd1)
|
else if( enable_n_char & data_tx_i[8] & data_tx_i[1:0] == 2'b00 & !first_time & global_counter_transfer == 4'd1)
|
begin
|
begin
|
tx_dout = eop_s[2];
|
tx_dout = eop_s[2];
|
end
|
end
|
else if( enable_n_char & data_tx_i[8] & data_tx_i[1:0] == 2'b00 & !first_time & global_counter_transfer == 4'd2)
|
else if( enable_n_char & data_tx_i[8] & data_tx_i[1:0] == 2'b00 & !first_time & global_counter_transfer == 4'd2)
|
begin
|
begin
|
tx_dout = eop_s[1];
|
tx_dout = eop_s[1];
|
end
|
end
|
else if( enable_n_char & data_tx_i[8] & data_tx_i[1:0] == 2'b00 & !first_time & global_counter_transfer == 4'd3)
|
else if( enable_n_char & data_tx_i[8] & data_tx_i[1:0] == 2'b00 & !first_time & global_counter_transfer == 4'd3)
|
begin
|
begin
|
tx_dout = eop_s[0];
|
tx_dout = eop_s[0];
|
end
|
end
|
else if( enable_n_char & data_tx_i[8] & data_tx_i[1:0] == 2'b01 & !first_time & last_type == NULL & global_counter_transfer == 4'd0)
|
else if( enable_n_char & data_tx_i[8] & data_tx_i[1:0] == 2'b01 & !first_time & last_type == NULL & global_counter_transfer == 4'd0)
|
begin
|
begin
|
tx_dout = !(eep_s[3]^null_s[0]^null_s[1]);
|
tx_dout = !(eep_s[3]^null_s[0]^null_s[1]);
|
end
|
end
|
else if( enable_n_char & !data_tx_i[8] & data_tx_i[1:0] == 2'b01 & !first_time & last_type == FCT & global_counter_transfer == 4'd0)
|
else if( enable_n_char & !data_tx_i[8] & data_tx_i[1:0] == 2'b01 & !first_time & last_type == FCT & global_counter_transfer == 4'd0)
|
begin
|
begin
|
tx_dout = !(eep_s[3]^fct_s[0]^fct_s[1]);
|
tx_dout = !(eep_s[3]^fct_s[0]^fct_s[1]);
|
end
|
end
|
else if( enable_n_char & !data_tx_i[8] & data_tx_i[1:0] == 2'b01 & !first_time & last_type == EOP & global_counter_transfer == 4'd0)
|
else if( enable_n_char & !data_tx_i[8] & data_tx_i[1:0] == 2'b01 & !first_time & last_type == EOP & global_counter_transfer == 4'd0)
|
begin
|
begin
|
tx_dout = !(eep_s[3]^eop_s[0]^eop_s[1]);
|
tx_dout = !(eep_s[3]^eop_s[0]^eop_s[1]);
|
end
|
end
|
else if( enable_n_char & !data_tx_i[8] & data_tx_i[1:0] == 2'b01 & !first_time & last_type == EEP & global_counter_transfer == 4'd0)
|
else if( enable_n_char & !data_tx_i[8] & data_tx_i[1:0] == 2'b01 & !first_time & last_type == EEP & global_counter_transfer == 4'd0)
|
begin
|
begin
|
tx_dout = !(eep_s[3]^eep_s[0]^eep_s[1]);
|
tx_dout = !(eep_s[3]^eep_s[0]^eep_s[1]);
|
end
|
end
|
else if( enable_n_char & !data_tx_i[8] & data_tx_i[1:0] == 2'b01 & !first_time & last_type == DATA & global_counter_transfer == 4'd0)
|
else if( enable_n_char & !data_tx_i[8] & data_tx_i[1:0] == 2'b01 & !first_time & last_type == DATA & global_counter_transfer == 4'd0)
|
begin
|
begin
|
tx_dout = !(eep_s[3]^txdata_flagctrl_tx_last[0]^txdata_flagctrl_tx_last[1]^txdata_flagctrl_tx_last[2]^txdata_flagctrl_tx_last[3]^ txdata_flagctrl_tx_last[4]^txdata_flagctrl_tx_last[5]^txdata_flagctrl_tx_last[6]^txdata_flagctrl_tx_last[7]);
|
tx_dout = !(eep_s[3]^txdata_flagctrl_tx_last[0]^txdata_flagctrl_tx_last[1]^txdata_flagctrl_tx_last[2]^txdata_flagctrl_tx_last[3]^ txdata_flagctrl_tx_last[4]^txdata_flagctrl_tx_last[5]^txdata_flagctrl_tx_last[6]^txdata_flagctrl_tx_last[7]);
|
end
|
end
|
else if( enable_n_char & !data_tx_i[8] & data_tx_i[1:0] == 2'b01 & !first_time & last_type == TIMEC & global_counter_transfer == 4'd0)
|
else if( enable_n_char & !data_tx_i[8] & data_tx_i[1:0] == 2'b01 & !first_time & last_type == TIMEC & global_counter_transfer == 4'd0)
|
begin
|
begin
|
tx_dout = !(eep_s[3]^last_timein_control_flag_tx[7]^last_timein_control_flag_tx[6]^last_timein_control_flag_tx[5]^last_timein_control_flag_tx[4]^last_timein_control_flag_tx[3]^last_timein_control_flag_tx[2]^last_timein_control_flag_tx[1]^last_timein_control_flag_tx[0]);
|
tx_dout = !(eep_s[3]^last_timein_control_flag_tx[7]^last_timein_control_flag_tx[6]^last_timein_control_flag_tx[5]^last_timein_control_flag_tx[4]^last_timein_control_flag_tx[3]^last_timein_control_flag_tx[2]^last_timein_control_flag_tx[1]^last_timein_control_flag_tx[0]);
|
end
|
end
|
else if( enable_n_char & !data_tx_i[8] & !data_tx_i[8] & !first_time & global_counter_transfer == 4'd1)
|
else if( enable_n_char & !data_tx_i[8] & !data_tx_i[8] & !first_time & global_counter_transfer == 4'd1)
|
begin
|
begin
|
tx_dout = data_tx_i[8];
|
tx_dout = data_tx_i[8];
|
end
|
end
|
else if( enable_n_char & !data_tx_i[8] & !first_time & global_counter_transfer == 4'd2)
|
else if( enable_n_char & !data_tx_i[8] & !first_time & global_counter_transfer == 4'd2)
|
begin
|
begin
|
tx_dout = data_tx_i[0];
|
tx_dout = data_tx_i[0];
|
end
|
end
|
else if( enable_n_char & !data_tx_i[8] & !first_time & global_counter_transfer == 4'd3)
|
else if( enable_n_char & !data_tx_i[8] & !first_time & global_counter_transfer == 4'd3)
|
begin
|
begin
|
tx_dout = data_tx_i[1];
|
tx_dout = data_tx_i[1];
|
end
|
end
|
else if( enable_n_char & !data_tx_i[8] & !first_time & global_counter_transfer == 4'd4)
|
else if( enable_n_char & !data_tx_i[8] & !first_time & global_counter_transfer == 4'd4)
|
begin
|
begin
|
tx_dout = data_tx_i[2];
|
tx_dout = data_tx_i[2];
|
end
|
end
|
else if( enable_n_char & !data_tx_i[8] & !first_time & global_counter_transfer == 4'd5)
|
else if( enable_n_char & !data_tx_i[8] & !first_time & global_counter_transfer == 4'd5)
|
begin
|
begin
|
tx_dout = data_tx_i[3];
|
tx_dout = data_tx_i[3];
|
end
|
end
|
else if( enable_n_char & !data_tx_i[8] & !first_time & global_counter_transfer == 4'd6)
|
else if( enable_n_char & !data_tx_i[8] & !first_time & global_counter_transfer == 4'd6)
|
begin
|
begin
|
tx_dout = data_tx_i[4];
|
tx_dout = data_tx_i[4];
|
end
|
end
|
else if( enable_n_char & !data_tx_i[8] & !first_time & global_counter_transfer == 4'd7)
|
else if( enable_n_char & !data_tx_i[8] & !first_time & global_counter_transfer == 4'd7)
|
begin
|
begin
|
tx_dout = data_tx_i[5];
|
tx_dout = data_tx_i[5];
|
end
|
end
|
else if( enable_n_char & !data_tx_i[8] & !first_time & global_counter_transfer == 4'd8)
|
else if( enable_n_char & !data_tx_i[8] & !first_time & global_counter_transfer == 4'd8)
|
begin
|
begin
|
tx_dout = data_tx_i[6];
|
tx_dout = data_tx_i[6];
|
end
|
end
|
else if( enable_n_char & !data_tx_i[8] & !first_time & global_counter_transfer == 4'd9)
|
else if( enable_n_char & !data_tx_i[8] & !first_time & global_counter_transfer == 4'd9)
|
begin
|
begin
|
tx_dout = data_tx_i[7];
|
tx_dout = data_tx_i[7];
|
end
|
end
|
else if( enable_n_char & data_tx_i[8] & data_tx_i[1:0] == 2'b01 & !first_time & global_counter_transfer == 4'd1)
|
else if( enable_n_char & data_tx_i[8] & data_tx_i[1:0] == 2'b01 & !first_time & global_counter_transfer == 4'd1)
|
begin
|
begin
|
tx_dout = eep_s[2];
|
tx_dout = eep_s[2];
|
end
|
end
|
else if( enable_n_char & data_tx_i[8] & data_tx_i[1:0] == 2'b01 & !first_time & global_counter_transfer == 4'd2)
|
else if( enable_n_char & data_tx_i[8] & data_tx_i[1:0] == 2'b01 & !first_time & global_counter_transfer == 4'd2)
|
begin
|
begin
|
tx_dout = eep_s[1];
|
tx_dout = eep_s[1];
|
end
|
end
|
else if( enable_n_char & data_tx_i[8] & data_tx_i[1:0] == 2'b01 & !first_time & global_counter_transfer == 4'd3)
|
else if( enable_n_char & data_tx_i[8] & data_tx_i[1:0] == 2'b01 & !first_time & global_counter_transfer == 4'd3)
|
begin
|
begin
|
tx_dout = eep_s[0];
|
tx_dout = eep_s[0];
|
end
|
end
|
end
|
end
|
|
|
//strobe
|
//strobe
|
always@(*)
|
always@(*)
|
begin
|
begin
|
tx_sout = 1'b0;
|
tx_sout = 1'b0;
|
|
|
if(!enable_tx)
|
if(!enable_tx)
|
begin
|
begin
|
tx_sout = 1'b0;
|
tx_sout = 1'b0;
|
end
|
end
|
else if((enable_null | enable_fct | enable_n_char | enable_time_code) && tx_dout == last_tx_dout)
|
else if((enable_null | enable_fct | enable_n_char | enable_time_code) && tx_dout == last_tx_dout)
|
begin
|
begin
|
tx_sout = !last_tx_sout;
|
tx_sout = !last_tx_sout;
|
end
|
end
|
else if((enable_null | enable_fct | enable_n_char | enable_time_code) && tx_dout != last_tx_dout)
|
else if((enable_null | enable_fct | enable_n_char | enable_time_code) && tx_dout != last_tx_dout)
|
begin
|
begin
|
tx_sout = last_tx_sout;
|
tx_sout = last_tx_sout;
|
end
|
end
|
|
|
end
|
end
|
|
|
always@(*)
|
always@(*)
|
begin
|
begin
|
fct_counter = 6'd0;
|
fct_counter = 6'd0;
|
|
|
if(gotfct_tx)
|
if(gotfct_tx)
|
begin
|
begin
|
if(block_sum)
|
if(block_sum)
|
begin
|
begin
|
|
|
end
|
end
|
else
|
else
|
begin
|
begin
|
if(fct_counter_receive < 6'd48)
|
if(fct_counter_receive < 6'd48)
|
begin
|
begin
|
fct_counter = fct_counter_receive + 6'd8;
|
fct_counter = fct_counter_receive + 6'd8;
|
end
|
end
|
else
|
else
|
begin
|
begin
|
fct_counter = fct_counter_receive + 6'd7;
|
fct_counter = fct_counter_receive + 6'd7;
|
|
|
end
|
end
|
end
|
end
|
end
|
end
|
end
|
end
|
|
|
//slots open in our side
|
//slots open in our side
|
always@(*)
|
always@(*)
|
begin
|
begin
|
|
|
fct_send = {3{1'b0}};
|
fct_send = {3{1'b0}};
|
|
|
if(send_fct_now)
|
if(send_fct_now)
|
begin
|
begin
|
if(block_sum_fct_send)
|
if(block_sum_fct_send)
|
begin
|
begin
|
|
|
end
|
end
|
else
|
else
|
begin
|
begin
|
if(fct_flag == 3'd7)
|
if(fct_flag == 3'd7)
|
begin
|
begin
|
fct_send = 3'd0;
|
fct_send = 3'd0;
|
end
|
end
|
else
|
else
|
begin
|
begin
|
fct_send = fct_flag + 3'd1;
|
fct_send = fct_flag + 3'd1;
|
|
|
end
|
end
|
end
|
end
|
end
|
end
|
end
|
end
|
|
|
|
|
always@(*)
|
always@(*)
|
begin
|
begin
|
|
|
|
|
enable_null = 1'b0;
|
enable_null = 1'b0;
|
enable_fct = 1'b0;
|
enable_fct = 1'b0;
|
enable_n_char = 1'b0;
|
enable_n_char = 1'b0;
|
enable_time_code = 1'b0;
|
enable_time_code = 1'b0;
|
|
|
next_state_tx = state_tx;
|
next_state_tx = state_tx;
|
|
|
case(state_tx)
|
case(state_tx)
|
tx_spw_start:
|
tx_spw_start:
|
begin
|
begin
|
if(send_null_tx && enable_tx)
|
if(send_null_tx && enable_tx)
|
begin
|
begin
|
//if(!hold_null)
|
//if(!hold_null)
|
next_state_tx = tx_spw_null;
|
next_state_tx = tx_spw_null;
|
|
|
//enable_null = 1'b1;
|
//enable_null = 1'b1;
|
end
|
end
|
else
|
else
|
begin
|
begin
|
next_state_tx = tx_spw_start;
|
next_state_tx = tx_spw_start;
|
end
|
end
|
end
|
end
|
tx_spw_null:
|
tx_spw_null:
|
begin
|
begin
|
enable_null = 1'b1;
|
enable_null = 1'b1;
|
|
|
if(!hold_null)
|
if(!hold_null)
|
begin
|
begin
|
if(send_null_tx && send_fct_tx && enable_tx)
|
if(send_null_tx && send_fct_tx && enable_tx)
|
next_state_tx = tx_spw_null_fct;
|
next_state_tx = tx_spw_null_fct;
|
else
|
else
|
next_state_tx = tx_spw_null;
|
next_state_tx = tx_spw_null;
|
end
|
end
|
|
|
end
|
end
|
tx_spw_null_fct:
|
tx_spw_null_fct:
|
begin
|
begin
|
|
|
enable_null = 1'b1;
|
enable_null = 1'b1;
|
|
|
if(send_fct_tx && fct_flag > 0 && !hold_null)
|
if(send_fct_tx && fct_flag > 0 && !hold_null)
|
begin
|
begin
|
next_state_tx = tx_spw_null_fct;
|
next_state_tx = tx_spw_null_fct;
|
enable_null = 1'b0;
|
enable_null = 1'b0;
|
enable_fct = 1'b1;
|
enable_fct = 1'b1;
|
end
|
end
|
else
|
else
|
begin
|
begin
|
enable_fct = 1'b0;
|
enable_fct = 1'b0;
|
if(send_fct_tx && fct_counter_receive > 6'd0)
|
if(send_fct_tx && fct_counter_receive > 6'd0)
|
begin
|
begin
|
//if(global_counter_transfer == 4'd7)
|
//if(global_counter_transfer == 4'd7)
|
next_state_tx = tx_spw_full;
|
next_state_tx = tx_spw_full;
|
end
|
end
|
|
|
end
|
end
|
end
|
end
|
tx_spw_full:
|
tx_spw_full:
|
begin
|
begin
|
if(tickin_tx && !hold_null && !hold_fct && !hold_data)
|
if(tickin_tx && !hold_null && !hold_fct && !hold_data)
|
begin
|
begin
|
enable_time_code = 1'b1;
|
enable_time_code = 1'b1;
|
end
|
end
|
else if(fct_flag > 3'd0 && !hold_null && !hold_time_code && !hold_data)
|
else if(fct_flag > 3'd0 && !hold_null && !hold_time_code && !hold_data)
|
begin
|
begin
|
enable_fct = 1'b1;
|
enable_fct = 1'b1;
|
end
|
end
|
else if((txwrite_tx && fct_counter_receive > 6'd0 && !hold_null && !hold_time_code && !hold_fct) == 1'b1 )
|
else if((txwrite_tx && fct_counter_receive > 6'd0 && !hold_null && !hold_time_code && !hold_fct) == 1'b1 )
|
begin
|
begin
|
enable_n_char = 1'b1;
|
enable_n_char = 1'b1;
|
end
|
end
|
else
|
else
|
begin
|
begin
|
enable_null = 1'b1;
|
enable_null = 1'b1;
|
end
|
end
|
end
|
end
|
endcase
|
endcase
|
|
|
end
|
end
|
|
|
always@(posedge pclk_tx)
|
always@(posedge pclk_tx or negedge enable_tx)
|
begin
|
begin
|
if(!enable_tx)
|
if(!enable_tx)
|
begin
|
begin
|
null_s <= 8'b01110100;
|
|
fct_s <= 4'b0100;
|
|
eop_s <= 4'b0101;
|
|
eep_s <= 4'b0110;
|
|
timecode_s <= 14'b01110000000000;
|
|
|
|
|
timecode_s <= 14'b01110000000000;
|
fct_flag <= 3'd7;
|
fct_flag <= 3'd7;
|
|
|
first_time <= 1'b1;
|
first_time <= 1'b1;
|
ready_tx_data <= 1'b0;
|
ready_tx_data <= 1'b0;
|
ready_tx_timecode <= 1'b0;
|
ready_tx_timecode <= 1'b0;
|
|
|
hold_null <= 1'b0;
|
hold_null <= 1'b0;
|
hold_fct <= 1'b0;
|
hold_fct <= 1'b0;
|
hold_data <= 1'b0;
|
hold_data <= 1'b0;
|
hold_time_code <= 1'b0;
|
hold_time_code <= 1'b0;
|
|
|
last_type <= NULL;
|
last_type <= NULL;
|
|
|
global_counter_transfer <= 4'd0;
|
global_counter_transfer <= 4'd0;
|
txdata_flagctrl_tx_last <= 9'd0;
|
txdata_flagctrl_tx_last <= 9'd0;
|
last_timein_control_flag_tx <= 8'd0;
|
last_timein_control_flag_tx <= 8'd0;
|
|
|
fct_counter_receive <= 6'd0;
|
fct_counter_receive <= 6'd0;
|
|
|
block_sum <= 1'b0;
|
block_sum <= 1'b0;
|
block_sum_fct_send <= 1'b0;
|
block_sum_fct_send <= 1'b0;
|
|
|
last_tx_dout <= 1'b0;
|
last_tx_dout <= 1'b0;
|
last_tx_sout <= 1'b0;
|
last_tx_sout <= 1'b0;
|
state_tx <= tx_spw_start;
|
state_tx <= tx_spw_start;
|
|
|
end
|
end
|
else
|
else
|
begin
|
begin
|
|
|
|
//null_s <= null_s;
|
|
//fct_s <= fct_s;
|
|
//eop_s <= eop_s;
|
|
//eep_s <= eep_s;
|
|
//timecode_s <= timecode_s;
|
|
//fct_flag <= fct_flag;
|
|
|
state_tx <= next_state_tx;
|
state_tx <= next_state_tx;
|
last_tx_dout <= tx_dout;
|
last_tx_dout <= tx_dout;
|
last_tx_sout <= tx_sout;
|
last_tx_sout <= tx_sout;
|
|
|
if(enable_null)
|
if(enable_null)
|
begin
|
begin
|
|
|
ready_tx_data <= 1'b0;
|
ready_tx_data <= 1'b0;
|
ready_tx_timecode <= 1'b0;
|
ready_tx_timecode <= 1'b0;
|
|
//hold_null <= 1'b0;
|
|
hold_fct <= 1'b0;
|
|
hold_data <= 1'b0;
|
|
hold_time_code <= 1'b0;
|
|
|
//
|
//
|
if(gotfct_tx && !block_sum)
|
if(gotfct_tx && !block_sum)
|
begin
|
begin
|
fct_counter_receive <= fct_counter;
|
fct_counter_receive <= fct_counter;
|
block_sum<= 1'b1;
|
block_sum<= 1'b1;
|
end
|
end
|
else if(!gotfct_tx)
|
else if(!gotfct_tx)
|
begin
|
begin
|
block_sum<= 1'b0;
|
block_sum<= 1'b0;
|
end
|
end
|
else
|
else
|
block_sum <= block_sum;
|
block_sum <= block_sum;
|
//
|
//
|
if(send_fct_now && !block_sum_fct_send)
|
if(send_fct_now && !block_sum_fct_send)
|
begin
|
begin
|
fct_flag <= fct_send;
|
fct_flag <= fct_send;
|
block_sum_fct_send<= 1'b1;
|
block_sum_fct_send<= 1'b1;
|
end
|
end
|
else if(!send_fct_now)
|
else if(!send_fct_now)
|
begin
|
begin
|
block_sum_fct_send<= 1'b0;
|
block_sum_fct_send<= 1'b0;
|
end
|
end
|
else
|
else
|
block_sum_fct_send <= block_sum_fct_send;
|
block_sum_fct_send <= block_sum_fct_send;
|
|
|
if(first_time)
|
if(first_time)
|
begin
|
begin
|
first_time <= 1'b0;
|
first_time <= 1'b0;
|
hold_null <= 1'b1;
|
hold_null <= 1'b1;
|
global_counter_transfer <= global_counter_transfer + 4'd1;
|
global_counter_transfer <= global_counter_transfer + 4'd1;
|
end
|
end
|
else if(global_counter_transfer != 4'd7)
|
else if(global_counter_transfer != 4'd7)
|
begin
|
begin
|
hold_null <= 1'b1;
|
hold_null <= 1'b1;
|
global_counter_transfer <= global_counter_transfer + 4'd1;
|
global_counter_transfer <= global_counter_transfer + 4'd1;
|
end
|
end
|
else
|
else
|
begin
|
begin
|
hold_null <= 1'b0;
|
hold_null <= 1'b0;
|
|
last_type <= NULL;
|
global_counter_transfer <= 4'd0;
|
global_counter_transfer <= 4'd0;
|
end
|
end
|
end
|
end
|
else if(enable_fct)
|
else if(enable_fct)
|
begin
|
begin
|
|
|
ready_tx_data <= 1'b0;
|
ready_tx_data <= 1'b0;
|
ready_tx_timecode <= 1'b0;
|
ready_tx_timecode <= 1'b0;
|
|
|
|
hold_null <= 1'b0;
|
|
//hold_fct <= 1'b0;
|
|
hold_data <= 1'b0;
|
|
hold_time_code <= 1'b0;
|
|
|
|
|
if(gotfct_tx && !block_sum)
|
if(gotfct_tx && !block_sum)
|
begin
|
begin
|
fct_counter_receive <= fct_counter;
|
fct_counter_receive <= fct_counter;
|
block_sum<= 1'b1;
|
block_sum<= 1'b1;
|
end
|
end
|
else if(!gotfct_tx)
|
else if(!gotfct_tx)
|
begin
|
begin
|
block_sum<= 1'b0;
|
block_sum<= 1'b0;
|
end
|
end
|
else
|
else
|
block_sum <= block_sum;
|
block_sum <= block_sum;
|
|
|
|
|
if(global_counter_transfer != 4'd3)
|
if(global_counter_transfer != 4'd3)
|
begin
|
begin
|
hold_fct <= 1'b1;
|
hold_fct <= 1'b1;
|
global_counter_transfer <= global_counter_transfer + 4'd1;
|
global_counter_transfer <= global_counter_transfer + 4'd1;
|
//
|
//
|
if(send_fct_now && !block_sum_fct_send)
|
if(send_fct_now && !block_sum_fct_send)
|
begin
|
begin
|
fct_flag <= fct_send;
|
fct_flag <= fct_send;
|
block_sum_fct_send<= 1'b1;
|
block_sum_fct_send<= 1'b1;
|
end
|
end
|
else if(!send_fct_now)
|
else if(!send_fct_now)
|
begin
|
begin
|
block_sum_fct_send<= 1'b0;
|
block_sum_fct_send<= 1'b0;
|
end
|
end
|
else
|
else
|
block_sum_fct_send <= block_sum_fct_send;
|
block_sum_fct_send <= block_sum_fct_send;
|
end
|
end
|
else
|
else
|
begin
|
begin
|
hold_fct <= 1'b0;
|
hold_fct <= 1'b0;
|
global_counter_transfer <= 4'd0;
|
global_counter_transfer <= 4'd0;
|
fct_flag <= fct_flag - 3'd1;
|
fct_flag <= fct_flag - 3'd1;
|
|
last_type <=FCT;
|
end
|
end
|
end
|
end
|
else if(enable_time_code)
|
else if(enable_time_code)
|
begin
|
begin
|
|
hold_null <= 1'b0;
|
|
hold_fct <= 1'b0;
|
|
hold_data <= 1'b0;
|
|
//hold_time_code <= 1'b0;
|
|
|
ready_tx_data <= 1'b0;
|
ready_tx_data <= 1'b0;
|
|
|
if(gotfct_tx && !block_sum)
|
if(gotfct_tx && !block_sum)
|
begin
|
begin
|
fct_counter_receive <= fct_counter;
|
fct_counter_receive <= fct_counter;
|
block_sum<= 1'b1;
|
block_sum<= 1'b1;
|
end
|
end
|
else if(!gotfct_tx)
|
else if(!gotfct_tx)
|
begin
|
begin
|
block_sum<= 1'b0;
|
block_sum<= 1'b0;
|
end
|
end
|
else
|
else
|
block_sum <= block_sum;
|
block_sum <= block_sum;
|
|
|
if(global_counter_transfer == 4'd13)
|
if(global_counter_transfer == 4'd13)
|
begin
|
begin
|
ready_tx_timecode <= 1'b1;
|
ready_tx_timecode <= 1'b1;
|
end
|
end
|
|
|
//
|
//
|
if(send_fct_now && !block_sum_fct_send)
|
if(send_fct_now && !block_sum_fct_send)
|
begin
|
begin
|
fct_flag <= fct_send;
|
fct_flag <= fct_send;
|
block_sum_fct_send<= 1'b1;
|
block_sum_fct_send<= 1'b1;
|
end
|
end
|
else if(!send_fct_now)
|
else if(!send_fct_now)
|
begin
|
begin
|
block_sum_fct_send<= 1'b0;
|
block_sum_fct_send<= 1'b0;
|
end
|
end
|
else
|
else
|
block_sum_fct_send <= block_sum_fct_send;
|
block_sum_fct_send <= block_sum_fct_send;
|
|
|
if(global_counter_transfer < 4'd13)
|
if(global_counter_transfer < 4'd13)
|
begin
|
begin
|
global_counter_transfer <= global_counter_transfer + 4'd1;
|
global_counter_transfer <= global_counter_transfer + 4'd1;
|
timecode_s <= {timecode_s[13:10],2'd2,timecode_tx_i[7:0]};
|
timecode_s <= {timecode_ss[13:10],2'd2,timecode_tx_i[7:0]};
|
end
|
end
|
else
|
else
|
begin
|
begin
|
last_timein_control_flag_tx <= timecode_tx_i;
|
last_timein_control_flag_tx <= timecode_tx_i;
|
global_counter_transfer <= 4'd0;
|
global_counter_transfer <= 4'd0;
|
|
last_type <= TIMEC;
|
end
|
end
|
end
|
end
|
else if(enable_n_char)
|
else if(enable_n_char)
|
begin
|
begin
|
|
|
ready_tx_timecode <= 1'b0;
|
ready_tx_timecode <= 1'b0;
|
|
hold_null <= 1'b0;
|
|
hold_fct <= 1'b0;
|
|
//hold_data <= 1'b0;
|
|
hold_time_code <= 1'b0;
|
|
|
//
|
//
|
if(send_fct_now && !block_sum_fct_send)
|
if(send_fct_now && !block_sum_fct_send)
|
begin
|
begin
|
fct_flag <= fct_send;
|
fct_flag <= fct_send;
|
block_sum_fct_send<= 1'b1;
|
block_sum_fct_send<= 1'b1;
|
end
|
end
|
else if(!send_fct_now)
|
else if(!send_fct_now)
|
begin
|
begin
|
block_sum_fct_send<= 1'b0;
|
block_sum_fct_send<= 1'b0;
|
end
|
end
|
else
|
else
|
block_sum_fct_send <= block_sum_fct_send;
|
block_sum_fct_send <= block_sum_fct_send;
|
|
|
if(!data_tx_i[8])
|
if(!data_tx_i[8])
|
begin
|
begin
|
|
|
if(global_counter_transfer == 4'd9)
|
if(global_counter_transfer == 4'd9)
|
begin
|
begin
|
ready_tx_data <= 1'b1;
|
ready_tx_data <= 1'b1;
|
end
|
end
|
else
|
else
|
begin
|
begin
|
ready_tx_data <= 1'b0;
|
ready_tx_data <= 1'b0;
|
end
|
end
|
|
|
if(global_counter_transfer != 4'd9)
|
if(global_counter_transfer != 4'd9)
|
begin
|
begin
|
hold_data <= 1'b1;
|
hold_data <= 1'b1;
|
global_counter_transfer <= global_counter_transfer + 4'd1;
|
global_counter_transfer <= global_counter_transfer + 4'd1;
|
txdata_flagctrl_tx_last <= data_tx_i;
|
txdata_flagctrl_tx_last <= data_tx_i;
|
|
|
if(gotfct_tx && !block_sum)
|
if(gotfct_tx && !block_sum)
|
begin
|
begin
|
fct_counter_receive <= fct_counter;
|
fct_counter_receive <= fct_counter;
|
block_sum<= 1'b1;
|
block_sum<= 1'b1;
|
end
|
end
|
else if(!gotfct_tx)
|
else if(!gotfct_tx)
|
begin
|
begin
|
block_sum<= 1'b0;
|
block_sum<= 1'b0;
|
end
|
end
|
else
|
else
|
block_sum <= block_sum;
|
block_sum <= block_sum;
|
end
|
end
|
else
|
else
|
begin
|
begin
|
hold_data <= 1'b0;
|
hold_data <= 1'b0;
|
global_counter_transfer <= 4'd0;
|
global_counter_transfer <= 4'd0;
|
fct_counter_receive <= fct_counter_receive - 6'd1;
|
fct_counter_receive <= fct_counter_receive - 6'd1;
|
|
last_type <= DATA;
|
end
|
end
|
|
|
end
|
end
|
else if(data_tx_i[8])
|
else if(data_tx_i[8])
|
begin
|
begin
|
|
|
if(global_counter_transfer == 4'd3)
|
if(global_counter_transfer == 4'd3)
|
begin
|
begin
|
ready_tx_data <= 1'b1;
|
ready_tx_data <= 1'b1;
|
end
|
end
|
else
|
else
|
begin
|
begin
|
ready_tx_data <= 1'b0;
|
ready_tx_data <= 1'b0;
|
end
|
end
|
|
|
if(global_counter_transfer != 4'd3)
|
if(global_counter_transfer != 4'd3)
|
begin
|
begin
|
hold_data <= 1'b1;
|
hold_data <= 1'b1;
|
global_counter_transfer <= global_counter_transfer + 4'd1;
|
global_counter_transfer <= global_counter_transfer + 4'd1;
|
txdata_flagctrl_tx_last <= data_tx_i;
|
txdata_flagctrl_tx_last <= data_tx_i;
|
|
|
if(gotfct_tx && !block_sum)
|
if(gotfct_tx && !block_sum)
|
begin
|
begin
|
fct_counter_receive <= fct_counter;
|
fct_counter_receive <= fct_counter;
|
block_sum<= 1'b1;
|
block_sum<= 1'b1;
|
end
|
end
|
else if(!gotfct_tx)
|
else if(!gotfct_tx)
|
begin
|
begin
|
block_sum<= 1'b0;
|
block_sum<= 1'b0;
|
end
|
end
|
else
|
else
|
block_sum <= block_sum;
|
block_sum <= block_sum;
|
end
|
end
|
else
|
else
|
begin
|
begin
|
|
|
hold_data <= 1'b0;
|
hold_data <= 1'b0;
|
global_counter_transfer <= 4'd0;
|
global_counter_transfer <= 4'd0;
|
fct_counter_receive <= fct_counter_receive - 6'd1;
|
fct_counter_receive <= fct_counter_receive - 6'd1;
|
|
last_type <=EOP;
|
end
|
end
|
end
|
end
|
|
|
end
|
end
|
|
|
end
|
end
|
end
|
end
|
|
|
endmodule
|
endmodule
|
|
|