1. Trang chủ
  2. » Kỹ Thuật - Công Nghệ

THIẾT kế CPU RISC 32 BIT đơn CHU kỳ THỰC HIỆN LỆNH BEQ (có code)

30 795 13

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 30
Dung lượng 475,92 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

THIẾT kế CPU RISC 32 BIT đơn CHU kỳ THỰC HIỆN LỆNH BEQ (có code) THIẾT kế CPU RISC 32 BIT đơn CHU kỳ THỰC HIỆN LỆNH BEQ (có code) THIẾT kế CPU RISC 32 BIT đơn CHU kỳ THỰC HIỆN LỆNH BEQ (có code) THIẾT kế CPU RISC 32 BIT đơn CHU kỳ THỰC HIỆN LỆNH BEQ (có code) THIẾT kế CPU RISC 32 BIT đơn CHU kỳ THỰC HIỆN LỆNH BEQ (có code)

Trang 1

KỲ THỰC HIỆN LỆNH BEQ

Trang 4

HÌNH 1.1: CÁC TOÁN TỬ TRONG VERILOG 5 HÌNH 1.1: Ý NGHĨA CÁC TOÁN TỬ TRONG VERILOG 6 HÌNH 2.1: CÁC LỆNH DÙNG TRONG 3 KHUÔN DẠNG LỆNH 8

Trang 5

CPLD Complex progamable logic device.

IM Instruction memory.

CPU Central Processing Unit.

HDLs Hardware Description Languages

CISC Complex Instruction Set Computer

MIPS Microprocessor without Interlocked Pipeline Stages

RF Register File.

ALU Arithmetic Logic Unit

FPGA Field-programable gate array.

Trang 6

CHƯƠNG 1 TỔNG QUAN VỀ CPU RISC VÀ NGÔN NGỮ MÔ TẢ

Hiện nay các bộ vi xử lý RISC phổ biến là ARM, SuperH, MIPS, SPARC, DECAlpha, PA-RISC, PIC, và PowerPC của IBM

Mục tiêu của RISC là đơn giản hóa các lệnh, để mỗi lệnh có thể được thực thi chỉ trong 1chu kỳ máy

Ngoài ra còn 1 hướng thiết kế khác là CISC (Complex Instruction Set Computer - Máytính với tập lệnh phức tạp), đây cũng là một hướng thiết kế trước RISC Dù ở bất kỳ cấp

độ nào, đơn vị logic của một chip RISC bao giờ cũng cần ít transistor hơn so với của mộtchip CISC

Những đặc điểm thường thấy của 1 chip RISC:

- Địng dạng chuẩn mã lệnh (làm quá trình giải mã đơn giản hơn)

- Các thanh ghi đồng nhất (có thể được dùng để thay thế nhau)

- Cách đánh địa chỉ đơn giản

- Hỗ trợ ít kiểu dữ liệu

1.1.2 Ngôn ngữ mô tả phần cứng

Sự phát triển của khoa học công nghệ ngày càng tăng để đáp ứng nhu cầu của con người,

để giải quyết được những vấn đề của công nghệ người ta đã tạo ra những vi mạch lập

Trang 7

trình (hay còn gọi là các chip đa chức năng) như FPGA, CPLD…Nhưng do những vimạch con người tạo ra đó lại không thể hiểu được ngôn ngữ của con người, vì vậy người

ta đã tạo ra loại ngôn ngữ có thể giao tiếp được giữa người với vi mạch (hay với phầncứng) được gọi là ngôn ngữ lập trình

Số lượng cổng logic tích hợp bên trong những con chip ngày nay là rất lớn ( có thể lênđến hàng triệu) dẫn đến việc đi dây thủ công gần như bất khả thi, do yêu cầu người lậptrình phải thiết kế được một vi mạch số trong khoảng thời gian cho phép nên ngôn ngữ

