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
  • Bahasa Melayu
  • Sistem digital dan FPGA

Log masuk dengan akaun pendidik untuk menyediakan sesi kelas. Pelajar menyertai dengan kod kelas.

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.
Altera DE1-SoC

Hasil pembelajaran

  • Terbitkan bentuk jumlah hasil darab (SOP) dan hasil darab jumlah (POS; lanjutan pilihan) 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.

  • Lanjutan pilihan: 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

10 min

Pelajaran teras (70 minit): lengkapkan jadual kebenaran, terbitkan dan minimumkan SOP, kemudian sahkan kedua-dua bentuk pada papan. POS dan MUX ialah lanjutan pilihan (sekitar 20 minit setiap satu); penyahkod memerlukan 20 minit lagi. Semua lanjutan tidak termasuk dalam markah teras.

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

20 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

30 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

20 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

20 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 pilihan {S1,S0} memilih 00 → D0, 01 → D1, 10 → D2, 11 → D3. Blok gabungan always @(*) mesti memberikan nilai kepada Y bagi setiap gabungan input yang mungkin. Empat kes ini meliputi semua nilai binari dua bit; default turut memberikan nilai sandaran bagi nilai simulasi yang tidak sepadan. Selak terhasil apabila laluan input perkakasan meninggalkan Y tanpa nilai, bukan semata-mata kerana kata default tiada.

// 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. Sebelum mengkompil, gantikan empat ungkapan TODO dengan D0, D1, D2 dan D3 mengikut pilihan 00, 01, 10, 11.

  2. Gantikan semua kandungan leds_mirror.v dengan modul pemultipleks. Kekalkan nama leds_mirror.

  3. Klik Synthesize, tunggu dan baiki sebarang ralat.

  4. Klik Upload to FPGA dan tunggu kamera.

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

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

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

Andaikan kes 2'b10 dan cabang default dipadamkan. Apakah berlaku apabila {S1,S0}=10 meninggalkan Y tanpa nilai? Jelaskan storan tidak dikehendaki yang terhasil. Adakah memadam default sahaja menyebabkan masalah sama jika keempat-empat kes binari masih memberikan nilai Y?

6

Bonus: penyahkod perpuluhan dua digit tujuh segmen

20 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

10 min

Jelaskan cara peta Karnaugh anda menghapuskan B dan petik sepasang baris yang mengesahkannya pada papan. Rujuk jadual tanpa menyalinnya.

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?

Jadikan pratonton ini satu sesi kelas sebenar

Teruskan ke LabsLand Teach untuk menggunakan pelajaran ini bersama pelajar dan menyemak akses akaun anda.