Khối logic số học (ALU)

Một phần của tài liệu THIẾT KẾ VÀ ỨNG DỤNG BỘ VI XỬ LÝ 32 BIT DÙNG NGÔN NGỮ VHDL (Trang 72)

Hình 4.5: Khối logic số học (ALU)

Tín hiệu Kích thước Hướng Miêu tả

ALUA 32 In Dữ liệu vào ALU ALUB 32 In Dữ liệu vào ALU CLK

1 In Tính toán khi có xung clk ở mức cao

AOP 4 In ALU opcode = E [28:25] Result 32 Out Kết quả của ALU

Mã lệnh cho ALU được thiết lập sẵn từ giai đoạn thực thi. ALU hoạt động chỉ khi xung clock ở mức cao. Xử lý của ALU ảnh hưởng mạnh bởi clk, ALUA, ALUB, E, result. Phép toán hoàn thành mỗi khi tín hiệu ngõ ra thay đổi, nhưng kết quả chỉđược chốt vào thanh ghi vào cạnh xuống của xung clock. Bởi vì ngõ vào là chính xác vào thới điểm, nên kết quả mong muốn được chốt vào thanh ghi. Cờ nhớ

CHƯƠNG 5: MÔ PHNG B VI X S DNG PHN MM QUARTUS VÀ TRÊN KIT DE2 5.1 Kiến trúc mô phỏng bộ vi xử lý z CU (Control Unit) + Nhận lệnh từ bộ nhớ + Giải mã lệnh và phát ra các tín hiệu điều khiển để thực hiện lệnh

+ Nhận các tín hiệu yêu cầu từ bên ngoài gửi đến sau đó xử lý và đáp ứng các tín hiệu yêu cầu này

z ALU (Arilthmetic and Logic Unit)

+ Thực hiện các phép toán về số học và logic

z Register Set –Tập các thanh ghi

+ Là những ngăn nhớ đặc biệt nằm ngay bên trong bộ VXL dùng để lưu trữ

các dữ liệu tạm thời giúp cho hoạt động của bộ nhớ - Chia thành các nhóm sau

+ Thanh ghi địa chỉ (MAR): Dùng để chứa địa chỉ của bộ nhớ hoặc cổng vào ra

+ Thanh ghi dữ liệu: Dùng để dữ liệu tạm thời hoặc các kết quả trung gian + Thanh ghi lệnh (IR): Dùng để chứa các lệnh đang thực hiện

+ Thanh ghi cờ (Flag Register): Dùng lưu trữ các trạng thái của phép toán + Thanh ghi đa năng: thực hiện nhiều chức năng khác nhau tùy theo yêu cầu

Hình 5.1: Kiến trúc bộ vi xử lý trên Quartus

Thiết kế kiến trúc bộ vi xử lý 32 bit gồm 4 khối: bộ ALU, bộđếm chương trình và nhớ, tập thanh ghi và bộ nhớ cache, bộđiều khiển đường ống dẫn.

Hình 5.2: Các thông số kỹ thuật trong thiết kế

Sử dụng chương trình Quartus II thiết kế với họ linh kiện Cyclone II, thiết bị EP2C35F672C6, sử dụng tổng cộng 7473/33216 đơn vị logic chiếm 22%, dùng tổng công hàm kết hợp 7169/33216 chiếm 22%, dùng 1834 thanh ghi, kết nối 221/475 chân chiếm 47% và dùng 3072/ 483840 bit nhớ chiếm dưới 1%.

Hình 5.3: Các thông số về tần số hoạt động

Clock_50: xung clock cấp cho việc thực hiện load code vào RAM của CPU và load giá trị vào cache tần số 210.08 MHz, chu kỳ 4.760 ns.

Clock KEY (2) : Xung clock cấp cho hoạt động của CPU (với tần số là 33.94 MHz, chu kỳ là 29.460 ns)

Sơđồ hệ thống mô phỏng:

Hình 5.4b:Kết quả mô phỏng dạng sóng tín hiệu của CPU

Gii thích:

Để thực hiện việc kiểm tra thiết kế ta cần thực hiện các yêu cầu sau:

Nạp code vào RAM của CPU: Code chương trình được nạp sẵn vào ROM_code và được nạp vào RAM của CPU thông qua bộ code_loader.

Nạp giá trị vào cache: Giá trị sẽđược nạp vào cache đã được lưu sẵn trong bảng ROM và sẽđược nạp vào cache thông qua bộ cache_loader.

