THIẾT kế CPU RISC 32 BITS đơn CHU kỳ THỰC HIỆN LỆNH SLT (có code) THIẾT kế CPU RISC 32 BITS đơn CHU kỳ THỰC HIỆN LỆNH SLT (có code) THIẾT kế CPU RISC 32 BITS đơn CHU kỳ THỰC HIỆN LỆNH SLT (có code) THIẾT kế CPU RISC 32 BITS đơn CHU kỳ THỰC HIỆN LỆNH SLT (có code) THIẾT kế CPU RISC 32 BITS đơn CHU kỳ THỰC HIỆN LỆNH SLT (có code)
Trang 1CHU KỲ THỰC HIỆN LỆNH SLT
Trang 2DANH MỤC CÁC BẢNG BIỂU IX DANH MỤC CÁC TỪ VIẾT TẮT X
CHƯƠNG 1 TÌM HIỂU NGÔN NGỮ THIẾT KẾ VERILOG 1
1.1 TÌM HIỂU VỀ NGÔN NGỮ ĐẶC TẢ PHẦN CỨNG (HDLS) 1
1.2 NGÔN NGỮ THIẾT KẾ VERILOG HDL 1
1.2.1 Lịch sử phát triển 1
1.2.2 Quy ước về từ khóa 2
1.2.2.1 Chú thích 2
1.2.2.2 Toán tử 3
1.2.2.2.1 Toán tử số học 3
1.2.2.2.2 Toán tử so sánh và quan hệ 3
1.2.2.2.3 Toán tử logic 4
1.2.2.2.4 Toán tử dịch 4
1.2.2.2.5 Toán tử điều kiện 5
1.2.2.3 Số học 5
1.2.2.3.1 Hằng số nguyên 5
1.2.2.3.2 Hằng số thực 6
1.2.2.4 Ký tự gạch dưới 6
1.2.2.5 Từ định danh 6
1.2.3 Mô tả module 7
1.2.4 Khối always 7
1.2.5 Khai báo kiểu dữ liệu 9
1.2.5.1 Kiểu dữ liệu Net 9
1.2.5.2 Kiểu dữ liệu Register 9
1.2.5.3 Kiểu dữ liệu Parameter 10
1.2.6 Phép gán 11
Trang 3CHƯƠNG 2 CPU RISC 32 BITS 14
2.1 GIỚI THIỆU 14
2.2 LỊCH SỬ RA ĐỜI VÀ PHÁT TRIỂN CỦA CPU RISC 15
2.3 CẤU TRÚC CÁC KHỐI TRONG CPU RISC 32 BITS 16
2.3.1 Khối IM (Instruction Memory) 17
2.3.1.1 Khuôn dạng lệnh R 18
2.3.1.2 Khuôn dạng lệnh I 19
2.3.1.3 Khuôn lệnh dạng J 20
2.3.2 Khối RF (Register File) 20
2.3.3 Khối ALU 22
2.3.4 Các khối phụ khác 22
2.3.4.1 Khối Data Memory 22
2.3.4.2 Bộ Sign Extend 23
2.4 CÁC LỆNH ĐƯỢC SỬ DỤNG TRONG 3 KHUÔN DẠNG LỆNH 24
CHƯƠNG 3 THIẾT KẾ CPU RISC 32 BITS ĐƠN CHU KỲ THỰC HIỆN LỆNH SLT 26
3.1 TÌM HIỂU VỀ LỆNH SLT 26
3.2 THIẾT KẾ ĐƯỜNG DỮ LIỆU VÀ ĐƯỜNG ĐIỀU KHIỂN THỰC HIỆN LỆNH SLT 27
3.3 NGUYÊN LÝ HOẠT ĐỘNG CỦA CPU RISC 32 BITS ĐƠN CHU KỲ THỰC HIỆN LỆNH SLT 27
CHƯƠNG 4 CODE VÀ KẾT QUẢ MÔ PHỎNG 29
4.1 CODE MÔ PHỎNG TRÊN QUARTUS: 29
Trang 4CHƯƠNG 5: KẾT LUẬN 38
5.1 ƯU VÀ NHƯỢC ĐIỂM CỦA ĐỀ TÀI 38
5.1.1 Ưu điểm 38
5.1.2 Nhược điểm 38
5.2 HƯỚNG PHÁT TRIỂN 38
TÀI LIỆU THAM KHẢO 39
Trang 5HÌNH 2-1: CPU RISC ARM710.
HÌNH 2-2: SƠ ĐỒ TỔNG THỂ CÁC KHỐI TRONG MỘT CPU RISC 32 BITS HÌNH 2-3: CẤU TRÚC KHỐI IM.
HÌNH 2-4: KHỐI RF.
HÌNH 2-5: KHỐI ALU.
HÌNH 2-6: KHỐI DATA MEMORY.
HÌNH 2-7: KHỐI SIGN EXTEND.
HÌNH 3-1: ĐƯỜNG DỮ LIỆU VÀ ĐIỀU KHIỂN THỰC HIỆN LỆNH SLT HÌNH 4-1: CODE CỦA BỘ CỘNG
HÌNH 4-2: CODE KHỐI ĐẦU VÀO PC.
HÌNH 4-3: CODE KHỐI IM.
HÌNH 4-4: CODE KHỐI RF.
HÌNH 4-5: CODE KHỐI ALU.
HÌNH 4-6: CODE KHỐI CONTROL.
HÌNH 4-7: CODE KHỐI DATACONTROL.
HÌNH 4-8: CODE KHỐI ALUDECODER.
HÌNH 4-9: CODE CPU.
HÌNH 4-10: CODE CHO ĐƯỜNG DỮ LIỆU
HÌNH 4-11: KẾT QUẢ MÔ PHỎNG (1).
Trang 7BẢNG 1-1: Ý NGHĨA CỦA CÁC TOÁN TỬ SỐ HỌC.
BẢNG 1-2: Ý NGHĨA CỦA CÁC TOÁN TỬ SO SÁNH VÀ QUAN HỆ.
BẢNG 1-3: Ý NGHĨA CỦA CÁC TOÁN TỬ LOGIC.
BẢNG 1-4: Ý NGHĨA CỦA CÁC TOÁN TỬ DỊCH.
BẢNG 1-5: Ý NGHĨA CÁC SỐ HỌC.
BẢNG 2-1: CÁC LỆNH ĐƯỢC SỬ DỤNG TRONG 3 KHUÔN DẠNG LỆNH (1) BẢNG 2-2: CÁC LỆNH ĐƯỢC SỬ DỤNG TRONG 3 KHUÔN DẠNG LỆNH (2).
Trang 8CPU Central Proccessing Unit.
RISC Reduced Instructions Set Computer.
SLT Set on less time.
HDLs Hardware Description Languages.
ALU Arithmetic Logic Unit.
ARM Advanced RISC Machine.
VHDL Very High Speed Intergrated Circuit Hardware Description
Language.
CISC: Complex Instruction Set Computer.
Trang 9CHƯƠNG 1 TÌM HIỂU NGÔN NGỮ THIẾT KẾ VERILOG
1.1 Tìm hiểu về ngôn ngữ đặc tả phần cứng (HDLs)
Ngày nay, trong thời đại khoa học kỹ thuật, nền công nghiệp vi mạch không ngừng phát triển, khi kích thước của những vi mạch và con chip ngày càng nhỏ và độ phức tạp của hệ thống thiết kế ngày càng tăng thì mà các phương pháp thiết kế mạch truyền thống như dùng tối thiểu hóa hàm Boolean hay dùng sơ đồ các phần tử không còn đáp ứng được các yêu cầu đặt ra khi thiết kế Hơn nữa các mạch thiết kế ra yêu cầu phải được thử nghiệm kỹ lưỡng trước khi đưa vào chế tạo hàng loạt Trước những đòi hỏi đó, ngôn ngữ đặc tả phần cứng HDLs (Hardware Description Languages) ra đời
Với những ưu điểm như dễ quản lý những mạch lớn và phức tạp, uyển chuyển và độc lập với công nghệ, cho phép tái sử dụng những thiết kế sẵn có, mạch có thể được tổng hợp tự động từ đặc tả nên nó dần trở thành ngôn ngữ được sử dụng rộng rãi trong ngành công nghiệp thiết kế số.
HDLs đã trở thành một kiến thức được đòi hỏi cần phải biết đối với những kĩ sư cũng như sinh viên đang làm việc và học tập trong lĩnh vực phần cứng Hiện tại, những ngôn ngữ mô tả phần cứng được sử dụng rộng rãi nhất
đó là ngôn ngữ Verilog HDL, VHDL, System Verilog, …
1.2 Ngôn ngữ thiết kế Verilog HDL
1.2.1 Lịch sử phát triển
Verilog là một trong hai ngôn ngữ mô tả phần cứng chính (gồm VHDL và Verilog HDL) được người thiết kế phần cứng sử dụng phổ biến để mô tả, thiết kế các
Trang 10hệ thống số ở nhiều mức khác nhau ở mức cao như các mô hình đặc trưng đến các mức thấp như mô hình bố trí dây, điện trở, transistor trên một mạch tích hợp, các cổng logic, flip flop trong hệ thống số, thanh ghi và sự di chuyển dữ liệu giữa các thanh ghi Ban đầu, Verilog HDL được phát minh bởi Getway Design Automation vàđược giới thiệu lần đầu vào năm 1984 Năm 1989 được mua lại bởi Cadence, sau đó Verilog được phát hành miễn phí Tổ chức Open Verilog International (OVI) đã được thành lập nhằm kiểm soát các đặc tả ngôn ngữ Năm 1995, OVI Verilog đã được thông qua bởi IEEE như một chuẩn mới của hiệp hội Năm 2001, IEEE đã giới thiệu phiên bản mới của Verilog và hiện tại đang là phiên bản được sử dụng rộng rãi nhất – Verilog HDL 2001 Năm 2005, System Verilog được giới thiệu như là một sự
mở rộng của Verilog với các kỹ thuật kiểm tra hướng đối tượng Năm 2009, IEEE kết hợp chuẩn Verilog với System Verilog thành một chuẩn duy nhất IEEE 1800-2009
So với ngôn ngữ VHDL thì Verilog khá giống với ngôn ngữ C nên người có kiến thức căn bản về C tốt thì khá dễ học và sử dụng Verilog
1.2.2 Quy ước về từ khóa
Là những ký tự đặc biệt gồm có ký tự dấu cách (Space), ký tự Tab và ký tự xuống dòng (Enter)
Trang 11/* Thiet ke CPU RISC 32 bits don chu ky thuc hien lenh SLT */
Trang 12< > <= >= == !=
Trang 13Bảng 1-2: Ý nghĩa của toán tử so sánh và quan hệ
1.2.2.2.5 Toán tử điều kiện
Trang 14Trong các trường hợp xét điều kiện đơn giản, ta không cần phải sử dụng đến cấu trúc điều kiện If … else hay Case.
Cú pháp : Condition ? result 1 : result 2
Ý nghĩa : Nếu biến điều kiện Condition bằng 1 thì cho ra kết quả result 1, ngược lại thì cho ra kết quả result 2
8’hAB số thập lục phân AB có số bit là 8
16’o34 số bát phân 34 có 16 bit
4’bxxxx số nhị phân tùy định lưu trong 4 bit
Trang 15 Chuỗi số hoặc ký tự đi sau phần định dạng là giá trị của số đó.
Vd: 10’d123 //giá trị của số thập phân này là 123.
Ký tự “_” có thể được dùng để chèn vào các chuỗi bit trong trường hợp chuỗi
đó quá nhiều bit mà không làm thay đổi giá trị của chuỗi bit
Vd: 16’b_1000_1001_1010_1011
1.2.2.5 Từ định danh
Dùng để gán cho một đối tượng một tên duy nhất để nó có thể được gọi tới khi Nguyên tắc đặt là bắt đầu bằng chữ cái hoặc dấu gạch dưới “_” , không bắt đầu
Trang 16bằng một chữ số hay ký tự “$” Trong Verilog có phân biệt chữ in hoa với chữ thường.
module phepcong (x,y,z); //đặt tên cho module
input x,y; // khai báo input
output z; // khai báo output
assign z = x + y; // chức năng của module
endmodule // kết thúc module
Trang 171.2.4 Khối always
Khối always là khối chức năng được dùng trong thực hiện các câu lệnh điều kiện if else hay case Gồm khối always hoạt động dựa trên tín hiệu xung clock vàkhối always hoạt động dựa vào các biến ở trong khối always đó
Khối always hoạt động dựa trên tín hiệu xung clock: có 2 trạng thái tích cực ở xung clock mức 1 là posedge và tích cực ở xung clock mức
Khối always hoạt động dựa vào các biến ở trong nó, Các biến được gánphải được khai báo kiểu Reg
Vd:
Trang 18module example (x,y,z)input [31:0] x,y;
output [31:0] z;
reg [31:0] w;
always @(x,y,z,w)begin
w = x & y;
z = w ^ x;
endendmodule
1.2.5 Khai báo kiểu dữ liệu
Gồm 3 kiểu dữ liệu: Net, Register và Parameter
1.2.5.1 Kiểu dữ liệu Net
Net là dữ liệu dùng để mô tả sợi dây kết nối vật lý các tín hiệu Net sẽ kết nối những linh kiện ở mức cổng được gọi ra, những module được gọi ra và những phép gán nối tiếp Kiểu Net được dùng trong phép gán trực tiếp, trong các module còn được lấy ra dùng từ module chính
Được dùng phổ biến trong kiểu Net là wire Wire là loại dữ liệu đơn giản để kết nối giữa hai linh kiện, được điều khiển bởi một cổng linh kiện đơn hay trong phéo gán nối tiếp
Cú pháp: Wire [msb:lsb] variable;
Vd:
Trang 19module example1 (x,y,z);
input [31:0] x,y;
output [31:0] z;
wire [31:0] w; //tạo 1 sợi dây có biến là w có độ rộng 32 bit
assign w = x&y; //gán w bằng x AND y
assign z = w^y; //gán z bằng w XOR y
endmodule;
1.2.5.2 Kiểu dữ liệu Register
Nếu kiểu Net được dùng để gán trực tiếp trong các khối module chính thì kiểuRegister được dùng để gán trong các khối always hay initial
Kiểu dữ liệu Register lưu giữ giá trị từ một phát biểu gán thủ tục đến phát biểugán thủ tục kế tiếp và có ý nghĩa là đối tượng này lưu giữ giá trị trên các chu kỳ mô phỏng Phép gán thủ tục là một phép gán cho một kiểu dữ liệu của register và không hàm ý rằng một thanh ghi vật lý sẽ được tổng hợp , mạc dù phép gán được sử dụng cho mục đích này Phép gán được sử dụng để gán giá trị dưới những điều kiện kích khởi, như các phát biểu if và case Phép gán thủ tục lưu giữ giá trị trong một kiểu dữ liệu của register và được duy trì cho đến phép gán thủ tục kế tiếp cho kiểu dữ liệu của register đó
Cú pháp: reg [msb:lsb] variable;
Vd:
module example2 (x,clk,y);
Trang 201.2.5.3 Kiểu dữ liệu Parameter
Trong Verilog HDL, loại dữ liệu tham số (parameter) không thuộc loại dữ
liệu biến Reg cũng như loại dữ liệu net (wire, ) Dữ liệu tham số Parameter
không phải là biến mà chúng là hằng số Có hai loại tham số trong Verilog đó là:
Tham số module (module parameter): parameter và localparam.
Tham số đặc tả (specify parameter): specparam.
Cả hai loại tham số trên đều được phép khai báo độ rộng Mặc định, parameter
và specparam sẽ có độ rộng đủ để chứa giá trị của hằng số, ngoại trừ khi tham số đó
có khai báo độ rộng Việc khai báo trùng tên giữa net, biến hay tham số là không
được phép
Cú pháp: Parameter [msb:lsb] variable;
Vd:
Trang 21module example3 (x,y);
input [31:0] x;
output [31:0] y;
reg y;
parameter z = 4; //gán cho hằng số z bằng 4always @(x)
begin
if (x > z) y = 32b’1;
else y = 32b’0end
endmodule
1.2.6 Phép gán
Phép gán assignment dùng để gán kết quả trả về của 1 biểu thức
Phép gán đồng thời (phép gán liên tục): dùng để gán giá trị ở bên ngoàicác block
Cú pháp: assign signal1 = signal2;
Vd:
module example (a,b,c);
input a,b;
output c;
Trang 22đó khi thực hiện lệnh tiếp theo.
Gán non-blocking: phép gán phía sau sẽ không phụ thuộc vào giá trị của phép gán trước nó mà sẽ lấy giá trị được gán ban đầu
để tiếp tục tính toán
1.2.7 Toán tử điều kiện
Các điều kiện này nằm trong khối always
1.2.7.1 Điều kiện If else
Cú pháp: If (variable == condition) statement 1;
else statement 2;
Nếu biến giống với điều kiện đang xét, câu lệnh 1 sẽ được thực hiện, nếu sai câu lệnh 2 sẽ được thực hiện
Trong trường hợp có nhiều hơn 2 điều kiện thì ta dùng “else if”
1.2.7.2 Điều kiện với case
Trong trường hơp có nhiều hơn 2 điều kiện thay vì dùng “else if” sẽ dài dòng
và phức tạp hơn thì xét điều kiện vs case sẽ là tối ưu hơn cả
Cú pháp: Case (variable)
Trang 23Condition 1: result = statement 1;
Condition 2: result = statement 2;Condition … : result = statement …;
Trang 24CHƯƠNG 2 CPU RISC 32 BITS
2.1 Giới thiệu
RISC - viết tắt của 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ý (VXL) 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. Tất cả cáclệnh có cùng chiều dài, điều này làm cho chúng dễ dàng xắp xếp gọn gàng trong RAM Với bộ vi xử lý bên trong nó đã được giảm nhỏ tập lệnh, nói cách khác RISC
là một dạng cắt giảm, thu nhỏ của một con vi xử lý
Hình 2-1: CPU RISC ARM710Triết lý cho phát triển RISC đó là cắt giảm bộ vi xử lý để chỉ còn lại những bộphận thiết yếu của nó Những gì không thực sự cần thiết sẽ bị vứt bỏ Với các nhà lập
Trang 25trình thì đó có nghĩa là các chip RISC thường không thể thực hiện một phép nhân đơn giản Lý thuyết của phép nhân là thực hiện liên tiếp nhiều phép cộng, do đó lệnh ADD là đủ
Một ý khác của RISC đó là các chức năng phức tạp thích hợp thực hiện bằng phần mềm hơn là bằng phần cứng Phần mềm thì dễ thay đổi, dễ cập nhật, và tạo ra nhanh hơn Viết mã mới nhanh hơn là thiết kế và xây dựng một chip mới Do đó các máy tính dựa trên RISC có thể được nâng cấp nhanh hơn Các chương trình và các thuật toán có thể điều chỉnh và cải tiến, quan trọng là phần cứng RISC được đơn giảnhóa, tối ưu hóa sao cho nó chạy nhanh hơn
2.2 Lịch sử ra đời và phát triển của CPU RISC
Trong những năm đầu, các dự án chủ yếu chỉ được biết đến trong các trường đại học Đến năm 1986, tất cả các dự án về RISC mới bắt đầu cho ra đời sản phẩm Ngày nay hầu hết các chip RISC, đều được thiết kế dựa trên kiến trúc RISC-II của Berkeley Sun Microsystems với SPARC, hoặc Pyramid Technology Chính Sun là công ty đầu tiên chứng minh sức mạnh của RISC là có thật trong những hệ thống mới của mình, và cũng nhờ đó họ nhanh chóng chiếm lĩnh thị trường workstation lúcbấy giờ
Ngày nay CPU RISC (và microcontrollers) chiếm 1 lượng lớn CPU được sử dụng Kỹ thuật thiết kế RISC đem đến sức mạnh ngay cả ở những kích thước nhỏ, do
đó nó nhanh chóng chiếm lĩnh hoàn toàn thị trường CPU nhúng công suất thấp Đây
là một thị trường cực kỳ lớn của CPU, có thể tìm thấy chúng trong xe hơi, điện thoại
di động, thậm chí một số thiết bị khác có thể chứa hàng tá CPU loại này
Trang 262.3 Cấu trúc các khối trong CPU RISC 32 bits
Hình 2.2: Sơ đồ tổng thể các khối trong một CPU RISC 32 bits
CPU RISC 32 bits gồm có 3 khối chính:
Trang 27Instruction MemoryRead Address
Read DataWrite Data
2.3.1 Khối IM (Instruction Memory)
Hình 2-3: Cấu trúc khối IMKhối IM (Instruction Memory) là khối chứa các thanh ghi có cấu trúc theo cáckhuôn dạng lệnh R, I, J Ứng với 32 bit địa chỉ Program Counter đầu vào, khối IM cóthể chứa tới 232 thanh ghi lệnh
Lệnh sẽ thực hiện trong khối ALU
Địa chỉ của 2 thanh ghi trong khối RF
Trang 28 Địa chỉ của thanh ghi trong khối RF sẽ lưu kết quả khối ALU thực hiệntính toán.
2.3.1.1 Khuôn dạng lệnh R
Khuôn dạng lệnh R có 6 trường:
Trường op (bit 26 31): Dạng lệnh
Trường rs (bit 21 25) : Địa chỉ của thanh ghi thứ nhất trong khối RF
sẽ xuất ra giá trị qua khối ALU
Trường rt (bit 16 20) : Địa chỉ của thanh ghi thứ hai trong khối RF
sẽ xuất ra giá trị qua khối ALU
Trường rd (bit 11 15) : Địa chỉ của thanh ghi lưu kết quả khối ALU
Trường shamt (bit 6 10) : Lệnh dịch bits
Trường funt (bit 0 5) : Dạng lệnh cụ thể sẽ thực thi ở khối ALU.Vd: Khuôn dạng lệnh cho lệnh AND
Ý nghĩa:
Trường op = 000000 và funt = 011000 là dạng lệnh AND
Trường rs = 00000 và rd = 00001 là địa chỉ chỉ đến thanh ghi thứ nhất
và thứ 2 trong khối RF xuất giá trị ra khối ALU để tính toán
Trường rd = 00010 là địa chỉ chỉ đến thanh ghi thứ 3 trong khối RF để lưu kết quả sau khi thực thi lệnh
Trường shamt = 00000: Không dịch bit
Trang 292.3.1.2 Khuôn dạng lệnh I
Khuôn dạng lệnh I có 4 trường:
Trường op (bit 26 31) : Dạng lệnh cụ thể sẽ thực thi ở khối ALU
Trường rs (bit 21 25) : Địa chỉ của thanh ghi trong khối RF sẽ xuất
ra giá trị qua khối ALU
Trường rt (bit 16 20) : Địa chỉ của thanh ghi lưu kết quả khối ALU
Trường immediate (bit 0 15) : Giá trị sẽ dùng trong lệnh
Vd: Khuôn dạng lệnh cho lệnh BEQ
Ý nghĩa:
Trường op = 000100 là dạng lệnh BEQ (so sánh bằng)
Trường rs = 00000 là địa chỉ chỉ đến thanh ghi thứ nhất trong khối RF xuất giá trị ra khối ALU để tính toán
Trường rt = 00001 là địa chỉ chỉ đến thanh ghi thứ 2 trong khối RF để lưu kết quả sau khi thực thi lệnh
Trường immediate = 1000100110101011 là giá trị sẽ dùng để so sánh với giá trị của thanh ghi được chọn