Zum Inhalt springen

1-aus-n-Decoder

aus Wikipedia, der freien Enzyklopädie
Datei:1-aus-n-Decoder.svg
Schaltung eines 1-aus-n-Decoders
Bei monolithischen integrierten Schaltkreisen werden statt der Und-Gatter häufig NAND-Gatter verwendet.

Ein 1-aus-n-Decoder ist eine Schaltung mit n Ausgängen und log2(n) Eingängen. In der Praxis muss aber die Anzahl der Eingänge auf die nächste ganze Zahl aufgerundet werden, wenn log2(n) keine ganze Zahl ist. Der jeweils adressierte Ausgang geht dann auf High, wenn die Dualzahl A am Eingang der Nummer J des betreffenden Ausgangs yJ entspricht. Die anderen Ausgänge werden dann nicht angesteuert und bleiben auf Low.

Wert Eingang Ausgang
A=J a1 a0 y3 y2 y1 y0
0 0 0 0 0 0 1
1 0 1 0 0 1 0
2 1 0 0 1 0 0
3 1 1 1 0 0 0

Bausteine

Die 1-aus-n Codierung wird direkt in handelsüblichen Bauelementen realisiert.

Gebräuchliche IC-Bausteine
Familie CMOS HCMOS TTL Funktion
74xx138 74HC138 74LS138 3 zu 8 Dekoder/Demultiplexer
74xx147 74HC147 74LS147 10 zu 4 (Dezimal zu BCD) Encoder
74xx148 74HC148 74LS148 8 zu 3 Prioritäts-Encoder
74xx151 74HC151 74LS151 8 zu 1 Multiplexer
74xx238 74HC238 74LS238 3 zu 8 Dekoder/Demultiplexer
74xx42 74HC42 74LS42 10 zu 4 (Dezimal zu BCD) Dekoder
74xx4538 74HC4538 74LS4538 4 zu 16 Dekoder/Demultiplexer
74xx4028 CD4028 74HC4028 74LS4028 10 zu 4 (Dezimal zu BCD) Dekoder
CD4532B 8 zu 3 Prioritäts-Encoder
74xx4514 CD4514B, CD4515B 74HC4514 74LS4514 10 zu 4 (Dezimal zu BCD) Encoder
(Teil eines größeren Dekoder/Multiplexer-Systems)
74xx4051 CD4051B, CD4052B, CD4053B 74HC4051 74LS4051 3 zu 8 Encoder

Diese Logikfunktion wird darüber hinaus in komplexen integrierten Logikbauelementen verwendet. Beispielsweise wird diese Funktion als Zeilendecoder und Spaltendecoder zur Adressierung der Zeilen und Spalten in Speicherbauelementen (RAM, ROM, EEPROM, …) verwendet. Darüber hinaus kann diese Logikfunktion auch in einer programmierbaren logischen Schaltung (PLD) oder einem FPGA-Bauelement oder einem ASIC-Bauelement realisiert werden.

Implementierung in Verilog

Das folgende Beispiel zeigt einen 2-zu-4 Bit Kodierer in Verilog:

<syntaxhighlight lang="verilog"> module one_hot_encoder (

   input [1:0] binary_in,
   output reg [3:0] one_hot_out

);

always @(*) begin

   case (binary_in)
       2'b00: one_hot_out = 4'b0001;
       2'b01: one_hot_out = 4'b0010;
       2'b10: one_hot_out = 4'b0100;
       2'b11: one_hot_out = 4'b1000;
       default: one_hot_out = 4'b0000;
   endcase

end

endmodule </syntaxhighlight>

Der zugehörige 4-zu-2 Bit Dekodierer kann wie folgt implementiert werden:

<syntaxhighlight lang="verilog"> module one_hot_decoder (

   input [3:0] one_hot_in,
   output reg [1:0] binary_out

);

always @(*) begin

   case (one_hot_in)
       4'b0001: binary_out = 2'b00;
       4'b0010: binary_out = 2'b01;
       4'b0100: binary_out = 2'b10;
       4'b1000: binary_out = 2'b11;
       default: binary_out = 2'b00; // Default case to handle invalid one-hot inputs
   endcase

end

endmodule </syntaxhighlight>

Implementierung in VHDL

Das folgende Beispiel zeigt einen 2-zu-4 Bit Kodierer in VHDL:

<syntaxhighlight lang="vhdl"> library IEEE; use IEEE.STD_LOGIC_1164.ALL;

entity one_hot_encoder is

   Port ( binary_in : in STD_LOGIC_VECTOR (1 downto 0);
          one_hot_out : out STD_LOGIC_VECTOR (3 downto 0));

end one_hot_encoder;

architecture Behavioral of one_hot_encoder is begin

   process(binary_in)
   begin
       case binary_in is
           when "00" => one_hot_out <= "0001";
           when "01" => one_hot_out <= "0010";
           when "10" => one_hot_out <= "0100";
           when "11" => one_hot_out <= "1000";
           when others => one_hot_out <= "0000"; -- Default case, though it shouldn't occur
       end case;
   end process;

end Behavioral; </syntaxhighlight>

Der zugehörige 4-zu-2 Bit Dekodierer kann wie folgt implementiert werden:

<syntaxhighlight lang="vhdl"> library IEEE; use IEEE.STD_LOGIC_1164.ALL;

entity one_hot_decoder is

   Port ( one_hot_in : in STD_LOGIC_VECTOR (3 downto 0);
          binary_out : out STD_LOGIC_VECTOR (1 downto 0));

end one_hot_decoder;

architecture Behavioral of one_hot_decoder is begin

   process(one_hot_in)
   begin
       case one_hot_in is
           when "0001" => binary_out <= "00";
           when "0010" => binary_out <= "01";
           when "0100" => binary_out <= "10";
           when "1000" => binary_out <= "11";
           when others => binary_out <= "00"; -- Default case to handle invalid one-hot inputs
       end case;
   end process;

end Behavioral; </syntaxhighlight>

Siehe auch