¿Cómo obtener el bit más significativo siendo uno en VHDL?

0

Diga en VHDL que tengo una entidad con como entrada un vector de 8 bits:

libary ieee;
use ieee.std_logic_1164.all;

entity example is
port(
    clk : in std_logic;
    inputvector : in std_logic_vector(7 downto 0);
    outputvector : out std_logic_vector(2 downto 0)
);
end entity example;

Quiero generar la posición del bit más significativo siendo uno en el vector de entrada (comenzando con el conteo desde cero).

Por ejemplo, si \ $ \ text {inputvector} = [\ underset {7} 0, \ underset {6} 0, \ underset {5} 1, \ underset {4} 0, \ underset {3} 1 , \ underset {2} 1, \ underset {1} 0, \ underset {0} 1] \ $, el bit más significativo es el bit \ $ 5 \ $. Y como \ $ (5) _ {\ text {decimal}} = (101) _ \ text {binary} \ $, la salida debe ser \ $ \ text {outputvector} = [1, 0,1] \ $.

¿Qué necesito para escribir en la arquitectura de example para lograr esto?

Gracias de antemano.

Editar: Cómo haría esto en Matlab o Python (con from numpy import ceil, log2 ):

ceil(log2(x)) - 1

con x el valor de entrada. Entonces \ $ x = (101101) _ \ text {binary} = (45) _ \ text {decimal} \ $ daría

>> ceil(log2(45)) - 1

ans =

     5
    
pregunta Kevin

1 respuesta

1

Lo que está pidiendo se llama 'Codificador de prioridad'. Para ver un ejemplo, vea esta pregunta existente:

enlace

Mirando ese ejemplo, reemplazaría switch con su entrada y asignaría su salida usando highest_switch .

    
respondido por el scary_jeff

Lea otras preguntas en las etiquetas