Pelajaran Teach
Logik digital pada DE1-SoC (2/6): jadual kebenaran, SOP/POS, peta Karnaugh dan pemultipleks
Hubungkan jadual kebenaran, bentuk Boolean, peta Karnaugh dan pemultipleks, kemudian uji logik gabungan minimum pada DE1-SoC.
Kali pertama menggunakan LabsLand? Cipta akaun guru anda
Hasil pembelajaran
Terbitkan bentuk jumlah hasil darab (SOP) dan hasil darab jumlah (POS) daripada jadual kebenaran.
Minimumkan fungsi Boolean dengan peta Karnaugh dan dapatkan ungkapan ringkas.
Bandingkan bentuk kanonik dengan bentuk minimum pada perkakasan sebenar dan sahkan kedua-duanya sepadan.
Bina dan sahkan pemultipleks 4-kepada-1 yang menghalakan satu daripada empat input ke output.
Pratonton aktiviti pelajar
Kandungan aktiviti
Pratonton sahaja. Dalam sesi kelas, pelajar boleh mengisi jawapan dan menyerahkan hasil kerja mereka kepada guru.
Daripada jadual kebenaran kepada litar
8 min
Dalam Pelajaran 1, anda menyambungkan get tunggal kepada suis. Reka bentuk sebenar bermula satu tahap lebih tinggi: tentukan perkara yang patut dilakukan oleh litar, lazimnya sebagai jadual kebenaran, kemudian cari rangkaian get yang menghasilkan tingkah laku itu. Pelajaran ini mendapatkan satu fungsi daripada kedua-dua arah sebelum mengecilkannya.
Fungsi bagi dua latihan pertama ialah F(C,B,A), dengan tiga input. Gunakan SW[0]=A, SW[1]=B, SW[2]=C dan paparkan hasil pada LEDR[0]. Baris berikut mengikut kiraan binari C B A daripada 000 hingga 111:
- Baris 0: C B A = 0 0 0 → F=0
- Baris 1: C B A = 0 0 1 → F=1
- Baris 2: C B A = 0 1 0 → F=0
- Baris 3: C B A = 0 1 1 → F=1
- Baris 4: C B A = 1 0 0 → F=1
- Baris 5: C B A = 1 0 1 → F=0
- Baris 6: C B A = 1 1 0 → F=1
- Baris 7: C B A = 1 1 1 → F=0
F bernilai 1 pada empat daripada lapan baris dan 0 pada empat baris lain. Kenal pasti sendiri sebelum menjawab. Baris F=1 menghasilkan jumlah hasil darab, manakala baris F=0 menghasilkan hasil darab jumlah. Gunakan jadual yang sama sepanjang kedua-dua latihan.
Ingat konvensyen papan: suis ke atas ialah logik 1, dan LEDR aktif-tinggi, jadi LED menyala apabila output bernilai 1. Semua litar di sini bersifat gabungan; output hanya bergantung pada kedudukan suis semasa dan tidak memerlukan jam.
Pada berapa baris F bernilai 1, dan baris yang manakah?
Jumlah hasil darab dan peta Karnaugh
14 min
Minterma. *Minterma* ialah satu sebutan AND (hasil darab) yang dibina daripada semua input; setiap input muncul sekali, sama ada biasa atau disangkal. Ia bernilai 1 pada tepat satu baris. Bagi tiga input terdapat lapan minterma. Baris 1 ialah C=0, B=0, A=1, jadi mintermanya (~C & ~B & A), yang hanya bernilai 1 untuk gabungan itu.
Jumlah hasil darab kanonik (SOP). Gabungkan dengan OR minterma setiap baris yang mempunyai F=1. Oleh sebab setiap minterma hanya bernilai 1 pada barisnya sendiri, OR tersebut tepat sepadan dengan baris F=1. Tulis sendiri keempat-empat minterma. Jangan langkau bentuk penuh kerana anda akan mengujinya sebelum bentuk minimum.
Peminimuman dengan peta Karnaugh. *Peta Karnaugh* menyusun semula jadual supaya sel bersebelahan hanya berbeza pada satu input. Apabila dua 1 bersebelahan dikumpulkan, pemboleh ubah yang *berubah* dalam pasangan itu tidak penting dan boleh digugurkan. Rajah menandakan empat sel 1 serta dua kumpulan. Bagi setiap kumpulan, tentukan input yang kekal, input yang berubah dan sebutan hasil darab yang tinggal.
Peta Karnaugh bagi F. Bandingkan dua sel dalam setiap pasangan, gugurkan pemboleh ubah yang berubah dan gunakan pemboleh ubah yang kekal untuk membentuk sebutan ringkas.
Tulis ungkapan SOP kanonik penuh bagi F(C,B,A) daripada empat baris yang mempunyai F=1. Gunakan ~ untuk NOT, & untuk AND dan | untuk OR.
Daripada peta, tulis sebutan hasil darab ringkas bagi setiap kumpulan. Nyatakan pemboleh ubah yang berubah lalu hilang. Kemudian gabungkan kedua-dua sebutan menjadi ungkapan minimum bagi F.
Adakah mana-mana pemboleh ubah input hilang daripada ungkapan minimum? Terangkan maksudnya terhadap kebergantungan F. Cari dua baris yang hanya berbeza pada pemboleh ubah itu dan nyatakan nombor baris serta nilai F untuk menyokong jawapan.
Bina SOP kanonik, kemudian bentuk minimum
14 min
Laksanakan fungsi pada papan sebenar. Jalankan SOP kanonik dahulu dan sahkan semua lapan baris. Kemudian edit kod permulaan yang sama untuk menguji ungkapan minimum daripada peta.
Gantikan TODO_CANONICAL_SOP_EXPRESSION dengan SOP penuh. Selepas mengesahkannya, ganti baris yang sama dengan ungkapan minimum dan sintesis sekali lagi.
// Pelajaran 2 - Latihan 1-B: kod permulaan jumlah hasil darab (SOP)
// F(C,B,A): gunakan baris jadual yang mempunyai F=1. SW[0]=A, SW[1]=B, SW[2]=C.
// Isi SOP kanonik dahulu, kemudian gantikannya dengan ungkapan minimum peta Karnaugh.
module leds_mirror(SW, LEDR);
input [9:0] SW;
output [9:0] LEDR;
wire A = SW[0];
wire B = SW[1];
wire C = SW[2];
// Langkah 1: satu sebutan hasil darab bagi setiap baris F=1.
assign LEDR[0] = TODO_CANONICAL_SOP_EXPRESSION;
// Langkah 2: selepas mengesahkan bentuk kanonik, ganti baris di atas
// dengan ungkapan minimum dan jalankan sintesis sekali lagi.
assign LEDR[9:1] = 9'b0;
endmoduleBuka makmal Verilog DE1-SoC. Editor memaparkan
leds_mirror.v.Pilih semua kandungan fail itu dan gantikan dengan modul di atas. Kekalkan nama
leds_mirror.Gantikan
TODO_CANONICAL_SOP_EXPRESSIONdengan SOP kanonik. Kekalkan tepat satu barisassign LEDR[0] = ...;.Klik Synthesize (Bina/sintesis). Jika lawatan berpandu menutup butang, tutup atau langkau dahulu. Tunggu kira-kira 1–3 minit. Baiki tanda koma bertitik atau kurungan jika ada ralat dan ulangi sehingga binaan berjaya dengan 0 ralat.
Klik Upload to FPGA (Muat naik ke FPGA) dan tunggu sesi papan serta kamera.
Uji
SW[2:0](C B A) bagi000, 001, 010, 011, 100, 101, 110, 111. BacaLEDR[0]pada kamera dan rekod setiap hasil.Untuk langkah kedua, ubah baris
assign LEDR[0]kepada ungkapan minimum. Sintesis dan muat naik semula. Uji sekurang-kurangnya tiga baris, termasuk satuF=0dan satuF=1, lalu sahkan bentuk minimum sepadan dengan bentuk kanonik.
Tetapkan SW[2:0] = C B A bagi setiap baris dan rekod LEDR[0] pada kamera (1 = menyala, 0 = padam). Bandingkan SOP kanonik dengan ungkapan minimum.
| C = SW2 | B = SW1 | A = SW0 | F = LEDR0 (diperhatikan) |
|---|---|---|---|
Adakah SOP kanonik dan ungkapan minimum menghasilkan LEDR[0] yang sama pada baris yang diuji? Nyatakan dalam satu ayat perkara yang disahkan tentang kedua-dua ungkapan.
Hantar bukti. Ambil tangkap layar kamera apabila ungkapan minimum berjalan pada satu baris yang diramalkan F=1. Nyatakan baris C B A yang dipilih.
> Bonus pilihan (tiada muat naik diperlukan). Jika Quartus memaparkan laporan sumber, sintesis SOP kanonik dan ungkapan minimum lalu bandingkan bilangan elemen logik. Laporan itu tidak tersedia dalam setiap sesi, jadi perbandingan ini bukan bukti wajib.
Fungsi yang sama sebagai hasil darab jumlah
14 min
SOP membina F daripada baris 1. Hasil darab jumlah (POS) membina F yang sama daripada baris 0.
Maksterma. *Maksterma* ialah satu sebutan OR (jumlah) yang menggunakan semua input dan bernilai 0 pada tepat satu baris. Bagi baris 0 (C=0, B=0, A=0), maksterma ialah (A | B | C), yang hanya bernilai 0 apabila semua input 0.
Hasil darab jumlah kanonik. Gabungkan dengan AND maksterma setiap baris F=0. Setiap maksterma memaksa output 0 pada barisnya sendiri dan membiarkannya 1 pada baris lain. Kenal pasti empat baris F=0 dan tulis makstermanya.
// Pelajaran 2 - Latihan 1-C: kod permulaan hasil darab jumlah (POS)
// F(C,B,A) yang sama. Gunakan baris F=0 untuk menulis maksterma.
module leds_mirror(SW, LEDR);
input [9:0] SW;
output [9:0] LEDR;
wire A = SW[0];
wire B = SW[1];
wire C = SW[2];
// POS kanonik: satu sebutan jumlah bagi setiap baris F=0, digabungkan dengan AND.
assign LEDR[0] = TODO_CANONICAL_POS_EXPRESSION;
assign LEDR[9:1] = 9'b0;
endmoduleGantikan semua kandungan
leds_mirror.vdengan modul POS di atas. Kekalkan namaleds_mirror.Gantikan
TODO_CANONICAL_POS_EXPRESSIONdengan POS kanonik bagiF.Klik Synthesize, baiki sebarang ralat dan ulangi sintesis.
Klik Upload to FPGA dan tunggu kamera.
Uji lapan gabungan
SW[2:0](C B A) daripada000 ... 111. Sahkan POS memberikan hasil yang sama dengan jadual SOP.Jika satu baris berbeza, periksa maksterma dan kedudukan
SW[2]=C,SW[1]=B,SW[0]=A.
Bagi F ini, bagaimana saiz POS kanonik berbanding SOP kanonik?
Pemultipleks 4-kepada-1
12 min
Pemultipleks (MUX) menghalakan satu daripada beberapa input data kepada satu output, berdasarkan garis pemilih. MUX 4-kepada-1 mempunyai empat input data dan dua garis pemilih kerana dua bit memilih antara 2^2 = 4 input.
- Input data: SW[3]=D3, SW[2]=D2, SW[1]=D1, SW[0]=D0
- Garis pemilih: SW[5]=S1, SW[4]=S0
- Output: LEDR[0] = Y
Nilai {S1, S0} memilih 00 → D0, 01 → D1, 10 → D2, 11 → D3. Modul menggunakan case dalam always @(*). Cabang default penting: jika suatu laluan membiarkan Y tanpa nilai, pensintesis akan menyimpulkan selak (latch) untuk mengingati nilai lama. Itu menambah ingatan yang tidak dikehendaki kepada litar gabungan. Menetapkan Y pada setiap laluan mengelakkan selak.
// Pelajaran 2 - Latihan 1-D: pemultipleks 4-kepada-1
// Data: SW[3]=D3, SW[2]=D2, SW[1]=D1, SW[0]=D0
// Pemilih: SW[5]=S1, SW[4]=S0. Output: LEDR[0]=Y.
module leds_mirror(SW, LEDR);
input [9:0] SW;
output [9:0] LEDR;
wire D0 = SW[0], D1 = SW[1], D2 = SW[2], D3 = SW[3];
wire S0 = SW[4], S1 = SW[5];
reg Y;
always @(*) begin
case ({S1, S0})
2'b00: Y = TODO_SELECTED_INPUT_00;
2'b01: Y = TODO_SELECTED_INPUT_01;
2'b10: Y = TODO_SELECTED_INPUT_10;
2'b11: Y = TODO_SELECTED_INPUT_11;
default: Y = 1'b0; // default mengelakkan selak tersirat
endcase
end
assign LEDR[0] = Y;
assign LEDR[9:1] = 9'b0;
endmoduleGantikan semua kandungan
leds_mirror.vdengan modul pemultipleks. Kekalkan namaleds_mirror.Klik Synthesize, tunggu dan baiki sebarang ralat.
Klik Upload to FPGA dan tunggu kamera.
Tetapkan data
SW[3:0] = 1010:D3=1,D2=0,D1=1,D0=0.Tukar
S1:S0melalui00, 01, 10, 11menggunakanSW[5]danSW[4]. RekodLEDR[0](Y). Bagi data1010, output sepatutnya0, 1, 0, 1.Pilih satu nilai pemilih, ubah suis data yang sepadan dan sahkan
Yhanya mengikuti garis itu.
Kekalkan SW[3:0] = 1010 (D3 D2 D1 D0 = 1 0 1 0). Bagi setiap nilai pemilih, tetapkan SW[5]=S1 dan SW[4]=S0, nyatakan input yang dipilih dan rekod LEDR[0] (Y). Nilai dijangka ialah 0, 1, 0, 1.
| S1 = SW5 | S0 = SW4 | Input dipilih (D0..D3) | Y = LEDR0 (diperhatikan) |
|---|---|---|---|
Hantar bukti. Ambil tangkap layar kamera dengan data SW[3:0] = 1010 dan pemilih S1:S0 = 01 (SW[4] ke atas, SW[5] ke bawah). Ini memilih D1 = 1, jadi LEDR[0] menyala.
Bayangkan baris default: Y = 1'b0; dibuang sehingga suatu gabungan meninggalkan Y tanpa nilai. Apakah perkakasan tidak dikehendaki yang akan disimpulkan, dan mengapakah ia bercanggah dengan pemultipleks gabungan tulen?
Bonus: penyahkod perpuluhan dua digit tujuh segmen
4 min
Latihan ini pilihan. Paparan tujuh segmen mempunyai bar a hingga g. Pada DE1-SoC, setiap paparan HEX aktif-rendah dan susunan bitnya {g, f, e, d, c, b, a}: segmen menyala apabila bitnya 0. Digit 0, dengan a,b,c,d,e,f menyala dan g padam, menggunakan 7'b1000000.
Nama segmen dan susunan aktif-rendah {g,f,e,d,c,b,a} pada paparan HEX DE1-SoC. Bit 0 menyalakan segmen; 1 memadamkannya. Digit 0 menggunakan 7'b1000000.
Reka bentuk membaca SW[3:0] sebagai 0..15, memaparkan sa pada HEX0 dan puluh (0 atau 1) pada HEX1. Untuk memacu HEX1, tambahkan output [6:0] HEX1 pada senarai port kerana projek permulaan hanya mendedahkan HEX0. Modul berikut sudah mengisytiharkan kedua-duanya.
// Pelajaran 2 - Latihan 1-E (pilihan): penyahkod perpuluhan dua digit
// Lengkapkan corak aktif-rendah dan persamaan digit puluh/sa.
module leds_mirror(SW, HEX0, HEX1);
input [9:0] SW; // SW[3:0] = nilai 0..15
output [6:0] HEX0; // digit sa
output [6:0] HEX1; // digit puluh (0 atau 1)
wire [4:0] v = {1'b0, SW[3:0]};
function [6:0] seg;
input [3:0] d;
case (d)
4'd0: seg = 7'b1000000;
4'd1: seg = TODO_SEGMENT_PATTERN_1;
4'd2: seg = TODO_SEGMENT_PATTERN_2;
4'd3: seg = TODO_SEGMENT_PATTERN_3;
4'd4: seg = TODO_SEGMENT_PATTERN_4;
4'd5: seg = TODO_SEGMENT_PATTERN_5;
4'd6: seg = TODO_SEGMENT_PATTERN_6;
4'd7: seg = TODO_SEGMENT_PATTERN_7;
4'd8: seg = TODO_SEGMENT_PATTERN_8;
4'd9: seg = TODO_SEGMENT_PATTERN_9;
default: seg = 7'b1111111;
endcase
endfunction
wire [3:0] tens = TODO_TENS_DIGIT;
wire [3:0] ones = TODO_ONES_DIGIT;
assign HEX0 = seg(ones);
assign HEX1 = seg(tens);
endmodulePilihan. Gantikan
leds_mirror.vdengan modul penyahkod. Sahkan senarai port ialahmodule leds_mirror(SW, HEX0, HEX1);; output tambahan membolehkan digit puluh dipacu.Klik Synthesize, baiki ralat dan ulangi.
Klik Upload to FPGA dan tunggu kamera.
Uji
0000(papar 0 dan 0),1001atau perpuluhan 9 (papar 9 dan 0), serta1111atau perpuluhan 15 (papar 5 padaHEX0dan 1 padaHEX1).
Apakah perubahan pada senarai port modul yang diperlukan untuk menyalakan HEX1, dan mengapakah perubahan itu perlu?
Perkara yang anda bina
4 min
Dalam satu perenggan, ringkaskan kerja dengan F(C,B,A): cara SOP dan POS kanonik datang daripada jadual, cara peta mengurangkan F kepada ungkapan minimum dan maksud pemboleh ubah yang hilang. Nyatakan bahawa bentuk kanonik dan minimum memberikan output yang sama pada papan.
Bagi data SW[3:0] = 1010, apakah jujukan Y apabila S1:S0 melalui 00, 01, 10, 11, dan mengapakah jujukan itu tepat sepadan dengan input yang dipilih?