Mundarija:
2025 Muallif: John Day | [email protected]. Oxirgi o'zgartirilgan: 2025-01-13 06:58
Ushbu qo'llanmada biz tashqi LED sxemasini boshqarish uchun FPGA -dan foydalanamiz. Biz quyidagi vazifalarni bajaramiz
(A) LEDni boshqarish uchun FPGA Cyclone IV DuePrologic tugmalaridan foydalaning.
(B) Fleshli LED vaqti -vaqti bilan yonadi va o'chadi
Video demo
Laboratoriya menyusi:
1 -qadam: Elektron sxemani yarating
2 -qadam: Pin Planner -ni tekshiring va Verilog kodini tahrir qiling
3 -qadam: Verilog kodini tahrirlang
FPGA DueProLogic -ni sotib olganingizda, sizga DVD kerak. "Projects_HDL" ni ochganingizdan so'ng, asl kod faylini ko'rishingiz kerak
Belgilangan kodni qo'shing. U kirish -chiqish portlarini ro'yxatga oladi va portlarga raqamlar tayinlaydi.
chiqish sim [7: 0] XIO_1, // XIO-D2-D9
chiqish sim [5: 0] XIO_2, // XIO-D10-D12
chiqish sim [5: 0] XIO_3, // XIO-D22-D29
kirish sim [5: 0] XIO_4, // XIO-D30-D37
kirish sim [5: 0] XIO_5, // XIO-D38-D45
chiqish sim [4: 0] XIO_6_OUT, // XIO-D46-D53
kirish simlari [31: 5] XIO_6, // XIO-D46-D53
chiqish simlari [2: 0] XIO_7, // XIO - D69, D70, D71, D74, D75, D76
kirish sim UBA, // tugmachali tugmachalarni bosing
kirish sim UBB // Push tugmachalari
tayinlash XIO_1 [3] = start_stop_cntrl;
tayinlash XIO_2 [1] = start_blinky; // LED chirog'i yonadi va o'chadi
tayinlash XIO_2 [2] = 1'b1; // chiqish HIGH
tayinlash XIO_2 [3] = ~ UBA; // A tugmasini bosing
tayinlash XIO_2 [4] = UBB; // B tugmachasini bosing
tayinlash c_enable = XIO_5 [2];
LEDExt = XIO_5 [5] ni belgilang;
Keyin kechikish taymerini o'rnatishimiz kerak. Taymer kodini sharhlang va yangi taymer funktsiyasini yozing
//-----------------------------------------------
// LED milt -milt boshlanishi
//-----------------------------------------------
/*
har doim @(pozitsiya CLK_66 yoki RSTni bekor qilish)
boshlash
agar (! RST)
start_blinky <= 1'b0;
boshqa
boshlash
agar (control_register [7: 4]> 0)
start_blinky <= 1'b1;
boshqa
start_blinky <= 1'b0;
oxiri
oxiri
*/
reg [31: 0] oldingi;
boshlang'ich boshlanishi
ex <= 32'b0;
start_blinky <= 1'b0;
oxiri
har doim @(rasm CLK_66)
boshlash
ex <= ex + 1'b1;
agar (masalan> 100000000) // yonish/o'chish ~ 1,6 soniya, soat 66 MGts
boshlash
start_blinky <=! start_blinky;
ex <= 32'b0;
oxiri
oxiri
//-----------------------------------------------
// LED kechiktiruvchi taymer hisoblagichi
//-----------------------------------------------
/*
har doim @(pozitsiya CLK_66 yoki RSTni bekor qilish)
boshlash
agar (! RST)
led_delay_counter <= TIMER_LOW_LIMIT;
boshqa
boshlash
agar (davlat [SELECT_MODE])
led_delay_counter <= timer_value;
boshqa bo'lsa ([WAIT_FOR_TIMER] holati)
led_delay_counter <= led_delay_counter - 1'd1;
oxiri
oxiri*/
4 -qadam: Verilog kodini tuzing
Quartus -da "Kompilyatsiyani boshlash" tugmasini bosing, xato xabari yaratilmasligi kerak.
Agar siz bir nechta pin haqida xato xabari olsangiz. Topshiriqlarga o'ting -> Qurilma -> Qurilma va pin parametrlari -> Ikki maqsadli pinlar -> mos keladigan pin qiymatini "Oddiy kirish -chiqish sifatida ishlatish" ga o'zgartiring.
Kompilyatsiyadan so'ng siz to'g'ridan -to'g'ri pof chiqish faylini olishingiz kerak. Agar sizning dasturiy ta'minotingiz yangilanmagan bo'lsa, siz faqat sof faylni olishingiz mumkin. Bu sodir bo'lganda, Quartus -dagi "Fayl" -ni bosing -"dasturiy fayllarni aylantirish". Qizil qutilar bilan belgilangan sozlamalarni o'zgartiring.
5 -qadam: Keling, sinab ko'raylik
Axir, u ishlashi kerak !!! Sariq LED har doim yonadi. Qizil LED yonadi. B tugmachasini bosganingizda ko'k LED o'chadi. Agar siz A tugmasini bosgan bo'lsangiz, yashil LED yonadi