¿Hay algo parecido a una macro en VHDL?

0

Tengo un pequeño fragmento de código, que se aplica una y otra vez, en diferentes lugares. Los lugares son demasiado irregulares, el código es demasiado pequeño y la entrada y varía demasiado para poder utilizar una entidad.

¿Hay algo de macro como en VHDL?

por ejemplo:

macro do_something(input_a, output_b);
  counter_1 <= counter_1 + 1;
  output_b <= input_a & other_input;
  other_output <= input_a;
end macro;
-- note: since this uses other_output, it can obviously only be used in one process!

process(clock) begin
  if some_condition then
    do_something(local_signal_p,local_signal_q);
  elsif some_other_condition then
    do_something(local_r,local_s);
  end if;
end process

La idea sería que "do_something" fuera reemplazado por las instrucciones individuales.

¿Existe tal cosa?

    
pregunta AMADANON Inc.

2 respuestas

4

Recomendaría utilizar un procedimiento sobre una función para esto, ya que poner esto en una función da como resultado funciones impuras, que siempre conllevan una serie de problemas. Los procedimientos son exactamente lo que usted describe aquí. Sintaxis para su ejemplo:

procedure proc_do_something(input_a : in integer range 0 to c_argument_max,
                            output_b : out integer range 0 to c_argument_max) is
begin
  counter <= counter + 1;
  output_b <= input_a & other_input;
  other_output <= input_a;
end procedure proc_do_something

La definición se realiza entre is y begin del proceso en el que se quiere usar. Sé que la declaración se puede hacer teóricamente en paquetes en caso de un comportamiento de Blackbox, aunque nunca antes había visto eso.

    
respondido por el DonFusili
0

Creo que las funciones harían lo que estás buscando

function BOOL_TO_SL(X : boolean)
              return std_ulogic is
begin
  if X then
    return '1';
  else
    return '0';
  end if;
end BOOL_TO_SL;
    
respondido por el Humpawumpa

Lea otras preguntas en las etiquetas