Written by Jesus

Basado en la practica de PicoCtrl del Prof. Yair Linn.
  1. OBJETIVOS
     
    • Aprender como funciona y como programar el microcontrolador PicoCtrl, adquiriendo conocimiento de como funciona un microcontrolador.

  2. INTRODUCCION

    Un microcontrolador es un circuito integrado de alta escala de integración que incorpora la mayor parte de los elementos que configuran un controlador. Un microcontrolador dispone normalmente de los siguientes componentes:
    1. Procesador o UCP (Unidad Central de Proceso).
    2. Memoria RAM para Contener los datos.
    3. Memoria para el programa tipo ROM/PROM/EPROM.
    4. Líneas de E/S para comunicarse con el exterior.
    5. Diversos módulos para el control de periféricos (temporizadores, Puertas Serie y Paralelo, CAD: Conversores Analógico/Digital, CDA: Conversores Digital/Analógico, etc.).
    6. Generador de impulsos de reloj que sincronizan el funcionamiento de todo el sistema.

  3. HISTORIA

    El primer microprocesador fue el Intel 4004 de 4 bits, lanzado en 1971, seguido por el Intel 8008 y otros más capaces. Sin embargo, ambos procesadores requieren circuitos adicionales para implementar un sistema de trabajo, elevando el costo del sistema total.El Instituto Smithsoniano dice que los ingenieros de Texas Instruments Gary Boone y Michael Cochran lograron crear el primer microcontrolador, TMS 1000, en 1971; fue comercializado en 1974. Combina memoria ROM, memoria RAM, microprocesador y reloj en un chip y estaba destinada a los sistemas embebidos.Debido en parte a la existencia del TMS 1000, Intel desarrolló un sistema de ordenador en un chip optimizado para aplicaciones de control, el Intel 8048, que comenzó a comercializarse en 1977. Combina memoria RAM y ROM en el mismo chip y puede encontrarse en más de mil millones de teclados de compatible IBM PC, y otras numerosas aplicaciones. El en ese momento presidente de Intel, Luke J. Valenter, declaró que el microcontrolador es uno de los productos más exitosos en la historia.

     
    1. EL microcontrolador tendrá 6 señales de condición de entrada que controlan la ejecución de microinstrucción, las señales son asíncronas y estarán sincronizados dentro del controlador
    2. El microcontrolador tendrá 32 instrucciones que se pueden ejecutar, si el microprograma se pasa de los 32 este se pondrá en 0
    3. El microcontrolador tendrá 4 puertos de salida de 8 bits controlados por la instrucción de escritura. Cada uno de los puertos tiene su propio registro de salida ( es decir, el valor de salida es estable hasta que se cambie por microprograma ejecutado)
    4. Cada instrucción se ejecuta en dos ciclos de reloj - el primer ciclo es una zona de alcance de un ( FETCH fase) , la segunda ejecución de un ( fase de ejecución)
    5. El microcontrolador ejecutará instrucción de salto ( salto a la dirección almacenada en la instrucción )
      Instrucion NOP ( operación ignorado )
    6. La instrucción WRITE ( escribir al puerto de salida ) .

  4. Procedimiento

    Para empezar vaya a la ubicación donde tenga la carpeta SystemBuilder, esto con el fin de crear un Proyecto a través de dicha aplicación. 


    Al ejecutarlo  se obtiene la interfaz (figura) que genera el proyecto, debe tener en cuenta las partes de la DE0-Nano-SoC que utilizara ya que debe seleccionarlas para que  aparezcan en dicho proyecto, en este caso puede seleccionar todas, no importa, lo importante es no dejar por fuera las que  se necesitan. En Project Name ponemos el nombre de nuestro proyecto, a este proyecto se le llamo DE0_Nano_SoC_picoCtrl



    Luego, damos click en Generate, se nos despliega una ventana de (guardar como), elegimos el destino de nuestro proyecto, preferiblemente una carpeta donde se tengan todos los proyectos de clase.


    Nos dirigimos a la ubicación donde guardamos nuestro proyecto(en este caso, SystemBuilder tiene una carpeta donde guarda los proyectos por default, llamada CodeGenerated) si usted guardo su proyecto en otra ubicación no tiene problema alguno; siga a ejecutar el  archivo de tipo QPF llamado de la misma forma como llamo su proyecto.



    Ahora diríjase a su carpeta de GitHub\ece10243upb2016\Prof_Examples\3-1_PicoCtrl  donde encontrara los archivos de PicoCtrl_rom32_instructions,  picoctrl_Verilog,  opcodes, Pico, README, PicoCtrl-AnFPGAMicrocontrollerDesign (1).



    Si usted no tiene esto haga lo siguiente:
    1. Dirijace al siguiente link https://github.com/Adrizcorp/ece10243upb2016
    2. Abra la carpeta Prof_Examples
    3. Abra la carpeta 3-1_PIcoCtrl donde encontrara los archivos mencionados.

Copie cada uno de los archivos tipo “Archivo v” y péguelos en una nueva carpeta a la cual llamara “Modules” esto con el fin de llevar un orden. La carpeta será creada en la carpeta donde tenemos nuestro proyecto de PicoCtrl