mô tả phần cứng HDLs đã ra đời Do HDLs giúp nâng cao năng suất thiết kế cũng nhưtạo ra đa dạng về chức năng của các vi mạch số với tốc độ cao hơn nên ngày càng được

sử dụng phổ biến

HDLs có rất nhiều loại cho người lập trình có thể lựa chọn nhưng có hai loại ngôn ngữtiểu biểu được sử dụng nhiều nhất là VHDL và Verilog HDL

1.2 Verilog HDL

Verilog HDL (thường gọi tắt là Verilog) được phát minh bởi Gateway Design Automatic

và được giới thiệu lần đầu vào năm 1984 Như đã đề cập ở trên thì đây là một trong haingôn ngữ thiết kế vi mạch phổ biến nhất trên thế giới Để hoạt động trong lĩnh vực thiết

kế phần cứng thì người kỹ sư và sinh viên đang theo học rất cần phải biết qua ngôn ngữVerilog HDL này Được đánh giá từ đa số người là khá giống với ngôn ngữ lập trình C(ngôn ngữ lập trình căn bản được giảng dạy khi mới bắt đầu học lập trình) nên VerilogHDL khá dễ làm quen, dễ sử dụng do có cú pháp ngắn gọn và cấu trúc chương trìnhkhông quá phức tạp

Do thư viện và ngôn ngữ Veriog đều được hỗ trợ từ gần như hầu hết các công cụ thiết kế

vi mạch hiện nay nên nó đã trở thành một trong những sự lựa chọn tối ưu của các nhà lậptrình

Trang 8

1.3 Cơ bản về Verilog HDL

1.3.1 Quy ước chung về từ khóa

- Khoảng trắng: bao gồm phím space, phím tab và phím enter

