1-aus-n-Decoder
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
BearbeitenDie 1-aus-n Codierung wird direkt in handelsüblichen Bauelementen realisiert.
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
BearbeitenDas folgende Beispiel zeigt einen 2-zu-4 Bit Kodierer in 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
Der zugehörige 4-zu-2 Bit Dekodierer kann wie folgt implementiert werden:
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
Implementierung in VHDL
BearbeitenDas folgende Beispiel zeigt einen 2-zu-4 Bit Kodierer in 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;
Der zugehörige 4-zu-2 Bit Dekodierer kann wie folgt implementiert werden:
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;