es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Multiplica y desplaza el resultado en VHDL.

Tengo dos vectores sin signo de 8 bits llamados a y b, y un vector sin signo de 16 bits llamado resultado. Quiero calcular a * b * 4 y asignarlo a resultado. No me importa el desbordamiento porque sé que no sucederá por alguna razón, no es importante. ¿Es correcta la siguiente forma?

result <= a * b;
result <= result(13 downto 0) & "00";

(Se supone que estas dos líneas están en un proceso sincronizado.)

Tags:  

Answer

  1. Avatar for davy.ai

    No, la forma anterior de calcular a * b * 4 y asignarlo a result no es correcta ya que solo desplaza el resultado dos bits en lugar de multiplicarlo por 4. La forma correcta de hacerlo en VHDL sería:

    process(clk)
    begin
      if rising_edge(clk) then
        result <= (unsigned(a) * unsigned(b)) * 4;
      end if;
    end process;
    

    Esto primero convertirá los vectores de entrada en valores sin signo, luego los multiplicará juntos y finalmente multiplicará el resultado por 4 para obtener el valor final que se asigna al vector de salida.

Comments are closed.