//------------------------------------------------------------------------------
//
//  dp_aux_tx.v : displaport aux-ch tx module
//
//  LICENSE : "as-is"
//  TakeshiNagashima(T.NG) caramelgete@gmail.com
//------------------------------------------------------------------------------
//  2009/nov/30 release 0.0  
//  2010/jan/28 release 0.1  display timinig generate test
//
//------------------------------------------------------------------------------

module dp_aux_tx(
	output			aux_tx,			// out   [AUX] dp aux_tx
	output			aux_oe,			// out   [AUX] dp aux_tx oe
	input			aux_req,		// in    [AUX] send request
	output			aux_ack,		// out   [AUX] send acknowredge
	output			aux_done,		// out   [AUX] send done
	input	[3:0]	aux_cmd,		// in    [AUX] send command
	input	[19:0]	aux_addr,		// in    [AUX] send addr
	input	[7:0]	aux_len,		// in    [AUX] send data length
	input	[7:0]	aux_data,		// in    [AUX] send data
	input			aux_i2c_ao,		// in    [AUX] send i2c adress-only
	output			aux_data_req,	// out   [AUX] send data request
	output	[19:0]	aux_select,		// out   [AUX] data addr
	input			clk27,			// in    [AUX] clk 27MHz
	input			rst_n			// in    [AUX] #reset
);

	localparam auxst00=4'b0000;	// idle
	localparam auxst01=4'b0001;	// 00000000
	localparam auxst02=4'b0011;	// sync
	localparam auxst03=4'b0010;	// cmd
	localparam auxst04=4'b0100;	// native addr
	localparam auxst05=4'b0101;	// native len
	localparam auxst06=4'b0111;	// native data
	localparam auxst07=4'b0110;	// stop

	localparam auxst10=4'b1000;	// idle
	localparam auxst11=4'b1001;	// 00000000
	localparam auxst12=4'b1011;	// sync
	localparam auxst13=4'b1010;	// cmd
	localparam auxst14=4'b1100;	// i2c addr
	localparam auxst15=4'b1101;	// i2c len
	localparam auxst16=4'b1111;	// i2c data
	localparam auxst17=4'b1110;	// stop

	// 

	reg		[3:0] aux_cmd_r;
	reg		[19:0] aux_addr_r;
	reg		[7:0] aux_data_r;
	wire	[3:0] aux_cmd_w;
	wire	[19:0] aux_addr_w;
	wire	[7:0] aux_data_w;

	wire	aux_clk;
	wire	aux_clk_one;
	wire	aux_tx_out;

	reg		[4:0] aux_clk_r;
	reg		aux_clk_one_r;
	reg		aux_clk_edge_r;

	wire	[4:0] aux_clk_w;
	wire	aux_clk_one_w;
	wire	aux_clk_edge_w;

	wire	[1:0] aux_tx_out_sel;

	reg		[19:0] aux_tx_data_r;
	wire	[19:0] aux_tx_data_w;

	reg		[2:0] aux_tx_out_r;
	reg		aux_tx_oe_r;
	wire	[2:0] aux_tx_out_w;
	wire	aux_tx_oe_w;

	reg		[3:0] aux_state_r;
	wire	[3:0] aux_state_w;
	reg		aux_ack_r;
	reg		aux_done_r;
	reg		aux_data_req_r;
	wire	aux_ack_w;
	wire	aux_done_w;
	wire	aux_data_req_w;

	reg		[4:0] aux_count_r;
	reg		[7:0] aux_len_r;
	reg		[19:0] aux_select_r;
	reg		aux_sync_count10_r;
	reg		aux_sync4_r;
	reg		aux_cmd4_r;
	reg		aux_addr20_r;
	reg		aux_len8_r;
	reg		aux_data8_r;
	reg		aux_len0_r;
	reg		aux_stop4_r;
	wire	[4:0] aux_count_w;
	wire	[7:0] aux_len_w;
	wire	[19:0] aux_select_w;
	wire	aux_sync_count10_w;
	wire	aux_sync4_w;
	wire	aux_addr20_w;
	wire	aux_len8_w;
	wire	aux_data8_w;
	wire	aux_len0_w;
	wire	aux_stop4_w;

	assign aux_clk=aux_clk_edge_r;
	assign aux_clk_one=aux_clk_one_r;

	assign aux_tx=aux_tx_out_r[0];
	assign aux_oe=aux_tx_out_r[2];

	assign aux_ack=aux_ack_r;
	assign aux_done=aux_done_r;
	assign aux_data_req=aux_data_req_r;
	assign aux_select[19:0]=aux_select_r[19:0];

	always @(posedge clk27 or negedge rst_n)
	begin
		if (rst_n==1'b0)
			begin
				aux_cmd_r[3:0] <= 4'b0;
				aux_addr_r[19:0] <= 20'b0;
				aux_data_r[7:0] <= 8'b0;

				aux_clk_r[4:0] <= 5'b0;
				aux_clk_one_r <= 1'b0;
				aux_clk_edge_r <= 1'b0;
				aux_tx_data_r[19:0] <= 20'b0;
				aux_tx_out_r[2:0] <= 3'b0;
				aux_tx_oe_r <= 1'b0;
				aux_state_r <= auxst00;
				aux_ack_r <= 1'b0;
				aux_done_r <= 1'b0;
				aux_data_req_r <= 1'b0;
				aux_count_r[4:0] <= 5'b0;
				aux_len_r[7:0] <= 8'b0;
				aux_select_r[19:0] <= 20'b0;
				aux_sync_count10_r <= 1'b0;
				aux_sync4_r <= 1'b0;
				aux_cmd4_r <= 1'b0;
				aux_addr20_r <= 1'b0;
				aux_len8_r <= 1'b0;
				aux_data8_r <= 1'b0;
				aux_len0_r <= 1'b0;
				aux_stop4_r <= 1'b0;
			end
		else
			begin
				aux_cmd_r[3:0] <= aux_cmd_w[3:0];
				aux_addr_r[19:0] <= aux_addr_w[19:0];
				aux_data_r[7:0] <= aux_data_w[7:0];

				aux_clk_r[4:0] <= aux_clk_w[4:0];
				aux_clk_one_r <= aux_clk_one_w;
				aux_clk_edge_r <= aux_clk_edge_w;
				aux_tx_data_r[19:0] <= aux_tx_data_w[19:0];
				aux_tx_out_r[2:0] <= aux_tx_out_w[2:0];
				aux_tx_oe_r <= aux_tx_oe_w;
				aux_state_r <= aux_state_w;
				aux_ack_r <= aux_ack_w;
				aux_done_r <= aux_done_w;
				aux_data_req_r <= aux_data_req_w;
				aux_count_r[4:0] <= aux_count_w[4:0];
				aux_len_r[7:0] <= aux_len_w[7:0];
				aux_select_r[19:0] <= aux_select_w[19:0];
				aux_sync_count10_r <= aux_sync_count10_w;
				aux_sync4_r <= aux_sync4_w;
				aux_cmd4_r <= aux_cmd4_w;
				aux_addr20_r <= aux_addr20_w;
				aux_len8_r <= aux_len8_w;
				aux_data8_r <= aux_data8_w;
				aux_len0_r <= aux_len0_w;
				aux_stop4_r <= aux_stop4_w;
			end
	end

	assign aux_cmd_w[3:0]=
			(aux_state_r==auxst00) & (aux_clk_one==1'b0) ? 4'b0 :
			(aux_state_r==auxst00) & (aux_clk_one==1'b1) & (aux_req==1'b1) ? aux_cmd[3:0] :
			(aux_state_r==auxst00) & (aux_clk_one==1'b1) & (aux_req==1'b0) ? 4'b0 :
			(aux_state_r!=auxst00) ? aux_cmd_r[3:0] :
			4'b0;

	assign aux_addr_w[19:0]=
			(aux_state_r==auxst00) & (aux_clk_one==1'b0) ? 20'b0 :
			(aux_state_r==auxst00) & (aux_clk_one==1'b1) & (aux_req==1'b1) ? aux_addr[19:0] :
			(aux_state_r==auxst00) & (aux_clk_one==1'b1) & (aux_req==1'b0) ? 20'b0 :
			(aux_state_r!=auxst00) ? aux_addr_r[19:0] :
			20'b0;

	assign aux_data_w[7:0]=8'b0;

	assign aux_clk_w[4:0]=(aux_clk_r[4:0]==5'd26) ? 5'b0 : aux_clk_r[4:0]+5'b01;

	assign aux_clk_one_w=(aux_clk_r[4:0]==5'd0) ? 1'b1 : 1'b0;
	assign aux_clk_edge_w=(aux_clk_r[4:0]==5'd0) | (aux_clk_r[4:0]==5'd14) ? 1'b1 : 1'b0;

	assign aux_tx_data_w[19:0]=
			(aux_state_r==auxst00) ? 20'b0 :
			(aux_state_r==auxst01) ? 20'b0 :
			(aux_state_r==auxst02) ? {aux_cmd_r[3:0],16'b0} :
			(aux_state_r==auxst03) & (aux_clk_one==1'b0) ? aux_tx_data_r[19:0] :
			(aux_state_r==auxst03) & (aux_clk_one==1'b1) & (aux_cmd4_r==1'b1) ? aux_addr_r[19:0] :
			(aux_state_r==auxst03) & (aux_clk_one==1'b1) & (aux_cmd4_r==1'b0) ? {aux_tx_data_r[18:0],1'b0} :
			(aux_state_r==auxst03) & (aux_clk_one==1'b0) ? aux_tx_data_r[19:0] :
			(aux_state_r==auxst04) & (aux_clk_one==1'b1) & (aux_addr20_r==1'b1) ? {aux_len_r[7:0],12'b0} :
			(aux_state_r==auxst04) & (aux_clk_one==1'b1) & (aux_addr20_r==1'b0) ? {aux_tx_data_r[18:0],1'b0} :
			(aux_state_r==auxst04) & (aux_clk_one==1'b0) ? aux_tx_data_r[19:0] :
			(aux_state_r==auxst05) & (aux_clk_one==1'b1) & (aux_len8_r==1'b1) ? {aux_data[7:0],12'b0} :
			(aux_state_r==auxst05) & (aux_clk_one==1'b1) & (aux_len8_r==1'b0) ? {aux_tx_data_r[19:0],1'b0} :
			(aux_state_r==auxst05) & (aux_clk_one==1'b0) ? aux_tx_data_r[19:0] :
			(aux_state_r==auxst06) & (aux_clk_one==1'b1) & (aux_data8_r==1'b1) ? {aux_data[7:0],12'b0} :
			(aux_state_r==auxst06) & (aux_clk_one==1'b1) & (aux_data8_r==1'b0) ? {aux_tx_data_r[19:0],1'b0} :
			(aux_state_r==auxst06) & (aux_clk_one==1'b0) ? aux_tx_data_r[19:0] :
			(aux_state_r==auxst07) ? 20'b0 :

			(aux_state_r==auxst10) ? 20'b0 :
			(aux_state_r==auxst11) ? 20'b0 :
			(aux_state_r==auxst12) ? {aux_cmd_r[3:0],16'b0} :
			(aux_state_r==auxst13) & (aux_clk_one==1'b0) ? aux_tx_data_r[19:0] :
			(aux_state_r==auxst13) & (aux_clk_one==1'b1) & (aux_cmd4_r==1'b1) ? {14'b0,aux_addr_r[6:0]} :
			(aux_state_r==auxst13) & (aux_clk_one==1'b1) & (aux_cmd4_r==1'b0) ? {aux_tx_data_r[18:0],1'b0} :
			(aux_state_r==auxst13) & (aux_clk_one==1'b0) ? aux_tx_data_r[19:0] :
			(aux_state_r==auxst14) & (aux_clk_one==1'b1) & (aux_addr20_r==1'b1) ? {aux_len_r[7:0],12'b0} :
			(aux_state_r==auxst14) & (aux_clk_one==1'b1) & (aux_addr20_r==1'b0) ? {aux_tx_data_r[18:0],1'b0} :
			(aux_state_r==auxst14) & (aux_clk_one==1'b0) ? aux_tx_data_r[19:0] :
			(aux_state_r==auxst15) & (aux_clk_one==1'b1) & (aux_len8_r==1'b1) ? {aux_data[7:0],12'b0} :
			(aux_state_r==auxst15) & (aux_clk_one==1'b1) & (aux_len8_r==1'b0) ? {aux_tx_data_r[19:0],1'b0} :
			(aux_state_r==auxst15) & (aux_clk_one==1'b0) ? aux_tx_data_r[19:0] :
			(aux_state_r==auxst16) & (aux_clk_one==1'b1) & (aux_data8_r==1'b1) ? {aux_data[7:0],12'b0} :
			(aux_state_r==auxst16) & (aux_clk_one==1'b1) & (aux_data8_r==1'b0) ? {aux_tx_data_r[19:0],1'b0} :
			(aux_state_r==auxst16) & (aux_clk_one==1'b0) ? aux_tx_data_r[19:0] :
			(aux_state_r==auxst17) ? 20'b0 :

			20'b0;

	assign aux_tx_out_sel[1:0]=
			(aux_state_r==auxst00) ? 2'b00 :
			(aux_state_r==auxst01) ? 2'b10 :
			(aux_state_r==auxst02) & (aux_count_r[1:0]==2'b00) ? 2'b11 :
			(aux_state_r==auxst02) & (aux_count_r[1:0]==2'b01) ? 2'b11 :
			(aux_state_r==auxst02) & (aux_count_r[1:0]==2'b10) ? 2'b00 :
			(aux_state_r==auxst02) & (aux_count_r[1:0]==2'b11) ? 2'b00 :
			(aux_state_r==auxst03) & (aux_tx_data_r[19]==1'b1) ? 2'b01 :
			(aux_state_r==auxst03) & (aux_tx_data_r[19]==1'b0) ? 2'b10 :
			(aux_state_r==auxst04) & (aux_tx_data_r[19]==1'b1) ? 2'b01 :
			(aux_state_r==auxst04) & (aux_tx_data_r[19]==1'b0) ? 2'b10 :
			(aux_state_r==auxst05) & (aux_tx_data_r[19]==1'b1) ? 2'b01 :
			(aux_state_r==auxst05) & (aux_tx_data_r[19]==1'b0) ? 2'b10 :
			(aux_state_r==auxst06) & (aux_tx_data_r[19]==1'b1) ? 2'b01 :
			(aux_state_r==auxst06) & (aux_tx_data_r[19]==1'b0) ? 2'b10 :
			(aux_state_r==auxst07) & (aux_count_r[1:0]==2'b00) ? 2'b11 :
			(aux_state_r==auxst07) & (aux_count_r[1:0]==2'b01) ? 2'b11 :
			(aux_state_r==auxst07) & (aux_count_r[1:0]==2'b10) ? 2'b00 :
			(aux_state_r==auxst07) & (aux_count_r[1:0]==2'b11) ? 2'b00 :

			(aux_state_r==auxst10) ? 2'b00 :
			(aux_state_r==auxst11) ? 2'b10 :
			(aux_state_r==auxst12) & (aux_count_r[1:0]==2'b00) ? 2'b11 :
			(aux_state_r==auxst12) & (aux_count_r[1:0]==2'b01) ? 2'b11 :
			(aux_state_r==auxst12) & (aux_count_r[1:0]==2'b10) ? 2'b00 :
			(aux_state_r==auxst12) & (aux_count_r[1:0]==2'b11) ? 2'b00 :
			(aux_state_r==auxst13) & (aux_tx_data_r[19]==1'b1) ? 2'b01 :
			(aux_state_r==auxst13) & (aux_tx_data_r[19]==1'b0) ? 2'b10 :
			(aux_state_r==auxst14) & (aux_tx_data_r[19]==1'b1) ? 2'b01 :
			(aux_state_r==auxst14) & (aux_tx_data_r[19]==1'b0) ? 2'b10 :
			(aux_state_r==auxst15) & (aux_tx_data_r[19]==1'b1) ? 2'b01 :
			(aux_state_r==auxst15) & (aux_tx_data_r[19]==1'b0) ? 2'b10 :
			(aux_state_r==auxst16) & (aux_tx_data_r[19]==1'b1) ? 2'b01 :
			(aux_state_r==auxst16) & (aux_tx_data_r[19]==1'b0) ? 2'b10 :
			(aux_state_r==auxst17) & (aux_count_r[1:0]==2'b00) ? 2'b11 :
			(aux_state_r==auxst17) & (aux_count_r[1:0]==2'b01) ? 2'b11 :
			(aux_state_r==auxst17) & (aux_count_r[1:0]==2'b10) ? 2'b00 :
			(aux_state_r==auxst17) & (aux_count_r[1:0]==2'b11) ? 2'b00 :
			2'b00;

	assign aux_tx_out_w[1:0]=
			(aux_clk==1'd1) & (aux_clk_one==1'b1) ? aux_tx_out_sel[1:0] :
			(aux_clk==1'd1) & (aux_clk_one==1'b0) ? {1'b0,aux_tx_out_r[1]} :
			(aux_clk==1'd0) ? aux_tx_out_r[1:0] :
			2'b0;

	assign aux_tx_out_w[2]=
			(aux_clk==1'd1) & (aux_clk_one==1'b1) ? aux_tx_oe_r :
			(aux_clk==1'd1) & (aux_clk_one==1'b0) ? aux_tx_out_r[2] :
			(aux_clk==1'd0) ? aux_tx_out_r[2] :
			1'b0;

	assign aux_tx_oe_w=
			(aux_state_r==auxst00) & (aux_clk_one==1'b1) & (aux_req==1'b1) ? 1'b1 :
			(aux_state_r==auxst00) & (aux_clk_one==1'b1) & (aux_req==1'b0) ? 1'b0 :
			(aux_state_r==auxst00) & (aux_clk_one==1'b0) ? 1'b0 :
			(aux_state_r==auxst01) ? 1'b1 :
			(aux_state_r==auxst02) ? 1'b1 :
			(aux_state_r==auxst03) ? 1'b1 :
			(aux_state_r==auxst04) ? 1'b1 :
			(aux_state_r==auxst05) ? 1'b1 :
			(aux_state_r==auxst06) ? 1'b1 :
			(aux_state_r==auxst07) & (aux_clk_one==1'b0) ? 1'b1 :
			(aux_state_r==auxst07) & (aux_clk_one==1'b1) & (aux_stop4_r==1'b0) ? 1'b1 :
			(aux_state_r==auxst07) & (aux_clk_one==1'b1) & (aux_stop4_r==1'b1) ? 1'b0 :

			(aux_state_r==auxst10) & (aux_clk_one==1'b1) & (aux_req==1'b1) ? 1'b1 :
			(aux_state_r==auxst10) & (aux_clk_one==1'b1) & (aux_req==1'b0) ? 1'b0 :
			(aux_state_r==auxst10) & (aux_clk_one==1'b0) ? 1'b0 :
			(aux_state_r==auxst11) ? 1'b1 :
			(aux_state_r==auxst12) ? 1'b1 :
			(aux_state_r==auxst13) ? 1'b1 :
			(aux_state_r==auxst14) ? 1'b1 :
			(aux_state_r==auxst15) ? 1'b1 :
			(aux_state_r==auxst16) ? 1'b1 :
			(aux_state_r==auxst17) & (aux_clk_one==1'b0) ? 1'b1 :
			(aux_state_r==auxst17) & (aux_clk_one==1'b1) & (aux_stop4_r==1'b0) ? 1'b1 :
			(aux_state_r==auxst17) & (aux_clk_one==1'b1) & (aux_stop4_r==1'b1) ? 1'b0 :
			1'b0;

	assign aux_state_w=
			(aux_state_r==auxst00) & (aux_clk_one==1'b0) ? auxst00 :
			(aux_state_r==auxst00) & (aux_clk_one==1'b1) & (aux_req==1'b1) ? auxst01 :
			(aux_state_r==auxst00) & (aux_clk_one==1'b1) & (aux_req==1'b0) ? auxst00 :
			(aux_state_r==auxst01) & (aux_clk_one==1'b0) ? auxst01 :
			(aux_state_r==auxst01) & (aux_clk_one==1'b1) & (aux_sync_count10_r==1'b1) ? auxst02 :
			(aux_state_r==auxst01) & (aux_clk_one==1'b1) & (aux_sync_count10_r==1'b0) ? auxst01 :
			(aux_state_r==auxst02) & (aux_clk_one==1'b0) ? auxst02 :
			(aux_state_r==auxst02) & (aux_clk_one==1'b1) & (aux_sync4_r==1'b1) ? auxst03 :
			(aux_state_r==auxst02) & (aux_clk_one==1'b1) & (aux_sync4_r==1'b0) ? auxst02 :
			(aux_state_r==auxst03) & (aux_clk_one==1'b0) ? auxst03 :
			(aux_state_r==auxst03) & (aux_clk_one==1'b1) & (aux_cmd4_r==1'b1) & (aux_cmd_r[3]==1'b1) ? auxst04 :	// native
			(aux_state_r==auxst03) & (aux_clk_one==1'b1) & (aux_cmd4_r==1'b1) & (aux_cmd_r[3]==1'b0) ? auxst14 :	// i2c
			(aux_state_r==auxst03) & (aux_clk_one==1'b1) & (aux_cmd4_r==1'b0) ? auxst03 :
			(aux_state_r==auxst04) & (aux_clk_one==1'b0) ? auxst04 :
			(aux_state_r==auxst04) & (aux_clk_one==1'b1) & (aux_addr20_r==1'b1) ? auxst05 :
			(aux_state_r==auxst04) & (aux_clk_one==1'b1) & (aux_addr20_r==1'b0) ? auxst04 :
			(aux_state_r==auxst05) & (aux_clk_one==1'b0) ? auxst05 :
			(aux_state_r==auxst05) & (aux_clk_one==1'b1) & (aux_len8_r==1'b1) & (aux_cmd_r[0]==1'b0) ? auxst06 :	// write
			(aux_state_r==auxst05) & (aux_clk_one==1'b1) & (aux_len8_r==1'b1) & (aux_cmd_r[0]==1'b1) ? auxst07 :	// read
			(aux_state_r==auxst05) & (aux_clk_one==1'b1) & (aux_len8_r==1'b0) ? auxst05 :
			(aux_state_r==auxst06) & (aux_clk_one==1'b0) ? auxst06 :
			(aux_state_r==auxst06) & (aux_clk_one==1'b1) & (aux_data8_r==1'b1) & (aux_len0_r==1'b1) ? auxst07 :
			(aux_state_r==auxst06) & (aux_clk_one==1'b1) & (aux_data8_r==1'b1) & (aux_len0_r==1'b0) ? auxst06 :
			(aux_state_r==auxst06) & (aux_clk_one==1'b1) & (aux_data8_r==1'b0) ? auxst06 :
			(aux_state_r==auxst07) & (aux_clk_one==1'b0) ? auxst07 :
			(aux_state_r==auxst07) & (aux_clk_one==1'b1) & (aux_stop4_r==1'b1) ? auxst00 :
			(aux_state_r==auxst07) & (aux_clk_one==1'b1) & (aux_stop4_r==1'b0) ? auxst07 :

			(aux_state_r==auxst10) ? auxst10 :
			(aux_state_r==auxst11) ? auxst11 :
			(aux_state_r==auxst12) ? auxst12 :
			(aux_state_r==auxst13) ? auxst13 :
			(aux_state_r==auxst14) & (aux_clk_one==1'b0) ? auxst14 :
			(aux_state_r==auxst14) & (aux_clk_one==1'b1) & (aux_addr20_r==1'b1) & (aux_i2c_ao==1'b0) ? auxst15 :	// len,data
			(aux_state_r==auxst14) & (aux_clk_one==1'b1) & (aux_addr20_r==1'b1) & (aux_i2c_ao==1'b1) ? auxst07 :	// address-only
			(aux_state_r==auxst14) & (aux_clk_one==1'b1) & (aux_addr20_r==1'b0) ? auxst14 :
			(aux_state_r==auxst15) & (aux_clk_one==1'b0) ? auxst15 :
			(aux_state_r==auxst15) & (aux_clk_one==1'b1) & (aux_len8_r==1'b1) & (aux_cmd_r[0]==1'b0) ? auxst16 :	// write
			(aux_state_r==auxst15) & (aux_clk_one==1'b1) & (aux_len8_r==1'b1) & (aux_cmd_r[0]==1'b1) ? auxst07 :	// read
			(aux_state_r==auxst15) & (aux_clk_one==1'b1) & (aux_len8_r==1'b0) ? auxst15 :
			(aux_state_r==auxst16) & (aux_clk_one==1'b0) ? auxst16 :
			(aux_state_r==auxst16) & (aux_clk_one==1'b1) & (aux_data8_r==1'b1) & (aux_len0_r==1'b1) ? auxst07 :
			(aux_state_r==auxst16) & (aux_clk_one==1'b1) & (aux_data8_r==1'b1) & (aux_len0_r==1'b0) ? auxst16 :
			(aux_state_r==auxst16) & (aux_clk_one==1'b1) & (aux_data8_r==1'b0) ? auxst16 :
			(aux_state_r==auxst17) & (aux_clk_one==1'b0) ? auxst07 :
			(aux_state_r==auxst17) & (aux_clk_one==1'b1) & (aux_stop4_r==1'b1) ? auxst10 :
			(aux_state_r==auxst17) & (aux_clk_one==1'b1) & (aux_stop4_r==1'b0) ? auxst07 :

			auxst00;

	assign aux_ack_w=
			(aux_state_r==auxst00) & (aux_clk_one==1'b1) & (aux_req==1'b1) ? 1'b1 :
			1'b0;
	assign aux_done_w=
			(aux_state_r==auxst07) & (aux_clk_one==1'b1) & (aux_stop4_r==1'b1) ? 1'b1 :
			(aux_state_r==auxst17) & (aux_clk_one==1'b1) & (aux_stop4_r==1'b1) ? 1'b1 :
			1'b0;

	assign aux_data_req_w=
			(aux_state_r==auxst05) & (aux_clk_one==1'b1) & (aux_len8_r==1'b1) & (aux_cmd_r[0]==1'b0) ? 1'b1 :
			(aux_state_r==auxst06) & (aux_clk_one==1'b1) & (aux_data8_r==1'b1) & (aux_len0_r==1'b0) ? 1'b1 :
			(aux_state_r==auxst15) & (aux_clk_one==1'b1) & (aux_len8_r==1'b1) & (aux_cmd_r[0]==1'b0) ? 1'b1 :
			(aux_state_r==auxst16) & (aux_clk_one==1'b1) & (aux_data8_r==1'b1) & (aux_len0_r==1'b0) ? 1'b1 :
			1'b0;

	assign aux_count_w[4:0]=
			(aux_state_r==auxst00) ? 5'b0 :
			(aux_state_r==auxst01) & (aux_clk_one==1'b0) ? aux_count_r[4:0] :
			(aux_state_r==auxst01) & (aux_clk_one==1'b1) & (aux_sync_count10_r==1'b0) ? aux_count_r[4:0]+5'b01 :
			(aux_state_r==auxst01) & (aux_clk_one==1'b1) & (aux_sync_count10_r==1'b1) ? 5'b0 :
			(aux_state_r==auxst02) & (aux_clk_one==1'b0) ? aux_count_r[4:0] :
			(aux_state_r==auxst02) & (aux_clk_one==1'b1) & (aux_sync4_r==1'b0) ? aux_count_r[4:0]+5'b01 :
			(aux_state_r==auxst02) & (aux_clk_one==1'b1) & (aux_sync4_r==1'b1) ? 5'b0 :
			(aux_state_r==auxst03) & (aux_clk_one==1'b0) ? aux_count_r[4:0] :
			(aux_state_r==auxst03) & (aux_clk_one==1'b1) & (aux_cmd4_r==1'b0) ? aux_count_r[4:0]+5'b01 :
			(aux_state_r==auxst03) & (aux_clk_one==1'b1) & (aux_cmd4_r==1'b1) ? 5'b0 :
			(aux_state_r==auxst04) & (aux_clk_one==1'b0) ? aux_count_r[4:0] :
			(aux_state_r==auxst04) & (aux_clk_one==1'b1) & (aux_addr20_r==1'b0) ? aux_count_r[4:0]+5'b01 :
			(aux_state_r==auxst04) & (aux_clk_one==1'b1) & (aux_addr20_r==1'b1) ? 5'b0 :
			(aux_state_r==auxst05) & (aux_clk_one==1'b0) ? aux_count_r[4:0] :
			(aux_state_r==auxst05) & (aux_clk_one==1'b1) & (aux_len8_r==1'b0) ? aux_count_r[4:0]+5'b01 :
			(aux_state_r==auxst05) & (aux_clk_one==1'b1) & (aux_len8_r==1'b1) ? 5'b0 :
			(aux_state_r==auxst06) & (aux_clk_one==1'b0) ? aux_count_r[4:0] :
			(aux_state_r==auxst06) & (aux_clk_one==1'b1) & (aux_data8_r==1'b0) ? aux_count_r[4:0]+5'b01 :
			(aux_state_r==auxst06) & (aux_clk_one==1'b1) & (aux_data8_r==1'b1) ? 5'b0 :
			(aux_state_r==auxst07) & (aux_clk_one==1'b0) ? aux_count_r[4:0] :
			(aux_state_r==auxst07) & (aux_clk_one==1'b1) & (aux_stop4_r==1'b0) ? aux_count_r[4:0]+5'b01 :
			(aux_state_r==auxst07) & (aux_clk_one==1'b1) & (aux_stop4_r==1'b1) ? 5'b0 :

			(aux_state_r==auxst10) ? 5'b0 :
			(aux_state_r==auxst11) & (aux_clk_one==1'b0) ? aux_count_r[4:0] :
			(aux_state_r==auxst11) & (aux_clk_one==1'b1) & (aux_sync_count10_r==1'b0) ? aux_count_r[4:0]+5'b01 :
			(aux_state_r==auxst11) & (aux_clk_one==1'b1) & (aux_sync_count10_r==1'b1) ? 5'b0 :
			(aux_state_r==auxst12) & (aux_clk_one==1'b0) ? aux_count_r[4:0] :
			(aux_state_r==auxst12) & (aux_clk_one==1'b1) & (aux_sync4_r==1'b0) ? aux_count_r[4:0]+5'b01 :
			(aux_state_r==auxst12) & (aux_clk_one==1'b1) & (aux_sync4_r==1'b1) ? 5'b0 :
			(aux_state_r==auxst13) & (aux_clk_one==1'b0) ? aux_count_r[4:0] :
			(aux_state_r==auxst13) & (aux_clk_one==1'b1) & (aux_cmd4_r==1'b0) ? aux_count_r[4:0]+5'b01 :
			(aux_state_r==auxst13) & (aux_clk_one==1'b1) & (aux_cmd4_r==1'b1) ? 5'b0 :
			(aux_state_r==auxst14) & (aux_clk_one==1'b0) ? aux_count_r[4:0] :
			(aux_state_r==auxst14) & (aux_clk_one==1'b1) & (aux_addr20_r==1'b0) ? aux_count_r[4:0]+5'b01 :
			(aux_state_r==auxst14) & (aux_clk_one==1'b1) & (aux_addr20_r==1'b1) ? 5'b0 :
			(aux_state_r==auxst15) & (aux_clk_one==1'b0) ? aux_count_r[4:0] :
			(aux_state_r==auxst15) & (aux_clk_one==1'b1) & (aux_len8_r==1'b0) ? aux_count_r[4:0]+5'b01 :
			(aux_state_r==auxst15) & (aux_clk_one==1'b1) & (aux_len8_r==1'b1) ? 5'b0 :
			(aux_state_r==auxst16) & (aux_clk_one==1'b0) ? aux_count_r[4:0] :
			(aux_state_r==auxst16) & (aux_clk_one==1'b1) & (aux_data8_r==1'b0) ? aux_count_r[4:0]+5'b01 :
			(aux_state_r==auxst16) & (aux_clk_one==1'b1) & (aux_data8_r==1'b1) ? 5'b0 :
			(aux_state_r==auxst17) & (aux_clk_one==1'b0) ? aux_count_r[4:0] :
			(aux_state_r==auxst17) & (aux_clk_one==1'b1) & (aux_stop4_r==1'b0) ? aux_count_r[4:0]+5'b01 :
			(aux_state_r==auxst17) & (aux_clk_one==1'b1) & (aux_stop4_r==1'b1) ? 5'b0 :
			5'b0;

	assign aux_len_w[7:0]=
			(aux_state_r==auxst00) & (aux_clk_one==1'b0) ? 8'b0 :
			(aux_state_r==auxst00) & (aux_clk_one==1'b1) & (aux_req==1'b1) ? aux_len[7:0] :
			(aux_state_r==auxst00) & (aux_clk_one==1'b1) & (aux_req==1'b0) ? 8'b0 :
			(aux_state_r==auxst01) ? aux_len_r[7:0] :
			(aux_state_r==auxst02) ? aux_len_r[7:0] :
			(aux_state_r==auxst03) ? aux_len_r[7:0] :
			(aux_state_r==auxst04) ? aux_len_r[7:0] :
			(aux_state_r==auxst05) ? aux_len_r[7:0] :
			(aux_state_r==auxst06) & (aux_clk_one==1'b1) & (aux_data8_r==1'b1) ? aux_len_r[7:0]-8'b01 :
			(aux_state_r==auxst06) & (aux_clk_one==1'b1) & (aux_data8_r==1'b0) ? aux_len_r[7:0] :
			(aux_state_r==auxst06) & (aux_clk_one==1'b0) ? aux_len_r[7:0] :
			(aux_state_r==auxst07) ? 8'b0 :

			(aux_state_r==auxst10) & (aux_clk_one==1'b0) ? 8'b0 :
			(aux_state_r==auxst10) & (aux_clk_one==1'b1) & (aux_req==1'b1) ? aux_len[7:0] :
			(aux_state_r==auxst10) & (aux_clk_one==1'b1) & (aux_req==1'b0) ? 8'b0 :
			(aux_state_r==auxst11) ? aux_len_r[7:0] :
			(aux_state_r==auxst12) ? aux_len_r[7:0] :
			(aux_state_r==auxst13) ? aux_len_r[7:0] :
			(aux_state_r==auxst14) ? aux_len_r[7:0] :
			(aux_state_r==auxst15) ? aux_len_r[7:0] :
			(aux_state_r==auxst16) & (aux_clk_one==1'b1) & (aux_data8_r==1'b1) ? aux_len_r[7:0]-8'b01 :
			(aux_state_r==auxst16) & (aux_clk_one==1'b1) & (aux_data8_r==1'b0) ? aux_len_r[7:0] :
			(aux_state_r==auxst16) & (aux_clk_one==1'b0) ? aux_len_r[7:0] :
			(aux_state_r==auxst17) ? 8'b0 :
			8'b0;

	assign aux_select_w[19:0]=
			(aux_state_r==auxst00) & (aux_clk_one==1'b0) ? 20'b0 :
			(aux_state_r==auxst00) & (aux_clk_one==1'b1) & (aux_req==1'b1) ? aux_addr[19:0] :
			(aux_state_r==auxst00) & (aux_clk_one==1'b1) & (aux_req==1'b0) ? 20'b0 :
			(aux_state_r==auxst01) ? aux_select_r[19:0] :
			(aux_state_r==auxst02) ? aux_select_r[19:0] :
			(aux_state_r==auxst03) ? aux_select_r[19:0] :
			(aux_state_r==auxst04) ? aux_select_r[19:0] :
			(aux_state_r==auxst05) & (aux_clk_one==1'b1) & (aux_len8_r==1'b1) ? aux_select_r[19:0]+20'b01 :
			(aux_state_r==auxst05) & (aux_clk_one==1'b1) & (aux_len8_r==1'b0) ? aux_select_r[19:0] :
			(aux_state_r==auxst05) & (aux_clk_one==1'b0) ? aux_select_r[19:0] :
			(aux_state_r==auxst06) & (aux_clk_one==1'b1) & (aux_data8_r==1'b1) ? aux_select_r[19:0]+20'b01 :
			(aux_state_r==auxst06) & (aux_clk_one==1'b1) & (aux_data8_r==1'b0) ? aux_select_r[19:0] :
			(aux_state_r==auxst06) & (aux_clk_one==1'b0) ? aux_select_r[19:0] :
			(aux_state_r==auxst07) ? 20'b0 :

			(aux_state_r==auxst10) & (aux_clk_one==1'b0) ? 20'b0 :
			(aux_state_r==auxst10) & (aux_clk_one==1'b1) & (aux_req==1'b1) ? aux_addr[19:0] :
			(aux_state_r==auxst10) & (aux_clk_one==1'b1) & (aux_req==1'b0) ? 20'b0 :
			(aux_state_r==auxst11) ? aux_select_r[19:0] :
			(aux_state_r==auxst12) ? aux_select_r[19:0] :
			(aux_state_r==auxst13) ? aux_select_r[19:0] :
			(aux_state_r==auxst14) ? aux_select_r[19:0] :
			(aux_state_r==auxst15) & (aux_clk_one==1'b1) & (aux_len8_r==1'b1) ? aux_select_r[19:0]+20'b01 :
			(aux_state_r==auxst15) & (aux_clk_one==1'b1) & (aux_len8_r==1'b0) ? aux_select_r[19:0] :
			(aux_state_r==auxst15) & (aux_clk_one==1'b0) ? aux_select_r[19:0] :
			(aux_state_r==auxst16) & (aux_clk_one==1'b1) & (aux_data8_r==1'b1) ? aux_select_r[19:0]+20'b01 :
			(aux_state_r==auxst16) & (aux_clk_one==1'b1) & (aux_data8_r==1'b0) ? aux_select_r[19:0] :
			(aux_state_r==auxst16) & (aux_clk_one==1'b0) ? aux_select_r[19:0] :
			(aux_state_r==auxst17) ? 20'b0 :
			20'b0;

	assign aux_sync_count10_w=
			(aux_state_r==auxst00) ? 1'b0 :
			(aux_state_r==auxst01) & (aux_count_r[3:0]==4'd14) ? 1'b1 :
			(aux_state_r==auxst01) & (aux_count_r[3:0]!=4'd14) ? aux_sync_count10_r :
			4'b0;

	assign aux_sync4_w=
			(aux_state_r==auxst00) ? 1'b0 :
			(aux_state_r==auxst01) ? 1'b0 :
			(aux_state_r==auxst02) & (aux_count_r[1:0]==2'b11) ? 1'b1 :
			(aux_state_r==auxst02) & (aux_count_r[1:0]!=2'b11) ? aux_sync4_r :
			1'b0;

	assign aux_cmd4_w=
			(aux_state_r==auxst00) ? 1'b0 :
			(aux_state_r==auxst01) ? 1'b0 :
			(aux_state_r==auxst02) ? 1'b0 :
			(aux_state_r==auxst03) & (aux_count_r[1:0]==2'b11) ? 1'b1 :
			(aux_state_r==auxst03) & (aux_count_r[1:0]!=2'b11) ? aux_cmd4_r :
			1'b0;

	assign aux_addr20_w=
			(aux_state_r==auxst00) ? 1'b0 :
			(aux_state_r==auxst01) ? 1'b0 :
			(aux_state_r==auxst02) ? 1'b0 :
			(aux_state_r==auxst03) ? 1'b0 :
			(aux_state_r==auxst04) & (aux_count_r[4:0]==5'd19) ? 1'b1 :
			(aux_state_r==auxst04) & (aux_count_r[4:0]!=5'd19) ? aux_addr20_r :

			(aux_state_r==auxst14) & (aux_count_r[4:0]==5'd19) ? 1'b1 :
			(aux_state_r==auxst14) & (aux_count_r[4:0]!=5'd19) ? aux_addr20_r :
			1'b0;

	assign aux_len8_w=
			(aux_state_r==auxst00) ? 1'b0 :
			(aux_state_r==auxst01) ? 1'b0 :
			(aux_state_r==auxst02) ? 1'b0 :
			(aux_state_r==auxst03) ? 1'b0 :
			(aux_state_r==auxst04) ? 1'b0 :
			(aux_state_r==auxst05) & (aux_count_r[2:0]==3'h7) ? 1'b1 :
			(aux_state_r==auxst05) & (aux_count_r[2:0]!=3'h7) ? 1'b0 :

			(aux_state_r==auxst14) ? 1'b0 :
			(aux_state_r==auxst15) & (aux_count_r[2:0]==3'h7) ? 1'b1 :
			(aux_state_r==auxst15) & (aux_count_r[2:0]!=3'h7) ? 1'b0 :
			1'b0;

	assign aux_data8_w=
			(aux_state_r==auxst00) ? 1'b0 :
			(aux_state_r==auxst01) ? 1'b0 :
			(aux_state_r==auxst02) ? 1'b0 :
			(aux_state_r==auxst03) ? 1'b0 :
			(aux_state_r==auxst04) ? 1'b0 :
			(aux_state_r==auxst05) ? 1'b0 :
			(aux_state_r==auxst06) & (aux_count_r[2:0]==3'h7) ? 1'b1 :
			(aux_state_r==auxst06) & (aux_count_r[2:0]!=3'h7) ? 1'b0 :

			(aux_state_r==auxst14) ? 1'b0 :
			(aux_state_r==auxst15) ? 1'b0 :
			(aux_state_r==auxst16) & (aux_count_r[2:0]==3'h7) ? 1'b1 :
			(aux_state_r==auxst16) & (aux_count_r[2:0]!=3'h7) ? 1'b0 :
			1'b0;

	assign aux_len0_w=
			(aux_state_r==auxst04) ? 1'b0 :
			(aux_state_r==auxst05) & (aux_len_r[7:0]==8'b0) ? 1'b1 :
			(aux_state_r==auxst05) & (aux_len_r[7:0]!=8'b0) ? 1'b0 :
		//	(aux_state_r==auxst06) & (aux_count_r[2:0]!=3'h0) & (aux_len_r[7:1]==7'b0) ? 1'b1 :
		//	(aux_state_r==auxst06) & (aux_count_r[2:0]!=3'h0) & (aux_len_r[7:1]!=7'b0) ? 1'b0 :
			(aux_state_r==auxst06) & (aux_count_r[2:0]!=3'h0) & (aux_len_r[7:0]==8'b0) ? 1'b1 :
			(aux_state_r==auxst06) & (aux_count_r[2:0]!=3'h0) & (aux_len_r[7:0]!=8'b0) ? 1'b0 :
			(aux_state_r==auxst06) & (aux_count_r[2:0]==3'h0) ? 1'b0 :

			(aux_state_r==auxst14) ? 1'b0 :
			(aux_state_r==auxst15) ? 1'b0 :
			(aux_state_r==auxst16) & (aux_count_r[2:0]!=3'h0) & (aux_len_r[7:0]==8'b0) ? 1'b1 :
			(aux_state_r==auxst16) & (aux_count_r[2:0]!=3'h0) & (aux_len_r[7:0]!=9'b0) ? 1'b0 :
			(aux_state_r==auxst16) & (aux_count_r[2:0]==3'h0) ? 1'b0 :
			1'b0;

	assign aux_stop4_w=
			(aux_state_r==auxst00) ? 1'b0 :
			(aux_state_r==auxst01) ? 1'b0 :
			(aux_state_r==auxst02) ? 1'b0 :
			(aux_state_r==auxst03) ? 1'b0 :
			(aux_state_r==auxst04) ? 1'b0 :
			(aux_state_r==auxst05) ? 1'b0 :
			(aux_state_r==auxst06) ? 1'b0 :
			(aux_state_r==auxst07) & (aux_count_r[1:0]==2'b11) ? 1'b1 :
			(aux_state_r==auxst07) & (aux_count_r[1:0]!=2'b11) ? aux_stop4_r :

			(aux_state_r==auxst14) ? 1'b0 :
			(aux_state_r==auxst15) ? 1'b0 :
			(aux_state_r==auxst16) ? 1'b0 :
			(aux_state_r==auxst17) & (aux_count_r[1:0]==2'b11) ? 1'b1 :
			(aux_state_r==auxst17) & (aux_count_r[1:0]!=2'b11) ? aux_stop4_r :
			1'b0;

endmodule
