สารบัญ:

FPGA Cyclone IV DueProLogic - ปุ่มกดและไฟ LED: 5 ขั้นตอน
FPGA Cyclone IV DueProLogic - ปุ่มกดและไฟ LED: 5 ขั้นตอน

วีดีโอ: FPGA Cyclone IV DueProLogic - ปุ่มกดและไฟ LED: 5 ขั้นตอน

วีดีโอ: FPGA Cyclone IV DueProLogic - ปุ่มกดและไฟ LED: 5 ขั้นตอน
วีดีโอ: การทดลองครั้งที่ 2.2 ส่งค่า PWM ผ่านโปรแกรม Processing และ บอร์ด FPGA 2024, พฤศจิกายน
Anonim
FPGA Cyclone IV DueProLogic - ปุ่มกด & ไฟ LED
FPGA Cyclone IV DueProLogic - ปุ่มกด & ไฟ LED

ในบทช่วยสอนนี้ เราจะใช้ FPGA เพื่อควบคุมวงจร LED ภายนอก เราจะดำเนินการตามภารกิจต่อไปนี้

(A) ใช้ปุ่มกดบน FPGA Cyclone IV DuePrologic เพื่อควบคุม LED

(B) เปิดและปิดแฟลช LED เป็นระยะ

วีดีโอสาธิต

เมนูแล็บ:

ขั้นตอนที่ 1: สร้างวงจรอิเล็กทรอนิกส์

ขั้นตอนที่ 2: ตรวจสอบ Pin Planner และแก้ไข Verilog Code

ตรวจสอบ Pin Planner และแก้ไข Verilog Code
ตรวจสอบ Pin Planner และแก้ไข Verilog Code

ขั้นตอนที่ 3: แก้ไขรหัส Verilog

แก้ไขรหัส Verilog
แก้ไขรหัส Verilog

เมื่อคุณซื้อ FPGA DueProLogic คุณควรได้รับดีวีดี หลังจากคุณเปิด "Projects_HDL" คุณจะเห็นไฟล์โค้ดต้นฉบับ

เพิ่มรหัสที่เน้น มันลงทะเบียนพอร์ต I/O และกำหนดหมายเลขให้กับพอร์ต

สายเอาท์พุต [7:0] XIO_1, //XIO -- D2-D9

สายเอาท์พุต [5:0] XIO_2, //XIO -- D10-D12

สายเอาท์พุต [5:0] XIO_3, //XIO -- D22-D29

สายอินพุต [5:0] XIO_4, //XIO -- D30-D37

สายอินพุต [5:0] XIO_5, //XIO -- D38-D45

สายเอาท์พุต [4:0] XIO_6_OUT, //XIO -- D46-D53

สายอินพุต [31:5] XIO_6, //XIO -- D46-D53

สายเอาท์พุต [2:0] XIO_7, //XIO -- D69, D70, D71, D74, D75, D76

สายอินพุต UBA, //สวิตช์ปุ่มกด

สายอินพุต UBB // สวิตช์ปุ่มกด

กำหนด XIO_1[3] = start_stop_cntrl;

กำหนด XIO_2[1] = start_blinky; // LED flash LED เปิดและปิด

กำหนด XIO_2[2] = 1'b1; //เอาต์พุตสูง

กำหนด XIO_2[3] = ~UBA; //กดปุ่มA

กำหนด XIO_2[4] = UBB; // กดปุ่ม B

กำหนด c_enable = XIO_5[2];

กำหนด LEDExt = XIO_5[5];

จากนั้นเราต้องตั้งเวลาหน่วง แสดงความคิดเห็นรหัสตัวจับเวลาเดิมและเขียนฟังก์ชันตัวจับเวลาใหม่

//-----------------------------------------------

// LED กะพริบตาเริ่ม

//-----------------------------------------------

/*

เสมอ @(posedge CLK_66 หรือละเลย RST)

เริ่ม

ถ้า(!RST)

start_blinky <= 1'b0;

อื่น

เริ่ม

ถ้า(control_register[7:4] > 0)

start_blinky <= 1'b1;

อื่น

start_blinky <= 1'b0;

จบ

จบ

*/

reg [31:0] เช่น;

เริ่มแรก

อดีต <= 32'b0;

start_blinky <= 1'b0;

จบ

เสมอ @(โพสท่า CLK_66)

เริ่ม

อดีต <= อดีต + 1'b1;

if(ex > 100000000) //เปิด/ปิดแฟลช ~1.6 วินาที, นาฬิกา 66MHz

เริ่ม

start_blinky <= !start_blinky;

อดีต <= 32'b0;

จบ

จบ

//-----------------------------------------------

// LED Delay Timer Counter

//-----------------------------------------------

/*

@ เสมอ (ถูกวาง CLK_66 หรือละเลย RST)

เริ่ม

ถ้า(!RST)

led_delay_counter <= TIMER_LOW_LIMIT;

อื่น

เริ่ม

ถ้า(สถานะ[SELECT_MODE])

led_delay_counter <= timer_value;

อื่น if(state[WAIT_FOR_TIMER])

led_delay_counter <= led_delay_counter - 1'd1;

จบ

จบ*/

ขั้นตอนที่ 4: รวบรวมรหัส Verilog

รวบรวมรหัส Verilog
รวบรวมรหัส Verilog
รวบรวมรหัส Verilog
รวบรวมรหัส Verilog

กด "เริ่มการรวบรวม" ใน Quartus ไม่ควรสร้างข้อความแสดงข้อผิดพลาด

หากคุณได้รับข้อความแสดงข้อผิดพลาดเกี่ยวกับพินหลายตัว ไปที่ Assignments -> Device -> Device and Pin Options -> Dual-Purpose Pins -> เปลี่ยนค่าของพินที่เหมาะสมเป็น "ใช้เป็น I/O ปกติ"

หลังจากคอมไพล์แล้ว คุณควรได้รับไฟล์เอาต์พุต pof โดยตรง หากซอฟต์แวร์ของคุณไม่ทันสมัย คุณอาจได้รับไฟล์ sof เท่านั้น เมื่อมันเกิดขึ้น คลิก "ไฟล์" ใน Quartus -> "แปลงไฟล์การเขียนโปรแกรม" เปลี่ยนการตั้งค่าที่ทำเครื่องหมายด้วยกล่องสีแดง

ขั้นตอนที่ 5: มาลองกันเถอะ

ท้ายที่สุดมันควรจะทำงาน !!! ไฟ LED สีเหลืองติดสว่างตลอดเวลา ไฟ LED สีแดงกะพริบ ไฟ LED สีฟ้าจะดับลงหากคุณกดปุ่ม B ไฟ LED สีเขียวจะเปิดขึ้นหากคุณกดปุ่ม A

แนะนำ: