¿Puedo ejecutar mi Nios II desde el programa en SRAM o SDRAM, cómo?

0

¿Existe un método "estándar" (compatible con Altera) para ejecutar mi Nios II desde una memoria fuera del chip como SRAM o SDRAM? Dado que el diseño está en etapas de prototipo, significa que estoy usando JTAG para la configuración y toda la corriente de bits de configuración y el programa Nios II compilado, no tiene que copiarse en la memoria de configuración como EPCS, EPCQ o dispositivo flash CFI.

Dado que la memoria en chip es muy limitada, es mejor utilizar la memoria sin chip para el programa. ¿Cómo consigo el programa en la memoria de chip fuera entonces? Sé que esto requerirá algo llamado cargador de arranque, pero ¿hay alguna nota de aplicación o ejemplo de esto? Todavía no he encontrado instrucciones claras sobre esto.

Durante el desarrollo, uno tendrá que compilar y cargar el programa en Nios docenas de veces. Por lo tanto, si cada vez que uno tiene que cargar un diseño FPGA del cargador de arranque para cargar el programa Nios II en la memoria externa y luego cargar el diseño Nios II en el FPGA, esto El proceso de 2 pasos parece engorroso.

    
pregunta quantum231

2 respuestas

1

Cargar directamente desde un carnero externo probablemente será más problemático que su valor, puede requerir pirateo, no lo he intentado y probablemente nunca lo haré, creo que es posible. Aquí vamos:

Necesitasobtenerelcódigocompiladousandounodelosmétodoslistadosen" Genio Nios II Métodos de arranque Guía del usuario " Creo que el archivo .hex parece el más prometedor.

Cargue la memoria desde el JTAG, este documento describe cómo escribir en la memoria y otros dispositivos Avalon MM.

Dirige tu vector de memoria de reinicio en el procesador NOIS a la dirección de inicio en tu ram externo.

Entonces vas a tener que disparar un reinicio sin reiniciar el ram externo. Esta es la parte del hack, ya que no conozco tu configuración, tendrás que hacer esto.

Buena suerte, suena como un proyecto divertido. Lo probaría si tuviera tiempo, tal vez lo haga algún día (también me encontré con este problema, para mí era mucho menos costoso y más barato actualizar el FPGA, de hecho, si está en desarrollo, casi siempre debería hacerlo. usa el fpga más grande posible)

Aquí hay otro

    
1

Durante el desarrollo, no es necesario que dispongas de ningún flash para ejecutar tu código desde una RAM externa. El depurador cargará el código allí y ejecutará la CPU desde esa ubicación. Solo necesita lidiar con flash cuando quiere que su código sobreviva a un apagado.

Si necesita flash, debe tener en cuenta que algunos controladores flash admiten la ejecución directa de código, mientras que otros no. Con la primera clase, puede renunciar al cargador de arranque (llamado copiadora de arranque en la documentación) y ejecutar el código directamente desde flash, lo que le ahorra RAM, pero a menudo es significativamente más lento. Con la segunda clase, no tiene más remedio que usar la copiadora de arranque y ejecutar su código desde la RAM.

Un ejemplo típico de la segunda clase es el controlador Legacy EPCS. Asigna una pequeña ROM que contiene la copiadora de arranque al espacio de direcciones, por lo que el vector de reinicio de la CPU debe apuntar hacia ella para que su código entre en la RAM al reiniciar. En particular, este controlador está diseñado de manera que le permite mantener tanto la configuración FPGA como su código en el mismo dispositivo flash. Como resultado, el procedimiento para actualizar su código es algo complicado.

Un ejemplo de la primera clase es el nuevo controlador EPCQ. A diferencia de EPCS, asigna todo el contenido de flash al espacio de memoria, que se requiere para la ejecución en el lugar. Aún puede optar por colocar una copiadora de arranque en ella y ejecutar su código desde la RAM para lograr una velocidad de ejecución más rápida. La Guía de usuario de IP de periféricos integrados le explica cómo elegir entre las dos opciones:

  

Las herramientas Nios II SBT saben si agregar una copiadora de arranque en función de la ubicación de la sección del vinculador de texto. Si la sección del enlazador de texto está ubicada en una memoria diferente a la del punto de reinicio del vector, indica que se requiere una copia del código. En este escenario se requiere una copiadora de arranque. Puede usar la lógica existente para generar un archivo de programación con o sin una copiadora de arranque según el escenario.

En caso de que no lo sepa, las secciones del enlazador se configuran en el cuadro de diálogo de configuración del paquete de soporte de placa.

    
respondido por el Dmitry Grigoryev

Lea otras preguntas en las etiquetas