Descripción de la SDRAM DDRn

Así que básicamente estoy tratando de comprender/confirmar mi comprensión de SDRAM y DDR. Entonces, básicamente, entiendo que habrá algunos chips, cada uno con hasta 8 bancos (¿como 8 chips internamente?). Para cada banco hay tantas filas, que para cada fila hay una columna o básicamente como una cuadrícula o una matriz bidimensional que especifica un bit.

Pero entiendo que un DIMM y la mayoría de los buses del controlador de memoria son de 64 bits. Entonces, ¿cómo obtengo una conexión de los 64 (128 porque son pares diferenciales) a los 8 o más chips/módulos?

Sé que esta es una pregunta un poco confusa, es posible que no sepa lo suficiente como para definir una pregunta más clara.

PREGUNTA ADICIONAL FUERA DEL TEMA: Además, si alguien sabe, ¿cómo se accede exactamente a esta memoria desde Intel CPU? ¿El controlador de memoria (conjunto de registros) está configurado con los tiempos y esa memoria asignada al espacio de direcciones de la CPU para que un operando de dirección de memoria se traduzca automáticamente en bancos, filas y columnas, todos opacos para el código de la CPU?

Respuestas (2)

Los DIMM tienen 64 líneas de datos de un solo extremo y se dividirán entre los chips, por ejemplo, 8 chips con 8 líneas de datos cada uno, o 16 chips con 4 líneas de datos cada uno, o quizás en un módulo pequeño podría tener 4 chips con 16 líneas. líneas de datos cada uno. Los módulos de súper alta densidad pueden incluso tener 32 chips con 2 líneas de datos cada uno. Cada línea de datos se conectará a solo uno de los chips de memoria. Las líneas de dirección, control y reloj se conectarán en paralelo a todos los chips del módulo. Algunos módulos incluso tendrán dos rangos de chips que están conectados en paralelo a las líneas de datos, solo se puede acceder a uno de ellos en un momento dado.

Gracias. Ahora, supongo que no sabe nada sobre la pregunta fuera de tema relacionada con la inicialización del controlador de memoria Intel y cómo se asigna DRAM o dónde debería preguntar eso.
Eche un vistazo a la hoja de datos del controlador de memoria para conocer los detalles sucios. Por ejemplo, Google mostró este controlador de la era Pentium 4: intel.com/Assets/PDF/datasheet/306828.pdf . Los más nuevos probablemente sean significativamente más complejos, pero deberían tener muchas de las mismas características. La hoja de datos parece indicar que es responsabilidad del BIOS leer las EEPROM SPD en los módulos a través de I2C y configurar los registros de configuración del controlador de memoria en consecuencia.

Así que busque DRAM en wikipedia. El concepto proviene directamente de la memoria central que lo precedió (búsquelo también). Tenías núcleos de perlas de ferrita que estaban dispuestos con filas y columnas de alambre y una línea de detección. Podría energizar un solo núcleo usando una fila y columna específicas y usando la regla de la mano derecha causar una carga magnética en una dirección u otra. Luego, más tarde, al estimularlo nuevamente, podría hacer que esa carga se descargue en la línea de detección.

DRAM, "simplemente" usaron las características de capacitancia de un FET (observe cómo un símbolo FET tiene una tapa en el medio) e hicieron algo parecido. Piense en la tapa como pequeñas baterías recargables. Puede tenerlos vacíos para un estado y cargados para el otro (digamos cero y uno), pero debe seguir volviendo y cargando los que deben permanecer en ese estado antes de que se agoten. Por lo tanto, Dram necesita ser renovado.

SRAM es la retroalimentación clásica en un flip flop de puerta nand. dos transistores por puerta, creo que necesita cuatro transistores para un bit sram, donde solo necesita uno para DRAM. Sram no necesita ser actualizado, simplemente no lo apague (la memoria central podría apagarla, pero al leer un poco perdió el estado del bit, por lo que tuvo que volver a escribir después de leer).

De ahí es de donde provienen las filas y columnas, y aún las necesita en ddr.

DDR (velocidad de datos dual) simplemente significa que están usando ambas mitades de un reloj, es por eso que lo que uno llamaría 800Mhz dram usa un reloj de 400Mhz. Pueden mover datos en cada medio reloj. (QDR utilizado en SRAM, pueden mover datos en cada medio reloj y tener un bus de lectura y escritura, por lo que pueden leer y escribir al mismo tiempo en medio reloj, por lo que la velocidad de datos es cuádruple).

