Teach Pelajaran dengan makmal jarak jauh

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.

  • Altera DE1-SoC
  • 70 min
  • Prasiswazah, pengenalan
  • ms-MY
  • Digital systems & FPGA
Altera DE1-SoC
Altera DE1-SoC

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.

1

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 0F=0
- Baris 1: C B A = 0 0 1F=1
- Baris 2: C B A = 0 1 0F=0
- Baris 3: C B A = 0 1 1F=1
- Baris 4: C B A = 1 0 0F=1
- Baris 5: C B A = 1 0 1F=0
- Baris 6: C B A = 1 1 0F=1
- Baris 7: C B A = 1 1 1F=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?

2

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 F(C,B,A) dengan minterma 1, 3, 4 dan 6 ditandakan sebagai 1. Dua pasangan bersebelahan dibingkaikan tanpa menulis sebutan ringkas; pelajar perlu menentukan pemboleh ubah yang berubah dalam setiap kumpulan.

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.

3

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;
endmodule
  1. Buka makmal Verilog DE1-SoC. Editor memaparkan leds_mirror.v.

  2. Pilih semua kandungan fail itu dan gantikan dengan modul di atas. Kekalkan nama leds_mirror.

  3. Gantikan TODO_CANONICAL_SOP_EXPRESSION dengan SOP kanonik. Kekalkan tepat satu baris assign LEDR[0] = ...;.

  4. 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.

  5. Klik Upload to FPGA (Muat naik ke FPGA) dan tunggu sesi papan serta kamera.

  6. Uji SW[2:0] (C B A) bagi 000, 001, 010, 011, 100, 101, 110, 111. Baca LEDR[0] pada kamera dan rekod setiap hasil.

  7. Untuk langkah kedua, ubah baris assign LEDR[0] kepada ungkapan minimum. Sintesis dan muat naik semula. Uji sekurang-kurangnya tiga baris, termasuk satu F=0 dan satu F=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.

4

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;
endmodule
  1. Gantikan semua kandungan leds_mirror.v dengan modul POS di atas. Kekalkan nama leds_mirror.

  2. Gantikan TODO_CANONICAL_POS_EXPRESSION dengan POS kanonik bagi F.

  3. Klik Synthesize, baiki sebarang ralat dan ulangi sintesis.

  4. Klik Upload to FPGA dan tunggu kamera.

  5. Uji lapan gabungan SW[2:0] (C B A) daripada 000 ... 111. Sahkan POS memberikan hasil yang sama dengan jadual SOP.

  6. 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?

5

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;
endmodule
  1. Gantikan semua kandungan leds_mirror.v dengan modul pemultipleks. Kekalkan nama leds_mirror.

  2. Klik Synthesize, tunggu dan baiki sebarang ralat.

  3. Klik Upload to FPGA dan tunggu kamera.

  4. Tetapkan data SW[3:0] = 1010: D3=1, D2=0, D1=1, D0=0.

  5. Tukar S1:S0 melalui 00, 01, 10, 11 menggunakan SW[5] dan SW[4]. Rekod LEDR[0] (Y). Bagi data 1010, output sepatutnya 0, 1, 0, 1.

  6. Pilih satu nilai pemilih, ubah suis data yang sepadan dan sahkan Y hanya 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?

6

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.

Susun atur paparan tujuh segmen dengan bar a hingga g. Bit disusun g f e d c b a dan aktif-rendah; digit 0 menyalakan a hingga f serta memadamkan g.

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);
endmodule
  1. Pilihan. Gantikan leds_mirror.v dengan modul penyahkod. Sahkan senarai port ialah module leds_mirror(SW, HEX0, HEX1);; output tambahan membolehkan digit puluh dipacu.

  2. Klik Synthesize, baiki ralat dan ulangi.

  3. Klik Upload to FPGA dan tunggu kamera.

  4. Uji 0000 (papar 0 dan 0), 1001 atau perpuluhan 9 (papar 9 dan 0), serta 1111 atau perpuluhan 15 (papar 5 pada HEX0 dan 1 pada HEX1).

Apakah perubahan pada senarai port modul yang diperlukan untuk menyalakan HEX1, dan mengapakah perubahan itu perlu?

7

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?