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

Subversion Repositories usbhostslave

[/] [usbhostslave/] [trunk/] [RTL/] [serialInterfaceEngine/] [processTxByte.v] - Rev 2

Go to most recent revision | Compare with Previous | Blame | View Log

//--------------------------------------------------------------------------------------------------
//
// Title       : No Title
// Design      : usbhostslave
// Author      : Steve
// Company     : Base2Designs
//
//-------------------------------------------------------------------------------------------------
//
// File        : c:\projects\USBHostSlave\Aldec\usbhostslave\usbhostslave\compile\processTxByte.v
// Generated   : 08/29/04 21:36:09
// From        : c:\projects\USBHostSlave\RTL\serialInterfaceEngine\processTxByte.asf
// By          : FSM2VHDL ver. 4.0.3.8
//
//-------------------------------------------------------------------------------------------------
//
// Description : 
//
//-------------------------------------------------------------------------------------------------
 
`timescale 1ns / 1ps
`include "usbSerialInterfaceEngine_h.v"
`include "usbConstants_h.v"
 
module processTxByte (JBit, KBit, TxByteCtrlIn, TxByteIn, USBWireCtrl, USBWireData, USBWireGnt, USBWireRdy, USBWireReq, USBWireWEn, clk, processTxByteRdy, processTxByteWEn, rst);
input   [1:0] JBit;
input   [1:0] KBit;
input   [7:0] TxByteCtrlIn;
input   [7:0] TxByteIn;
input   USBWireGnt;
input   USBWireRdy;
input   clk;
input   processTxByteWEn;
input   rst;
output  USBWireCtrl;
output  [1:0] USBWireData;
output  USBWireReq;
output  USBWireWEn;
output  processTxByteRdy;
 
wire    [1:0] JBit;
wire    [1:0] KBit;
wire    [7:0] TxByteCtrlIn;
wire    [7:0] TxByteIn;
reg     USBWireCtrl, next_USBWireCtrl;
reg     [1:0] USBWireData, next_USBWireData;
wire    USBWireGnt;
wire    USBWireRdy;
reg     USBWireReq, next_USBWireReq;
reg     USBWireWEn, next_USBWireWEn;
wire    clk;
reg     processTxByteRdy, next_processTxByteRdy;
wire    processTxByteWEn;
wire    rst;
 
// diagram signals declarations
reg  [1:0]TXLineState, next_TXLineState;
reg  [3:0]TXOneCount, next_TXOneCount;
reg  [7:0]TxByteCtrl, next_TxByteCtrl;
reg  [7:0]TxByte, next_TxByte;
reg  [3:0]i, next_i;
 
// BINARY ENCODED state machine: prcTxB
// State codes definitions:
`define START_PTBY 4'b0000
`define PTBY_WAIT_EN 4'b0001
`define SEND_BYTE_UPDATE_BYTE 4'b0010
`define SEND_BYTE_WAIT_RDY 4'b0011
`define SEND_BYTE_CHK 4'b0100
`define SEND_BYTE_BIT_STUFF 4'b0101
`define SEND_BYTE_WAIT_RDY2 4'b0110
`define SEND_BYTE_CHK_FIN 4'b0111
`define PTBY_WAIT_GNT 4'b1000
`define STOP_SND_SE0_2 4'b1001
`define STOP_SND_SE0_1 4'b1010
`define STOP_CHK 4'b1011
`define STOP_SND_J 4'b1100
`define STOP_SND_IDLE 4'b1101
`define STOP_FIN 4'b1110
 