Tạo xung clock: Ở đây ta có hai tín hiệu xung clock. Một dùng để kích cho hoạt động của bộ loader: CLOCK_50. Một kích cho hoạt động của CPU: KEY (2), do để tránh việc tính toán sai do đó tốc độ của clock cấp vào cho CPU nhỏ hơn tốc

đố của xung clock cấp vào cho bộ cache_loader điều nay đảm bảo việc nạp dữ liệu (adsbygoogle = window.adsbygoogle || []).push({});

đầy đủ trước khi CPU thực hiện phép toán.

Kiểm tra kết quả: Kết quả được kiểm tra thông qua tín hiệu result_out (31:0). Quá trình kiểm tra bao gồm hai phần: mô phỏng dạng sóng và thực hiện trên mạch. Việc thực hiện kiểm tra trên kit ta cần kết nối thêm các bộ hiện thị cho tín hiệu result_out (31:0). Kết quả hiển thịđược thông qua 8 led 7 đoạn.

Mã lệnh 32 bit nhị phân: Bit 7 1 5 5 1 8 5 Nội dung Opcode Cond flag Đích Nguồn 1 Immediate = 0 Không dùng Nguồn 2

Bit 7 1 5 5 1 13 Nội dung Opcode Cond flag Đích Nguồn 1 Immediate = 1 immediate 5.2 Thực hiện các phép toán kiểm tra

Kiểm tra các hoạt động của bộ vi xử lý là bước cuối cùng, xem bộ vi xử lý có hoạt động đúng theo ý muốn của người thiết kế, thực hiện các phép toán sau

đây để kiểm tra hoạt động của một bộ vi xử lý.

5.2.1 Phép cng:

Thực hiện phép cộng: R1 + R2 → R3

Thực hiện phép cộng hai giá trị thập lục phân giữa thanh ghi R1 và R2 và cất vào thanh ghi R3 , xác định giá trị cần tính toán nạp vào ROM, sau đó từ ROM

được tải vào Cache thực hiện phép tính.

Thực hiện cộng 007FCCCC16 + 083DDDDE16 = 8BDAAA16

Hình 5.5a: Nạp dữ liệu vào cache

LDXW R1 0 I0Tải dữ liệu từ ROM tại ô nhớ “0” vào thanh ghi R1 với mã lệnh sau: Opcode Cond flag Đích Nguồn 1 Immediate = 1 Immediate 0011110 0 00001 00000 1 0000000000000 Tương ứng mã Hex : 3C082000

LDXW R2 0 I1Tải dữ liệu từ ROM tại ô nhớ “1” vào thanh ghi R2 với mã lệnh sau:

flag 1 = 1 0011110 0 00001 00000 1 0000000000001 Tương ứng mã Hex : 3C0820001 Thực hiện phép cộng R1 + R2→ R3 Opcode Cond flag Đích Nguồn 1 Immediate = 0 Không dùng Nguồn 2 0011110 0 00011 00001 0 00000000 00010 Tương ứng mã Hex : 1C184002 Hình 5.5b: Nạp mã lệnh vào ROM

5.2.2 Phép tr

Thực hiện phép trừ hai giá trị thập lục phân giữa thanh ghi R1 và R2 và cất vào thanh ghi R3 , xác định giá trị cần tính toán nạp vào ROM, sau đó từ ROM

được tải vào Cache thực hiện phép tính.

Thực hiện cộng F009877816 + E008865616 = 1001012216

Hình 5.6a: Nạp dữ liệu vào cache

LDXW R1 0 I0 Tải dữ liệu từ ROM tại ô nhớ “0” vào thanh ghi R1 với mã lệnh sau: Opcode Cond flag Đích Nguồn 1 Immediate = 1 Immediate 0011110 0 00001 00000 1 0000000000000 Tương ứng mã Hex : 3C082000

LDXW R2 0 I1 Tải dữ liệu từ ROM tại ô nhớ “1” vào thanh ghi R2 với mã lệnh sau: Opcode Cond flag Đích Nguồn 1 Immediate = 1 Immediate 0011110 0 00001 00000 1 0000000000001 Tương ứng mã Hex : 3C0820001 SUB R3 R2 R1 Opcode Cond flag Đích Nguồn 1 Immediate = 0 Không dùng Nguồn 2 0001101 0 00011 00001 0 00000000 00010

Tương ứng mã Hex : 1A184002

Hình 5.6b: Nạp mã lệnh vào ROM

Hình 5.6c: Kết quả hiển thị trên kit DE2

