0hmX/mt53e1g16d1zw-footprint

This code defines the physical pin layout and 200-ball footprint of the Micron MT53E1G16D1ZW DDR4 SDRAM chip, including pad positions, signal assignments, and qualification of pin attributes for PCB integration.

Version
1.0.2
License
unset
Stars
0

dist/index.cjs

'use strict';

Object.defineProperty(exports, '__esModule', { value: true });

var jsxRuntime = require('react/jsx-runtime');
var react = require('react');

const MT53E1G16D1ZW_PART_NUMBER = "MT53E1G16D1ZW-046 WT:C";
const MT53E1G16D1ZW_DATASHEET_URL = "https://docs.rs-online.com/ad5d/A700000015750558.pdf";
const columns = [1, 2, 3, 4, 5, 8, 9, 10, 11, 12];
const rows = [
    "A", "B", "C", "D", "E", "F", "G", "H", "J", "K",
    "N", "P", "R", "T", "U", "V", "W", "Y", "AA", "AB",
];
// Micron z42n Rev. D, Figure 8. Values are ordered by columns 1-5, 8-12.
const signals = [
    ["DNU", "DNU", "VSS", "VDD2", "ZQ", "NC", "VDD2", "VSS", "DNU", "DNU"],
    ["DNU", "DQ0", "VDDQ", "DQ7", "VDDQ", "VDDQ", "DQ15", "VDDQ", "DQ8", "DNU"],
    ["VSS", "DQ1", "DMI0", "DQ6", "VSS", "VSS", "DQ14", "DMI1", "DQ9", "VSS"],
    ["VDDQ", "VSS", "DQS0_t", "VSS", "VDDQ", "VDDQ", "VSS", "DQS1_t", "VSS", "VDDQ"],
    ["VSS", "DQ2", "DQS0_c", "DQ5", "VSS", "VSS", "DQ13", "DQS1_c", "DQ10", "VSS"],
    ["VDD1", "DQ3", "VDDQ", "DQ4", "VDD2", "VDD2", "DQ12", "VDDQ", "DQ11", "VDD1"],
    ["VSS", "ODT_CA", "VSS", "VDD1", "VSS", "VSS", "VDD1", "VSS", "NC", "VSS"],
    ["VDD2", "CA0", "NC", "CS", "VDD2", "VDD2", "CA2", "CA3", "CA4", "VDD2"],
    ["VSS", "CA1", "VSS", "CKE", "NC", "CK_t", "CK_c", "VSS", "CA5", "VSS"],
    ["VDD2", "VSS", "VDD2", "VSS", "NC", "NC", "VSS", "VDD2", "VSS", "VDD2"],
    ["VDD2", "VSS", "VDD2", "VSS", "NC", "NC", "VSS", "VDD2", "VSS", "VDD2"],
    ["VSS", "NC", "VSS", "NC", "NC", "NC", "NC", "VSS", "NC", "VSS"],
    ["VDD2", "NC", "NC", "NC", "VDD2", "VDD2", "NC", "NC", "NC", "VDD2"],
    ["VSS", "NC", "VSS", "VDD1", "VSS", "VSS", "VDD1", "VSS", "RESET_n", "VSS"],
    ["VDD1", "NC", "VDDQ", "NC", "VDD2", "VDD2", "NC", "VDDQ", "NC", "VDD1"],
    ["VSS", "NC", "NC", "NC", "VSS", "VSS", "NC", "NC", "NC", "VSS"],
    ["VDDQ", "VSS", "NC", "VSS", "VDDQ", "VDDQ", "VSS", "NC", "VSS", "VDDQ"],
    ["VSS", "NC", "NC", "NC", "VSS", "VSS", "NC", "NC", "NC", "VSS"],
    ["DNU", "NC", "VDDQ", "NC", "VDDQ", "VDDQ", "NC", "VDDQ", "NC", "DNU"],
    ["DNU", "DNU", "VSS", "VDD2", "VSS", "VSS", "VDD2", "VSS", "DNU", "DNU"],
];
const ballMap = rows.flatMap((row, rowIndex) => columns.map((column, columnIndex) => ({
    ball: `${row}${column}`,
    signal: signals[rowIndex][columnIndex],
    x: (column - 6.5) * 0.8,
    // L and M are unpopulated physical rows, but retain their 0.65 mm spacing.
    y: (10.5 - (rowIndex < 10 ? rowIndex : rowIndex + 2)) * 0.65,
})));
const uniqueSignals = new Set(ballMap
    .map(({ signal }) => signal)
    .filter((signal) => !["NC", "DNU", "VSS", "VDD1", "VDD2", "VDDQ"].includes(signal)));
const pinLabels = Object.fromEntries(ballMap.map(({ ball, signal }, index) => [
    `pin${index + 1}`,
    uniqueSignals.has(signal)
        ? [ball, signal, `${signal}_${ball}`]
        : [ball, `${signal}_${ball}`],
]));
const pinAttributes = ballMap.reduce((attributes, { ball, signal }) => {
    if (signal === "DNU") {
        attributes[ball] = {
            doNotConnect: true,
            includeInBoardPinout: false,
        };
    }
    else if (signal === "NC") {
        attributes[ball] = { includeInBoardPinout: false };
    }
    else if (signal === "VSS") {
        attributes[ball] = {
            requiresGround: true,
            includeInBoardPinout: false,
        };
    }
    else if (signal.startsWith("VDD")) {
        attributes[ball] = {
            requiresPower: true,
            requiresVoltage: signal === "VDD1" ? "1.8V" : signal === "VDD2" ? "1.1V" : undefined,
            shouldHaveDecouplingCapacitor: true,
            includeInBoardPinout: false,
        };
    }
    return attributes;
}, {});
const makePads = () => ballMap.map(({ ball, x, y }, index) => (jsxRuntime.jsx(react.Fragment, { children: jsxRuntime.jsx("smtpad", { portHints: [`pin${index + 1}`, ball], pcbX: `${x}mm`, pcbY: `${y}mm`, radius: "0.2mm", shape: "circle" }) }, ball)));
const MT53E1G16D1ZW = (props) => (jsxRuntime.jsx("chip", { ...props, datasheetUrl: MT53E1G16D1ZW_DATASHEET_URL, manufacturerPartNumber: MT53E1G16D1ZW_PART_NUMBER, pinLabels: pinLabels, pinAttributes: pinAttributes, footprint: jsxRuntime.jsxs("footprint", { children: [makePads(), jsxRuntime.jsx("silkscreenpath", { route: [
                    { x: -5, y: -7.25 }, { x: 5, y: -7.25 },
                    { x: 5, y: 7.25 }, { x: -5, y: 7.25 }, { x: -5, y: -7.25 },
                ], strokeWidth: 0.15 }), jsxRuntime.jsx("silkscreencircle", { pcbX: "-4.65mm", pcbY: "6.9mm", radius: "0.18mm" })] }) }));

var index_circuit = () => (jsxRuntime.jsx("board", { width: "18mm", height: "22mm", routingDisabled: true, children: jsxRuntime.jsx(MT53E1G16D1ZW, { name: "U1" }) }));

exports.MT53E1G16D1ZW = MT53E1G16D1ZW;
exports.MT53E1G16D1ZW_DATASHEET_URL = MT53E1G16D1ZW_DATASHEET_URL;
exports.MT53E1G16D1ZW_PART_NUMBER = MT53E1G16D1ZW_PART_NUMBER;
exports.ballMap = ballMap;
exports.default = index_circuit;
exports.pinAttributes = pinAttributes;
exports.pinLabels = pinLabels;