Cómo convertir de "con 'argumento' seleccionar" a, si no, la declaración en VHDL

0

Nuestra tarea es diseñar una ALU de 4 bits en VHDL con Xilinx y tengo problemas en el diseño de la ALU de 1 bit. Encontré un ejemplo en Internet que se usa con las declaraciones de selección de "Argumento", aquí está el ejemplo:

FullAdder: OneBitAdder port map (InputSignal(1),InputSignal(0),CarryIn, ArithmeticModeOutput(1),ArithmeticModeOutput(0));

with Mode select
    UnitOutput <= ('0' & LogicModeOutput) when '0',
                        ArithmeticModeOutput when '1',
                        "00" when others;

with Sel select
    LogicModeOutput <= (J and K) when "00",
                            (J or K) when "01",
                            ( J xor K) when "10",
                            ( J xnor K) when "11",
                            '0' when others;

with Sel select
    InputSignal <= (J & '0') when "00",
                            (J ,K) when "01",
                            ( J, not K) when "10",
                            ( not J, K) when "11",
                            "00" when others;
CarryOut <= UnitOutput(1);
Foutput <= UnitOutput(0);

Este código funciona, se compila sin error y la simulación funciona, pero nuestra asignación quiere que sea una declaración en caso contrario. Intenté escribir uno pero no funcionó correctamente:

process (Mode,Sel,J,K)
begin
if(Sel(1) = '0') and (Mode ='0') then --Logic mode combinations
  if(Sel(0) = '0') then
  LogicModeOutput <= (J and K);
  else
  LogicModeOutput <= (J or K);
  end if;

else

  if(Sel(0) = '0') then
  LogicModeOutput <= (J xor K);
  else
  LogicModeOutput <= (J xnor K);
  end if;


end if;
end process;

process (Mode,Sel,J,K)
begin
if(Sel = "00") then --Arithmetic mode combinations

  InputSignal <= (J & '0'); -- since J is 1-bit, we have to add a '0' after.

elsif(Sel = "01") then

  InputSignal <= (J , K); -- J and K are 1-bit, so we concatenate them.

elsif(Sel = "10") then

  InputSignal <= (J, not K);

elsif(Sel = "11") then

  InputSignal <= (not J, K);

else

  InputSignal <= "00";

end if;
end process;

process (Mode)
begin
if(Mode = '0') then --how to select the mode

  UnitOutput <= ('0' & LogicModeOutput); -- since LogicModeOutput is 1-bit, we 
have to add a '0' before.

elsif(Mode = '1') then

  UnitOutput <= ArithmeticModeOutput;

else

  UnitOutput <= "00";

end if;
end process;

Estoy abierto a todas las sugerencias con mi prioridad de que debería ser una declaración en caso contrario. Gracias por sus contribuciones.

    
pregunta TrkDgnr

1 respuesta

0

Para cualquiera que busque la respuesta, escribí algo que funciona:

FullAdder: OneBitAdder port map (InputSignal(1),InputSignal(0),CarryIn, ArithmeticModeOutput(1),ArithmeticModeOutput(0));    

process (Sel,J,K, LogicModeOutput, InputSignal)

begin

if(Sel = "00") then

LogicModeOutput <= (J and K);
InputSignal <= (J & '0');
elsif(Sel = "01") then

LogicModeOutput <= (J or K);
InputSignal <= (J, K );
elsif(Sel = "10") then

LogicModeOutput <= (J xor K);
InputSignal <= (J, not K);

elsif(Sel = "11") then

LogicModeOutput <= (J xnor K);
InputSignal <= (not J, K);

else 

LogicModeOutput <= '0';
InputSignal <= "00";

end if;

end process;

process (Mode, UnitOutput, LogicModeOutput, ArithmeticModeOutput)

begin

if (Mode = '0') then

UnitOutput <= ('0' & LogicModeOutput);

elsif(Mode = '1') then

UnitOutput <= ArithmeticModeOutput;

else

UnitOutput <= "00";

end if;

end process;


--Our output signal was 2 bit, we seperate the bits for the function.
CarryOut <= UnitOutput(1);
Foutput <= UnitOutput(0);
    
respondido por el TrkDgnr

Lea otras preguntas en las etiquetas