Se preguntara por que el archivo “opcodes” no se encuentra en dicha carpeta, Estos se debe a que “opcodes” contiene una sintaxis que será leida por Quartus para que esto suceda sin generar error alguno, “opcodes” fue copiado en la carpeta principal



También necesitamos los archivos de syncro.v y div_freq.v Estos archivos son de proyectos pasados, en caso tal de no tenerlos diríjase al siguiente link y descárguelos

Divisor de frecuencia (div_freq.v)

Sincronizador (syncro.v)

Estos archivos también deben ir en la carpeta de “modules”


Diríjase a QUARTUS donde tiene abierto su proyecto DE0_Nano_SoC_picoCtrl

En la parte izquierda encontrara “Files” selecciones, aparecerán los “Files” que tenemos, lo que tenemos que hacer es agregar nuevos “Files”, se acuerdan los .que agregamos a la carpeta de Modules? Cada uno de ellos los agregaremos de la siguiente forma.

click derecho en “Files” en al parte superior izquierda y le daremos add/remove files in project

Se desplegara la siguiente ventana



En los tres puntos de la imagen dele click y seleccione todos los  .v que están en la carpeta “modules” incluyendo los “opcodes” que copiamos en la carpeta principal, debe quedar algo asi




click en apply y luego en ok.

Ahora en general debe tener algo así.




Lo siguiente  es crear las instanciaciones de cada uno de los .v, solo es dar click derecho en el archivo y seleccionar “créate verilog Instantiation template files for current file




Así de la misma forma con cada uno de los punto .v

Las instanciaciones se guardaran en la carpeta del proyecto, en la principal  de esta forma.




Abra cada una de las instanciaciones y copie el código, por ejemplo, abriremos  syncro_inst 


Este es el código a copiar, copiara cada uno de los códigos de las instanciaciones en el modulo principal de su proyecto en QUARTUS




El código con instanciaciones debe verse asi





El siguiente paso es borrar cada una de las entradas o salidas por defautl que aparecen en el código de cada instanciación




Luego  identificar las entradas y las salidas,  hay que  saber que entra y que sale para poder hacer las respectivas conexiones.


se tiene una entrada de 5 bits y una salida de 16 bits en la instanciación del PicoCtrl_rom32_instructions por lo tanto para ello se cre buses de datos (wire’s) para conectar dichas entradas y salidas.

Los wire deben tener la misma cantidad de bits.



se pasa a ver la instanciación del Picoctrl ; tenemos una entrada de reloj el cual se utilizara la que nos proporciona la FPGA FPGA_CLK1_50 , tenemos una entrada  reset la cual se colocara en 1 lógico 1’b1 (encendido) , una entrada  cond_1  la cual será un reloj de 1hz tenemos una segunda condición  cond_2  *(~clk_1hz_sync), las condiciones del 3-6 no importa por lo tanto están en 1'b00 (apagadas) , se utilizara el registro 1, esa será nuestra salida a los led’s por ende seran conectados a los LED[7:0] quiere decir que utilizaremos los 8 leds que nos proporciona la FPGA.

Esta parte es importante, fíjese que a la salida de instruction_ROM_Addr se le asigna la entrada  addr (encerrada en rojo) y la entrada de instruction_ROM_data se le asigna la salida del data (encerrada en azul).

*la condición 2 es un reloj de 1hz pero tiene  el signo de negación (~) esto hace que pase ser de 1hz a 0,5 hz, es la forma de hacer un divisor de frecuencia. Ejemplo : si tiene un reloj de 50hz como el que da la FPGA, solo con anteponer (~)  se tendría uno de 25hz.



se pasa a la instanciación de div_freq

se tiene  una entrada de reloj a la cual conectamos FPGA_CLK1_50  que ya sabemos es el reloj de 50 hz que nos proporciona la FPGA, tenemos una entrada de 32 bits a la cual asignamos 32’b24999999 este numero es sacado de la formula y por ultimo tenemos una salida div que seria nuesto reloj de 1hz.




Por ultimo se pasa a la instanciación syncro donde tenemos una entrada async que será nuestro reloj de 1hz, una entrada clock que será nuestro reloj de 50hz y una salida sync que será nuestro otro reloj de 1hz.


Con esto se terminan cada una de las instanciaciones ahora dirígea dar click en  assembler Para iniciar la compilación del programa.



Luego de compilado nuestro proyecto nos dirigimos a programmer  esto desplegara la siguiente ventana




En add device seleccionaremos  Soc Serie V y SOCVHPS y dara click en OK



luego vamos a add files y selecciona el .sof  debe salir algo así




procedemos hacer click en el botón de START

observe  lo que hacen los LEDs, Deben hacer el siguiente recorrido con 0.5 segundos entre cada posición:

0111_0001
1011_0010
1101_0100
1110_1000
1101_0100
1011_0010

Donde   "1" significa encendido y "0" significa apagado.

(ARCHIVO GIF)



