ựiều khiển cho bộ MUX sẽ là tắn hiệu 1 bắt.
alu inst s1[7..0] s1[7..0] s2[7..0] s2[7..0] mask[7..0] mask[7..0] op[3..0] op[3..0] c_in c_in out[7..0] out[7..0] c c dc dc z z
Hình 5 - 1: Bộ lô gic và số học ALU
mux2_8 inst sel sel in0[7..0] in0[7..0] in1[7..0] in1[7..0] out[7..0] out[7..0] (U3) Hình 5 - 2 MUX lựa chọn lối vào cho S1 của bộ ALU.
- S2[7..0]: Lối vào 8 bắt thứ hai của bộ ALU, lối vào này sẽ nhận dữ liệu trực tiếp từ thanh ghi W.
- mask[7..0]: Lối vào mask, lối vào này sẽ xác ựịnh bắt nào sẽ bị thay ựổi trong các lệnh hướng bắt. Lối vào này sẽ ựược xác ựịnh nhờ vào operand của các lệnh hướng bắt, chắnh là trường b trong ựịnh dạng các lệnh hướng bắt.
- Op[3..0]: 4 bits Lối vào ựiều khiển dùng ựể lựa chọn hoạt ựộng của bộ ALU. - c Carry out: 1 bits lối ra nhớ của các phép toán ựược thực hiện bởi ALU
- d Digital Carry, 1
-z : 1 bits, nếu phép toán của ALU có kết quả bằng 0 bit này sẽ ựược bật, bit này thường ựược dung trong các lệnh rẽ nhánh.
- out[7..0]: 8 bits là lối ra của bộ ALU. Hoạt ựộng Opcode Ý nghĩa
ALU_ADD 4'h0 Cộng hai toán hạng ựầu vào và ựưa kết quả ra ựầu ra ALU_SUB 4'h1 Trừ toán hạng S1 cho toán hạng S2 và ựưa kết quả ra
ựầu ra
ALU_INC 4'h2 Tăng toán hạng S1 lên 1 ALU_DEC 4'h3 Giảm toán hạng S1 ựi 1
ALU_AND 4'h4 AND toán hạng S1 với toán hạng S2 và ựưa kết quả ra ựầu ra
ALU_CLR 4'h5 Xóa toán hạng S1
ALU_NOT 4'h6 Tắnh Not của toán hạng S1
ALU_IOR 4'h7 OR toán hạng S1 với toán hạng S2
ALU_MOV 4'h8 Thực hiện di chuyển dữ liệu từ thanh ghi W vào thanh ghi tương ứng trong register file
ALU_MOVW 4'h9 Di chuyển dữ liệu vào thanh ghi W ALU_RLF 4'ha Thực hiện quay trái
ALU_RRF 4'hb Quay phải
ALU_SWP 4'hc đổi chỗ hai toán hạng ALU_XOR 4'hd Tắnh XOR của hai ựầu vào
ALU_BCF 4'he Xóa một bắt tương ứng của một toán hạng ựầu vào ALU_BSF 4'hf đặt một bắt tương ứng lên giá trị bằng 1
Bảng 5 - 1: Lối vào ựiều khiển của ALU
Bộ ALU hoạt ựộng như sau: Các toán hạng nguồn sẽ ựược ựưa tới s1 và s2, lối vào nhớ ựược ựưa tới c_in. Sau ựó dựa vào yêu cầu của tắnh toán, ta sẽ ựưa tắn
hiệu ựiều khiển ALU tới op[3..0]. ALU sẽ dựa trên tắn hiệu ựiều khiển này ựể thực hiện các tắnh toán tương ứng và ựưa kết quả ra out[7..0], c, dc, z.
điều khiển ALU: Như ựã mô tả ở trên, ta cần phải ựưa vào các tắn hiệu ựể ựiều khiển ALU, 4 bắt op[3..0] ựược ựưa vào dựa vào Opcode của lệnh ựể ựiều khiển ALU, cụ thể như bảng 5-1:
Như vậy với 4 bit Opcode ta có thể ựịnh nghĩa ựược 16 hoạt ựộng cho bộ ALU. Toàn bộ tập lênh của CPU sẽ ựược xây dựng dựa trên 16 hoạt ựộng cơ bản của bộ ALU này. Trong quá trình thực hiện một lệnh, tới chu kì xung nhịp thứ hai, bộ ựiều khiển sẽ xác ựịnh hoạt ựộng của ALU tương ứng với lệnh ựó và ra lệnh ựiều khiển cho ALU.
5.2.2 Thiết kế bộ nhớ chương trình
Bộ nhớ chương trình là nơi lưu trữ mã chương trình, thông thường ựối với một hệ vi ựiều khiển, bộ nhớ chương trình ựược lưu trữ trong bộ nhớ EEPROM hoặc bộ nhớ Flash. Trong thiết kế hệ vi xử lý này, tác giả thiết kế một bộ nhớ RAM trên FPGA ựể lưu trữ chương trình. Lý do sử dụng bộ nhớ RAM thay vì bộ nhớ EEPROM ựể lưu chương trình là giải pháp này ựơn giản hơn khi nạp chương trình, do mục ựắch chắnh của luận văn là thiết kế lõi của vi xử lý.