Problema en lugar VHDL std_logic_vector valores

votos
0

Estoy teniendo problemas para detectar los valores de lugar del número binario almacenado en el formato std_logic_vector. Por ejemplo, en el código de abajo Estoy tratando de ver lo que el valor de INST_SPEED es, entre 0 a 99 km / h. El código es muy largo, con muchos, si las condiciones.

if INST_SPEED > 0001001 and INST_SPEED < 0010100 then           -- if INST_SPEED > 9 & INST_SPEED < 20

       UPPER10 <= 0000001;                    -- UPPER10 = 1
       TEMP    <= std_logic_vector(unsigned(INST_SPEED) - 10);
       UPPER1 <= TEMP;                      -- LOWER10 = INST_SPEED - 10
      elsif INST_SPEED > 0010011 and INST_SPEED < 0011110 then  -- if INST_SPEED > 19 & INST_SPEED < 30
       UPPER10 <= 0000010;                    -- UPPER10 = 2
       TEMP    <= std_logic_vector(unsigned(INST_SPEED) - 20);
       UPPER1 <= TEMP;                      -- LOWER10 = INST_SPEED - 20
      elsif INST_SPEED > 0011101 and INST_SPEED < 101000 then   -- if INST_SPEED > 29 & INST_SPEED < 40
       UPPER10 <= 0000011;                    -- UPPER10 = 3
       TEMP    <= std_logic_vector(unsigned(INST_SPEED) - 30);
       UPPER1 <= TEMP;                      -- LOWER10 = INST_SPEED - 30

Sin embargo, ahora tengo que escribir un código similar para la detección de un valor en el rango de 0-999. Si voy por esta lógica, eso significa 90 por ejemplo, si las condiciones!

¿Alguien sabe de una manera más inteligente más simple de ir sobre este proceso? Esto realmente me ayudaría, gracias por adelantado!

Publicado el 23/06/2011 a las 18:42
fuente por usuario
En otros idiomas...                            


2 respuestas

votos
0

Opciones par que se me ocurren:

  1. ¿Qué hay de la creación de una gran LUT (tabla de consulta) que será almacenada en una ROM? La dirección sería el valor INST_SPEED, y la salida sería UPPER10 o TEMP. Se podría generar los contenidos de la ROM con un guión (fuera de VHDL) y luego pegarlo en el código, o la carga de un archivo con el apoyo de OI archivo VHDL.
  2. ¿Realmente no hay patrón simple entre las entradas y salidas? ¿Esto es una función matemática que podría derivar en su lugar?
Respondida el 23/06/2011 a las 20:00
fuente por usuario

votos
0

Cambiar el problema. Sugiero ya sea la aplicación de una función de módulo convertir de su valor binario a un valor de base diez (esto podría ser bastante pequeña si no tiene que actualizar rápidamente) o puede ser más fácil el uso BCD para el valor INST_SPEED.

Como usted está codificación de las cosas ahora, que realmente necesita una función de división / módulo, que es lo que estás tratando de codificar con todos sus condicionales. Dependiendo de su destino, que puede ser capaz de hacer esto para "libre" (es decir: tal vez la FPGA que está utilizando tiene multiplicadores de hardware disponibles no utilizados?).

Respondida el 23/06/2011 a las 19:47
fuente por usuario

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more