5.2.3 Phép toán dch trái

Thực hiện phép dịch trái dữ liệu trong thanh ghi R1 2 bit rồi lưu vào trong thanh ghi R3 : R3 R1 << 2, dịch trái giá trị 1240032116 <<2 = 4900C8416

Tải dữ liệu vào thanh ghi R1: LDXW R1 0 i0 tương ứng mã lệnh: 3C082000

Thực hiện phép dịch trái 2 bit SLL R3 R1 2 tương ứng mã lệnh: 16186002

Opcode Cond flag Đích Nguồn 1 Immediate = 0 Không dùng Nguồn 2 000101 0 00011 00001 0 00000000 00010 Hình 5.7b: Nạp mã lệnh vào ROM (adsbygoogle = window.adsbygoogle || []).push({});

5.2.4 Phép toán dch phi

Thực hiện phép dịch trái dữ liệu trong thanh ghi R1 2 bit rồi lưu vào trong thanh ghi R3 : R3 R1 >> 2, dịch phải giá trị 0001111116 >>2 = 0000444416

Hình 5.8a: Nạp dữ liệu vào cache

Tải dữ liệu vào thanh ghi R1: LDXW R1 0 i0 tương ứng mã lệnh: 3C082000 Thực hiện phép dịch phải 2 bit SRL R3 R1 2 tương ứng mã lệnh: 18186002 Opcode Cond flag Đích Nguồn 1 Immediate = 0 Không dùng Nguồn 2 0001100 0 00011 00001 0 00000000 00010 Hình 5.8b: Nạp mã lệnh vào ROM

Hình 5.8c: Kết quả hiển thị trên kit DE2

5.2.5 Phép toán AND

Thực hiện phép AND hai giá trị thập lục phân giữa thanh ghi R1 và R2 và cất vào thanh ghi R3 , xác định giá trị cần tính toán nạp vào ROM, sau đó từ

ROM được tải vào Cache thực hiện phép tính.

Thực hiện AND 0000FC8F16 + 0000E0F016 = 0000E08016

Hình 5.9a: Nạp dữ liệu vào cache

LDXW R1 0 I0Tải dữ liệu từ ROM tại ô nhớ “0” vào thanh ghi R1 với mã lệnh sau: Opcode Cond flag Đích Nguồn 1 Immediate = 1 Immediate 0011110 0 00001 00000 1 0000000000000 Tương ứng mã Hex : 3C082000

LDXW R2 0 I1 Tải dữ liệu từ ROM tại ô nhớ “1” vào thanh ghi R2 với mã lệnh sau: Opcode Cond flag Đích Nguồn 1 Immediate = 1 Immediate 0011110 0 00001 00000 1 0000000000001 Tương ứng mã Hex : 3C0820001 AND R3 R1 R2 mã lệnh nhị phân: Opcode Cond flag Đích Nguồn 1 Immediate = 0 Không dùng Nguồn 2 0001000 0 00011 00001 0 00000000 00010 Tương ứng mã hex: 10184002. Hình 5.9b: Nạp mã lệnh vào ROM

Hình 5.9c: Kết quả hiển thị trên kit DE2

5.2.6 Phép toán OR

Thực hiện phép OR hai giá trị thập lục phân giữa thanh ghi R1 và R2 và cất vào thanh ghi R3 , xác định giá trị cần tính toán nạp vào ROM, sau đó từ

ROM được tải vào Cache thực hiện phép tính.

Thực hiện OR 0000FC8E16 + 0000E0F016 = 0000FCFE16

Hình 5.10a: Nạp dữ liệu vào cache

LDXW R1 0 i0 - Load giá trị từ ô nhớ “0” vào R1 (Mã lệnh :3C082000).

LDXW R2 0 i1 - Load giá trị từ ô nhớ “1” vào R2 (Mã lệnh :3C102001).

OR R3 R1 R2 với mã nhị phân: Opcode Cond flag Đích Nguồn 1 Immediate = 0 Không dùng Nguồn 2 0001001 0 00011 00001 0 00000000 00010

Tương ứng mã lệnh hex : 12184002

Hình 5.10b: Nạp mã lệnh vào ROM

Hình 5.10c: Kết quả hiển thị trên kit DE2

5.2.7 Phép toán XOR

Thực hiện phép toán xor hai giá trị từ thanh ghi R1 và R2 và lưu giá trị vào thanh ghi R3. R3← R1 XOR R2

