OpenCores
URL https://opencores.org/ocsvn/spacewiresystemc/spacewiresystemc/trunk

Subversion Repositories spacewiresystemc

[/] [spacewiresystemc/] [trunk/] [rtl/] [RTL_VB/] [tx_spw.v] - Diff between revs 12 and 13

Go to most recent revision | Only display areas with differences | Details | Blame | View Log

Rev 12 Rev 13
//+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  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;
 
 
        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 [3: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_send_last;
        reg [2:0] fct_send_last;
        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_last;
        reg [5:0] fct_counter_last;
        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 [3:0] global_counter_transfer;
        reg [3:0] global_counter_transfer;
 
 
assign ready_tx_timecode = (enable_time_code & global_counter_transfer == 14)?1'b1:1'b0;
 
 
 
/*
/*
 
assign ready_tx_timecode = (enable_time_code & global_counter_transfer == 13)?1'b1:1'b0;
 
 
 
 
assign ready_tx_data     = (enable_n_char & global_counter_transfer == 4'd9  & !data_tx_i[8])?1'b1:
assign ready_tx_data     = (enable_n_char & global_counter_transfer == 4'd9  & !data_tx_i[8])?1'b1:
                           (enable_n_char & global_counter_transfer == 4'd3  &  data_tx_i[8])?1'b1:1'b0;
                           (enable_n_char & global_counter_transfer == 4'd3  &  data_tx_i[8])?1'b1:1'b0;
*/
*/
 
 
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[7];
                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[6];
                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[5];
                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[4];
                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[3];
                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[2];
                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[1];
                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[0];
                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) && 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) && 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
 
 