Ahora bien, lo que hara será hacer la siguiente secuencia, donde ¨X¨ será encendido y ¨0¨ Apagado

0000 000X
0000 00X0
0000 0X00
0000 X000
000X 0000
00X0 0000
0X00 0000
X000 0000
0X00 0000
00X0 0000
000X 0000
0000 X000
0000 0X00
0000 00X0
0000 000X


Bueno, lo que se debe hacer es cambiar la configuracion de la ROM, abra el  .v de PicoCtrl_rom32_instructions  y cambie las condiciones del registro por la secuencia que se dio



Que es lo que quiere decir esto, se esta asignando ala room el data siguiente, si  c0 es igual a 0 escriba (write) en el regitro 1 8'b0000_0001, eso  en cada (write) de la misma forma, por ejemplo en la tercera  línea, si c0 es igual a 0 escriba en el registro 1 8'b0000_0010.


Ahora cada jump (salto), por ejemplo en la cuarta línea si c1 es igual a 0 haga un salto a 8´h3, pero dese cuenta que 8´h3 esta en la misma posición, así que se queda en el mismo lugar , así mismo cada jum.

Después de tener algo similar a la imagen, debemos compilar de nuevo nuestro programa, añadir de nuevo nuestro archivo .v y nuestro archivo .sof



Damos 
Start (archivo GIF)


 

Felicidades!, has usado picoctrl en la DE0-NANO-SOC

 

Attachments:
Download this file (div_freq.v)div_freq.v[ ]0.3 kB
Download this file (opcodes.v)opcodes.v[ ]1 kB
Download this file (PicoCtrl_rom32_instructions.v)PicoCtrl_rom32_instructions.v[ ]1 kB
Download this file (picoctrl_Verilog.v)picoctrl_Verilog.v[ ]5 kB
Download this file (syncro.v)syncro.v[ ]0.3 kB
Powered by OrdaSoft!
  Written By Peter Gomez Este contenido esta orientado a los programadores que tienen problema con la conectividad("SGC PmmC") de su pantalla uOled-128-g1/g2…
Written by Sherneyko Plata Rangel   Pynq-z2: Hello world   In this tutorial we will implement a simple test of the inputs/outputs available on…
Objetivos Requerimientos Procedimiento Descripción de Hardware. Qsys. Nios II. UCOS II. Secuencia de Sprite. Sintesis de Audio. Descargas Glosario Otros Resultados. Ejemplo de Sprites.     Objetivos: Diseñar una plantilla general para el diseño de…
Written by Holguer A. Becerra           Requerimientos: DE0-NANO USB-UART(solo para parte 3) Python 2.7 ó superior.   Objetivos: Dar una introducción a los conceptos de Multitasking, Scheduling y…
Written by Holguer A. Becerra             Based on Gregory Estrade's Work.   I have ported the PC Engine System on the DE0-NANO back in 2014, why…
      Arduino tools are generally nice tools for quick prototyping and improvized projects, and the Seeeduino Xiao…
Written by: Holguer A Becerra         En esta practica vamos a construir nuestro primer juego retro  usando un sincronizador de Video VGA…
Written by: Andrea Paola Pabón Ortega & Daniel Enrique Mejia Rueda Revision by: Ing Holguer A. Becerra   DESCRIPCIÓN DEL PROYECTO: El  RTAWD DE0NANO…
  Written by Holguer Andres   Requires: DE0-NANO. 4.3 Inch 480x272 Screen.( WQVGA ) ?️       Parte HW: Descargue la siguiente plantilla( DE0_NANO_TFT_PSP.zip) y descomprimala en una ruta sin espacios y…
Escrito por Guillermo Acevedo   Diseño   En esta practica desarrollaremos un filtro FIR en hardware, para este caso en especifico, realizaremos un filtro…
 Written By Juan David Delgado   FILTRO FIR (FILTRO DE RESPUESTA FINITA AL IMPULSO)     Son conocidos como filtros digitales no recursivos debido a…
XISCKER: Reduced and Complex Instruction Set Computing Key Educational Resources A Configurable Platform for the Emulation of Different Computer Architectures An introduction to Computer Architectures through digital design description for FPGA devices   Computer Architecture embraces all three…
Escrito por: Alix Angarita   En el manual a continuación se explica un método de debug adicional que es muy interesante debido a…
By: Fabio Hernández   INTRODUCCIÓN:   El presente documento pretende mostrar la manera de generar software para una imagen de Linux implementada en la…
Summary Written by Fabio Hernandez   HARD PROCESSOR SYSTEM (HPS)     ------------------------------------------------------------------------------------------------------------------------------------------------   Introducción   Tenemos  2 nuclos de procesamiento ARM cortex-A9, cada uno son su propio cache  se…
Escrito por Jesus Lopez         INTRODUCCIÓN   El acceso directo a memoria (DMA, del inglés direct memory access) permite a cierto tipo de componentes de una computadora acceder a…
    Written by  Sebastian Baquero       Objetivos  Introducción a los conceptos de Multitasking, Scheduling y Context Switching.  Ampliación de los conceptos a cerca de el…