Лекция 5. Дешифратор және Шифратор. Комбинациялық логикалық құрылғы жобалау және синтездеу.
Лекция 5. Дешифратор және Шифратор. Комбинациялық логикалық құрылғы жобалау және синтездеу.
Дешифратор және Шифратор. Комбинациялық логикалық құрылғы жобалау және синтездеу.
Дешифратор және Шифратор. Комбинациялық логикалық құрылғы жобалау және синтездеу.
Тақырып: Декодер (Дешифратор) және Кодтағыш (Шифратор). Комбинациялық логикалық құрылғыны жобалау және синтездеу
---
1. Теориялық мәліметтер
# 1.1 Декодер (Дешифратор)
Декодер – бұл комбинациялық логикалық құрылғы, оның мақсаты – кіріс сигналдардағы екілік кодтарды нақты шығысқа сәйкес логикалық деңгейге түрлендіру. Яғни, декодер әртүрлі екілік кодтарды нақты шығысқа аударып, тек бір шығысты белсенді күйге жеткізеді.
Мысалы, 2-ден 4-ке дейінгі декодерде 2 кіріс және 4 шығыс бар. Осы екі кіріс комбинациялары арқылы 4 түрлі шығыс мәндерінің біреуі ғана белсенді бола алады. Әрбір екілік комбинацияға бір ғана шығыс сәйкес келеді, ал қалғандары 0 күйінде болады.
Ақиқат кестесі (2-ден 4-ке дейінгі декодер):
| A1 | A0 | Y0 | Y1 | Y2 | Y3 |
|----|----|----|----|----|----|
| 0 | 0 | 1 | 0 | 0 | 0 |
| 0 | 1 | 0 | 1 | 0 | 0 |
| 1 | 0 | 0 | 0 | 1 | 0 |
| 1 | 1 | 0 | 0 | 0 | 1 |
Бұл кестеден әрбір екілік комбинация тек бір шығысты белсенді ететіні көрінеді. Бұл декодердің әрбір шығысын логикалық өрнектер арқылы былай жазуға болады:
- Y0 = NOT(A1) AND NOT(A0)
- Y1 = NOT(A1) AND A0
- Y2 = A1 AND NOT(A0)
- Y3 = A1 AND A0
# 1.2 Кодтағыш (Шифратор)
Кодтағыш декодерге қарама-қарсы функция орындайды. Ол бірнеше кіріс сигналдарын белгілі бір екілік кодқа түрлендіреді, яғни бірнеше кіріс комбинацияларының біреуі белсенді болғанда, шығыс сигналдар жиынтығы сол комбинацияға сәйкес екілік кодты береді.
Мысалы, 4-ден 2-ге дейінгі кодтағышта 4 кіріс және 2 шығыс бар. Әрбір белсенді кіріс сигнал белгілі бір екілік кодқа айналады.
Ақиқат кестесі (4-ден 2-ге дейінгі кодтағыш):
| D0 | D1 | D2 | D3 | Y1 | Y0 |
|----|----|----|----|----|----|
| 1 | 0 | 0 | 0 | 0 | 0 |
| 0 | 1 | 0 | 0 | 0 | 1 |
| 0 | 0 | 1 | 0 | 1 | 0 |
| 0 | 0 | 0 | 1 | 1 | 1 |
Бұл кесте бойынша әрбір кіріс комбинациясы екілік кодқа түрленеді. Логикалық өрнектер арқылы әрбір шығысты былай анықтауға болады:
- Y0 = D1 OR D3
- Y1 = D2 OR D3
---
2. Verilog тілінде декодер және кодтағышты жазу
Verilog тілінде декодер және кодтағышты оңай сипаттауға болады. Төменде 2-ден 4-ке дейінгі декодер және 4-ден 2-ге дейінгі кодтағыштың Verilog кодын егжей-тегжейлі қарастырамыз.
---
# 2.1 2-ден 4-ке дейінгі декодердің Verilog коды
Алдымен декодердің Verilog тілінде қалай жазылатынын қарастырайық.
```verilog
module decoder_2to4 (
input wire [1:0] in, // 2-биттік кіріс
output reg [3:0] out // 4-биттік шығыс
);
always @(*) begin
case (in)
2'b00: out = 4'b0001; // кіріс 00 болғанда, шығыс Y0 белсенді
2'b01: out = 4'b0010; // кіріс 01 болғанда, шығыс Y1 белсенді
2'b10: out = 4'b0100; // кіріс 10 болғанда, шығыс Y2 белсенді
2'b11: out = 4'b1000; // кіріс 11 болғанда, шығыс Y3 белсенді
default: out = 4'b0000; // барлық басқа жағдайларда шығыс 0
endcase
end
endmodule
```
Кодтың түсіндірмесі:
1. `module decoder_2to4` – Verilog-та модульді анықтау кілт сөзі, онда `decoder_2to4` модулінің атауы.
2. `input wire [1:0] in` – 2-биттік кіріс, яғни бұл 2-ден 4-ке дейінгі декодер болғандықтан, 2-биттік екілік кодты қабылдайды.
3. `output reg [3:0] out` – 4-биттік шығыс, әрбір шығыс декодталған мәнге сәйкес белсенді болады.
4. `always @(*)` – бұл процедураның барлық кіріс сигналдарының өзгеруіне тәуелді екенін білдіреді.
5. `case` операторы – кіріс комбинацияларына байланысты сәйкес шығысты анықтайды.
---
# 2.2 4-ден 2-ге дейінгі кодтағыштың Verilog коды
Енді 4-ден 2-ге дейінгі кодтағышты Verilog-та сипаттаймыз.
```verilog
module encoder_4to2 (
input wire [3:0] in, // 4-биттік кіріс
output reg [1:0] out // 2-биттік шығыс
);
always @(*) begin
case (in)
4'b0001: out = 2'b00; // D0 белсенді болғанда шығыс 00
4'b0010: out = 2'b01; // D1 белсенді болғанда шығыс 01
4'b0100: out = 2'b10; // D2 белсенді болғанда шығыс 10
4'b1000: out = 2'b11; // D3 белсенді болғанда шығыс 11
default: out = 2'b00; // басқа жағдайларда шығыс 00
endcase
end
endmodule
```
Кодтың түсіндірмесі:
1. `module encoder_4to2` – Verilog-та модульді анықтау, мұнда `encoder_4to2` кодтағыш модулі сипатталған.
2. `input wire [3:0] in` – 4-биттік кіріс сигналдары, әрбір кіріс комбинациясы екілік кодқа түрлендіріледі.
3. `output reg [1:0] out` – 2-биттік шығыс, бұл шығыс комбинацияларына сәйкес екілік мән береді.
4. `always @(*)` – барлық кірістердің өзгеруін бақылау үшін қажет.
5. `case` операторы – әрбір кіріс комбинациясына сәйкес шығысты анықтайды.
---
Қорытынды
Декодерлер мен кодтағыштар – сандық құрылғыларда ақпаратты түрлендіру, кодтау және декодтау үшін кеңінен қолданылатын комбинациялық логикалық құрылғылар. Verilog тілінде декодерлер мен кодтағыштарды жобалау комбинациялық логикалық функцияларды оңай сипаттауға мүмкіндік береді. Түсіндірілген Verilog кодтары арқылы осы құрылғыларды практикада қолдануға болады және сандық схемаларды тиімді жүзеге асыруға болады.