Mục lục:
2025 Tác giả: John Day | [email protected]. Sửa đổi lần cuối: 2025-01-13 06:58
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
Bước 3: 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
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