Tải bản đầy đủ (.docx) (30 trang)

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

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (467.23 KB, 30 trang )

THIẾT KẾ CPU RISC 32 BIT ĐƠN CHU
KỲ THỰC HIỆN LỆNH BEQ


MỤC LỤC

2


DANH MỤC CÁC HÌNH VẼ

3


DANH MỤC CÁC BẢNG BIỂU
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

4


DANH MỤC CÁC TỪ VIẾT TẮT
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.

RISC


Reduced Instructions Set Computer.

5


Trang 6/24

CHƯƠNG 1.

TỔNG QUAN VỀ CPU RISC VÀ NGÔN NGỮ MÔ TẢ
PHẦN CỨNG

1.1

Giới thiệu
1.1.1

RISC

RISC (Reduced Instructions Set Computer - Máy tính với tập lệnh đơn giản hóa) là một
phương pháp thiết kế các bộ vi xử lý theo hướng đơn giản hóa tập lệnh, trong đó thời
gian thực thi tất cả các lệnh đều như nhau.
Hiện nay các bộ vi xử lý RISC phổ biến là ARM, SuperH, MIPS, SPARC, DEC
Alpha, 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 1
chu kỳ máy.
Ngoài ra còn 1 hướng thiết kế khác là CISC (Complex Instruction Set Computer - Máy
tí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ột
chip 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
Thiết kế CPU RISC 32 bit đơn chu kỳ thực hiện lệnh beq

SVTH: Nguyễn Văn A


Trang 7/24

trình (hay còn gọi là các chip đa chức năng) như FPGA, CPLD…Nhưng do những vi
mạ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ần
cứ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ập
trì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 hai
ngô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 Verilog
HDL 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ình
khô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ập
trình.

Thiết kế CPU RISC 32 bit đơn chu kỳ thực hiện lệnh beq

SVTH: Nguyễn Văn A


Trang 8/24

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 ghi
chú ý 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ập
hay 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ều
kiệ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ập
lụ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ài
cô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ởi
khố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.
Kết thúc module.
1.3.3

Kiểu dữ liệu

Gồm 3 kiểu:
-

Net: Đóng vai trò như 1 sợi dây nối các module, như những biến số trung gian
giữa input và output. Được dùng trong phép gán trực tiếp.

Thiết kế CPU RISC 32 bit đơn chu kỳ thực hiện lệnh beq

SVTH: Nguyễn Văn A


Trang 9/24

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ối
chứ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ách
song 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ấy
giá trị ban đầu của biến đã được gán.
1.3.5

các phát biểu

IF…ELSE:
-

Khi điều kiện của if được thỏa mãn thì các lệnh bên trong if sẽ được thực thi, và

-

ngược lại thì các lệnh trong else sẽ được thực thi.

Nếu cần thiết kế có hơn 2 điều kiện thì dùng “else if”. Khi đó if và else if sẽ tương

-

ứng với từng điều kiện khác nhau.
Lưu ý trong trường hợp ứng với 1 điều kiện có nhiều lệnh được thực hiện thì tập
lệnh phải nằm trong “begin” và “end” (mỗi lệnh vẫn kết thúc bằng “;”).

Thiết kế CPU RISC 32 bit đơn chu kỳ thực hiện lệnh beq

SVTH: Nguyễn Văn A


Trang 10/24

CASE:
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ãn
nhưng nó được dùng trong trường hợp bản thiết kế có quá nhiều điều kiện, khắc
phụ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 cho
việc sữa đổi dễ dàng hơn nếu có lỗi xảy ra.
1.3.6

Khối always

Là khối chức năng cơ bản, thường được dùng trong các hành vi dựa vào điều kiện. Các
biến được gán trong khối phải được khai báo kiểu reg.
Gồm 2 loại là always hoạt động dựa vào tín hiệu xung clock (có 2 mức) và always dựa
vào các biến dùng bên trong nó.
-


Cú pháp: always @ (posedge Clock), always @ (negedge Clock)
Cú pháp: always @ (*)
1.3.7

Các toán tử

Khá giống với ngôn ngữ lập trình C
Số học
Logic
Quan hệ
So sánh
Bit-wise
Dịch
Điều kiện
Kết nối

+ - * / %
! && ||
< <= > >=
== !=
& | ^ ~
<< >>
? :
{}

Thiết kế CPU RISC 32 bit đơn chu kỳ thực hiện lệnh beq

SVTH: Nguyễn Văn A



Trang 11/24

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

u-v
u trừ v
u+v
u cộng v
u*v
u nhân v
u%v
u chia v (lấy phần dư)
u/v
u chia v (lấy phần nguyên)
uu bé hơn v
u <= v
u bé hơn hoặc bằng v
u>v
u lớn hơn v
u >= v
u lớn hơn hoặc bằng v
u != v
u không bằng v
u == v
u bằng v
u&v
u AND v
u|v
u OR v

u^v
u XOR v
u^v
đảo u
u >> v
u dịch phải v lần
u << v
u dịch trái v lần
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ủa
hai biến khác (bien_b và bien_c).

Thiết kế CPU RISC 32 bit đơn chu kỳ thực hiện lệnh beq

SVTH: Nguyễn Văn A


Trang 12/24


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 Interlocked
Pipeline Stages, là kiến trúc bộ tập lệnh RISC phát triển bởi MIPS Technologies. Ban đầu
kiế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 bit
trong đó 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.

Thiết kế CPU RISC 32 bit đơn chu kỳ thực hiện lệnh beq

SVTH: Nguyễn Văn A


Trang 13/24

Ý 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

Thiết kế CPU RISC 32 bit đơn chu kỳ thực hiện lệnh beq

SVTH: Nguyễn Văn A


Trang 14/24

Lệnh beq (branch on equal): lệnh thực hiện rẽ nhánh khi các thanh ghi có giá trị bằng
nhau, 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 đến


-

khuô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.

Thiết kế CPU RISC 32 bit đơn chu kỳ thực hiện lệnh beq

SVTH: Nguyễn Văn A


Trang 15/24

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.

Hình 2.3: Khối RF
Các thành phần khối RF:
-

RA1 (Read Address 1), RA2 (Read Address 2): đây là các ngõ vào 5 bit, chọn

-

thanh ghi tương ứng với giá trị nhận được từ khối IM.
RD1 (Read Data 1), RD2 (Read Data 2): đây là các ngõ ra 5 bit, xuất giá trị thanh


-

ghi đến 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.

Thiết kế CPU RISC 32 bit đơn chu kỳ thực hiện lệnh beq

SVTH: Nguyễn Văn A


Trang 16/24

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.

Thiết kế CPU RISC 32 bit đơn chu kỳ thực hiện lệnh beq

SVTH: Nguyễn Văn A


Trang 17/24

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ện
lệ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, bao
gồm:
-

Các bộ cộng (adder)
Các bộ mux 2-1
Khối PC
Khối control
Khối ALU control
Bộ mở rộng dấu (signextend)

Thiết kế CPU RISC 32 bit đơn chu kỳ thực hiện lệnh beq

SVTH: Nguyễn Văn A


Trang 18/24


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

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

Thiết kế CPU RISC 32 bit đơn chu kỳ thực hiện lệnh beq

SVTH: Nguyễn Văn A


Trang 19/24

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 định
hà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ối
lạ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àn
chỉnh.

Thiết kế CPU RISC 32 bit đơn chu kỳ thực hiện lệnh beq

SVTH: Nguyễn Văn A



Trang 20/24

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 nhau
thì ngõ ra sẽ bật lên, sẽ thực hiện rẽ nhánh.

Thiết kế CPU RISC 32 bit đơn chu kỳ thực hiện lệnh beq

SVTH: Nguyễn Văn A


Trang 21/24

CHƯƠNG 4.

NHẬN XÉT

4.1 Ưu điểm
Thiết kế được đơn giản hóa với phương pháp RISC dựa trên kiến trúc MIPS.
Tốc độ tính toán được nâng cao với tập lệnh đơn giản.
4.2 Nhược điểm
Do có tập lệnh đơn giản nên người lập trình phải viết chương trình dài hơn.
Ít lệnh hỗ trợ ngôn ngữ cấp cao.
Hỗ trợ ít kiểu dữ liệu.


Thiết kế CPU RISC 32 bit đơn chu kỳ thực hiện lệnh beq

SVTH: Nguyễn Văn A


Trang 22/24

CHƯƠNG 5.

KẾT LUẬN

5.1 Kết luận
Kết quả mô phỏng đúng với yêu cầu của lệnh. Chương trình không xảy ra lỗi và có thể
biên dịch để nạp lên kit chạy thử.
5.2 Hướng phát triển
Từ CPU 32 bit đơn chu kỳ thực hiện 1 lệnh, có thể nâng cấp lên thành CPU 64 bit đa chu
kỳ thực hiện nhiều lệnh.

Thiết kế CPU RISC 32 bit đơn chu kỳ thực hiện lệnh beq

SVTH: Nguyễn Văn A


Trang 23/24

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]