Hình 5.11a: Nạp dữ liệu vào cache

LDXW R1 0 i0 - Load giá trị từ ô nhớ “0” vào R1 (Mã lệnh :3C082000).

LDXW R2 0 i1 - Load giá trị từ ô nhớ “1” vào R2 (Mã lệnh :3C102001).

XOR R3 R1 R2 Opcode Cond flag Đích Nguồn 1 Immediate = 0 Không dùng Nguồn 2 0001010 0 00011 00001 0 00000000 00010 Tương ứng mã lệnh hex: 14184002 Hình 5.11b: Nạp mã lệnh vào ROM (adsbygoogle = window.adsbygoogle || []).push({});

Hình 5.11c: Kết quả hiển thị trên kit DE2

5.2.8 Phép toán nhân

Thực hiện phép toán nhân hai giá trị từ thanh ghi R1 và R2 và lưu giá trị vào thanh ghi R3. R3← R1 * R2dựa theo thuật toán dịch bit.

Thực hiện nhân 0000002316 + 0000000216 = 0000004616

Hình 5.12a: Nạp dữ liệu vào cache

3C082000: LDXW 1 0 i0 Load giá trị từ ô nhớ “0” trong cache vào thanh ghi R1 3C102001: LDXW 2 0 i1 Load giá trị từ ô nhớ “1” trong cache vào thanh ghi R2 3C182002 : LDXW 3 0 i2 Load giá trị từ ô nhớ “2” trong cache vào thanh ghi R3 3C202003 : LDXW 4 0 i3 Load giá trị từ ô nhớ “3” trong cache vào thanh ghi R4 AND :

10290001 : AND 5 4 1 - R5 ← R4 AND R1 ( lấy LSB của Q) 9D802007 : JMP z 0 SHIFT - JMP đến SHIFT nếu LSB = 0

SHIFT:

1610A001 : SLL R2, R2, i1 (dịch trái M 1 bit) 18086001 : SRL R1, R1, i1 (dịch phải Q 1 bit)

9D80200B : JMP z 0 SHIFT - JMP đến OUT khi Q=0

9D002004 : JMP 0 0 AND – nếu không thì JMP với nhãn AND 3C382005 : LDXW R7 0 i5 – Load giá trị “0” vào R7

1C18C007 : ADD R3, R3, R7

D00200C : JMP 0 0 OUT - JMP tại chổđể kết thúc

Hình 5.12b: Nạp mã lệnh vào ROM

KT LUN VÀ HƯỚNG PHÁT TRIN

Trình bày cách thiết kế một vi xử lý từ khi đưa ra tập lệnh đến thiết kế các bộ phận bên trong vi xử lý: khối điều khiển, bộ nhớ chứa lệnh, tập thanh ghi, bộ

nhớ cache, bộ ALU 32 bit, Program Counter và Stack và sau đó thực hiện code. Thiết kế bộ vi xử lý theo cấu trúc hiện đại, xây dựng thành công hệ thống pipeline 4 “tầng” qua 4 giai đoạn nhận lệnh (I-Instruction), đọc lệnh (R-Read), thực thi lệnh (E-Execute), ghi kết quả (W-Write) để giúp tăng khả năng hoạt động của bộ vi xử lý.

Thiết kế thành công bộ vi xử lý 32 bit dùng ngôn ngữ lập trình mô tả phần cứng VHDL, sử dụng công cụ phần mềm Quartus của hãng Altera. Bộ vi xử lý RISC được thiết kế đạt tốc độ 33 MHz, có khả năng thi hành 15 lệnh với độ rộng 32 bit như sau:

• 8 tập lệnh ALU (AND, OR, XOR, SLL, SRL, ADD, ADDC, SUB).

• 2 lệnh dùng để tải và chứa dữ liệu (LDXW, STXW).

• 5 phép toán nhảy (JMP, JMPR, CALL, CALLR, RET).

Thiết kế hoàn chỉnh bộ vi xử lý 32-bit và kết quảđược phân tích để nhiều cấp độ khác nhau bằng chương trình Quartus: số logic elements, số memory bits sử dụng, tần số hoạt động tối đa của hệ thống.

Mô phỏng thành công giản đồ thời gian trên timming editor với các dạng sóng tín hiệu của bộ vi xử lý, mô phỏng thành công các khối chức năng Pcimem

(Program Counter and memory:Bộ đếm chương trình và Bộ nhớ), Cntrpipe

