URL
https://opencores.org/ocsvn/sdhc-sc-core/sdhc-sc-core/trunk
Subversion Repositories sdhc-sc-core
Compare Revisions
- This comparison shows the changes necessary to convert path
/sdhc-sc-core/trunk/src/grpSdVerification/unitSdCoreChecker
- from Rev 155 to Rev 158
- ↔ Reverse comparison
Rev 155 → Rev 158
/src/ExpectedResult.sv
1,7 → 1,13
`ifndef EXPECTEDRESULT_SV |
`define EXPECTEDRESULT_SV |
|
`include "RamAction.sv"; |
|
class ExpectedResult; |
|
RamAction RamActions[]; |
SdCoreTransaction trans; |
|
endclass |
|
typedef mailbox #(ExpectedResult) ExpectedResultMb; |
/src/SdCoreChecker.sv
4,6 → 4,7
`include "SdCoreTransaction.sv"; |
`include "RamAction.sv"; |
`include "ExpectedResult.sv"; |
`include "Logger.sv"; |
|
class SdCoreChecker; |
|
10,10 → 11,105
SdCoreTransSeqMb SdTransInMb; |
RamActionMb RamActionInMb; |
ExpectedResultMb ExpectedResultInMb; |
Logger Log = new(); |
|
local SdCoreTransaction trans; |
|
function void start(); |
covergroup SdCoreTransactions; |
coverpoint trans.kind { |
bins types[] = {SdCoreTransaction::readSingleBlock, |
SdCoreTransaction::writeSingleBlock, |
SdCoreTransaction::readMultipleBlock, |
SdCoreTransaction::writeMultipleBlocks, |
SdCoreTransaction::erase, |
SdCoreTransaction::readSdCardStatus}; |
bins transitions[] = (SdCoreTransaction::readSingleBlock, |
SdCoreTransaction::writeSingleBlock, |
SdCoreTransaction::readMultipleBlock, |
SdCoreTransaction::writeMultipleBlocks, |
SdCoreTransaction::erase, |
SdCoreTransaction::readSdCardStatus => |
SdCoreTransaction::readSingleBlock, |
SdCoreTransaction::writeSingleBlock, |
SdCoreTransaction::readMultipleBlock, |
SdCoreTransaction::writeMultipleBlocks, |
SdCoreTransaction::erase, |
SdCoreTransaction::readSdCardStatus); |
} |
|
singleblock: coverpoint trans.kind { |
bins types[] = {SdCoreTransaction::readSingleBlock, |
SdCoreTransaction::writeSingleBlock}; |
} |
|
multiblock: coverpoint trans.kind { |
bins types[] = {SdCoreTransaction::readMultipleBlock, |
SdCoreTransaction::writeMultipleBlocks, |
SdCoreTransaction::erase}; |
} |
|
startAddr: coverpoint trans.startAddr { |
bins legal = {[0:1000]}; |
illegal_bins ill = default; |
} |
|
endAddr: coverpoint trans.endAddr { |
bins legal = {[0:1000]}; |
illegal_bins ill = default; |
} |
|
addressrange: coverpoint (trans.endAddr - trans.startAddr) { |
bins valid = {[1:$]}; |
bins zero = {0}; |
bins invalid = {[$:-1]}; |
} |
|
cross singleblock, startAddr; |
cross multiblock, startAddr, endAddr; |
cross multiblock, addressrange; |
endgroup |
|
int StopAfter = -1; |
|
function new(); |
SdCoreTransactions = new(); |
endfunction |
|
task start(); |
fork |
run(); |
join_none |
endtask |
|
task run(); |
while (StopAfter != 0) begin |
ExpectedResult res; |
RamAction ram; |
|
ExpectedResultInMb.get(res); |
SdTransInMb.get(trans); |
|
//if (res.RamActions.size() > 0) RamActionInMb.get(ram); |
|
Log.warning("SdCoreChecker: RamActions not handled"); |
|
// update functional coverage |
SdCoreTransactions.sample(); |
|
if (res.trans.compare(trans) == 1) begin |
Log.note("Checker: Transaction successful"); |
end |
else begin |
string msg; |
$swrite(msg, "Actual: %s, Expected: %s", trans.toString(), res.trans.toString()); |
Log.error(msg); |
end |
|
if (StopAfter > 0) StopAfter--; |
end |
|
endtask |
|
endclass |
|
`endif |