Sí, absolutamente tiene un controlador si usa DDR, puede hacerlo usted mismo o simplemente comprar uno (el ip). Entonces, su computadora Intel definitivamente tiene uno, sin razón alguna para que cada generación (cada año o dos) de x86 use algo remotamente igual que la generación anterior.

Busque detección de presencia en serie en wikipedia. DDR necesita ser entrenado/ajustado y se utilizan módulos extraíbles (DIMM), lo que significa que no puede ajustar una placa y luego usar esos valores para siempre. Debe despertarse y no saber qué hay allí, por lo que cada dimm tiene una pequeña rom i2c (flash) que se lee y contiene los parámetros necesarios para configurar el controlador. Entonces, hay un estándar JEDEC que se usa para esto.

Incluso los programadores muy experimentados pueden tener problemas con la DRAM, crear un nuevo diseño de placa puede llevar literalmente meses con todo el personal experimentado trabajando en conjunto (chip, placa, software). Desafortunadamente para su placa base Intel, tradicionalmente, el BIOS se contrata y es una fuente muy cerrada, por lo que puede encontrar los documentos de Intel en el controlador, pero es posible que nunca descubra cómo hacer que DDR funcione. Ahora hay algunos movimientos en la dirección de abrir eso, pero no he investigado eso en mucho tiempo. tal vez ya sucedió, pero si está comprando una placa base, simplemente llame a uno de la lista muy corta de proveedores y pídales que hagan su bios y/o código bmc. Si no es x86, entonces es un poco más fácil y el proveedor del chip probablemente tenga un BSP con lo que necesita.

Mire a los principales proveedores de chips (micron, samsung, etc.), tome los dimms que tiene y encuentre las marcas y escriba algunos de los números (algunos son solo códigos de lote, otros lo dirigirán a las hojas de datos). Al principio de una nueva generación, las partes suelen tener 8 bits de ancho y obtienes 8 o 9 por dimm (con o sin ecc 64 o 72 bits). Como se mencionó, eventualmente o de inmediato ofrecen 16 bits de ancho y 32 (aunque estos no tienen sentido para dispositivos/soluciones habilitados para ECC). Y como se mencionó, internamente pueden ser varias configuraciones. El controlador de dram realmente no sabe ni le importa, mire la información SPD (detección de presencia en serie), se preocupa principalmente por el número total de bits, los bits de dirección de fila, los bits de dirección de columna y los bancos y rangos. La terminología y el parámetro de tiempo (nombres) se utilizan en toda la industria, los controladores usan algunos de estos parámetros directamente y se requieren algunas matemáticas para otros. Algunos controladores hacen gran parte del ajuste en la lógica, otros tienen que controlar el software. Debido a que la industria se aleja de los atenuadores extraíbles, todo se basa en la sintonización cada vez que se enciende (al igual que pci), las cosas que normalmente se sueldan pero son de alta velocidad (interfaces de red) no están diseñadas desde el principio para ser sintonizadas cada vez, ajusta cada producto si es necesario y simplemente codifica esos en el init.

Por lo tanto, es posible que encuentre algunos ejemplos que simplemente ejecuten este código y funcionen, pero espero que no entren en esto pensando que van a introducir algunos registros en un controlador DDR y que la memoria funcione.

Con la computadora Intel y básicamente cualquier otra computadora, tiene la CPU que tiene un bus, el otro extremo de ese bus tiene un controlador de bus que clasifica los tipos de transacciones y los envía a los lugares correctos según la dirección o el tipo o ambos. Luego, una capa o dos o diez transacciones de memoria posteriores golpean el controlador dram, idealmente tiene un caché frente a eso no solo porque dram es realmente lento, sino que también quiere que el 100% de las transacciones sean anchos de bus en tamaño, de lo contrario tiene que diseñar eso en el controlador de drama. Si tiene un caché, el lado de la CPU del caché puede hacer accesos direccionables por bytes hasta lo que sea que pueda hacer esa CPU, por transacción. El caché maneja esos, en el lado de la dram, el caché solo habla en líneas de caché que son múltiplos enteros del ancho de la memoria o al menos el ancho del bus de datos de los controladores de dram. Y luego el dram solo tiene que lidiar con transacciones del tamaño del ancho del bus. Entonces, incluso si tiene 9 chips de 8 bits de ancho, se administra en transacciones de 72 bits de ancho en el lado DDR.

