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

Implementacion Basica de Picoblaze (1)

Embed Size (px)

Citation preview

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