FPGA Cyclone IV DueProLogic - Nút nhấn & đèn LED: 5 bước
FPGA Cyclone IV DueProLogic - Nút nhấn & đèn LED: 5 bước
Anonim
FPGA Cyclone IV DueProLogic - Nút nhấn & đèn LED
FPGA Cyclone IV DueProLogic - Nút nhấn & đèn LED

Trong hướng dẫn này, chúng ta sẽ sử dụng FPGA để điều khiển mạch LED bên ngoài. Chúng tôi sẽ thực hiện các nhiệm vụ sau

(A) Sử dụng các nút nhấn trên FPGA Cyclone IV DuePrologic để điều khiển đèn LED.

(B) Đèn LED flash bật và tắt định kỳ

Video demo

Menu phòng thí nghiệm:

Bước 1: Xây dựng vi mạch điện tử

Bước 2: Kiểm tra Công cụ lập kế hoạch ghim và chỉnh sửa mã Verilog

Kiểm tra Công cụ lập kế hoạch ghim và chỉnh sửa mã Verilog
Kiểm tra Công cụ lập kế hoạch ghim và chỉnh sửa mã Verilog

Bước 3: Chỉnh sửa mã Verilog

Chỉnh sửa mã Verilog
Chỉnh sửa mã Verilog

Khi bạn mua FPGA DueProLogic, bạn sẽ nhận được một đĩa DVD. Sau khi bạn mở "Projects_HDL", bạn sẽ thấy tệp mã gốc

Thêm mã được đánh dấu. Nó đăng ký các cổng I / O và gán số cho các cổng.

dây đầu ra [7: 0] XIO_1, // XIO - D2-D9

dây đầu ra [5: 0] XIO_2, // XIO - D10-D12

dây đầu ra [5: 0] XIO_3, // XIO - D22-D29

dây đầu vào [5: 0] XIO_4, // XIO - D30-D37

dây đầu vào [5: 0] XIO_5, // XIO - D38-D45

dây đầu ra [4: 0] XIO_6_OUT, // XIO - D46-D53

dây đầu vào [31: 5] XIO_6, // XIO - D46-D53

dây đầu ra [2: 0] XIO_7, // XIO - D69, D70, D71, D74, D75, D76

dây đầu vào UBA, // Công tắc nút nhấn

dây đầu vào UBB // Công tắc nút nhấn

gán XIO_1 [3] = start_stop_cntrl;

gán XIO_2 [1] = start_blinky; // Bật và tắt đèn LED flash LED

gán XIO_2 [2] = 1'b1; // đầu ra CAO

gán XIO_2 [3] = ~ UBA; // Nhấn nút A

gán XIO_2 [4] = UBB; // Nhấn nút B

gán c_enable = XIO_5 [2];

gán LEDExt = XIO_5 [5];

Sau đó, chúng tôi phải đặt một bộ đếm thời gian trễ. Nhận xét mã hẹn giờ ban đầu và viết một chức năng hẹn giờ mới

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

// LED Bắt đầu nhấp nháy

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

/*

luôn @ (posedge CLK_66 hoặc negedge RST)

bắt đầu

nếu (! RST)

start_blinky <= 1'b0;

khác

bắt đầu

if (control_register [7: 4]> 0)

start_blinky <= 1'b1;

khác

start_blinky <= 1'b0;

kết thúc

kết thúc

*/

reg [31: 0] ex;

bắt đầu ban đầu

ví dụ <= 32'b0;

start_blinky <= 1'b0;

kết thúc

always @ (posedge CLK_66)

bắt đầu

ex <= ex + 1'b1;

if (ví dụ: 100000000) // bật / tắt flash ~ 1,6 giây, xung nhịp 66MHz

bắt đầu

start_blinky <=! start_blinky;

ví dụ <= 32'b0;

kết thúc

kết thúc

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

// Bộ đếm thời gian trễ LED

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

/*

luôn @ (posedge CLK_66 hoặc negedge RST)

bắt đầu

nếu (! RST)

led_delay_counter <= TIMER_LOW_LIMIT;

khác

bắt đầu

nếu (trạng thái [SELECT_MODE])

led_delay_counter <= timer_value;

khác nếu (trạng thái [WAIT_FOR_TIMER])

led_delay_counter <= led_delay_counter - 1'd1;

kết thúc

kết thúc*/

Bước 4: Biên dịch mã Verilog

Biên dịch mã Verilog
Biên dịch mã Verilog
Biên dịch mã Verilog
Biên dịch mã Verilog

Nhấn "Start Compilation" trong Quartus, không có thông báo lỗi nào được tạo ra.

Nếu bạn nhận được thông báo lỗi về nhiều chân. Vào Assignments -> Device -> Device and Pin Options -> Dual-Purpose Pins -> thay đổi giá trị của ghim thích hợp thành "Sử dụng như I / O thông thường".

Sau khi biên dịch, bạn sẽ nhận được tệp đầu ra pof trực tiếp. Nếu phần mềm của bạn không được cập nhật, bạn chỉ có thể nhận được tệp mềm. Khi nó xảy ra, hãy nhấp vào "Tệp" trong Quartus -> "chuyển đổi tệp lập trình". Thay đổi cài đặt được đánh dấu bằng hộp màu đỏ.

Bước 5: Hãy dùng thử

Rốt cuộc, nó sẽ hoạt động !!! Đèn LED màu vàng luôn sáng. Đèn LED màu đỏ đang nhấp nháy. Đèn LED xanh lam sẽ tắt nếu bạn nhấn nút B. Đèn LED xanh lục sẽ bật nếu bạn nhấn nút A