Daftar Isi:
2025 Pengarang: John Day | [email protected]. Terakhir diubah: 2025-01-13 06:57
Dalam tutorial ini, kita akan menggunakan FPGA untuk mengontrol rangkaian LED eksternal. Kami akan mengimplementasikan tugas-tugas berikut:
(A) Gunakan tombol tekan pada FPGA Cyclone IV DuePrologic untuk mengontrol LED.
(B) LED Flash hidup & mati secara berkala
Video demo
Menu lab:
Langkah 1: Bangun Sirkuit Elektronik
Langkah 2: Periksa Pin Planner dan Edit Kode Verilog
Langkah 3: Edit Kode Verilog
Saat Anda membeli FPGA DueProLogic, Anda akan menerima DVD. Setelah Anda membuka "Projects_HDL", Anda akan melihat file kode asli
Tambahkan kode yang disorot. Ini mendaftarkan port I/O dan menetapkan nomor ke port.
kabel keluaran [7:0] XIO_1, //XIO -- D2-D9
kabel keluaran [5:0] XIO_2, //XIO -- D10-D12
kabel keluaran [5:0] XIO_3, //XIO -- D22-D29
kabel masukan [5:0] XIO_4, //XIO -- D30-D37
kabel masukan [5:0] XIO_5, //XIO -- D38-D45
kabel keluaran [4:0] XIO_6_OUT, //XIO -- D46-D53
kabel masukan [31:5] XIO_6, //XIO -- D46-D53
kabel keluaran [2:0] XIO_7, //XIO -- D69, D70, D71, D74, D75, D76
kabel input UBA, // Sakelar Tombol Tekan
kabel input UBB // Saklar Tombol Tekan
tetapkan XIO_1[3] = start_stop_cntrl;
tetapkan XIO_2[1] = start_blinky; //LED flash LED hidup dan mati
tetapkan XIO_2[2] = 1'b1; //keluaran TINGGI
menetapkan XIO_2[3] = ~UBA; //Tekan tombol A
tetapkan XIO_2[4] = UBB; //Tekan tombol B
tetapkan c_enable = XIO_5[2];
menetapkan LEDExt = XIO_5[5];
Kemudian kita harus mengatur waktu tunda. Komentari kode pengatur waktu asli dan tulis fungsi pengatur waktu baru
//-----------------------------------------------
// LED Berkedip mulai
//-----------------------------------------------
/*
selalu @(posedge CLK_66 atau negedge RST)
mulai
jika(!RST)
start_blinky <= 1'b0;
lain
mulai
jika(control_register[7:4] > 0)
start_blinky <= 1'b1;
lain
start_blinky <= 1'b0;
akhir
akhir
*/
reg [31:0] contoh;
awal mulai
contoh <= 32'b0;
start_blinky <= 1'b0;
akhir
selalu @(berpose CLK_66)
mulai
ex <= ex + 1'b1;
if(ex > 100000000) //flash hidup/mati ~1,6 detik, jam 66MHz
mulai
start_blinky <= !start_blinky;
contoh <= 32'b0;
akhir
akhir
//-----------------------------------------------
// Penghitung Waktu Tunda LED
//-----------------------------------------------
/*
selalu @(posedge CLK_66 atau negedge RST)
mulai
jika(!RST)
led_delay_counter <= TIMER_LOW_LIMIT;
lain
mulai
jika(status[SELECT_MODE])
led_delay_counter <= nilai_waktu;
else if(status[WAIT_FOR_TIMER])
led_delay_counter <= led_delay_counter - 1'd1;
akhir
akhir*/
Langkah 4: Kompilasi Kode Verilog
Tekan "Mulai Kompilasi" di Quartus, tidak ada pesan kesalahan yang harus dibuat.
Jika Anda menerima pesan kesalahan tentang beberapa pin. Buka Tugas -> Perangkat -> Opsi Perangkat dan Pin -> Pin Dual-Purpose -> ubah nilai pin yang sesuai menjadi "Gunakan sebagai I/O biasa".
Setelah kompilasi, Anda harus mendapatkan file output pof secara langsung. Jika perangkat lunak Anda tidak mutakhir, Anda mungkin hanya mendapatkan file lunak. Ketika itu terjadi, klik "File" di Quartus -> "convert programming files". Ubah pengaturan yang ditandai dengan kotak merah.
Langkah 5: Ayo Coba
Bagaimanapun, itu harus berhasil!!! LED kuning selalu menyala. LED merah berkedip. LED biru mati jika Anda menekan tombol B. LED hijau menyala jika Anda menekan tombol A