|
|
//wire txRun,txPending, rxRun, rxStartBit, isTx, overrunErrorFlag, frameErrorFlag, bufferFull;
|
//wire txRun,txPending, rxRun, rxStartBit, isTx, overrunErrorFlag, frameErrorFlag, bufferFull;
|
//assign {txRun, txPending, rxRun, rxStartBit, isTx, overrunErrorFlag, frameErrorFlag, bufferFull} = COM_statusOut;
|
//assign {txRun, txPending, rxRun, rxStartBit, isTx, overrunErrorFlag, frameErrorFlag, bufferFull} = COM_statusOut;
|
|
|
|
|
task privateTaskReceiveByteCore;
|
task privateTaskReceiveByteCore;
|
begin
|
begin
|
wait(txPending==1'b0);//wait start of last tx if any
|
wait(txPending==1'b0);//wait start of last tx if any
|
wait(txRun==1'b0);//wait end of previous transmission if any
|
wait(txRun==1'b0);//wait end of previous transmission if any
|
wait(bufferFull==1'b1);//wait reception of a byte
|
wait(bufferFull==1'b1);//wait reception of a byte
|
@(posedge COM_clk);
|
@(posedge COM_clk);
|
nCsDataOut=0;
|
nCsDataOut=0;
|
@(posedge COM_clk);
|
@(posedge COM_clk);
|
nCsDataOut=1;
|
nCsDataOut=1;
|
end
|
end
|
endtask
|
endtask
|
task receiveByte;
|
task receiveByte;
|
output reg [7:0] rxData;
|
output reg [7:0] rxData;
|
begin
|
begin
|
privateTaskReceiveByteCore;
|
privateTaskReceiveByteCore;
|
rxData=dataOut;
|
rxData=dataOut;
|
@(posedge COM_clk);
|
@(posedge COM_clk);
|
end
|
end
|
endtask
|
endtask
|
task receiveAndCheckByte;
|
task receiveAndCheckByte;
|
input [7:0] data;
|
input [7:0] data;
|
begin
|
begin
|
privateTaskReceiveByteCore;
|
privateTaskReceiveByteCore;
|
if(data!=dataOut) begin
|
if(data!=dataOut) begin
|
COM_errorCnt=COM_errorCnt+1;
|
COM_errorCnt=COM_errorCnt+1;
|
$display("ERROR %d: Received %x instead of %x",COM_errorCnt, dataOut, data);
|
$display("ERROR %d: Received %x instead of %x",COM_errorCnt, dataOut, data);
|
end
|
end
|
@(posedge COM_clk);
|
@(posedge COM_clk);
|
end
|
end
|
endtask
|
endtask
|
|
|
//Higher level tasks
|
//Higher level tasks
|
task receiveAndCheckHexBytes;
|
task receiveAndCheckHexBytes;
|
input [16*257:0] bytesString;
|
input [16*257:0] bytesString;
|
integer i;
|
integer i;
|
reg [15:0] byteInHex;
|
reg [15:0] byteInHex;
|
reg [7:0] byteToCheck;
|
reg [7:0] byteToCheck;
|
begin
|
begin
|
for(i=16*256;i>=0;i=i-16) begin
|
for(i=16*256;i>=0;i=i-16) begin
|
byteInHex=bytesString[i+:16];
|
byteInHex=bytesString[i+:16];
|
if(16'h0!=byteInHex) begin
|
if(16'h0!=byteInHex) begin
|
byteToCheck=hexString2Byte(byteInHex);
|
byteToCheck=hexString2Byte(byteInHex);
|
receiveAndCheckByte(byteToCheck);
|
receiveAndCheckByte(byteToCheck);
|
end
|
end
|
end
|
end
|
end
|
end
|
|
|