|
|
|
|
@@ -35,7 +35,7 @@
|
|
|
|
|
|
|
|
|
|
#include "DDR3TimeDependencies.h"
|
|
|
|
|
|
|
|
|
|
DDR3TimeDependencies::DDR3TimeDependencies(const QJsonObject& memspec, const uint clk) : DRAMTimeDependenciesIF(memspec, clk) {
|
|
|
|
|
DDR3TimeDependencies::DDR3TimeDependencies(const QJsonObject& memspec, const uint tCK) : DRAMTimeDependenciesIF(memspec, tCK) {
|
|
|
|
|
mInitializeValues();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@@ -44,43 +44,43 @@ void DDR3TimeDependencies::mInitializeValues() {
|
|
|
|
|
dataRate = mMemspecJson["memarchitecturespec"].toObject()["dataRate"].toInt();
|
|
|
|
|
|
|
|
|
|
nActivateWindow = 4;
|
|
|
|
|
tRP = clk * mMemspecJson["memtimingspec"].toObject()["RP"].toInt();
|
|
|
|
|
tRAS = clk * mMemspecJson["memtimingspec"].toObject()["RAS"].toInt();
|
|
|
|
|
tRC = clk * mMemspecJson["memtimingspec"].toObject()["RC"].toInt();
|
|
|
|
|
tRTP = clk * mMemspecJson["memtimingspec"].toObject()["RTP"].toInt();
|
|
|
|
|
tRRD = clk * mMemspecJson["memtimingspec"].toObject()["RRD"].toInt();
|
|
|
|
|
tCCD = clk * mMemspecJson["memtimingspec"].toObject()["CCD"].toInt();
|
|
|
|
|
tRCD = clk * mMemspecJson["memtimingspec"].toObject()["RCD"].toInt();
|
|
|
|
|
tNAW = clk * mMemspecJson["memtimingspec"].toObject()["FAW"].toInt();
|
|
|
|
|
tRL = clk * mMemspecJson["memtimingspec"].toObject()["RL"].toInt();
|
|
|
|
|
tWL = clk * mMemspecJson["memtimingspec"].toObject()["WL"].toInt();
|
|
|
|
|
tWR = clk * mMemspecJson["memtimingspec"].toObject()["WR"].toInt();
|
|
|
|
|
tWTR = clk * mMemspecJson["memtimingspec"].toObject()["WTR"].toInt();
|
|
|
|
|
tCKESR = clk * mMemspecJson["memtimingspec"].toObject()["CKESR"].toInt();
|
|
|
|
|
tCKE = clk * mMemspecJson["memtimingspec"].toObject()["CKE"].toInt();
|
|
|
|
|
tXP = clk * mMemspecJson["memtimingspec"].toObject()["XP"].toInt();
|
|
|
|
|
tXPDLL = clk * mMemspecJson["memtimingspec"].toObject()["XPDLL"].toInt();
|
|
|
|
|
tXS = clk * mMemspecJson["memtimingspec"].toObject()["XS"].toInt();
|
|
|
|
|
tXSDLL = clk * mMemspecJson["memtimingspec"].toObject()["XSDLL"].toInt();
|
|
|
|
|
tAL = clk * mMemspecJson["memtimingspec"].toObject()["AL"].toInt();
|
|
|
|
|
tRFC = clk * mMemspecJson["memtimingspec"].toObject()["RFC"].toInt();
|
|
|
|
|
tREFI = clk * mMemspecJson["memtimingspec"].toObject()["REFI"].toInt();
|
|
|
|
|
tRTRS = clk * mMemspecJson["memtimingspec"].toObject()["RTRS"].toInt();
|
|
|
|
|
tACTPDEN = clk * mMemspecJson["memtimingspec"].toObject()["ACTPDEN"].toInt();
|
|
|
|
|
tPRPDEN = clk * mMemspecJson["memtimingspec"].toObject()["PRPDEN"].toInt();
|
|
|
|
|
tREFPDEN = clk * mMemspecJson["memtimingspec"].toObject()["REFPDEN"].toInt();
|
|
|
|
|
tCKE = clk * mMemspecJson["memtimingspec"].toObject()["CKE"].toInt();
|
|
|
|
|
tRP = tCK * mMemspecJson["memtimingspec"].toObject()["RP"].toInt();
|
|
|
|
|
tRAS = tCK * mMemspecJson["memtimingspec"].toObject()["RAS"].toInt();
|
|
|
|
|
tRC = tCK * mMemspecJson["memtimingspec"].toObject()["RC"].toInt();
|
|
|
|
|
tRTP = tCK * mMemspecJson["memtimingspec"].toObject()["RTP"].toInt();
|
|
|
|
|
tRRD = tCK * mMemspecJson["memtimingspec"].toObject()["RRD"].toInt();
|
|
|
|
|
tCCD = tCK * mMemspecJson["memtimingspec"].toObject()["CCD"].toInt();
|
|
|
|
|
tRCD = tCK * mMemspecJson["memtimingspec"].toObject()["RCD"].toInt();
|
|
|
|
|
tNAW = tCK * mMemspecJson["memtimingspec"].toObject()["FAW"].toInt();
|
|
|
|
|
tRL = tCK * mMemspecJson["memtimingspec"].toObject()["RL"].toInt();
|
|
|
|
|
tWL = tCK * mMemspecJson["memtimingspec"].toObject()["WL"].toInt();
|
|
|
|
|
tWR = tCK * mMemspecJson["memtimingspec"].toObject()["WR"].toInt();
|
|
|
|
|
tWTR = tCK * mMemspecJson["memtimingspec"].toObject()["WTR"].toInt();
|
|
|
|
|
tCKESR = tCK * mMemspecJson["memtimingspec"].toObject()["CKESR"].toInt();
|
|
|
|
|
tCKE = tCK * mMemspecJson["memtimingspec"].toObject()["CKE"].toInt();
|
|
|
|
|
tXP = tCK * mMemspecJson["memtimingspec"].toObject()["XP"].toInt();
|
|
|
|
|
tXPDLL = tCK * mMemspecJson["memtimingspec"].toObject()["XPDLL"].toInt();
|
|
|
|
|
tXS = tCK * mMemspecJson["memtimingspec"].toObject()["XS"].toInt();
|
|
|
|
|
tXSDLL = tCK * mMemspecJson["memtimingspec"].toObject()["XSDLL"].toInt();
|
|
|
|
|
tAL = tCK * mMemspecJson["memtimingspec"].toObject()["AL"].toInt();
|
|
|
|
|
tRFC = tCK * mMemspecJson["memtimingspec"].toObject()["RFC"].toInt();
|
|
|
|
|
tREFI = tCK * mMemspecJson["memtimingspec"].toObject()["REFI"].toInt();
|
|
|
|
|
tRTRS = tCK * mMemspecJson["memtimingspec"].toObject()["RTRS"].toInt();
|
|
|
|
|
tACTPDEN = tCK * mMemspecJson["memtimingspec"].toObject()["ACTPDEN"].toInt();
|
|
|
|
|
tPRPDEN = tCK * mMemspecJson["memtimingspec"].toObject()["PRPDEN"].toInt();
|
|
|
|
|
tREFPDEN = tCK * mMemspecJson["memtimingspec"].toObject()["REFPDEN"].toInt();
|
|
|
|
|
tCKE = tCK * mMemspecJson["memtimingspec"].toObject()["CKE"].toInt();
|
|
|
|
|
|
|
|
|
|
tPD = tCKE;
|
|
|
|
|
tBURST = (uint) ((burstLength / (float) dataRate) * clk);
|
|
|
|
|
tRDWR = tRL + tBURST + 2 * clk - tWL;
|
|
|
|
|
tBURST = (uint) ((burstLength / (float) dataRate) * tCK);
|
|
|
|
|
tRDWR = tRL + tBURST + 2 * tCK - tWL;
|
|
|
|
|
tRDWR_R = tRL + tBURST + tRTRS - tWL;
|
|
|
|
|
tWRRD = tWL + tBURST + tWTR;
|
|
|
|
|
tWRRD_R = tWL + tBURST + tRTRS - tRL;
|
|
|
|
|
tWRPRE = tWL + tBURST + tWR;
|
|
|
|
|
tRDPDEN = tRL + tBURST + clk;
|
|
|
|
|
tRDPDEN = tRL + tBURST + tCK;
|
|
|
|
|
tWRPDEN = tWL + tBURST + tWR;
|
|
|
|
|
tWRAPDEN = tWL + tBURST + tWR + clk;
|
|
|
|
|
tWRAPDEN = tWL + tBURST + tWR + tCK;
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|