¿Cómo sé qué tan ancho es el bus de datos? [cerrado]

0

Estoy diseñando una GPU básica en Verilog. Sin embargo, habrá pines que deberían leer / escribir RAM. El problema es que no puedo saber cuántos bits de datos puede tomar la RAM en un momento anterior (ya que se supone que es un propósito general). Lo único que sé con certeza es que hay al menos 32 bits de bus de direcciones.

Si envío demasiados datos, es posible que algunos chips de RAM no lo admitan.

Si envío muy pocos datos, puede haber problemas de alineación y otros problemas al enviar bytes impares.

¿Qué hago?

    
pregunta Yoshimaster

2 respuestas

2

Parece que tienes un problema mucho antes de que comiences a acercarte a FPGA y su codificación de configuración.

Hay una cosa, generalmente un documento, llamado especificación, que hace una declaración clara sobre los resultados del proyecto y describe su diseño en una medida específica.

Como no sabe qué tan ancho es su bus de datos RAM, debe tener problemas con la especificación, o la especificación no está elaborada en la sección de interfaz (incluida la base de componentes que usará).

  

Estoy diseñando una GPU básica en Verilog.

¿Tiene una definición clara de cuáles serán los resultados y las tareas básicas que realizará la GPU? ¿Se comprende qué se necesita para lograr los resultados y cuánto costará?

  

No puedo saber cuántos bits de datos puede tomar la RAM en un momento anterior (ya que se supone que es un propósito general)

¿Tiene conocimiento de las velocidades de RAM? ¿Qué RAM utiliza - SRAM, SDRAM, DRAM? ¿Utiliza la IP de acceso a memoria estándar del fabricante de FPGA, o va a diseñar el controlador de memoria usted mismo?

  

Lo único que sé con certeza es que hay al menos 32 bits de bus de direcciones.

Esto suena extraño porque, dependiendo del tamaño del bus de datos, tendrá tamaños de RAM muy diferentes: con 8 bits será de 4 GB, con 32 bits será de 16 GB. ¿Hay alguna información de configuración compatible sobre el tamaño de RAM en la especificación?

  

Si envío demasiados datos, es posible que algunos chips de RAM no lo admitan.

Tiene razón si quiere decir que si el bus de datos que elige es más ancho que el de los chips de RAM, los datos se perderán.

  

Si envío muy pocos datos, puede haber problemas de alineación y otros problemas al enviar bytes impares.

Esto no es correcto porque si elige un ancho de datos inferior al del chip RAM, algunos bits del chip RAM simplemente no se utilizarán. Sin embargo, como usted dice acerca de los bytes aquí, asumo que convertirá su bus de datos RAM a bytes.

Por lo tanto, respondiendo a su pregunta con una mente estrecha, puede elegir el menos bus de datos compatible alineado al tamaño 2 ^ n, por ejemplo. puede estar seguro de que la memoria RAM conectada a su GPU nunca tendrá menos de 8 bits, luego elija 8 bits. Todos los demás bits de datos de RAM por encima de estos 8 bits no se utilizarán.

Pero este enfoque afectará severamente el rendimiento, y usted debe solicitar una aclaración sobre la especificación para averiguar qué tamaños de bus de datos son compatibles, y como dijo Harry Stevenson, realizar la configuración en la inicialización (usando RAM de sondeo para averiguar su tamaño o utilizando los interruptores de configuración).

Actualización:

  

Si mi chip de RAM tiene un bus de datos de 32 bits, ... ¿cómo sabría la RAM cuánto estoy escribiendo a la vez?

Si el bus de datos de la RAM es de 32 bits (por ejemplo, D [31: 0]), entonces siempre aceptará 32 bits. Puede escribir un bit D0, sin usar todos los demás D [31: 1]. RAM no le importa lo que escriba en ella. A su GPU le importará, y debe saber dónde están sus datos en la RAM.

  

¿Cómo se hace esto normalmente?

Por lo general, el diseñador decide qué configuraciones de RAM se admiten, y diseña los circuitos en consecuencia para tener la máxima velocidad y el mínimo desperdicio de recursos.

    
respondido por el Anonymous
0

Use un parámetro para definir el ancho del módulo y asegúrese de que su código pueda escalar con el ancho del bus.

parameter buswidth = 8;
wire [buswidth-1:0] nameofnet = 0;
    
respondido por el laptop2d

Lea otras preguntas en las etiquetas