//slots open in another side
//slots open in another side
always@(posedge gotfct_tx or negedge enable_tx)
always@(posedge gotfct_tx or negedge enable_tx)
begin
begin
 
 
        if(!enable_tx)
        if(!enable_tx)
        begin
        begin
                fct_counter <= {6{1'b0}};
                fct_counter <= {6{1'b0}};
        end
        end
        else
        else
        begin
        begin
                if(fct_counter == 6'd56)
                if(fct_counter == 6'd56)
                        fct_counter <= 6'd8;
                        fct_counter <= 6'd8;
                else
                else
                        fct_counter <= fct_counter + 6'd8;
                        fct_counter <= fct_counter + 6'd8;
        end
        end
end
end
 
 
 
 
//slots open in our side
//slots open in our side
always@(posedge send_fct_now or negedge enable_tx)
always@(posedge send_fct_now or negedge enable_tx)
begin
begin
 
 
        if(!enable_tx)
        if(!enable_tx)
        begin
        begin
                fct_send <= {3{1'b1}};
                fct_send <= {3{1'b1}};
        end
        end
        else
        else
        begin
        begin
 
 
                if(fct_send == 3'd7)
                if(fct_send == 3'd7)
                begin
                begin
                        fct_send <= 3'd1;
                        fct_send <= 3'd1;
                end
                end
                else
                else
                begin
                begin
                        fct_send <= fct_send + 3'd1;
                        fct_send <= fct_send + 3'd1;
                end
                end
        end
        end
 
 
end
end
 
 
 
 
always@(*)
always@(*)
begin
begin
 
 
        next_state_tx = state_tx;
        next_state_tx = state_tx;
 
 
        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;
 
 
        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 > 6'd0)
                        if(send_fct_tx && fct_counter > 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
 
 
                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;
 
 
                /*
                /*
                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;
                */
                */
 
 
                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 )
                else if(txwrite_tx && fct_counter_receive > 6'd0 && !hold_null && !hold_time_code && !hold_fct )
                begin
                begin
                        enable_n_char = 1'b1;
                        enable_n_char = 1'b1;
                end
                end
                else if(!hold_time_code && !hold_fct && !hold_data)
                else if(!hold_time_code && !hold_fct && !hold_data)
                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)
begin
begin
        if(!enable_tx)
        if(!enable_tx)
        begin
        begin
                null_s <= 8'h74;
                null_s        <= 8'h74;
                fct_s  <= 4'h4;
                fct_s         <= 4'h4;
                eop_s  <= 4'h5;
                eop_s         <= 4'h5;
                eep_s  <= 4'h6;
                eep_s  <= 4'h6;
                timecode_s <= 14'h1e00;
                timecode_s    <= 14'b01110000000000;
 
 
                fct_flag <= 3'd0;
                fct_flag      <= 3'd0;
                fct_send_last <= 3'd0;
                fct_send_last <= 3'd0;
 
 
                first_time <= 1'b1;
                first_time        <= 1'b1;
                ready_tx_data <= 1'b0;
                ready_tx_data <= 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;
                fct_counter_last <= 6'd0;
                fct_counter_last <= 6'd0;
 
 
                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
 
 
                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;
 
 
                        //
                        //
                        if(fct_send_last != fct_send)
                        if(fct_send_last != fct_send)
                        begin
                        begin
                                if(fct_send == 3'd1 && fct_send_last == 3'd7)
                                if(fct_send == 3'd1 && fct_send_last == 3'd7)
                                begin
                                begin
                                        fct_flag <= fct_flag + 3'd1;
                                        fct_flag <= fct_flag + 3'd1;
                                end
                                end
                                else
                                else
                                begin
                                begin
                                        fct_flag <= fct_flag + (fct_send - fct_send_last);
                                        fct_flag <= fct_flag + (fct_send - fct_send_last);
                                end
                                end
 
 
                                fct_send_last <= fct_send;
                                fct_send_last <= fct_send;
                        end
                        end
 
 
                        //
                        //
                        if(fct_counter_last != fct_counter)
                        if(fct_counter_last != fct_counter)
                        begin
                        begin
                                if(fct_counter == 6'd8 && fct_counter_last == 6'd56)
                                if(fct_counter == 6'd8 && fct_counter_last == 6'd56)
                                begin
                                begin
                                        fct_counter_receive <= fct_counter_receive + 6'd8;
                                        fct_counter_receive <= fct_counter_receive + 6'd8;
                                end
                                end
                                else
                                else
                                begin
                                begin
                                        fct_counter_receive <= fct_counter_receive + (fct_counter - fct_counter_last);
                                        fct_counter_receive <= fct_counter_receive + (fct_counter - fct_counter_last);
                                end
                                end
 
 
                                fct_counter_last <= fct_counter;
                                fct_counter_last <= fct_counter;
                        end
                        end
 
 
                        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;
                                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;
 
 
                        //
                        //
                        if(fct_counter_last != fct_counter)
                        if(fct_counter_last != fct_counter)
                        begin
                        begin
                                if(fct_counter == 6'd8 && fct_counter_last == 6'd56)
                                if(fct_counter == 6'd8 && fct_counter_last == 6'd56)
                                begin
                                begin
                                        fct_counter_receive <= fct_counter_receive + 6'd8;
                                        fct_counter_receive <= fct_counter_receive + 6'd8;
                                end
                                end
                                else
                                else
                                begin
                                begin
                                        fct_counter_receive <= fct_counter_receive + (fct_counter - fct_counter_last);
                                        fct_counter_receive <= fct_counter_receive + (fct_counter - fct_counter_last);
                                end
                                end
 
 
                                fct_counter_last <= fct_counter;
                                fct_counter_last <= fct_counter;
                        end
                        end
 
 
                        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;
                        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;
                        end
                        end
                end
                end
                else if(enable_time_code)
                else if(enable_time_code)
                begin
                begin
 
 
                        ready_tx_data <= 1'b0;
                        ready_tx_data <= 1'b0;
 
 
 
                        if(global_counter_transfer == 4'd13)
 
                        begin
 
                                ready_tx_timecode <= 1'b1;
 
                        end
 
 
                        //
                        //
                        if(fct_counter_last != fct_counter)
                        if(fct_counter_last != fct_counter)
                        begin
                        begin
                                if(fct_counter == 6'd8 && fct_counter_last == 6'd56)
                                if(fct_counter == 6'd8 && fct_counter_last == 6'd56)
                                begin
                                begin
                                        fct_counter_receive <= fct_counter_receive + 6'd8;
                                        fct_counter_receive <= fct_counter_receive + 6'd8;
                                end
                                end
                                else
                                else
                                begin
                                begin
                                        fct_counter_receive <= fct_counter_receive + (fct_counter - fct_counter_last);
                                        fct_counter_receive <= fct_counter_receive + (fct_counter - fct_counter_last);
                                end
                                end
 
 
                                fct_counter_last <= fct_counter;
                                fct_counter_last <= fct_counter;
                        end
                        end
 
 
                        //
                        //
                        if(fct_send_last != fct_send)
                        if(fct_send_last != fct_send)
                        begin
                        begin
                                if(fct_send == 3'd1 && fct_send_last == 3'd7)
                                if(fct_send == 3'd1 && fct_send_last == 3'd7)
                                begin
                                begin
                                        fct_flag <= fct_flag + 3'd1;
                                        fct_flag <= fct_flag + 3'd1;
                                end
                                end
                                else
                                else
                                begin
                                begin
                                        fct_flag <= fct_flag + (fct_send - fct_send_last);
                                        fct_flag <= fct_flag + (fct_send - fct_send_last);
                                end
                                end
 
 
                                fct_send_last <= fct_send;
                                fct_send_last <= fct_send;
                        end
                        end
 
 
                        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;
                                last_timein_control_flag_tx <= timecode_tx_i;
                                timecode_s <= {timecode_s[13:10],2'd2,timecode_tx_i[7:0]};
                        end
                        end
                        else
                        else
                        begin
                        begin
 
                                last_timein_control_flag_tx <= timecode_tx_i;
                                global_counter_transfer <= 4'd0;
                                global_counter_transfer <= 4'd0;
                        end
                        end
                end
                end
                else if(enable_n_char)
                else if(enable_n_char)
                begin
                begin
 
 
 
                        ready_tx_timecode <= 1'b0;
 
 
                        //
                        //
                        if(fct_send_last != fct_send)
                        if(fct_send_last != fct_send)
                        begin
                        begin
                                if(fct_send == 3'd1 && fct_send_last == 3'd7)
                                if(fct_send == 3'd1 && fct_send_last == 3'd7)
                                begin
                                begin
                                        fct_flag <= fct_flag + 3'd1;
                                        fct_flag <= fct_flag + 3'd1;
                                end
                                end
                                else
                                else
                                begin
                                begin
                                        fct_flag <= fct_flag + (fct_send - fct_send_last);
                                        fct_flag <= fct_flag + (fct_send - fct_send_last);
                                end
                                end
 
 
                                fct_send_last <= fct_send;
                                fct_send_last <= fct_send;
                        end
                        end
 
 
                        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
 
 
                                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;
                                end
                                end
                                else
                                else
                                begin
                                begin
                                        hold_data <= 1'b0;
                                        hold_data <= 1'b0;
                                        global_counter_transfer <= 4'd0;
                                        global_counter_transfer <= 4'd0;
                                        //
                                        //
                                        if(fct_counter_last != fct_counter)
                                        if(fct_counter_last != fct_counter)
                                        begin
                                        begin
                                                if(fct_counter == 6'd8 && fct_counter_last == 6'd56)
                                                if(fct_counter == 6'd8 && fct_counter_last == 6'd56)
                                                begin
                                                begin
                                                        fct_counter_receive <= fct_counter_receive + 6'd8 - 6'd1;
                                                        fct_counter_receive <= fct_counter_receive + 6'd8 - 6'd1;
                                                end
                                                end
                                                else
                                                else
                                                begin
                                                begin
                                                        fct_counter_receive <= fct_counter_receive + (fct_counter - fct_counter_last) - 6'd1;
                                                        fct_counter_receive <= fct_counter_receive + (fct_counter - fct_counter_last) - 6'd1;
                                                end
                                                end
 
 
                                                fct_counter_last <= fct_counter;
                                                fct_counter_last <= fct_counter;
                                        end
                                        end
                                        else
                                        else
                                        begin
                                        begin
                                                fct_counter_receive <= fct_counter_receive - 6'd1;
                                                fct_counter_receive <= fct_counter_receive - 6'd1;
                                        end
                                        end
                                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
 
 
                                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;
                                end
                                end
                                else
                                else
                                begin
                                begin
                                        hold_data <= 1'b0;
                                        hold_data <= 1'b0;
                                        global_counter_transfer <= 4'd0;
                                        global_counter_transfer <= 4'd0;
                                        //
                                        //
                                        if(fct_counter_last != fct_counter)
                                        if(fct_counter_last != fct_counter)
                                        begin
                                        begin
                                                if(fct_counter == 6'd8 && fct_counter_last == 6'd56)
                                                if(fct_counter == 6'd8 && fct_counter_last == 6'd56)
                                                begin
                                                begin
                                                        fct_counter_receive <= fct_counter_receive + 6'd8 - 6'd1;
                                                        fct_counter_receive <= fct_counter_receive + 6'd8 - 6'd1;
                                                end
                                                end
                                                else
                                                else
                                                begin
                                                begin
                                                        fct_counter_receive <= fct_counter_receive + (fct_counter - fct_counter_last) - 6'd1;
                                                        fct_counter_receive <= fct_counter_receive + (fct_counter - fct_counter_last) - 6'd1;
                                                end
                                                end
 
 
                                                fct_counter_last <= fct_counter;
                                                fct_counter_last <= fct_counter;
                                        end
                                        end
                                        else
                                        else
                                        begin
                                        begin
                                                fct_counter_receive <= fct_counter_receive - 6'd1;
                                                fct_counter_receive <= fct_counter_receive - 6'd1;
                                        end
                                        end
                                end
                                end
                        end
                        end
 
 
                end
                end
 
 
        end
        end
end
end
 
 
endmodule
endmodule
 
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.