Implementacion Basica de Picoblaze (1)
-
Upload
fabian-ballen -
Category
Documents
-
view
25 -
download
0
Transcript of Implementacion Basica de Picoblaze (1)
IMPLEMENTACIÓN BÁSICA DE PICOBLAZE
Danilo A. García H.
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.
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
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
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;
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;
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";
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
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)
El proyecto
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
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.
GRACIAS