Codificador de prioritat

Gate-level diagram of a single bit 4-to-2 Priority Encoder
Diagrama de nivell de porta lògica d'un codificador de prioritat de 4 a 2 bits. I(3) té la màxima prioritat.

Un codificador de prioritat és un circuit electrònic o algorisme que comprimeix múltiples entrades binàries en un nombre més petit de sortides, similar a un codificador simple. La sortida d'un codificador de prioritat és la representació binària de l'índex de la línia activada o bit més significatiu. A diferència del codificador simple, si dues o més entrades del codificador de prioritat estan actives al mateix temps, l'entrada que tingui la prioritat més alta tindrà prioritat. És una millora en un codificador simple perquè pot gestionar totes les combinacions d'entrada possibles, però a costa d'una lògica addicional.[1]

Les aplicacions dels codificadors de prioritat inclouen el seu ús en controladors d'interrupció programable (per permetre que algunes sol·licituds d'interrupció tinguin una prioritat més alta que altres), codificació binària i conversió d'analògic a digital/digital a analògic.[2]

Es mostra una taula de veritat d'un codificador de prioritat de 4 a 2 bits únic, on les entrades es mostren en ordre decreixent de prioritat d'esquerra a dreta, i "x" indica un terme que no importa, és a dir, qualsevol valor d'entrada allà produeix la mateixa sortida ja que és substituïda per una entrada de prioritat més alta. La sortida "v" (generalment inclosa) indica si l'entrada és vàlida.

Els codificadors de prioritat es poden connectar fàcilment en matrius per fer codificadors més grans, com ara un codificador de 16 a 4 fet de sis codificadors de prioritat de 4 a 2: quatre codificadors de 4 a 2 amb la font de senyal connectada a les seves entrades, i els dos codificadors restants prenen la sortida dels quatre primers com a entrada.

Construcció recursiva de codificadors de prioritat[3][4][5]

Un codificador de prioritat, també anomenat detector de zero inicial (LZD) o comptador de zero inicial (LZC), rep un -bit vector d'entrada i detecta l'índex del primer binari '1' al vector d'entrada. Un senyal vàlid indica si s'ha detectat algun '1' binari al vector d'entrada, per tant l'índex és vàlid.

Els codificadors de prioritats es poden construir de manera eficient mitjançant recursivitat. El vector d'entrada es divideix en fragments iguals amb bits. Un codificador de prioritat amb una amplada més estreta de 𝑛/𝑘 s'aplica per a cada fragment. El bit vàlid de cadascun dels va a bit per detectar el primer fragment vàlid. La ubicació d'aquest fragment és la part més alta de l'índex global i dirigeix la ubicació exacta dins del mateix fragment per produir la part inferior de l'índex global.

La profunditat de l'estructura proposada és , mentre que la complexitat de l'àrea de maquinari és . Si s'utilitza el Stratix V d'Altera o un dispositiu equivalent, Es recomana aconseguir un major rendiment i compressió d'àrea, ja que el mux es pot implementar mitjançant 6-LUT, per tant un ALM sencer.

Hi ha disponible en línia un generador Verilog de codi obert per al codificador de prioritat recursiu.

Priority-encoder (left) symbol (right) recursive definition.
Definició recursiva del símbol del codificador de prioritat (esquerra) (dreta).

Una descripció del comportament del codificador de prioritat a Verilog és la següent.

// behavioural description of priority enconder;
// https://github.com/AmeerAbdelhadi/Indirectly-Indexed-2D-Binary-Content-Addressable-Memory-BCAM

module pe_bhv
 #( parameter OHW = 512 ) // encoder one-hot input width
 ( input clk , // clock for pipelined priority encoder
 input rst , // registers reset for pipelined priority encoder
 input [ OHW -1:0] oht , // one-hot input / [ OHW -1:0]
 output reg [`log2(OHW)-1:0] bin , // first '1' index/ [`log2(OHW)-1:0]
 output reg vld ); // binary is valid if one was found

 // use while loop for non fixed loop length
 // synthesizable well with Intel's QuartusII
 always @(*) begin
 bin = {`log2(OHW){1'b0}};
 vld = oht[bin] ;
 while ((!vld) && (bin!=(OHW-1))) begin
 bin = bin + 1 ;
 vld = oht[bin];
 end
 end

endmodule

Codificador simple

A simple 4:2 Encoder using OR gate.
Un codificador senzill 4:2 que utilitza la porta OR.

Un circuit codificador simple és un convertidor d'one-hot a binari. És a dir, si hi ha 2n línies d'entrada, i com a màxim només una d'elles serà alta, el codi binari d'aquesta línia "calenta" es produeix a les línies de sortida d'n bits.

Referències

  1. ↑ Mano, Moshe Morris. Digital Design (en anglès). Fourth. Upper Saddle River, NJ: Pearson Prentice Hall, 2007, p. 156. ISBN 978-0-13-198924-5.
  2. ↑ The TTL Applications Handbook (en anglès). Fairchild Semiconductor, August 1973, p. 4-4.
  3. ↑ Architecture of block-RAM-based massively parallel memory structures : multi-ported memories and content-addressable memories (tesi) (en anglès), 2016.
  4. ↑ Abdelhadi, Ameer M.S.. «Modular SRAM-Based Binary Content-Addressable Memories». A: 2015 IEEE 23rd Annual International Symposium on Field-Programmable Custom Computing Machines (en anglès), May 2015, p. 207–214. DOI 10.1109/FCCM.2015.69. ISBN 978-1-4799-9969-9.
  5. ↑ Abdelhadi, Ameer M. S.. «Deep and narrow binary content-addressable memories using FPGA-based BRAMs». A: 2014 International Conference on Field-Programmable Technology (FPT) (en anglès), December 2014, p. 318–321. DOI 10.1109/FPT.2014.7082808. ISBN 978-1-4799-6245-7.