OpenCores
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
    from Rev 155 to Rev 156
    Reverse comparison

Rev 155 → Rev 156

/trunk/src/grpSd/unitSdWbSlave/src/WbTransaction.sv
15,6 → 15,9
rand WbAddr Addr;
rand WbData Data;
 
function void display();
$display("Transaction: %s, %s, %b, %b", Type.name(), Kind.name(), Addr, Data);
endfunction
endclass
 
class WbTransactionSequence;
26,17 → 29,24
transactions.size() == size;
 
foreach(transactions[i]) {
if (i > 0)
if (transactions[i-1].Type == WbTransaction::Burst)
if (i > 0) {
if (transactions[i].Type == WbTransaction::Burst)
transactions[i].Type == WbTransaction::Burst || WbTransaction::End;
}
}
 
if (transactions[size - 1].Type == WbTransaction::Burst)
transactions[size].Type == WbTransaction::End;
if (transactions[size - 2].Type == WbTransaction::Burst)
transactions[size - 1].Type == WbTransaction::End;
};
 
function void display();
foreach(transactions[i])
transactions[i].display();
endfunction
 
endclass
 
 
typedef mailbox #(WbTransaction) WbTransMb;
 
`endif
/trunk/src/grpSd/pkgSdWb/src/SdWb.sv
0,0 → 1,16
`ifndef SDWB_SV
`define SDWB_SV
 
`include "WbTransaction.sv";
 
const WbData cOperationRead = 'h00000001;
const WbData cOperationWrite = 'h00000010;
 
const WbAddr cOperationAddr = 'b000;
const WbAddr cStartAddrAddr = 'b001;
const WbAddr cEndAddrAddr = 'b010;
const WbAddr cReadDataAddr = 'b011;
const WbAddr cWriteDataAddr = 'b100;
 
`endif
 
/trunk/src/grpSd/unitSdVerificationTestbench/Files.tcl
30,7 → 30,7
set svunits {Sd SdCardModel
Sd SdVerificationTestbench}
 
set sysvlogparams [list +incdir+../../unitSdCardModel/src+../src+../../unitSdWbSlave/src+../../../grpVerification/unitLogger/src/+../../../grpSdVerification/unitSdCoreTransactionBFM/src+../../../grpSdVerification/unitSdCoreTransactionSeqGen/src+../../../grpSdVerification/unitSdCoreTransferFunction/src+../../../grpSdVerification/unitSdCoreChecker/src+../../../grpSdVerification/unitSdCoreTransaction/src]
set sysvlogparams [list +incdir+../../unitSdCardModel/src+../src+../../unitSdWbSlave/src+../../../grpVerification/unitLogger/src/+../../../grpSdVerification/unitSdCoreTransactionBFM/src+../../../grpSdVerification/unitSdCoreTransactionSeqGen/src+../../../grpSdVerification/unitSdCoreTransferFunction/src+../../../grpSdVerification/unitSdCoreChecker/src+../../../grpSdVerification/unitSdCoreTransaction/src+../../pkgSdWb/src/]
 
#set tb
set top Testbed
/trunk/src/grpSd/unitSdVerificationTestbench/src/SdVerificationTestbench.sv
24,12 → 24,17
initial begin
SdCardModel card;
Harness harness;
Logger log;
 
log = new();
card = new();
harness = new(SdBus, WbBus);
harness.Card = card;
 
harness.start();
#1ms;
 
log.terminate();
end
endprogram
 
/trunk/src/grpSdVerification/unitSdCoreTransaction/src/SdCoreTransaction.sv
1,7 → 1,7
`ifndef SDCORETRANSACTION_SV
`define SDCORETRANSACTION_SV
 
typedef bit[511:0] DataBlock;
typedef bit[0:511][7:0] DataBlock;
 
class SdCoreTransaction;
 
23,6 → 23,8
else {
data.size() == 0;
}
 
kind == readSingleBlock;
};
 
endclass
/trunk/src/grpSdVerification/unitSdCoreTransactionBFM/src/SdCoreTransactionBFM.sv
3,6 → 3,7
 
`include "SdCoreTransaction.sv";
`include "WbTransaction.sv";
`include "WbTransactionReadSingleBlock.sv";
 
class SdCoreTransactionBFM;
 
23,10 → 24,30
task run();
while (StopAfter != 0) begin
SdCoreTransaction trans;
WbTransactionSequence seq;
 
SdTransInMb.get(trans);
Log.note("TransBFM transaction received: TODO: split up and send");
 
case (trans.kind)
SdCoreTransaction::readSingleBlock:
begin
WbTransactionSequenceReadSingleBlock tmp = new(trans.startAddr, trans.endAddr);
seq = tmp;
end
default:
begin
string msg;
$swrite(msg, "Transaction kind %s not handled.", trans.kind.name());
Log.error(msg);
end
endcase
 
assert (seq.randomize()) else Log.error("Randomizing WbTransactionSequence seq failed.");
seq.display();
 
foreach(seq.transactions[i])
WbTransOutMb.put(seq.transactions[i]);
 
if (StopAfter > 0) StopAfter--;
end
endtask
/trunk/src/grpSdVerification/unitSdCoreTransactionBFM/src/WbTransactionReadSingleBlock.sv
0,0 → 1,51
`ifndef WBTRANSACTIONREADSINGLEBLOCK_SV
`define WBTRANSACTIONREADSINGLEBLOCK_SV
 
`include "WbTransaction.sv";
`include "SdWb.sv";
 
class WbTransactionSequenceReadSingleBlock extends WbTransactionSequence;
 
WbAddr StartAddr;
WbAddr EndAddr;
 
function new(WbAddr StartAddr, WbAddr EndAddr);
size = 1 + 1 + 1; // startaddr, endaddr, operation
transactions = new[size];
foreach(transactions[i])
transactions[i] = new();
 
this.StartAddr = StartAddr;
this.EndAddr = EndAddr;
endfunction
 
constraint ReadSingleBlock {
transactions[2].Addr == cOperationAddr;
transactions[2].Data == cOperationRead;
 
transactions[0].Addr == cStartAddrAddr || cEndAddrAddr;
if (transactions[0].Addr == cStartAddrAddr) {
transactions[1].Addr == cEndAddrAddr;
transactions[1].Data == EndAddr;
transactions[0].Data == StartAddr;
} else if (transactions[0].Addr == cEndAddrAddr) {
transactions[1].Addr == cStartAddrAddr;
transactions[0].Data == EndAddr;
transactions[1].Data == StartAddr;
}
 
foreach(transactions[i]) {
if (i inside {[0:2]}) {
transactions[i].Kind == WbTransaction::Write;
} else {
transactions[i].Kind == WbTransaction::Read;
}
}
};
 
endclass
 
 
`endif

powered by: WebSVN 2.1.0

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