Codificador de prioritat

De testwiki
Salta a la navegació Salta a la cerca
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 n -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 k fragments iguals amb n/k bits. Un codificador de prioritat PEn/k amb una amplada més estreta de 𝑛/𝑘 s'aplica per a cada fragment. El bit vàlid de cadascun dels kPEn/k va a a k bit PEn/k 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 logkn, mentre que la complexitat de l'àrea de maquinari és 𝒪(n). Si s'utilitza el Stratix V d'Altera o un dispositiu equivalent, k=4 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

Plantilla:Referències