reg [3:0] CurrState_prcTxB;
reg [3:0] NextState_prcTxB;
 
 
//--------------------------------------------------------------------
// Machine: prcTxB
//--------------------------------------------------------------------
//----------------------------------
// NextState logic (combinatorial)
//----------------------------------
always @ (TxByteIn or TxByteCtrlIn or JBit or i or TxByte or TXOneCount or TXLineState or KBit or processTxByteWEn or USBWireGnt or USBWireRdy or TxByteCtrl or processTxByteRdy or USBWireData or USBWireCtrl or USBWireReq or USBWireWEn or CurrState_prcTxB)
begin : prcTxB_NextState
	NextState_prcTxB <= CurrState_prcTxB;
	// Set default values for outputs and signals
	next_processTxByteRdy <= processTxByteRdy;
	next_USBWireData <= USBWireData;
	next_USBWireCtrl <= USBWireCtrl;
	next_USBWireReq <= USBWireReq;
	next_USBWireWEn <= USBWireWEn;
	next_i <= i;
	next_TxByte <= TxByte;
	next_TxByteCtrl <= TxByteCtrl;
	next_TXLineState <= TXLineState;
	next_TXOneCount <= TXOneCount;
	case (CurrState_prcTxB) // synopsys parallel_case full_case
		`START_PTBY:
		begin
			next_processTxByteRdy <= 1'b0;
			next_USBWireData <= 2'b00;
			next_USBWireCtrl <= `TRI_STATE;
			next_USBWireReq <= 1'b0;
			next_USBWireWEn <= 1'b0;
			next_i <= 4'h0;
			next_TxByte <= 8'h00;
			next_TxByteCtrl <= 8'h00;
			next_TXLineState <= 2'b0;
			next_TXOneCount <= 4'h0;
			NextState_prcTxB <= `PTBY_WAIT_EN;
		end
		`PTBY_WAIT_EN:
		begin
			next_processTxByteRdy <= 1'b1;
			if ((processTxByteWEn == 1'b1) && (TxByteCtrlIn == `DATA_START))	
			begin
				NextState_prcTxB <= `PTBY_WAIT_GNT;
				next_processTxByteRdy <= 1'b0;
				next_TxByte <= TxByteIn;
				next_TxByteCtrl <= TxByteCtrlIn;
				next_TXOneCount <= 1;
				next_TXLineState <= JBit;
				next_USBWireReq <= 1'b1;
			end
			else if (processTxByteWEn == 1'b1)	
			begin
				NextState_prcTxB <= `SEND_BYTE_UPDATE_BYTE;
				next_processTxByteRdy <= 1'b0;
				next_TxByte <= TxByteIn;
				next_TxByteCtrl <= TxByteCtrlIn;
				next_i <= 4'h0;
			end
		end
		`PTBY_WAIT_GNT:
			if (USBWireGnt == 1'b1)	
			begin
				NextState_prcTxB <= `SEND_BYTE_UPDATE_BYTE;
				next_i <= 4'h0;
			end
		`SEND_BYTE_UPDATE_BYTE:
		begin
			next_i <= i + 1'b1;
			next_TxByte <= {1'b0, TxByte[7:1] };
			if (TxByte[0] == 1'b1)                      //If this bit is 1, then
			  next_TXOneCount <= TXOneCount + 1'b1;
			    //increment 'TXOneCount'
			else                                        //else this is a zero bit
			begin
			  next_TXOneCount <= 4'h1;
			    //reset 'TXOneCount'
			  if (TXLineState == JBit) next_TXLineState <= KBit;
			    //toggle the line state
			  else next_TXLineState <= JBit;
			end
			NextState_prcTxB <= `SEND_BYTE_WAIT_RDY;
		end
		`SEND_BYTE_WAIT_RDY:
			if (USBWireRdy == 1'b1)	
			begin
				NextState_prcTxB <= `SEND_BYTE_CHK;
				next_USBWireWEn <= 1'b1;
				next_USBWireData <= TXLineState;
				next_USBWireCtrl <= `DRIVE;
			end
		`SEND_BYTE_CHK:
		begin
			next_USBWireWEn <= 1'b0;
			if (TXOneCount == 4'h6)	
				NextState_prcTxB <= `SEND_BYTE_BIT_STUFF;
			else if (i != 4'h8)	
				NextState_prcTxB <= `SEND_BYTE_UPDATE_BYTE;
			else
				NextState_prcTxB <= `STOP_CHK;
		end
		`SEND_BYTE_BIT_STUFF:
		begin
			next_TXOneCount <= 4'h1;
			//reset 'TXOneCount'
			if (TXLineState == JBit) next_TXLineState <= KBit;
			//toggle the line state
			else next_TXLineState <= JBit;
			NextState_prcTxB <= `SEND_BYTE_WAIT_RDY2;
		end
		`SEND_BYTE_WAIT_RDY2:
			if (USBWireRdy == 1'b1)	
			begin
				NextState_prcTxB <= `SEND_BYTE_CHK_FIN;
				next_USBWireWEn <= 1'b1;
				next_USBWireData <= TXLineState;
				next_USBWireCtrl <= `DRIVE;
			end
		`SEND_BYTE_CHK_FIN:
		begin
			next_USBWireWEn <= 1'b0;
			if (i == 4'h8)	
				NextState_prcTxB <= `STOP_CHK;
			else
				NextState_prcTxB <= `SEND_BYTE_UPDATE_BYTE;
		end
		`STOP_SND_SE0_2:
		begin
			next_USBWireWEn <= 1'b0;
			if (USBWireRdy == 1'b1)	
			begin
				NextState_prcTxB <= `STOP_SND_J;
				next_USBWireWEn <= 1'b1;
				next_USBWireData <= `SE0;
				next_USBWireCtrl <= `DRIVE;
			end
		end
		`STOP_SND_SE0_1:
			if (USBWireRdy == 1'b1)	
			begin
				NextState_prcTxB <= `STOP_SND_SE0_2;
				next_USBWireWEn <= 1'b1;
				next_USBWireData <= `SE0;
				next_USBWireCtrl <= `DRIVE;
			end
		`STOP_CHK:
			if (TxByteCtrl == `DATA_STOP)	
				NextState_prcTxB <= `STOP_SND_SE0_1;
			else
				NextState_prcTxB <= `PTBY_WAIT_EN;
		`STOP_SND_J:
		begin
			next_USBWireWEn <= 1'b0;
			if (USBWireRdy == 1'b1)	
			begin
				NextState_prcTxB <= `STOP_SND_IDLE;
				next_USBWireWEn <= 1'b1;
				next_USBWireData <= JBit;
				next_USBWireCtrl <= `DRIVE;
			end
		end
		`STOP_SND_IDLE:
		begin
			next_USBWireWEn <= 1'b0;
			if (USBWireRdy == 1'b1)	
			begin
				NextState_prcTxB <= `STOP_FIN;
				next_USBWireWEn <= 1'b1;
				next_USBWireData <= JBit;
				next_USBWireCtrl <= `TRI_STATE;
			end
		end
		`STOP_FIN:
		begin
			next_USBWireWEn <= 1'b0;
			next_USBWireReq <= 1'b0;
			//release the wire
			NextState_prcTxB <= `PTBY_WAIT_EN;
		end
	endcase
end
 
//----------------------------------
// Current State Logic (sequential)
//----------------------------------
always @ (posedge clk)
begin : prcTxB_CurrentState
	if (rst)	
		CurrState_prcTxB <= `START_PTBY;
	else
		CurrState_prcTxB <= NextState_prcTxB;
end
 
//----------------------------------
// Registered outputs logic
//----------------------------------
always @ (posedge clk)
begin : prcTxB_RegOutput
	if (rst)	
	begin
		i <= 4'h0;
		TxByte <= 8'h00;
		TxByteCtrl <= 8'h00;
		TXLineState <= 2'b0;
		TXOneCount <= 4'h0;
		processTxByteRdy <= 1'b0;
		USBWireData <= 2'b00;
		USBWireCtrl <= `TRI_STATE;
		USBWireReq <= 1'b0;
		USBWireWEn <= 1'b0;
	end
	else 
	begin
		i <= next_i;
		TxByte <= next_TxByte;
		TxByteCtrl <= next_TxByteCtrl;
		TXLineState <= next_TXLineState;
		TXOneCount <= next_TXOneCount;
		processTxByteRdy <= next_processTxByteRdy;
		USBWireData <= next_USBWireData;
		USBWireCtrl <= next_USBWireCtrl;
		USBWireReq <= next_USBWireReq;
		USBWireWEn <= next_USBWireWEn;
	end
end
 
endmodule

Go to most recent revision | Compare with Previous | Blame | View Log

powered by: WebSVN 2.1.0

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