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: