Teach Pelajaran dengan makmal jarak jauh

Pelajaran Teach

Logik digital pada DE1-SoC dengan VHDL (2/6): jadual kebenaran, SOP, peta Karnaugh dan sambungan pilihan

Laksanakan fungsi Boolean dalam VHDL sebagai SOP kanonik, minimumkannya dengan peta Karnaugh dan, jika sempat, cuba sambungan POS, MUX dan paparan 7 segmen.

  • Altera DE1-SoC
  • 45 min
  • Prasiswazah peringkat pengenalan
  • ms-MY
  • Digital systems & FPGA
Altera DE1-SoC
Altera DE1-SoC

Hasil pembelajaran

  • Menerbitkan bentuk jumlah hasil darab (SOP) kanonik daripada jadual kebenaran.

  • Meminimumkan fungsi Boolean dengan peta Karnaugh dan mentafsir ungkapan ringkas.

  • Membandingkan bentuk kanonik dengan bentuk minimum pada perkakasan sebenar dan mengesahkan kesetaraannya.

  • Mengenal POS, pemultipleks dan paparan dua digit sebagai sambungan pilihan.

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 aras lebih tinggi: tentukan perkara yang harus dilakukan oleh litar, biasanya dalam bentuk jadual kebenaran, kemudian cari rangkaian get yang menghasilkan tingkah laku itu. Dalam pelajaran ini, anda akan memperoleh fungsi yang sama melalui beberapa bentuk dan kemudian mengecilkannya.

Fungsi bagi dua latihan pertama ialah F(C,B,A) dengan tiga input. Anda akan menggunakan SW(0)=A, SW(1)=B, SW(2)=C dan memaparkan hasil pada LEDR(0). Baris berikut mengikut kiraan perduaan 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 baris tersebut sebelum menjawab. Baris F=1 menghasilkan jumlah hasil darab, manakala baris F=0 menghasilkan hasil darab jumlah.

Ingat konvensyen papan: suis ke atas ialah logik 1, dan LEDR aktif-tinggi. Semua litar di sini ialah gabungan tulen; 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 menggunakan semua input, setiap satu muncul sekali dalam bentuk biasa atau disangkal. Ia bernilai 1 pada tepat satu baris. Bagi baris 1, C=0, B=0, A=1, maka mintermanya ialah (not C and not B and A).

Jumlah hasil darab kanonik (SOP). Gabungkan dengan OR minterma setiap baris yang mempunyai F=1:

- Baris 1 C=0,B=0,A=1(not C and not B and A)
- Baris 3 C=0,B=1,A=1(not C and B and A)
- Baris 4 C=1,B=0,A=0(C and not B and not A)
- Baris 6 C=1,B=1,A=0(C and B and not A)

SOP kanonik betul tetapi tidak cekap: empat sebutan AND tiga input menyuap satu OR empat input.

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 kumpulan itu tidak mempengaruhi hasil dan boleh digugurkan.

- Kumpulkan minterma 1 dan 3. Bandingkan pemboleh ubah yang kekal dengan yang berubah.
- Kumpulkan minterma 4 dan 6. Kumpulan ini merentasi tepi kerana lajur 00 dan 10 juga bersebelahan dalam tertib Gray.

Tulis satu sebutan ringkas bagi setiap kumpulan dan gabungkannya dengan or. Kemudian tentukan input yang hilang daripada kedua-dua kumpulan dan maksudnya terhadap kebergantungan F.

Peta Karnaugh F(C,B,A) dengan minterma 1, 3, 4 dan 6 ditandakan sebagai 1. Dua pasangan bersebelahan dibingkaikan tanpa menunjukkan sebutan ringkas atau ungkapan akhir.

Peta Karnaugh bagi F. Bagi setiap kumpulan, kenal pasti pemboleh ubah yang kekal dan gugurkan pemboleh ubah yang berubah.

Gunakan kaedah yang sama bagi fungsi lain. G(C,B,A) bernilai 1 tepat pada baris 0, 2, 5 dan 7. Tulis SOP kanonik penuh bagi G, satu minterma bagi setiap baris. Gunakan operator VHDL not, and dan or.

Dalam ungkapan minimum F, pemboleh ubah manakah hilang daripada kedua-dua kumpulan? Terangkan maksud ketiadaannya. Kemudian cari dua baris yang hanya berbeza pada pemboleh ubah itu dan nyatakan nombor baris serta nilai F.

3

Bina SOP kanonik, kemudian bentuk minimum

14 min

Laksanakan fungsi pada papan sebenar. Jalankan SOP kanonik dahulu, sahkan lapan baris, kemudian gantikannya dengan ungkapan minimum dan pastikan output kekal sama.

-- Kod permulaan pelajar: lengkapkan baris TODO sebelum sintesis.
-- Pelajaran 2 - Latihan 1-B: jumlah hasil darab.
-- F(C,B,A): minterma 1,3,4,6. SW(0)=A, SW(1)=B, SW(2)=C. Output pada LEDR(0).
library ieee;
use ieee.std_logic_1164.all;

entity blink is
    port (
        SW   : in  std_logic_vector(9 downto 0);
        LEDR : out std_logic_vector(9 downto 0)
    );
end entity blink;

architecture rtl of blink is
    signal A, B, C : std_logic;
begin
    A <= SW(0);
    B <= SW(1);
    C <= SW(2);

    -- Langkah pertama: lengkapkan SOP kanonik daripada empat minterma.
    LEDR(0) <= TODO_CANONICAL_SOP;

    -- Langkah kedua: ganti baris di atas dengan ungkapan minimum daripada peta.
    -- LEDR(0) <= TODO_MINIMIZED_EXPRESSION;
    LEDR(9 downto 1) <= (others => '0');
end architecture rtl;
  1. Buka makmal VHDL DE1-SoC. Editor memaparkan blink.vhd.

  2. Pilih semua kandungan blink.vhd, gantikannya dengan kod di atas dan kekalkan nama entiti blink.

  3. Bagi langkah pertama, lengkapkan TODO_CANONICAL_SOP. Pastikan tepat satu baris yang memacu LEDR(0) aktif.

  4. Klik Synthesize (Bina/sintesis). Jika lawatan berpandu menutup butang, tutup atau langkaunya. Tunggu 1–3 minit dan baiki sebarang ralat sehingga binaan berjaya dengan 0 ralat.

  5. Klik Upload to FPGA (Muat naik ke FPGA) dan tunggu kamera langsung.

  6. Uji lapan gabungan SW(2 downto 0) (C B A) daripada 000 hingga 111 dan rekod LEDR(0).

  7. Bagi langkah kedua, ganti tugasan kanonik dengan ungkapan minimum. Sintesis, muat naik semula dan semak beberapa baris seperti 001, 100 dan 111.

Tetapkan SW(2 downto 0) = C B A bagi setiap baris dan rekod LEDR(0) semasa SOP kanonik (1 = menyala, 0 = padam). Kemudian semak tiga baris dengan ungkapan minimum.

C = SW2 B = SW(1) A = SW(0) SOP kanonik pada LEDR0 (diperhatikan)

Tiga baris yang manakah anda semak dengan ungkapan minimum? Adakah LEDR(0) sepadan dengan SOP kanonik pada ketiga-tiganya? Nyatakan perkara yang disahkan dalam satu ayat.

Hantar bukti. Ambil tangkap layar kamera apabila ungkapan minimum berjalan pada satu baris dengan F=1, contohnya C B A = 100, kemudian lampirkannya.

> Bonus pilihan, tanpa muat naik wajib. Jika Quartus memaparkan laporan sumber, bandingkan bilangan elemen logik SOP kanonik dengan bentuk minimum. Laporan itu tidak tersedia dalam setiap sesi dan bukan sebahagian daripada bukti wajib.

4

Sambungan pilihan: fungsi yang sama sebagai hasil darab jumlah

10 min

Jika sempat, bina F yang sama daripada baris 0. Maksterma ialah sebutan OR (jumlah) yang menggunakan semua input dan bernilai 0 pada tepat satu baris. Bagi baris 0, maksterma ialah (A or B or C).

Dalam hasil darab jumlah (POS) kanonik, gabungkan dengan AND maksterma bagi baris F=0: 0, 2, 5 dan 7. Pemboleh ubah disangkal dalam maksterma apabila nilainya 1 pada baris itu.

-- Kod permulaan pelajar: lengkapkan baris TODO sebelum sintesis.
-- Pelajaran 2 - Latihan 1-C: hasil darab jumlah (POS).
-- F(C,B,A) yang sama. Maksterma: baris 0,2,5,7. SW(0)=A, SW(1)=B, SW(2)=C.
library ieee;
use ieee.std_logic_1164.all;

entity blink is
    port (
        SW   : in  std_logic_vector(9 downto 0);
        LEDR : out std_logic_vector(9 downto 0)
    );
end entity blink;

architecture rtl of blink is
    signal A, B, C : std_logic;
begin
    A <= SW(0);
    B <= SW(1);
    C <= SW(2);

    LEDR(0) <= TODO_POS_EXPRESSION; -- TODO: hasil darab jumlah maksterma
    LEDR(9 downto 1) <= (others => '0');
end architecture rtl;
  1. Gantikan semua kandungan blink.vhd dengan entiti POS di atas dan kekalkan nama blink.

  2. Klik Synthesize, baiki sebarang ralat dan sintesis semula.

  3. Klik Upload to FPGA dan tunggu kamera.

  4. Uji SW(2 downto 0) daripada 000 hingga 111. Sahkan jujukan 0, 1, 0, 1, 1, 0, 1, 0.

  5. Jika ada perbezaan, semak kedudukan SW(2)=C, SW(1)=B, SW(0)=A.

Bagi F ini, bagaimana saiz POS kanonik berbanding SOP kanonik?

5

Sambungan pilihan: pemultipleks 4-kepada-1

10 min

Pemultipleks (MUX) menghalakan satu daripada beberapa input data kepada satu output berdasarkan garis pemilih.

- Data: SW(3)=D3, SW(2)=D2, SW(1)=D1, SW(0)=D0
- Pemilih: SW(5)=S1, SW(4)=S0
- Output: LEDR(0)=Y

S1 & S0 memilih 00 → D0, 01 → D1, 10 → D2, 11 → D3. Tugasan terpilih berakhir dengan when others. Cabang itu memastikan Y menerima nilai dalam semua keadaan; jika tidak, pensintesis boleh menyimpulkan selak (latch) dan menambah ingatan yang tidak dikehendaki pada litar gabungan.

-- Pelajaran 2 - Latihan 1-D: pemultipleks 4-kepada-1.
-- Data pada SW(3 downto 0), pemilih S1=SW(5), S0=SW(4), output pada LEDR(0).
library ieee;
use ieee.std_logic_1164.all;

entity blink is
    port (
        SW   : in  std_logic_vector(9 downto 0);
        LEDR : out std_logic_vector(9 downto 0)
    );
end entity blink;

architecture rtl of blink is
    signal D0, D1, D2, D3 : std_logic;
    signal S0, S1, Y      : std_logic;
    signal sel            : std_logic_vector(1 downto 0);
begin
    D0 <= SW(0); D1 <= SW(1); D2 <= SW(2); D3 <= SW(3);
    S0 <= SW(4); S1 <= SW(5);
    sel <= S1 & S0;

    with sel select
        Y <= TODO_FOR_00 when "00",
             TODO_FOR_01 when "01",
             TODO_FOR_10 when "10",
             TODO_FOR_11 when "11",
             '0' when others;

    LEDR(0) <= Y;
    LEDR(9 downto 1) <= (others => '0');
end architecture rtl;
  1. Gantikan blink.vhd dengan entiti pemultipleks dan kekalkan nama blink.

  2. Klik Synthesize, tunggu dan baiki sebarang ralat.

  3. Klik Upload to FPGA dan tunggu kamera.

  4. Tetapkan SW(3 downto 0)=1010: D3=1, D2=0, D1=1, D0=0.

  5. Ramalkan output sebelum melihat kamera. Kemudian uji S1:S0 = 00, 01, 10, 11 dengan SW(5) dan SW(4) dan rekod LEDR(0).

  6. Pilih satu nilai pemilih, ubah suis data yang sepadan dan sahkan Y hanya mengikuti input itu.

Kekalkan SW(3 downto 0)=1010. Bagi setiap pemilih, ramalkan input terpilih dan Y sebelum melihat kamera; kemudian rekod LEDR(0).

S1 = SW5 S0 = SW4 Input terpilih (D0..D3) Y diramal sebelum kamera Y = LEDR0 (diperhatikan)

Jika suatu nilai pemilih membiarkan Y tanpa tugasan, apakah perkakasan tidak dikehendaki yang boleh disimpulkan, dan mengapakah ia bercanggah dengan pemultipleks gabungan tulen?

6

Bonus: penyahkod perpuluhan dua digit 7 segmen

4 min

Latihan ini pilihan. Paparan HEX DE1-SoC ialah aktif-rendah, dengan tertib bit {g,f,e,d,c,b,a}. Segmen menyala apabila bitnya 0; digit sifar menggunakan "1000000".

Paparan tujuh segmen dengan bar a hingga g. Bit disusun g f e d c b a dan aktif-rendah; digit sifar menyalakan a hingga f dan memadamkan g.

Nama segmen dan tertib aktif-rendah {g,f,e,d,c,b,a}. 0 menyalakan segmen dan 1 memadamkannya; digit sifar menggunakan "1000000".

Reka bentuk membaca SW(3 downto 0) sebagai nilai 0 hingga 15, memaparkan digit sa pada HEX0 dan digit puluh pada HEX1. Untuk memacu HEX1, port itu mesti diisytiharkan dalam entiti.

-- Pelajaran 2 - Latihan 1-E (pilihan): penyahkod perpuluhan dua digit.
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;

entity blink is
    port (
        SW   : in  std_logic_vector(9 downto 0);
        HEX0 : out std_logic_vector(6 downto 0);
        HEX1 : out std_logic_vector(6 downto 0)
    );
end entity blink;

architecture rtl of blink is
    signal v    : unsigned(4 downto 0);
    signal tens : unsigned(3 downto 0);
    signal ones : unsigned(3 downto 0);

    function seg(d : unsigned(3 downto 0)) return std_logic_vector is
    begin
        case d is
            when "0000" => return "1000000"; -- 0
            when "0001" => return TODO_SEG_1;
            when "0010" => return TODO_SEG_2;
            when "0011" => return TODO_SEG_3;
            when others => return "1111111";
        end case;
    end function;
begin
    v <= resize(unsigned(SW(3 downto 0)), 5);
    tens <= TODO_TENS;
    ones <= TODO_ONES;

    HEX0 <= seg(ones);
    HEX1 <= seg(tens);
end architecture rtl;
  1. Gantikan blink.vhd dengan entiti di atas dan sahkan port HEX1 : out std_logic_vector(6 downto 0) diisytiharkan.

  2. Klik Synthesize, baiki sebarang ralat dan sintesis semula.

  3. Klik Upload to FPGA dan tunggu kamera.

  4. Uji 0000 (0 dan 0), 1001 (9 dan 0) dan 1111 (5 pada HEX0 dan 1 pada HEX1).

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

7

Perkara yang anda bina

4 min

Dalam satu perenggan, ringkaskan cara SOP kanonik diterbitkan daripada jadual, cara peta mengurangkan F kepada ungkapan minimum dan maksud ketiadaan B. Nyatakan pengesahan pada perkakasan. Jika anda mencuba sambungan pilihan, tambah satu ayat.

Dalam sambungan MUX dengan SW(3 downto 0)=1010, apakah jujukan Y bagi S1:S0 = 00, 01, 10, 11? Bagaimanakah ia berbanding ramalan anda?