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.
Kali pertama menggunakan LabsLand? Cipta akaun guru anda
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.
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 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 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?
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 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.
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;Buka makmal VHDL DE1-SoC. Editor memaparkan
blink.vhd.Pilih semua kandungan
blink.vhd, gantikannya dengan kod di atas dan kekalkan nama entitiblink.Bagi langkah pertama, lengkapkan
TODO_CANONICAL_SOP. Pastikan tepat satu baris yang memacuLEDR(0)aktif.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.
Klik Upload to FPGA (Muat naik ke FPGA) dan tunggu kamera langsung.
Uji lapan gabungan
SW(2 downto 0)(C B A) daripada000hingga111dan rekodLEDR(0).Bagi langkah kedua, ganti tugasan kanonik dengan ungkapan minimum. Sintesis, muat naik semula dan semak beberapa baris seperti
001,100dan111.
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.
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;Gantikan semua kandungan
blink.vhddengan entiti POS di atas dan kekalkan namablink.Klik Synthesize, baiki sebarang ralat dan sintesis semula.
Klik Upload to FPGA dan tunggu kamera.
Uji
SW(2 downto 0)daripada000hingga111. Sahkan jujukan0, 1, 0, 1, 1, 0, 1, 0.Jika ada perbezaan, semak kedudukan
SW(2)=C,SW(1)=B,SW(0)=A.
Bagi F ini, bagaimana saiz POS kanonik berbanding SOP kanonik?
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;Gantikan
blink.vhddengan entiti pemultipleks dan kekalkan namablink.Klik Synthesize, tunggu dan baiki sebarang ralat.
Klik Upload to FPGA dan tunggu kamera.
Tetapkan
SW(3 downto 0)=1010:D3=1,D2=0,D1=1,D0=0.Ramalkan output sebelum melihat kamera. Kemudian uji
S1:S0 = 00, 01, 10, 11denganSW(5)danSW(4)dan rekodLEDR(0).Pilih satu nilai pemilih, ubah suis data yang sepadan dan sahkan
Yhanya 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?
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".
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;Gantikan
blink.vhddengan entiti di atas dan sahkan portHEX1 : out std_logic_vector(6 downto 0)diisytiharkan.Klik Synthesize, baiki sebarang ralat dan sintesis semula.
Klik Upload to FPGA dan tunggu kamera.
Uji
0000(0 dan 0),1001(9 dan 0) dan1111(5 padaHEX0dan 1 padaHEX1).
Apakah perubahan pada senarai port entiti yang diperlukan untuk menyalakan HEX1, dan mengapakah perubahan itu perlu?
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?