public DRAMTiming(DDR3DRAM.Timing tc, uint cid, uint[] fanOutArray) { this.tc = tc; init_service_array(); init_constrs_array(); init_sibling_constrs_array(); Channel = new TimingNode(tc, 0, cid, fanOutArray, ConstrsArray, SiblingConstrsArray); }
public DRAMTiming(DDR3DRAM.Timing tc, uint cid, uint[] fanOutArray, DRAMTiming fastTiming) { this.tc = tc; init_service_array(); init_constrs_array(); init_sibling_constrs_array(); // Heterogeneous DRAM: VarIabLe LAtency DRAM (VILLA). Add a fast subarray in every bank. // ChargeCache. Provide fast timing parameters to be used on ChargeCache hit. Channel = new TimingNode(tc, 0, cid, fanOutArray, ConstrsArray, SiblingConstrsArray, fastTiming.ConstrsArray, fastTiming.SiblingConstrsArray); }
// Timing node with two sets of timing constraints public TimingNode(DDR3DRAM.Timing tc, int level, uint id, uint[] fanOutArray, uint[][,] constrsArray, uint[][,] siblingConstrsArray, uint[][,] fastConstrsArray, uint[][,] fastSiblingConstrsArray) { this.tc = tc; this.level = (Level)level; this.id = id; // assign timing constraints Constrs = constrsArray[level]; SiblingConstrs = siblingConstrsArray[level]; FastConstrs = fastConstrsArray[level]; FastSiblingConstrs = fastSiblingConstrsArray[level]; // initialize timestamps Next = new long[(int)CmdType.MAX]; for (int i = 0; i < Next.Length; i++) { Next[i] = -1; } Prev = new long[(int)CmdType.MAX]; for (int i = 0; i < Prev.Length; i++) { Prev[i] = -1; } if (this.level == Level.RANK) { NextFaw = -1; PrevFaw = new Queue <long>(4); PrevFaw.Enqueue(-1); PrevFaw.Enqueue(-1); PrevFaw.Enqueue(-1); PrevFaw.Enqueue(-1); } // initialize children if (level + 1 == (int)Level.MAX) { Children = null; return; } Children = new TimingNode[fanOutArray[level + 1]]; for (uint i = 0; i < Children.Length; i++) { Children[i] = new TimingNode(tc, level + 1, i, fanOutArray, constrsArray, siblingConstrsArray, fastConstrsArray, fastSiblingConstrsArray); } }