Hola el siguiente codigo toma la entrada de un teclado numerico, lo codifica a bcd y a continuacion lo guarda en un registro.
por ultimo se decodifica en 7 segmentos. Tengo un problema al compilarlo con galaxy/warp: resulta que el compilador asigna la señal Q en modo de buried node a las macroceldas del dispositivo (lo estoy programando en una gal22v10). Por lo tanto 4 macroceldas del vector Q mas las 7 de salida del decoder 7 segmentos da un total de 11 y no termina la compilacion ya que aparece el mensaje de error:
signal seg(2) can not be placed on device
Quiero saber si se puede evitar que se asignen las salidas del registro a las macroceldas del dispositivo, si será cosa del compilador y con otro funcione correctamente. En fin agradezco mucho la ayuda que pudieran darme.
...
por ultimo se decodifica en 7 segmentos. Tengo un problema al compilarlo con galaxy/warp: resulta que el compilador asigna la señal Q en modo de buried node a las macroceldas del dispositivo (lo estoy programando en una gal22v10). Por lo tanto 4 macroceldas del vector Q mas las 7 de salida del decoder 7 segmentos da un total de 11 y no termina la compilacion ya que aparece el mensaje de error:
signal seg(2) can not be placed on device
Quiero saber si se puede evitar que se asignen las salidas del registro a las macroceldas del dispositivo, si será cosa del compilador y con otro funcione correctamente. En fin agradezco mucho la ayuda que pudieran darme.
Código:
library ieee;
use ieee.std_logic_1164.all;
entity encoder_registro_decoder is
port (
clock: in std_logic;
tecla: in std_logic_vector (0 to 8);
seg: out std_logic_vector (0 to 6)
) ;
end entity ; -- encoder_registro_decoder
architecture arch of encoder_registro_decoder is
signal C: std_logic_vector (3 downto 0);
signal Q: std_logic_vector (3 downto 0);
begin
identifier : process( clock, tecla, C, Q )
begin
if (clock'event and clock = '1') then
Q <= C;
end if ;
if (tecla = "100000000") then
C <= "0001";
elsif (tecla = "010000000") then
C <= "0010";
elsif (tecla = "001000000") then
C <= "0011";
elsif (tecla = "000100000") then
C <= "0100";
elsif (tecla = "000010000") then
C <= "0101";
elsif (tecla = "000001000") then
C <= "0110";
elsif (tecla = "000000100") then
C <= "0111";
elsif (tecla = "000000010") then
C <= "1000";
else
C <= "1001";
end if ;
case( Q ) is
when "0000" => seg <= "0000001";
when "0001" => seg <= "1001111";
when "0010" => seg <= "0010010";
when "0011" => seg <= "0000110";
when "0100" => seg <= "1001100";
when "0101" => seg <= "0100100";
when "0110" => seg <= "0100000";
when "0111" => seg <= "0001110";
when "1000" => seg <= "0000000";
when others => seg <= "0001100";
end case ;
end process ; -- identifier
end architecture ; -- arch
Última edición: