Nghiên cứu Khoa học
Xây dựng bộ ALU 4-bit trên Board DE2-115
1. MỤC TIÊU
Tìm hiểu mô hình thiết kế Top-Down, có thể hoạt động, linh động chỉnh sửa lỗi và phát triển ở các ứng dụng tính toán nhiều hơn trong môi trường thực tế.
Thiết kế và thực hiện chức năng tính toán Cộng, Trừ, Nhân và Chia số nguyên (N) trên công nghệ FPGA (Board mạch DE2-115).
2. THIẾT KẾ CORE ALU 4-BIT
Sơ đồ khối:
Quá trình thiết kế được xem xét ở mức độ tổng thể như xem xét sơ đồ khối chức năng, độ dài dữ liệu vào ra. Sau đó sẽ Module hóa các khối chức năng dựa vào kỹ thuật chuyển đổi trạng thái, dữ liệu của các khối chức năng đó. Quy trình thiết kế cho bộ ALU như sau:
Hình 1: Sơ đồ khối Core ALU 4-bit
Từ sơ đồ khối tổng quát hình 2.4, bảng 2.1 mô tả cụ thể chức năng từng tín hiệu đầu vào, đầu ra của ALU 4-bits core. Độ rộng của từng tín hiệu tính theo đơn vị bit.
Bảng 2.1 Mô tả các đường tín hiệu đầu vào/ra
Tín hiệu |
Độ rộng (bit) |
Mô tả |
Tín hiệu hệ thống |
||
Clk |
1 |
Xung clock đồng bộ hệ thống |
Rst |
1 |
Khởi động lại hệ thống |
Các dữ liệu đầu vào |
||
Load |
|
Điều khiển Core thực hiện phép toán ALU |
ALU |
3 |
Phép toán ALU: + Phép cộng: ALU = 1 + Phép trừ: ALU = 2 + Phép nhân: ALU = 3 + Phép chia: ALU = 4 |
A |
4 |
Giá trị đầu vào A |
B |
4 |
Giá trị đầu vào B |
SigA |
1 |
Bit dấu “-“ của đầu vào A |
SigB |
1 |
Bit dấu “-“ của đầu vào B |
Các dữ liệu đầu ra |
||
Led1 |
7 |
Kết quả phép tính ALU – hàng đơn vị |
Led2 |
7 |
Kết quả phép tính ALU – hàng chục |
Led3 |
7 |
Kết quả phép tính ALU – hàng trăm |
Led4 |
7 |
Kết quả phép tính ALU – bít dấu “-“ |
Thiết kế FSM ALU-4bit:
Chương trình bắt đầu khi có tín hiệu Rst bằng 0. Các bước thực thi như sau:
Bước 1: Chờ nhận các giá trị cho A, B bằng cách gạt các switchs (mã nhị phân).
Bước 2: Lựa chọn phép toán thực thi (cộng, trừ, nhân, chia) qua tín hiệu ALU để tính toán.
Bước 3: Xác nhậnvàđiều khiển switch Load để đưa dữ liệu vào.
Bước 4: Reset để xóa các Led về 0 (nếu cần).
Chương trình gồm 2 module chính:
- Tính toán.
- Xuất kết quả ra led 7 đoạn.
Chương trình gồm có cộng, trừ, nhân, chia số nguyên:
if(ALU == 1)begin --------------- PHÉP CỘNG
kq <= a + b;
dau <= kq[9];
tram <= kq /100;
chuc <= (kq %100) / 10;
donvi <= (kq %100) % 10;
end
else if(ALU == 2) begin --------------- PHÉP TRỪ
if(a < b) begin
kq <= b - a;
dau <= kq[9];
tram <= 4'b1010;
chuc <= (kq %100) / 10;
donvi <= (kq %100) % 10;
end
else begin
kq <= a - b;
dau <= kq[9];
tram <= kq /100;
chuc <= (kq %100) / 10;
donvi <= (kq %100) % 10;
end
end
else if(ALU == 3)begin --------------- PHÉP NHÂN
kq <= a * b;
dau <= kq[9];
tram <= kq /100;
chuc <= (kq %100) / 10;
donvi <= (kq %100) % 10;
end
else if(ALU == 4)begin --------------- PHÉP CHIA
kq <= a / b;
dau <= kq[9];
tram <= kq /100;
chuc <= (kq %100) / 10;
donvi <= (kq %100) % 10;
end