Puedo hacer sumas, restas y divisiones, pero no puedo hacer multiplicaciones

1

Aquí están mis archivos topmodule y testbench. ¿Cuál es mi error?

library IEEE;
use IEEE.NUMERIC_STD.ALL;

entity celcius_to_fah is  
  Port ( c : in unsigned (6 downto 0);
         f : out unsigned (8 downto 0));
  constant coef: unsigned(7 downto 0):="00100000";
end celcius_to_fah;

architecture dataflow_model of celcius_to_fah is
begin
  f <= coef2*c;
end dataflow_model;

testbench

library IEEE;
use IEEE.NUMERIC_STD.ALL;

entity sim is
end sim;

architecture dataflow of sim is
  component celcius_to_fah
     Port ( c : in unsigned (6 downto 0);
            f : out unsigned (8 downto 0));
  end component;

  signal ct: unsigned (6 downto 0):="0000100";
  signal ft: unsigned (8 downto 0);

begin

  uut: celcius_to_fah port map(c=>ct , f=>ft);

  process
  begin
    wait for 5ns;
    ct<="0001000";
  end process;

end dataflow;
    
pregunta Alaz Ozer

1 respuesta

2

Ahora que ha identificado la solución, le ayudaré a comprender por qué.

Está multiplicando un número de 7 bits con un valor máximo de 127 por un número de 8 bits con un valor máximo de 255. Si hace los cálculos, encontrará que el valor máximo del producto es 32,385, que necesita al menos 15 bits para ser representados como un número binario.

El valor real que usaste para coef2 fue 32, así que para valores pequeños de c obtuviste el valor correcto para f. Si sabe que el coeficiente realmente encajará en 6 bits, entonces solo necesitará 13 bits para el producto.

    
respondido por el Elliot Alderson

Lea otras preguntas en las etiquetas