Un codificador de prioridad es un circuito o algoritmo que comprime múltiples entradas binarias en un número menor de salidas. La salida de un codificador de prioridad es la representación binaria del número original comenzando desde cero del bit de entrada más significativo. A menudo se utilizan para controlar las solicitudes de interrupción actuando sobre la entrada de interrupción de mayor prioridad.
Si se dan dos o más entradas al mismo tiempo, prevalecerá la entrada que tenga la prioridad más alta . [1] Se muestra un ejemplo de un codificador de un solo bit 4 a 2, donde las entradas de mayor prioridad están a la izquierda y "x" indica un valor irrelevante, es decir, cualquier valor de entrada allí produce la misma salida, ya que es reemplazado por un valor superior. entrada prioritaria. La salida V indica si la entrada es válida.
Yo 3 | Yo 2 | Yo 1 | Yo 0 | O 1 | O 0 | V |
---|---|---|---|---|---|---|
0 | 0 | 0 | 0 | X | X | 0 |
0 | 0 | 0 | 1 | 0 | 0 | 1 |
0 | 0 | 1 | X | 0 | 1 | 1 |
0 | 1 | X | X | 1 | 0 | 1 |
1 | X | X | X | 1 | 1 | 1 |
Los codificadores de prioridad se pueden conectar fácilmente en matrices para hacer codificadores más grandes, como un codificador de 16 a 4 hecho de seis codificadores de prioridad de 4 a 2: cuatro codificadores de 4 a 2 que tienen la fuente de señal conectada a sus entradas, y los dos codificadores restantes toman como entrada la salida de los cuatro primeros. El codificador de prioridad es una mejora en un circuito codificador simple, en términos de manejar todas las configuraciones de entrada posibles .
Construcción recursiva de codificadores de prioridad [2] [3] [4]
Un codificador de prioridad, también llamado detector de cero a la izquierda (LZD) o contador de cero a la izquierda (LZC), recibe un -bit vector de entrada y detecta el índice del primer '1' binario en el vector de entrada. Una señal válida indica si se detectó algún '1' binario en el vector de entrada, por lo que el índice es válido.
Los codificadores de prioridad se pueden construir de manera eficiente mediante recursividad. El vector de entrada se divide en fragmentos iguales con bits. Un codificador de prioridadcon un ancho más estrecho de 𝑛 / 𝑘 se aplica para cada fragmento. El bit válido de cada uno de los va a un un poco para detectar el primer fragmento válido. La ubicación de este fragmento es la parte más alta del índice general y dirige la ubicación exacta dentro del propio fragmento para producir la parte más baja del índice general.
La profundidad de la estructura propuesta es , mientras que la complejidad del área de hardware es . Si se utiliza Stratix V de Altera o un dispositivo equivalente, Se recomienda para lograr un mayor rendimiento y compresión de área, ya que el mux se puede implementar usando 6-LUT, por lo tanto, un ALM completo.
Un generador Verilog de código abierto para el codificador de prioridad recursivo está disponible en línea. [5]
Una descripción del comportamiento del codificador de prioridad en Verilog es la siguiente. [6]
// descripción del comportamiento del enconder de prioridad;// https://github.com/AmeerAbdelhadi/Indirectly-Indexed-2D-Binary-Content-Addressable-Memory-BCAMmódulo pe_bhv # ( parámetro OHW = 512 ) // ancho de entrada del codificador one-hot ( input clk , // reloj para codificador de prioridad canalizado input rst , // registra el reinicio para el codificador de prioridad canalizado input [ OHW - 1 : 0 ] oht , // entrada one-hot / [OHW -1: 0] salida reg [ `log2 ( OHW ) - 1 : 0 ] bin , // primer índice '1' / [` log2 (OHW) -1: 0] salida reg vld ); // binario es válido si se encontró uno // use el bucle while para una longitud de bucle no fija // sintetizable bien con QuartusII de Intel siempre @ ( * ) comenzar bin = { `log2 ( OHW ) { 1 'b0 }}; vld = oht [ bin ] ; mientras (( ! vld ) && ( bin ! = ( OHW - 1 ))) comienzan bin = bin + 1 ; vld = oht [ bin ]; final finalendmodule
Codificador simple
Un circuito codificador simple es un convertidor de uno a uno binario. Es decir, si hay 2 n líneas de entrada y, como máximo, solo una de ellas será alta, el código binario de esta línea 'activa' se genera en las líneas de salida de n bits.
Referencias
- ^ M. Morris Mano, Michael D. Ciletti, "Diseño digital", cuarta edición, Prentice Hall, 2006, ISBN 978-0-13-198924-5 .
- ^ Abdelhadi, Ameer MS (2016). Arquitectura de estructuras de memoria masivamente paralelas basadas en RAM de bloques: memorias multipuerto y memorias direccionables por contenido (Tesis). Universidad de Columbia Britanica.
- ^ Abdelhadi, Ameer MS; Lemieux, Guy GF (mayo de 2015). "Memorias direccionables de contenido binario basado en SRAM modular". 23º Simposio Internacional Anual de IEEE 2015 sobre Máquinas de Computación Personalizadas Programables en Campo : 207–214. doi : 10.1109 / FCCM.2015.69 . ISBN 978-1-4799-9969-9.
- ^ Abdelhadi, Ameer MS; Lemieux, Guy GF (diciembre de 2014). "Memorias direccionables de contenido binario profundo y estrecho usando BRAMs basados en FPGA". Conferencia internacional de 2014 sobre tecnología programable en campo (FPT) : 318–321. doi : 10.1109 / FPT.2014.7082808 . ISBN 978-1-4799-6245-7.
- ^ "https://github.com/AmeerAbdelhadi/Indirectly-Indexed-2D-Binary-Content-Addressable-Memory-BCAM/blob/master/pe" . Enlace externo en
|title=
( ayuda ) - ^ "AmeerAbdelhadi / Indirectly-Indexed-2D-Binary-Content-Addressable-Memory-BCAM" . GitHub . Consultado el 29 de febrero de 2020 .