/>
Tiếng Anh
[4]

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

[5]

/>
Thiết kế CPU RISC 32 bit đơn chu kỳ thực hiện lệnh beq

SVTH: Nguyễn Văn A


Trang 24/24

PHỤ LỤC A
Các chương trình con
//ALU 32bit
module alu (alu1,alu2,aluop,zero);
output zero;
input [1:0]aluop;
input [31:0]alu1,alu2;

logic [31:0]x;
always @(*)
case (aluop)
2'b10:x <= (alu1 - alu2);
default: x <= 32'b1;
endcase
assign zero = (x == 0)? 1 :0;
endmodule
//control
module control (in,aluop,branch);
output branch;
input [5:0]in;
output [1:0]aluop;

Thiết kế CPU RISC 32 bit đơn chu kỳ thực hiện lệnh beq

SVTH: Nguyễn Văn A


Trang 25/24

logic [2:0] w;
logic branch;
assign {branch,aluop} = w;
always @(*)
case (in)
6'b000100:w <= 3'b110;
default: w <= 3'b000;
endcase
endmodule


//IM 32bit
module

IM(address,ReadData);

output

[31:0] ReadData;

input [31:0] address;
logic

[31:0] R[1:0];

always @(ReadData)
begin
R[0]=R0;
end
assign

ReadData = R[address];

parameter

R0 = 32'b_000100_00000_00001_0000000000000000;

endmodule

Thiết kế CPU RISC 32 bit đơn chu kỳ thực hiện lệnh beq


SVTH: Nguyễn Văn A


×