- Chú thích: bao gồm chú thích đơn dòng (//…) và nhiều dòng (/*…*/) Giúp ghichú ý nghĩa của những câu lệnh, hay giá trị của các biến được thêm vào, hỗ trợcho người lập trình nhanh chóng nắm bắt nội dung chương trình

- Từ định danh: bắt đầu từ chữ cái và “_”, không được bắt đầu từ số và “$”(những ký tự sau ký tự đầu vẫn có thể là số), có phân biệt chữ hoa,chữ thường.Được dùng trong việc đặt tên cho biến, module, trường hợp, các port xuất nhậphay các khối con được lấy ra sử dụng

- Toán tử: 3 loại là toán tử đơn (a = !b), toán tử kép (a = c ^ d) và toán tử điềukiện (a = x ? y : z)

- Chữ số: cho biết độ rộng (hay số bit của số sẽ được khai báo), đi kèm là dạng

số của số được khai báo như ’b (nhị phân), ’o(bát phân), ’d(thập phân), ’h (thậplục phân) và phần chữ số sau khai báo là giá trị của số

- Gạch dưới: giúp phân biệt số nhị phân trong trường hợp quá nhiều bit Ngoàicông dụng là từ định danh thì “_” vẫn có thể được thêm vào khi mà số nhị phân

có quá nhiều bit, giúp dễ phân biệt mà không làm thay đổi giá trị của số

1.3.2 Module

Module có thể là khối chính hoặc là khối nhỏ của mạch được gọi vào sử dụng bởikhối chính, bao gồm 4 phần:

- Tên module (định nghĩa)

- Các chân vào, ra của module

- Chức năng của module

Trang 9

Cú pháp: wire [msb:lsb] ten_bien;

- Register: Đóng vai trò như 1 thanh ghi, lưu giữ giá trị cho đến khi nhận được giátrị mới Có công dụng như kiểu Net nhưng được dùng trong các khối always, if…

Cú pháp: reg [msb:lsb] ten_bien;

- Parameter: Đóng vai trò như 1 tham số trong phần thiết kế

Cú pháp: parameter [msb:lsb] ten_tham_so = gia_tri;

1.3.4 Các phép gán

Phép gán liên tục: được dùng để gán giá trị cho các port, các biến wire Khi sử dụng sẽhoạt động một cách đồng thời không phân biệt trước sau và không nằm trong các khốichức năng Từ khóa: “assign”

Phép gán thủ tục: gồm Blocking và Non-blocking, thường nằm trong các khối chức năng

- Blocking: đặt trưng bởi dấu “=” Các phép gán được thực hiện một cách tuần tự,phép gán sau sẽ sử dụng kết quả của phép gán trước đó

- Non-blocking: đặt trưng bởi dấu “<=” Các phép gán được thực hiện một cáchsong song, phép gán sau không còn phụ thuộc vào pháp gán trước nữa mà sẽ lấygiá trị ban đầu của biến đã được gán

Trang 10

cũng đóng vai trò như if…else, nó sẽ thực thi lệnh nếu điều kiện được thỏa mãnnhưng nó được dùng trong trường hợp bản thiết kế có quá nhiều điều kiện, khắcphục được nhược điểm dài dòng và phức tạp của phát biểu if…else và giúp choviệc sữa đổi dễ dàng hơn nếu có lỗi xảy ra

Trang 11

Bảng 1.1: Các toán rử trong Verilog

Bảng 1.2: Ý nghĩa các toán tử trong Verilog

Toán tử điều kiện:

- Cú pháp: ket_qua = bien_dieu_kien ? ket_qua_1 : ket_qua _2;

- Ý nghĩa: nếu bien_dieu_kien bằng 1 thì kết quả nhận được của lệnh là ket_qua_1

và ngược lại khi bằng 0 thì kết quả của lệnh là ket_qua_2

Toán tử kết nối:

- Cú pháp: bien_a = {bien_b , bien_c};

- Ý nghĩa: toán tử này sẽ tạo ra một biến mới (bien_a) bằng cách kết nối số bit củahai biến khác (bien_b và bien_c)

Trang 12

CHƯƠNG 2 NỘI DUNG ĐỀ TÀI

2.1 Các khuôn dạng lệnh

MIPS là kiến trúc vi xử lý của Patterson và Hennessy đã được nghiên cứu rộng rãi, tươngđối đơn giản và có ít đặc tính MIPS là viết tắt của Microprocessor without InterlockedPipeline Stages, là kiến trúc bộ tập lệnh RISC phát triển bởi MIPS Technologies Ban đầukiến trúc MIPS là 32bit, và sau đó nâng cấp thành phiên bản 64 bit

Hình 2.1: Cấu trúc khuôn dạng lệnh MIPS

3 khuôn dạng lệnh R (Register), I(Immediate), J(Jump) chính là các thanh ghi 32 bittrong đó sẽ có:

- Các lệnh được thực thi

- Các địa chỉ nguồn của biến thực hiện phép toán

- Các địa chỉ lưu giá trị sau khi thực hiện phép toán

Trang 13

Ý nghĩa của từng nhóm bit trong khuôn dạng lệnh:

- op: mã phép toán

- rs, rt: địa chỉ của các toán hạng nguồn

- rd: địa chỉ lưu kết quả

- sh: các lệnh dịch bit

- fn: chỉ ra lệnh cụ thể để thực thi

Bảng 2.1: Các lệnh dùng trong 3 khuông dạng lệnh

Trang 14

Lệnh beq (branch on equal): lệnh thực hiện rẽ nhánh khi các thanh ghi có giá trị bằngnhau, có OpC = 000100, thuộc khuông dạng lệnh I.

2.2 Các khối chính của CPU RISC

2.2.1 Khối Instruction Memory (IM)

Chứa các thanh ghi có cấu trúc theo khuôn dạng lệnh (R, I, J) Khi nhận được tín hiệu vào

từ PC thì lệnh sẽ được đọc ra

Hình 2.2: Khối IM

Thành phần của khối IM:

- Address: ngõ vào 32 bit nhận tín hiệu vào từ PC, rồi dựa vào đó để di chuyển đếnkhuôn dạng lệnh tương ứng trong khối IM

- Read Data: ngõ ra 32 bit xuất dữ liệu từ khuôn lệnh tương ứng đã chọn

- Write Data: ngõ vào 32 bit lưu dữ liệu từ khối khác

Trang 15

2.2.2 Khối Register File (RF)

Nhận dữ liệu từ khối IM rồi chọn ra thanh ghi tương ứng để xuất dữ liệu đến khối ALU.Một chức năng khác của khối RF là lưu lại kết quả tính toán từ khối ALU

- WA (Write Address): ngõ vào 5 bit, chọn địa chỉ để lưu giá trị

- WD (Write Data): ngõ vào 32 bit, lưu kết quả tính toán được từ khối ALU

Trang 16

2.2.3 Khối Arithmetic Logic Unit (ALU)

Dựa vào dữ liệu từ khối RF để thực hiện các phép toán số học và logic

Hình 2.4: Khối ALU

Thành phần khối ALU:

- A, B: 2 ngõ vào 32 bit nhận giá trị để thực hiện tính toán

- Op (Operation): ngõ vào 3 bit, quyết định ALU sẽ thực hiện lệnh nào khi thiết kếCPU thực hiện được nhiều lệnh khác nhau

- Output: ngõ ra 32 bit, ngõ ra đưa giá trị ra sau khi tính toán

Trang 17

2.3 Sơ đồ kết nối các khối

Hình 2.5: Sơ đồ tổng quát kết nối các khối

Ngoài các khối chính đã đề cập ở trên thì trong đề tài thiết kế CPU RISC 32 bit thực hiệnlệnh beq này còn phài có các khối con khác để có thể hoạt động theo đúng yêu cầu, baogồm:

Trang 18

2.4 Lưu đồ giải thuật

Hình 2.6: Lưu đồ giải thuật 3 khối

Trang 19

2.5 Các thành phần của chương trình

2.5.1 Module các khối con

Bao gồm các module alu, IM, RF, control, mux21, PC, signextend Mỗi module quy địnhhành vi và chức năng hoạt động của các khối

2.5.2 Module kết nối các khối

Bao gồm các module datacontrol, datapath và cpu Các module này sẽ liên kết các khốilại với nhau thông qua việc gọi các module con ở bên trong nó, tạo thành 1 CPU hoànchỉnh

Trang 20

CHƯƠNG 3 KẾT QUẢ MÔ PHỎNG

Hình 3.1: Kết quả mô phỏng

Kết quả mô phỏng lệnh beq đúng như đã yêu cầu, khi giá trị của 2 thanh ghi bằng nhauthì ngõ ra sẽ bật lên, sẽ thực hiện rẽ nhánh

Trang 23

TÀI LIỆU THAM KHẢO

Tiếng Việt

[1] Tống Văn On, Thiết kế vi mạch CMOS VLSI, Nhà xuất bản Phương Đông.

[2] Vũ Đức Lung, Lâm Đức Khải, Phan Đình Duy, Ngôn ngữ lập trình phần cứng

Verilog, Nhà xuất bản Đại Học Quốc Gia TP Hồ Chí Minh.

[3] https://vi.wikipedia.org/wiki/

Tiếng Anh

[4] Blaine Readler, Verilog by Example, Full ARC Press, United States.

[5] https://www.google.com.vn/

Trang 27

assign RF[0] = sw1;

assign RF[1] = sw2;

assign ReadData1 = RF[ReadAddr1];

assign ReadData2 = RF[ReadAddr2];

Trang 29

logic [31:0] PCin, instr;

assign ledg = zero;

assign ledr = sw;

Trang 30

datacontrol DC(clk,sw,PCin,instr,zero);

IM IM(PCin,instr);

endmodule

Ngày đăng: 21/01/2018, 20:25

TỪ KHÓA LIÊN QUAN

w