Top Banner
IMPLEMENTACIÓN BÁSICA DE PICOBLAZE Danilo A. García H.
14

Implementacion Basica de Picoblaze (1)

Jan 19, 2016

Download

Documents

Fabian Ballen
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Implementacion Basica de Picoblaze (1)

IMPLEMENTACIÓN BÁSICA DE PICOBLAZE

Danilo A. García H.

Page 2: Implementacion Basica de Picoblaze (1)

Objetivo

O Implementar sobre la FPGA un procesador

PicoBlaze con una interfaz de entrada

paralela y una interfaz de salida paralela

ambas de 8 bits –Se presenta el esquema

general y los códigos de cada bloque-

además del código en assembler.

Page 3: Implementacion Basica de Picoblaze (1)

Componentes para la implementación

O Un Divisor de frecuencia para el reloj general (en

el ejemplo se hace inicialmente a 2Hz para

observar el comportamiento)

O Dos registros paralelo-paralelo

O El KCPSM3 (microprocesador)

O Memoria de programa “ROM” (IO_BASICO)

O Una AND para decodificar la dirección de salida.

O DIPSW, LEDs y dos segmentos del 7 segmentos

Page 4: Implementacion Basica de Picoblaze (1)
Page 5: Implementacion Basica de Picoblaze (1)

Código en Assembler ; Ejemplo básico que lee un dato de entrada de 8 bits y lo pasa al puerto de salida

; Generación del archivo VHDL con el código para la memoria de programa

VHDL "ROM_FORM.vhd", "IO_BASICO.vhd", "IO_BASICO"

; Definición de direcciones de puertos de entrada y salida

DIPSW DSIN $01

LEDs DSOUT $02

; Definición de nombres para los registros que se utilizan

TEMP EQU s0

; COMIENZO DEL PROGRAMA PRINCIPAL

ORG $0 ; El programa comienza en la Dirección $000.

INICIO:

IN TEMP,DIPSW

OUT TEMP,LEDS

JUMP INICIO

Page 6: Implementacion Basica de Picoblaze (1)

Divisor de frecuencia (2Hz) library IEEE;

use IEEE.STD_LOGIC_1164.ALL;

entity divisor_50 is

Port ( clk : in STD_LOGIC;

clk_out : inout STD_LOGIC);

end divisor_50;

architecture Behavioral of divisor_50 is

signal contador: integer range 0 to 12500000 :=0 ;

begin

process(clk)

begin

if clk' event and clk='1' then

contador<=contador+1;

if contador=12500000 then

contador<=0;

clk_out<=not clk_out;

end if;

end if;

end process;

end Behavioral;

Page 7: Implementacion Basica de Picoblaze (1)

Registro Paralelo - Paralelo library IEEE;

use IEEE.STD_LOGIC_1164.ALL;

entity reg_paralelo is

Port ( Data_IN : in STD_LOGIC_VECTOR (7 downto 0);

Data_OUT : out STD_LOGIC_VECTOR (7 downto 0);

clk_i : in STD_LOGIC;

E : in STD_LOGIC);

end reg_paralelo;

architecture comp_reg_paralelo of reg_paralelo is

begin

process (clk_i,Data_IN,E)

begin

if E = '1' then

if (clk_i'event and clk_i='0') then

Data_OUT <= Data_IN;

end if;

end if;

end process;

end comp_reg_paralelo;

Page 8: Implementacion Basica de Picoblaze (1)

Archivo UCF (conexiones de pines)

NET "clk" LOC = "B8";

## 7 segment display

NET "CAT_A" LOC = "L18"; # Para visualizar el habilitador del registro de salida

NET "DP0" LOC = "C17"; # Para visualizar el reloj

## Leds

NET "SALIDA<0>" LOC = "J14";

NET "SALIDA<1>" LOC = "J15";

NET "SALIDA<2>" LOC = "K15";

NET "SALIDA<3>" LOC = "K14";

NET "SALIDA<4>" LOC = "E17";

NET "SALIDA<5>" LOC = "P15";

NET "SALIDA<6>" LOC = "F4";

NET "SALIDA<7>" LOC = "R4";

## Switches

NET "sw<0>" LOC = "G18";

NET "sw<1>" LOC = "H18";

NET "sw<2>" LOC = "K18";

NET "sw<3>" LOC = "K17";

NET "sw<4>" LOC = "L14";

NET "sw<5>" LOC = "L13";

NET "sw<6>" LOC = "N17";

NET "sw<7>" LOC = "R17";

Page 9: Implementacion Basica de Picoblaze (1)

Tenga en cuenta:

O Los buffer utilizados:

BUFG se utiliza para amplificar relojes

OBUF se utiliza para salida a puertos

O El registro paralelo con habilitador E activo

con alto y el reloj con flanco de bajada.

O El inversor puesto que el display es de

ánodo común

Page 10: Implementacion Basica de Picoblaze (1)

Procedimiento

1. El VHDL de la ROM se genera con el pBlazIDE y la plantilla ROM_from.vhd

2. Cree los símbolos de cada componente

3. Haga un esquemático como lo muestra la figura.

4. Verifique que el reloj esté dando sus tics (Punto del 7 segmentos)

5. Verifique la señal de habilitación del puerto de salida (segmento A del 7 segmentos)

6. Cambie las entradas en el DIPSW, estas deben replicarse en los LEDs. (el efecto es lento puesto que el reloj es a 2 Hz)

Page 11: Implementacion Basica de Picoblaze (1)

El proyecto

Page 12: Implementacion Basica de Picoblaze (1)

Es normal

O Que en la síntesis salgan warnings debidos

al KCPSM3 (hay foros que indican como

eliminarlos o minimizarlos)

O Que en la implementación salgan warnings

debido a los pines del KCPSM3 que no se

usan

O Que la generación del archivo de

programación resulte sin errores ni warnings

Page 13: Implementacion Basica de Picoblaze (1)

Ajuste posterior

O Modifique el divisor para que el reloj sea a

1 MHz, sintetice de nuevo, implemente y

genere el archivo de programación.

O Programe el FPGA

O Pruebe que ya no se nota la respuesta lenta

desde el cambio del DIPSW hasta el efecto

en los LEDs.

O Con esto ya tiene la base para continuar

trabajando en este tercio.

Page 14: Implementacion Basica de Picoblaze (1)

GRACIAS