Bài tập lớn Thiết kế, tổng hợp IC số và hệ thống số đại học Bách Khoa Hà Nội: RISC SPM. Báo cáo có đầy đủ kết quả mô phỏng và hình ảnh chạy trên kit DE2. Code Verilog (mở bằng Quartus 13.0) chạy trên kit được đính kèm, mô phỏng trên Modelsim 10.1
Trang 1TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI
VIỆN ĐIỆN TỬ-VIỄN THÔNG
====o0o====
THIẾT KẾ, TỔNG HỢP IC SỐ VÀ HỆ THỐNG SỐ
BÁO CÁO CUỐI KÌ
ĐỀ TÀI: MÁY CHƯƠNG TRÌNH ĐƯỢC LƯU TRỮ MÁY
TÍNH VỚI TẬP LỆNH ĐƠN GIẢN (RISC SPM)
GVHD: TS Võ Lê Cường Nhóm thực hiện: Nhóm 13 Nguyễn Minh Hiếu (20151336) – Điện tử 03 K60 Nguyễn Nguyên Bách (20150239) – Điện tử 08 K60
Hà Nội, tháng 12 năm 2018
Trang 3LỜI NÓI ĐẦU
Trong học phần Thiết kế, tổng hợp IC số và hệ thống số, để phục vụ cho bàitập lớn cuối kì, nhóm 13 chúng em chọn đề tài “Máy chương trình được lưu trữ máytính với tập lệnh đơn giản (RISC SPM)” để thực hiện Đề tài này tuy hơi khó nhưngkhá hay, vận dụng được nhiều kiến thức đã học để làm Ngoài việc thiết kế, viết codeVerilog, nhóm em còn triển khai mạch trên kit FPGA DE2 của Altera Nhóm em xinchân thành cảm ơn thầy Võ Lê Cường cùng các bạn trong lab AICS đã hướng dẫn chỉdạy trên lớp giúp chúng em hoàn thành bài tập lớn này
2
Trang 4MỤC LỤC
LỜI NÓI ĐẦU 2
Chương 1 Phân chia công việc 7
Chương 2 Thiết kế và mô phỏng máy chương trình được lưu trữ máy tính với tập lệnh đơn giản (RISC SPM) 8
2.1 Mục tiêu, yêu cầu thiết kế 8
2.1.1 Mục tiêu thiết kế 8
2.1.2 Yêu cầu thiết kế 9
2.2 Thiết kế sơ bộ RIST SPM 10
2.3 Bộ xử lí 11
2.3.1 Tổng quan bộ xử lí 11
2.3.2 Thiết kế các thanh ghi đa chức năng, thanh ghi lệnh, thanh ghi địa chỉ 12
2.3.3 Thiết kế bộ đếm chương trình 13
2.3.4 Thiết kế Mux_1(5-1) và Mux_2 (3-1) 14
2.3.5 Thiết kế khối ALU 15
2.3.6 Thiết kế bộ xử lí 16
2.4 Tập lệnh của RISC SPM 17
Trang 5Chương 3 Triển khai mạch trên FPGA 30
3.1 Giới thiệu Kit FPGA Altera DE2 30
3.2 Thiết kế khối chia tần số 31
3.3 Thiết kế bộ giải mã cho các LED 7 thanh 32
3.4 Thiết kế file chạy trên kit 33
3.5 Kết quả chạy trên kit 35
KẾT LUẬN 36
TÀI LIỆU THAM KHẢO 37
PHỤ LỤC 38
4
Trang 6DANH MỤC HÌNH
Hình 2.1 Kiến trúc tổng thể của RISC SPM 8
Hình 2.2 Thiết kế sơ bộ FSM SPM 10
Hình 2.3 Tổng quan bộ xử lí 11
Hình 2.4 Thanh ghi đa chức năng, thanh ghi lệnh, thanh ghi địa chỉ 12
Hình 2.5 Bộ đếm chương trình 13
Hình 2.6 Mux_1 (5-1) 14
Hình 2.7 Mux_2 (3-1) 14
Hình 2.8 ALU 15
Hình 2.9 Ví dụ các lệnh ngắn và lệnh dài 17
Hình 2.10 Bộ điều khiển 20
Hình 2.11 Kết quả mô phỏng 29
Hình 3.1 Kit DE2 30
Hình 3.2 Kết quả chạy trên kit DE2 35
Y
Trang 7DANH MỤC BẢNG BIỂU
Bảng 1.1 Phân chia công việc 7
Bảng 2.1 Tập lệnh của ALU 15
Bảng 2.2 Tập lệnh của RISC SPM 18
Bảng 2.3 Các tín hiệu đầu ra của khối điều khiển 21
Bảng 2.4 Các trạng thái của khối điều khiển 22
Bảng 3.1 Danh sách tín hiệu hiển thị trên kit DE2 33
6
Trang 8NỘI DUNG
Chương 1 Phân chia công việc
Bảng 1.1 thể hiện phân chia công việc của nhóm
Nguyễn
Minh Hiếu Toàn bộ code trên Quartus, mô phỏng trênModelsim và triển khai mạch trên FPGA 50% 75%
Phần báo cáo:
2.6 Mô phỏng RISC SPMChương 3 Triển khai mạch trên FPGA
2.4 Tập lệnh của RISC SPM2.5 Bộ điều khiển
Trang 9Chương 2 Thiết kế và mô phỏng máy chương trình được lưu trữ máy tính với tập lệnh đơn giản (RISC SPM)
2.1 Mục tiêu, yêu cầu thiết kế
2.1.1 Mục tiêu thiết kế
Ở bài tập lớn này nhóm em sẽ thiết kế Máy chương trình được lưu trữ máy tínhvới tập lệnh đơn giản (Reduced instruction-set computer stored-program machine –RISC SPM) RISC được thiết kế để có một tập nhỏ các lệnh có thể thực hiện trong cácchu ký đồng hồ ngắn, với một số lượng nhỏ chu kì mỗi lệnh Các máy RISC được tối
ưu hoá để đạt được hiệu quả pipelining của các luồng lệnh
RISC SPM là một máy có kiến trúc RISC có thể lưu trữ chương trình, cáclệnh của nó được lưu trong memory Máy bao gồm ba khối chức năng: bộ xử lý(processor), bộ điều kiển (controller) và memory Các tập lệnh chương trình và dữ liệuđược lưu trữ trong memory Kiến trúc tổng thể của RISC SPM được hiển thị trong hình2.1
8
Hình 2.1 Kiến trúc tổng thể của RISC SPM
Trang 102.1.2 Yêu cầu thiết kế
RISC SPM giống như một máy tính thu nhỏ được thiết kế để có thể hoạt độngtheo chương trình nhờ các lệnh có sẵn Trong hoạt động theo chương trình, các lệnhđược nạp đồng bộ từ memory, được giải mã và được thực hiện để hoàn thành các yêucầu sau:
- Hoạt động trên dữ liệu trong khối tính toán số học và logic (ALU)
- Thay đổi nội dung của các thanh ghi lưu trữ
- Thay đổi các đổi số của bộ đếm chương trình (PC), thanh ghi lệnh (IR) và thanhghi địa chỉ (ADD_R)
- Thay đổi nội dung memory
- Lấy lại dữ liệu và lệnh từ memory
- Điều khiển sự di chuyển của dữ liệu trên các bushệ thống
Thanh ghi lệnh (IR) chứa lệnh đang được thực hiện; bộ đếm chươngtrình (PC) chứa địa chỉ của lệnh tiếp theo được thực hiện; và thanh ghi địa chỉ(ADD_R) giữ địa chỉ của vị trí trong memory sẽ được đánh địa chỉ tiếp bằnghoạt động đọc hoặc ghi
Trong bài tập lớn này, nhóm em sử dụng các dữ liệu và địa chỉ (trongmemory) có độ dài word_size=8 bit
Trang 112.2 Thiết kế sơ bộ RIST SPM
RIST SPM có thể thiết kế theo sơ đồ FSMD với phần FSM là bộ điều khiển
và phần datapath là bộ xử lí và memory, hai phần giao tiếp với nhau qua các tín hiệuđiều khiển từ bộ điều khiển sang bộ xử lí và các lệnh và cờ zero từ bộ xử lí sang bộđiều khiển (hình 2.2)
Trang 122.3 Bộ xử lí
2.3.1 Tổng quan bộ xử lí
Bộ xử lí bao gồm các thanh ghi (R0, R1, R2, R3, Reg_Y, Reg_Z, Add_R, PC,IR), các đường dữ liệu, đường điều khiển (từ bộ điều khiển) và một ALU có khả năngthực hiện các phép toán số học và logic, tuỳ theo mã opcode được giữ trong thanh ghilệnh Bộ ghép kênh Mux_1 xác định nguồn dữ liệu sau đó sẽ đến cho Bus_2 Cácđường dữ liệu đầu vào cho Mux_1 là từ 4 thanh ghi đa chức năng R0, R1, R2, R3 và từ
PC Dữ liệu của Bus_1 có thể được điền khiển đến ALU, đến memory hoặc đến Bus_2(thông qua Mux_2) Các đường dũ liệu vào cho Mux_2 là từ ALU, Mux_1 và memory
Do đó, một lệnh có thể được tìm nạp từ bộ nhớ, đặt trên Bus_2 và được tải vào thanhghi lệnh Một word dữ liệu có thể lấy được từ memory và được dẫn đến một thanh ghi
đa chức năng hoặc đến thanh ghi toán hạng trước khi đến hoạt động của ALU Kết quảtính toán của ALU có thể được đặt trên Bus_2, được tải vào một thanh ghi và sau đóđược chuyển vào memory Một thanh ghi chuyên dụng (Reg_Z) giữ một cờ cho biếtkết quả tính toán ALU có bằng 0 không Tổng quan bộ xử lí được thể hiện trên hình2.3 Ngoài các đầu vào và đầu ra giao tiếp với bộ điều khiển, bộ xử lí còn nhận dữ liệuvào mem_word từ memory và xuất địa chỉ address cũng như dữ liệu ở Bus1 sangmemory
Trang 132.3.2 Thiết kế các thanh ghi
đa chức năng, thanh ghi lệnh, thanh ghi địa chỉ
Các thanh ghi đa chức năng R0, R1, R2, R3, thanh ghi lệnh, thanh ghi địa chỉ(hình 2.4) đơn thuần là đưa dữ liệu ra từ dữ liệu vào mỗi khi có sườn lên xung clk và
có tính hiệu load
Trong verilog ta dùng khối always và cấu trúc if else, reset là không đồng bộ
always @ (posedge clk or negedge rst)
if (rst == 0) data_out <= 0; else if (load) data_out <= data_in;
12
Hình 2.3 Tổng quan bộ xử lí
Hình 2.4 Thanh ghi đa chức năng, thanh ghi lệnh, thanh ghi địa chỉ
Trang 142.3.3 Thiết kế bộ đếm chương trình
Bộ đếm chương trình (hình 2.5) cũng có dạng thanh ghi với đầu ra được điềukhiển là lấy đầu vào nếu có tín hiệu Load_PC hoặc tăng lên 1 nếu có tín hiệu Inc_PC
always @ (posedge clk or negedge rst)
if (rst == 0) count <= 0; else if (Load_PC) count <= data_in;
else if (Inc_PC) count <= count +1;
Hình 2.5 Bộ đếm chương trình
Trang 152.3.4 Thiết kế Mux_1(5-1) và Mux_2 (3-1)
Các bộ Mux này (hình 2.6 và 2.7)đơn giản là gán dữ liệu ra theo một trong sốcác tín hiệu vào dựa vào tín hiệu sel Trong Verilog ta dùng toán tử ? : để rẽ nhánh cácđiều kiện của sel và xác định đầu ra, code của mỗi Mux ở dưới hình Mux tương ứng
assign mux_out = (sel == 0) ? data_a:
Trang 162.3.5 Thiết kế khối ALU
Khối ALU (hình 2.8) thực hiện tính toán giữa 2 toán hạng data_1 và data_2,tập lệnh của nó được thể hiện trong bảng 2.1
Lệnh Hoạt động tính toán
ADD Cộng các đường dữ liệu, kết quả là data_1 + data_2
SUB Trừ các đường dữ liệu, kết quả là data_1 - data_2
AND Thực hiện phép bitwise-AND, kết quả là data_1 & data_2
NOT Thực hiện phép bitwise-NOT của data_1, kết quả là ~data_1
vào 8 bit, dựa vào mã sel 4 bit để quyết định hoạt động tính toán, đưa kết quả ra đầu ra
8 bit và có một cờ zero báo hiệu nếu kết quả bằng 0 Khối ALU đơn thuần là một mạch
tổ hợp tính toán đầu ra thông qua 2 đầu vào dựa vào lệnh nhận được (opcode) Trongverilog ta dùng lệnh case đặt trong khối always như sau:
Bảng 2.1 Tập lệnh của ALU
Hình 2.8 ALU
Trang 172.3.6 Thiết kế bộ xử lí
Ghép các khối đã được thiết kế với nhau thành bộ xử lí (D_flop là thanh ghiZ)
Register_Unit R0 (R0_out, Bus_2, Load_R0, clk, rst);
Register_Unit R1 (R1_out, Bus_2, Load_R1, clk, rst);
Register_Unit R2 (R2_out, Bus_2, Load_R2, clk, rst);
Register_Unit R3 (R3_out, Bus_2, Load_R3, clk, rst);
Register_Unit Reg_Y (Y_value, Bus_2, Load_Reg_Y, clk, rst);
D_flop Reg_Z (Zflag, alu_zero_flag, Load_Reg_Z, clk, rst);
Address_Register Add_R (address, Bus_2, Load_Add_R, clk, rst);
Instruction_Register IR (instruction, Bus_2, Load_IR, clk, rst);
Program_Counter PC (PC_count, Bus_2, Load_PC, Inc_PC, clk, rst);
Multiplexer_5ch Mux_1 (Bus_1, R0_out, R1_out, R2_out, R3_out, PC_count,Sel_Bus_1_Mux);
Multiplexer_3ch Mux_2 (Bus_2, alu_out, Bus_1, mem_word, Sel_Bus_2_Mux); Alu_RISC ALU (alu_zero_flag, alu_out, Y_value, Bus_1, opcode);
16
Trang 18Một lệnh ngắn cần 1 byte trong memory để lưu trữ.Word này có opcode 4 bit,địa chỉ thanh ghi nguồn 2 bit và địa chỉ thanh ghi đích 2 bit Một lệnh dài cần 2 bytecủa memory Word (8 bit) đầu tiên của một lệnh dài chứa opcode 4 bit, 4 bit còn lại cóthể được sử dụng để chỉ định địa chỉ của một cặp thanh ghi nguồn và đích, tùy thuộcvào tập lệnh Word thứ hai chứa địa chỉ của word memory chứa toán hạng theo yêu cầucủa lệnh
Hình 2.9 thể hiện ví dụ các lệnh ngắn (bên trái và lệnh dài (bên phải)
Trang 19địa chỉ trong bộ đếm chương trình được tải vào thanh ghi lệnh và bộ đếm chương trìnhđược tăng lên Bộ giải mã lệnh xác định hành động kết quả trên các bảng dữ liệu vàALU Một lệnh dài được giữ trong 2 byte và cần có một chu kỳ xung nhịp bổ sung đểthực hiện lệnh Trong chu kỳ thực hiện thứ hai, byte thứ hai được lấy từ quảng cáo bộnhớ, địa chỉ được giữ trong bộ đếm chương trình, sau đó lệnh được hoàn thành Nộidung trung gian của ALU có thể là vô nghĩa khi hoạt động hai chu kỳ đang được thựchiện.
Các hoạt động của mỗi lệnh sau được thể hiện trong bảng 2.2
Lệnh Mã lệnh
(opcode_src_dest
)
NOP 0000_??_?? Không thực hiện gì, tất cả các
thanh ghi giữ nguyên giá trị
Các địa chỉ của các thanh ghinguồn và đích là don’t care,không có tác dụng gì
none
ADD 0001_src_dest Cộng nội dung của các thanh
ghi nguồn và đích, lưu kết quảvào thanh ghi đích
dest<=src+dest
SUB 0010_src_dest Trừ nội dung thanh ghi nguồn
từ thanh ghi đích và lưu kếtquả vào thanh ghi đích
dest<=dest-src
AND 0011_src_dest Thực hiện phép bitwise-AND
của nội dung các thânh ghinguồn và đích, lưu kết quả vàothanh ghi đích
dest<=src&&dest
NOT 0100_src_dest Thực hiện phép bitwise-NOT
của nội dung thanh ghi nguồn
và lưu kết quả vào thanh ghiđích
dest<=~src
RD* 0101_??_dest Lấy một word trong memory
từ địa chỉ được xác định bởibyte thứ hai của lệnh và tải kếtquả và thanh ghi đích Các bitcủa thanh ghi nguồn là don’t
dest<=memory[Add_R]
18
Bảng 2.2 Tập lệnh của RISC SPM
Trang 20careWR* 0110_src_?? Ghi nội dung của thanh ghi
nguồn vào một từ trongmemory xác định bởi địa chỉtrong byte thứ hai của lệnh
Các bit của thanh ghi đích làdon’t care
memory[Add_R]<=src
BR* 0111_??_?? Phân nhánh luồng hoạt động
bằng cách tải bộ đếm chươngtrình với word ở vị trí xác địnhbới byte thứ hai của lệnh
PC<=memory[Add_R]
BRZ* 1000_??_?? Hoạt động như lệnh BR nhưng
với điều kiện cờ zero bằng 1 PC<=memory[Add_R]HAL
T
1111_??_?? Tạm dừng quá trình thực hiện
lệnh đến khi resetChú thích: * Yêu cầu word thứ hai của lệnh; ? don’t care
Trang 212.5 Bộ điều khiển
2.5.1 Tổng quan bộ điều khiển
Timing của tất cả các hoạt động được xác định bởi bộ điều khiển (hình 2.10)
Bộ điều khiển phải điều khiển dữ liệu đến đích phù hợp theo lệnh được thực thi Do đó,thiết kế của bộ điều khiển phụ thuộc rất nhiều vào đặc điểm kỹ thuật của ALU củamáy, các nguồn đường dữ liệu của máy và sơ đồ xung nhịp có sẵn Trong bài tập lớnnầy, một single clock sẽ được sử dụng, việc thực hiện của một lệnh được bắt đầu trênmột sườn của clock Bộ điều khiển sẽ theo dõi trạng thái của bộ xử lí, lệnh được thựchiện và xác định giá trị của các tín hiệu điều khiển
20
Hình 2.10 Bộ điều khiển
Trang 22Các tín hiệu đầu vào của bộ điều khiển là từ word lệnh và cờ zero từ ALU Cáctín hiệu đầu ra của bộ điều khiển và chức năng của chúng được thể hiện trong bảng 2.3.
Tín hiệu điều khiển Hành động
Load_Add_Reg Tải thanh ghi địa chỉ
Load_PC Tải Bus_2 đến bộ đếm chương trình (PC)
Load_IR Tải Bus_2 đến thanh ghi lệnh (IS)
Inc_PC Tăng bộ đếm chương trình lên 1
Sel_Bus_1_Mux Điều khiển đầu ra của Bus_1 chọn từ PC, R0, R1, R2 hoặc
R3Sel_Bus_2_Mux Điều khiển đầu ra của Bus_1 chọn từ Alu_out hoặc Bus_1Load_R0 Tải thanh ghi đa chức năng R0
Load_R1 Tải thanh ghi đa chức năng R1
Load_R1 Tải thanh ghi đa chức năng R2
Load_R2 Tải thanh ghi đa chức năng R3
Load_Reg_Y Tải Bus_2 đến thanh ghi Reg_Y
Load Reg_Z Lưu đầu ra của ALU vào thanh ghi Reg_Z
Write Tải Bus_1 vào SRAM memory ở vị trí được xác định bởi
thanh ghi địa chỉ
Các nhiệm vụ của bộ điều khiển như sau:
- Xác định khi nào tải các thanh ghi
- Chọn đường dữ liệu đi qua các bộ ghép kênh
Bảng 2.3 Các tín hiệu đầu ra của khối điều khiển
Trang 232.5.2 Thiết kế bộ điều khiển
Bộ điều khiển sẽ được thiết kế là FSM Máy có 3 pha hoạt động: lấy lệnh, giải
mã, thực hiện Pha lấy lệnh lấy một lệnh từ memory; pha giải mã giải mã lệnh, điềukhiển các đường dữ liệu và tải các thanh ghi; pha thực hiện tạo ra kết quả của lệnh Phalấy lệnh cần 2 chu kì đồng hồ - một để tải thanh ghi địa chỉ và một để lấy word đượcđánh địa chỉ từ memory Pha giải mã cần 1 chu kì đồng hồ Pha thực hiện có thể cần 0,
1 hoặc nhiều hơn 2 chu kì đồng hồ tùy lệnh Lệnh NOT có thể thực hiện trong cùngchu kì lệnh được giải mã; các lệnh 1 byte, như ADD, mất 1 chu kì để thực thi, trong khi
đó các kết quả của hoạt động được tải vào thanh ghi đích Thanh ghi nguồn có thể đượctải trong pha giải mã Pha thực hiện của lệnh 2 byte cần 2 chu kì, một để tải thanh ghiđịa chỉ trong bte thứ hai và một để lấy word từ vị trí bộ nhớ được đánh địa chỉ bởi bytethứ hai và tải nó vào thanh ghi đích Bộ điều khiển có 11 trạng thái được thể hiện trongbảng 2.4
Trạng thái Hành động
S_idle Là trạng thái sau khi reset, không thực hiện gì
S_fet1 Tải thanh ghi địa chỉ với nội dung của PC (PC đã được khởi tạo đến địa
chỉ bắt đầu bởi hành động reset)S_fet2 Tải thanh ghi lệnh với word được đánh địa chỉ bởi thanh ghi địa chỉ,
tăng PC lên tới vị trí tiếp theo trong memory và chờ lệnh tiếp theo hoặclấy dữ liệu
S_dec Giải mã thanh ghi lệnh và kích hoạt tín hiệu để điều khiển đường dũ
liệu và sự chuyển đổi thanh ghiS_ex1 Thực hiện hoạt động ALU cho lệnh 1 byte, tùy theo điều kiện mà kích
hoạt cờ zero, và tải thanh ghi đíchS_rd1 Tải thanh ghi địa chỉ với byte thứ hai của lệnh RD và tăng PC lên
S_rd2 Tải thanh ghi đích với word trong memory được đánh địa chỉ bởi byte
được tải trong S_rd1S_wr1 Tải thanh ghi địa chỉ với byte thứ hai của lệnh WR và tăng PC lên
S_wr2 Tải thanh ghi đích với word trong memory được đánh địa chỉ bởi byte
được tải trong S_wr1S_br1 Tải các thanh ghi địa chỉ với byte thứ hai của lệnh BR và tăng PC lên
22
Bảng 2.4 Các trạng thái của khối điều khiển