(Control pipeline: Khối điều khiển đường ống dẫn), Rfcache (register file and cache:Tập thanh ghi vùng cache), ALU (Arithmetic Logic Unit: Khối logic số

học).

Thực hiện các phép tính trên bộ vi xử lý bằng cách, mô phỏng dạng sóng và thực hiện trên mạch. Việc thực hiện kiểm tra trên kit cần kết nối thêm các bộ hiện thị cho tín hiệu result_out (31:0). Kết quả hiển thịđược thông qua 8 led 7 đoạn

Tuy đã rất cố gắng nhưng đề tài vẫn còn nhiều hạn chế:

Tuy thực hiện thiết kế bằng kỹ thuật đường ống dẫn, đường ống dẫn được

đặt giữa các khối chức năng cơ bản, tạo nên đường ống dẫn bốn tầng do đó có khả (adsbygoogle = window.adsbygoogle || []).push({});

năng thực hiện đến bốn lệnh trong cùng một cho kỳđồng hồ. Nhưng tốc độ của bộ

vi xử lý được thiết kế chưa nhanh, phụ thuộc vào xung clock cấp vào. Trong thiết kế đề nạp dữ liệu vào đã phải thiết kế thêm bộ loader cũng cần cung cấp xung clock để hoạt động, do vậy việc cấp xung clock cho bộ vi xử lý chạm hơn, đểđảm bảo việc kịp nạp dữ liệu vào cho bộ vi xử lý tính toán đểđảm bảo kết quả các phép toán thực thi đúng. Do đó cần để bộ vi xử lý đạt tốc độ cao hơn cần nạp dữ liệu trực tiếp vào bộ nhờ của vi xử lý, ngoài ra còn tối ưu quá tập lệnh nhưng vẫn đảm bảo thực hiện tốt các phép toán.

Trên cơ sở bộ vi xử lý được thiết kế tiến hành thực hiện các bài thực tập thí nghiệm để góp phần làm phong phú và đa dạng thêm những ứng dụng thực tế của ngôn ngữ lập trình mô tả phần cứng VHDL, mở rộng các ứng dụng của phần mếm Quartus cho thiết kế vi mạch hiện nay, phục vụ đào tạo trong lĩnh vực thiết kế vi mạch.

Trong nghiên cứu và thí nghiệm có thể thiết kế chỉnh sữa và kiểm tra là rất quan trọng, từ những kết quảđạt được đó đưa ra một chip vi xử lý tối ưu, phụ vụ

TÀI LIỆU THAM KHẢO

[1] PGS. TS Đinh Sỹ Hiền, “ Điện Tử Nano Linh Kiện và Công Nghệ”, NXB Đại Học Quốc Gia TP. HCM, TP. HCM, 2005

[2] Hồ Trung Mỹ, “ Vi Xử Lý”, NXB Đại Học Quốc Gia TP. HCM, TP. HCM, 2006

[3] Tống Văn On,“Thiết kế mạch số với VHDL & Verilog”- Nhà xuất bản Lao

động xã hội Hà Nội

[4] Nguyễn Quốc Tuấn, “Ngôn ngữ VHDL để thiết kế vi mạch”, NXB Đại Học Quốc Gia TP. HCM, TP. HCM, 9 – 2006

[5] Altera Corporation, ”Quartus II handbook, Volume 1 Design & Synthesis”, 2004

[6] Altera Corporation, ”DE2 development and Education Board User Manual”, 2006

[7] Jari Nurmi “Processor Design System-on-Chip Computing for ASICs and FPGAs”, Tampere University of Technology, Finland, April 2007

[8] Altera Corporation ,“Avalon Interface Specification” 2005

[9] Altera Corporation ,“Introduction to the Altera SOPC Builder” 2006

[10] Enoch O. Hwang, “Digital Logic and Microprocessor Design with VHDL” Cengage- Engineering, La Sierra University,Riverside 2005

[11] Zainalabedin Navabi, “ Digital Design and Implementation with Field Programmable Devices” Boston, Massachusetts, 2004

[12] John L. Donaldson “Illustrating CPU Design Concepts with DLSim 3” October18 - 21, 2009, San Antonio, TX

[13] Menchini , P. “ A Minimalist Approach to VHDL Logic Modeling” IEEE Design and Test computers, vol. 7, no. 3, pp. 12 – 23, june 1990

Một phần của tài liệu THIẾT KẾ VÀ ỨNG DỤNG BỘ VI XỬ LÝ 32 BIT DÙNG NGÔN NGỮ VHDL (Trang 72)