Example #1
0
        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);
        }
Example #2
0
        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);
        }
Example #3
0
        // 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);
            }
        }