El propósito de este artículo en esta serie (hasta ahora Parte 1, Parte 2, Parte 3, Parte 4, Parte 5, Parte 6, Parte 7, Parte 8, Parte 9 y Parte 10) es presentar un demo relacionado a el procesador Nios-V IP en la plataforma DE-25 FPGA Dev Kit. Para clarificar cualquier confusión que pueda surgir en este sistema, es importante hacer enfasis, primeramente que el Nios-V es un procesador RISC-V (soft-core) (Uno simlilar es lo que hay dentro de la Raspberry Pico procesador dual RISC-V que se cubrio en este previo artículo) que reside dentro del FPGA Agilex 5 (parte izquierda en la región azul del siguiente diagrama), no en el Hard Processor System (HPS) (en la parte derecha en color amarillo), en el siguiente diagrama de bloque,
En esta serie existen 4 artículos relacionados a los procesadores tipo ARM en la región del HPS, en este sistema, si es necesario se refiere a la Parte 6, Parte 7, Parte 8, Parte 9 para mas detalles.
Este demo consiste de un programa en lenguaje C++ que se ejecuta dentro del procesador Nios-V y cambia algunos parámetros de la cámara IMX519 y genera algunos patrones de prueba (tipicamente usados para propósitos de verificación) conectados a la interfaz conocida como en inglés como mobile industry processor interface (MIPI) D-PHY mostrada aquí via el conector de 22-pins MIPI,
también mostrado a continuación la conneción física de la cámara usando su cable,
y produce el video con algunos patrones internamente generados en una secuencia iterativa que modifica algunos parámetros del sistema via el transmisor eficiente HDMI (Analog Devices ADV7513) a un monitor externo como se muestra a continuación aquí,
El programa en C++ para este demo fue desarrollado en DigiKey para el procesador Nios-V mostrado a continuación,
void DigiKey_Coffee_Cup_Demo(){
printf("======= DigiKey Coffee Cup Mipi Camera to HDMI Demo =======\r\n");
bool bSuccess;
int Value;
unsigned int blue[5] = {0x100, 0x1F00, 0x3F00, 0x5F00, 0x7FFF};
unsigned int red[5] = {0x100, 0x1F00, 0x3F00, 0x5F00, 0x7FFF};
unsigned int nPatternID;
unsigned int focus;
while(1)
{
focus = 0;
gpVcmI2C->set_pos(focus);
while (focus < 10000)
{
nPatternID = 2;
while (nPatternID < 5)
{
unsigned int blueindex =0;
unsigned int redindex = 0;
while(redindex < 5)
{
while(blueindex < 5)
{
gpCameraI2C->imx519_set_color_balance_BR(blue[blueindex], red[redindex]);
blueindex = blueindex + 1;
usleep(700000);
}
redindex = redindex + 1;
usleep(100000);
}
gpCameraI2C->imx519_set_test_patttern(nPatternID);
nPatternID = nPatternID + 1;
//waitFor(1);
usleep(700000);
gpCameraI2C->imx519_set_test_patttern(0);
}
focus = focus + 100;
}
}
}
Este programa en C++ del demo cambia los siguientes (arbitrareamente selecionados) parámetros relacionados con la cámara y seleciona algunos patrones de prueba en una secuencia repetitiva.
gpVcmI2C->set_pos(focus);
gpCameraI2C->imx519_set_test_patttern(nPatternID);
gpCameraI2C->imx519_set_color_balance_BR(blue[blueindex], red[redindex]);
el parámetro de enfoque, el balance del color y seleccionar algunos patrones de videos. A continuación se muestra el sistema,
Por favor referirse a el manual de demo estandard de la plataforma DE25 para una descripción completado del mismo. Esencialmente, el procesador Nios-V controla la cámara via la interfaz I2C y también usa la interfaz Avalon que conecta al puente AVMM bridge a el resto del sistema VVP que implmenta el módulo Demosaic Bayer a RGB y otros módulos relacionados al flujo de la imágen dentro del FPGA que realizan el almacenamiento temporero y conversiones necesarias para alimentar el video al transmisor Analog Devices ADV7513 HDMI y el monitor que muestra la imágen capturada por la cámara.
Para compilar el programa para el Nios-V IP, por favor instale el RiscFree Integrated Development Environment (IDE) como se muestra a continuación en el Quartus Prime Installer Add-Ons and Standalone Software,
en este caso la siguiente version fue instalada,
El proceso de desarrollo produce un archivo conocido como Executable and Linkable Format (.elf), en este caso denominado camera.elf, el cual es un archivo relevante que se usa luego, para programar el procesador soft-core Nios-V IP dentro del FPGA.
Por favor, asegurese que el path donde se encuentran los programas utilitarios del Nios-V esten presenten en su ambiente del sistema operativo Windows OS, en esta caso en particular C:\altera_pro\25.3.1\niosv\bin usando como opción los System Properties mostrado a continuación,
Proceda a conectar el cable USB a la plataforma DE-25 FPGA Dev Kit. y abra un terminal windows. Configure el FPGA como sigue (a memoria volátil),
demo\quartus_pgm.exe -m jtag -c 1 -o "p;top.sof"
Para configurar la memoria flash use el siguinete archivo flash.cdf,
JedecChain;
FileRevision(JESD32A);
DefaultMfr(6E);
P ActionCode(Cfg)
Device PartName(A5ED013BB32AE4SCS) Path("./") File("golden_top.jic") MfrSpec(OpMask(1) SEC_Device(MT25QU128) Child_OpMask(1 1));
ChainEnd;
AlteraBegin;
ChainType(JTAG);
Frequency(16000000);
AlteraEnd;
y también los siguientes comandos,
demo\quartus_pfg -c top.sof top.jic -o device=MT25QU128 -o flash_loader=A5ED013BB32AE4SCS -o mode=ASX4
demo\quartus_pgm.exe -m jtag -c 1 ./flash.cdf
luego se procede a subir el siguiente archivo camera.elf a la memoria volátil del procesador Nios-V via el nios-v shell como se ve a continuación,
demo\software\camera_app\build\Default> niosv-shell.exe --run "niosv-download.exe camera.elf -c 1 -r -g"
Esto completa el demo de la cámara de la plataforma DE-25 FPGA Dev Kit.
Si los previos pasos son realizados usando una memoria no-volátil para que permanesca en el sistema aún cuando se apague. Este método de será cubierto en un artículo adicional luego debido a la extenso de este artículo. Podemos generar un archivo .jicde un archivo .sof que crea un archivo ram.hex. Para crear un archivo tipo .hex del archivo .elf, para este propósito proceda con este comando,
demo\elf2hex.exe software\camera_app\build\Default\camera.elf -o ram.hex -b 0x00000000 -w 32 -e 0x0007ffff
Haga los siguientes pasos dentro del Quartus Software para convertir los archivos .sof + .hex en un.jic file, Select File → Convert Programming files desde el quartus top menu.
Configure lo siguiente en el Convert Programming File window para el projecto en consideración consideration. (Configuration Device, Mode, Addressing Mode, Bit-level endianness, etc.)
La cámara que originalmente se recomienda para este demo es Part No: FXX-3138-ADC, al momento de escribir este artículo no esta disponible. No obstante, aquí en DigiKey aquí tenemos otra opción para aquellos clientes que necesiten una cámara imendiatamente que funcione con la plataforma DE-25 FPGA Dev Kit.. Aquí hay una alternativa para remplazar la cámara que funciona con este sistema DigiKey Part Number 1568-19512-ND y está disponible en DigiKey.
Aquí en DigiKey estamos disponibles para proveer partes alternas que sean compatibles, en los casos donde una parte no se encuetre disponible. Por favor, si necesita alguna ayuda no dude de contactar al DigiKey TechForum Team para cualquier pregunta. Que tenga un buen día.
Este artículo está disponible en inglés aquí.
This article is available in english here.








