Esta prueba la hice desde una box Fedora, instalando el software de Lattice para programar sus dispositivos Lógicos.
En ABEL, la definición de los pines a utilizar cuando se programa una GAL, se hace desde el inicio, sin embargo, en VHDL la cosa no está tan simple, leyendo varios foros, encontre que habria que usar unas sentencias pero no se indica de forma muy genérica.
El código que se presenta a continuación, es un divisor de frecuencias, que tiene dos entradas y una salida, nótese que en este caso, se asigna al pin 6 la entrada de reset para el reloj, y que la declaración de los atributos LOC se hace en el ámbito del instanciamiento de la Entidad que se crea.
Esto solo lo he probado con Lattice y una GAL22V10 simulada en Proteus.
-------------------------------------------------------------------------------
--
-- Company :
-- Engineer: miguel
--
-- Create Date: 04/11/2015 04:50:28
-- Project Name: clk381Hz
-- Module Name: clk381Hz.vhd
-- Description:
--
-- Additional Comments:
--
-------------------------------------------------------------------------------
library IEEE;
use IEEE.std_logic_1164.all; -- Para std_logic
use IEEE.numeric_std.all; -- Para unsigned
entity clk381Hz is
Port (
entrada: in STD_LOGIC;
reset : in STD_LOGIC;
salida : out STD_LOGIC
);
attribute LOC: string;
attribute LOC of reset : signal is "6";
end clk381Hz;
architecture arq1 of clk381Hz is
signal temporal: STD_LOGIC;
signal contador: integer range 0 to 250 := 0;
begin
divisor_frecuencia: process (reset, entrada) begin
if (reset = '0') then
temporal <= '0';
contador <= 0;
elsif (entrada 'event and entrada = '1') then
if (contador = 250) then
temporal <= NOT(temporal);
contador <= 0;
else
contador <= contador+1;
end if;
end if;
end process;
salida <= temporal;
end arq1;