Los diseños de Intel más antiguos requerían múltiples chips para todo esto (cpu, chips de E/S/memoria, controladores pcie y puentes, etc.) el paquete o un troquel pero están todos bajo una tapa). Las cosas que se inclinan hacia el sistema en un chip desde el primer día, como los diseños basados ​​en ARM, en su mayoría han estado en la matriz/paquete todo el tiempo. Pero todos funcionan igual si usan memorias DDRx a cierto nivel.

Intel fue golpeado por los fanáticos de Motorola en los primeros días debido a su arquitectura segmentada. Lo cual no fue una mala idea y todavía no lo es, pero desde entonces realmente he intentado la ilusión de un espacio de memoria plano, por supuesto que no es cierto en Intel, Motorola ni Arm, etc. PCIe está mapeado "en" el espacio de memoria plano de tal manera que el espacio de direcciones pcie y el espacio de direcciones x86 usan la misma dirección, pero son dos espacios de direcciones separados y, lo que es peor, las barras pcie solían tener que caber en un giga (en los días de 32 bits) y por compatibilidad con versiones anteriores, unos 64 los bits todavía tienen ese límite, otros tienen una ventana de 2 gigas, por lo que todas sus tarjetas deben caber en esa ventana, por lo que, naturalmente, su memoria de video no tiene ninguna forma o forma "plana", tiene una ventana a través de la barra pcie para ver una fracción de ese espacio. La uniformidad entre el espacio de direcciones de la CPU Intel y el espacio de direcciones del bus pcie se debe a que querían hacerlo de esa manera, el BIOS decide todas estas cosas y las configura. Otros sistemas pueden hacer eso o no, dependiendo de cómo quieran hacerlo, el espacio de direcciones pcie puede estar completamente separado de la cpus, no tienen que coincidir. esto interfiere con el espacio de "memoria" en un x86, es por eso que algunas computadoras más antiguas estaban limitadas a 3 GB en una máquina de 32 bits, a pesar de que tenía que comprar 4 gigas porque lo obligaban a comprar pares y tenía que comprar 2 2 GB pares (el emparejamiento no es un requisito de DDR, solo un efecto secundario en parte de los diseñadores o programadores perezosos, forzarlos a todos a coincidir en lugar de tener que lidiar con varios tiempos, múltiples controladores de memoria, uno para cada ranura),

No hay ninguna razón para tratar de conectar filas y columnas a la dirección, lo son, pero el controlador de dram se preocupa por eso, el espacio de direcciones de dram (que puede estar separado del espacio de direcciones de la CPU, puede tener un desplazamiento, por ejemplo, no hay razón por la cual tienen que alinearse perfectamente) en lo que respecta a la CPU, es solo este espacio plano de cierto tamaño. a la cpu ni siquiera le importa la velocidad, realiza una transacción y la transacción se completa cada vez que se completa, la cpu no sabe ni necesita saber si hay un caché o no en el medio, ciertamente no le importan las filas y columnas. algún subconjunto del espacio de direcciones de la cpus determinado por el diseño del sistema es el espacio de direcciones de memoria/dram. luego, el controlador de dram determina a partir de la dirección de dram, qué filas y columnas del chip usar, y no hay razón para suponer que es lineal,

Los cachés y mmus eliminan aún más el conocimiento de la CPU y/o el programador. los cachés cambian el tamaño y la forma de las transacciones en ambos lados, como se mencionó anteriormente. el mmu cambia la dirección de cualquier lado, virtual vs físico, y hace que las mallocs sean más fáciles, podrías pensar que has mallocado 1GB de memoria para algún programa hambriento, pero no hay razón para que ese 1GB de espacio de memoria virtual sea lineal en el espacio físico, ellos en teoría, podría convertir eso en 4K o 16K o cualquiera que sea la unidad más pequeña de mmu (siempre que las tablas sean lo suficientemente grandes). Hace que la administración del almacenamiento dinámico sea mucho más fácil, ya no tiene que mover cosas para crear un agujero del tamaño del malloc, sino que necesita encontrar suficientes piezas de memoria que sumen el tamaño correcto que se ajuste a las reglas de la mmu.

Las CPU son extremadamente estúpidas en lo que respecta a sus espacios de direcciones, los programas y los programadores conocen el conocimiento, la CPU simplemente hace lo que dice el programador, coloca esta solicitud de dirección en el bus, y simplemente lo hace, no sabe en un dirección por dirección si se trata de ram, flash, un periférico en el chip de la placa base, espacio pcie, etc. columnas en el dram.