Line 40... |
Line 40... |
//// Public License along with this source; if not, download it ////
|
//// Public License along with this source; if not, download it ////
|
//// from http://www.opencores.org/lgpl.shtml ////
|
//// from http://www.opencores.org/lgpl.shtml ////
|
//// ////
|
//// ////
|
//////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////
|
//
|
//
|
// $Id: hctxportarbiter.v,v 1.2 2004-12-18 14:36:09 sfielding Exp $
|
|
//
|
|
// CVS Revision History
|
|
//
|
|
// $Log: not supported by cvs2svn $
|
|
//
|
|
`timescale 1ns / 1ps
|
`timescale 1ns / 1ps
|
|
|
module HCTxPortArbiter (clk, directCntlCntl, directCntlData, directCntlGnt, directCntlReq, directCntlWEn, HCTxPortCntl, HCTxPortData, HCTxPortWEnable, rst, sendPacketCntl, sendPacketData, sendPacketGnt, sendPacketReq, sendPacketWEn, SOFCntlCntl, SOFCntlData, SOFCntlGnt, SOFCntlReq, SOFCntlWEn);
|
module HCTxPortArbiter (clk, directCntlCntl, directCntlData, directCntlGnt, directCntlReq, directCntlWEn, HCTxPortCntl, HCTxPortData, HCTxPortWEnable, rst, sendPacketCntl, sendPacketData, sendPacketGnt, sendPacketReq, sendPacketWEn, SOFCntlCntl, SOFCntlData, SOFCntlGnt, SOFCntlReq, SOFCntlWEn);
|
input clk;
|
input clk;
|
input [7:0]directCntlCntl;
|
input [7:0]directCntlCntl;
|
Line 150... |
Line 144... |
// Machine: HCTxArb
|
// Machine: HCTxArb
|
|
|
// NextState logic (combinatorial)
|
// NextState logic (combinatorial)
|
always @ (SOFCntlReq or sendPacketReq or directCntlReq or SOFCntlGnt or sendPacketGnt or directCntlGnt or muxCntl or CurrState_HCTxArb)
|
always @ (SOFCntlReq or sendPacketReq or directCntlReq or SOFCntlGnt or sendPacketGnt or directCntlGnt or muxCntl or CurrState_HCTxArb)
|
begin
|
begin
|
NextState_HCTxArb = CurrState_HCTxArb;
|
NextState_HCTxArb <= CurrState_HCTxArb;
|
// Set default values for outputs and signals
|
// Set default values for outputs and signals
|
next_SOFCntlGnt <= SOFCntlGnt;
|
next_SOFCntlGnt <= SOFCntlGnt;
|
next_sendPacketGnt <= sendPacketGnt;
|
next_sendPacketGnt <= sendPacketGnt;
|
next_directCntlGnt <= directCntlGnt;
|
next_directCntlGnt <= directCntlGnt;
|
next_muxCntl <= muxCntl;
|
next_muxCntl <= muxCntl;
|
case (CurrState_HCTxArb) // synopsys parallel_case full_case
|
case (CurrState_HCTxArb) // synopsys parallel_case full_case
|
`START_HARB:
|
`START_HARB:
|
begin
|
begin
|
NextState_HCTxArb = `WAIT_REQ;
|
NextState_HCTxArb <= `WAIT_REQ;
|
end
|
end
|
`WAIT_REQ:
|
`WAIT_REQ:
|
begin
|
begin
|
if (SOFCntlReq == 1'b1)
|
if (SOFCntlReq == 1'b1)
|
begin
|
begin
|
NextState_HCTxArb = `SEND_SOF;
|
NextState_HCTxArb <= `SEND_SOF;
|
next_SOFCntlGnt <= 1'b1;
|
next_SOFCntlGnt <= 1'b1;
|
next_muxCntl <= `SOF_CTRL_MUX;
|
next_muxCntl <= `SOF_CTRL_MUX;
|
end
|
end
|
else if (sendPacketReq == 1'b1)
|
else if (sendPacketReq == 1'b1)
|
begin
|
begin
|
NextState_HCTxArb = `SEND_PACKET;
|
NextState_HCTxArb <= `SEND_PACKET;
|
next_sendPacketGnt <= 1'b1;
|
next_sendPacketGnt <= 1'b1;
|
next_muxCntl <= `SEND_PACKET_MUX;
|
next_muxCntl <= `SEND_PACKET_MUX;
|
end
|
end
|
else if (directCntlReq == 1'b1)
|
else if (directCntlReq == 1'b1)
|
begin
|
begin
|
NextState_HCTxArb = `DIRECT_CONTROL;
|
NextState_HCTxArb <= `DIRECT_CONTROL;
|
next_directCntlGnt <= 1'b1;
|
next_directCntlGnt <= 1'b1;
|
next_muxCntl <= `DIRECT_CTRL_MUX;
|
next_muxCntl <= `DIRECT_CTRL_MUX;
|
end
|
end
|
end
|
end
|
`SEND_SOF:
|
`SEND_SOF:
|
begin
|
begin
|
if (SOFCntlReq == 1'b0)
|
if (SOFCntlReq == 1'b0)
|
begin
|
begin
|
NextState_HCTxArb = `WAIT_REQ;
|
NextState_HCTxArb <= `WAIT_REQ;
|
next_SOFCntlGnt <= 1'b0;
|
next_SOFCntlGnt <= 1'b0;
|
end
|
end
|
end
|
end
|
`SEND_PACKET:
|
`SEND_PACKET:
|
begin
|
begin
|
if (sendPacketReq == 1'b0)
|
if (sendPacketReq == 1'b0)
|
begin
|
begin
|
NextState_HCTxArb = `WAIT_REQ;
|
NextState_HCTxArb <= `WAIT_REQ;
|
next_sendPacketGnt <= 1'b0;
|
next_sendPacketGnt <= 1'b0;
|
end
|
end
|
end
|
end
|
`DIRECT_CONTROL:
|
`DIRECT_CONTROL:
|
begin
|
begin
|
if (directCntlReq == 1'b0)
|
if (directCntlReq == 1'b0)
|
begin
|
begin
|
NextState_HCTxArb = `WAIT_REQ;
|
NextState_HCTxArb <= `WAIT_REQ;
|
next_directCntlGnt <= 1'b0;
|
next_directCntlGnt <= 1'b0;
|
end
|
end
|
end
|
end
|
endcase
|
endcase
|
end
|
end
|
|
|
// Current State Logic (sequential)
|
// Current State Logic (sequential)
|
always @ (posedge clk)
|
always @ (posedge clk)
|
begin
|
begin
|
if (rst)
|
if (rst)
|
CurrState_HCTxArb = `START_HARB;
|
CurrState_HCTxArb <= `START_HARB;
|
else
|
else
|
CurrState_HCTxArb = NextState_HCTxArb;
|
CurrState_HCTxArb <= NextState_HCTxArb;
|
end
|
end
|
|
|
// Registered outputs logic
|
// Registered outputs logic
|
always @ (posedge clk)
|
always @ (posedge clk)
|
begin
|
begin
|
if (rst)
|
if (rst)
|
begin
|
begin
|
SOFCntlGnt = 1'b0;
|
SOFCntlGnt <= 1'b0;
|
sendPacketGnt = 1'b0;
|
sendPacketGnt <= 1'b0;
|
directCntlGnt = 1'b0;
|
directCntlGnt <= 1'b0;
|
muxCntl = 2'b00;
|
muxCntl <= 2'b00;
|
end
|
end
|
else
|
else
|
begin
|
begin
|
SOFCntlGnt = next_SOFCntlGnt;
|
SOFCntlGnt <= next_SOFCntlGnt;
|
sendPacketGnt = next_sendPacketGnt;
|
sendPacketGnt <= next_sendPacketGnt;
|
directCntlGnt = next_directCntlGnt;
|
directCntlGnt <= next_directCntlGnt;
|
muxCntl = next_muxCntl;
|
muxCntl <= next_muxCntl;
|
end
|
end
|
end
|
end
|
|
|
endmodule
|
endmodule
|
No newline at end of file
|
No newline at end of file
|