Điều khiển tất cả các hoạt động của đường dữ liệu bằng cách cung cấp những tín hiệu điều khiển thích hợp đến đường dữ liệu vào những thời gian thích hợp. Chức năng đọc lệnh, giải mã lệnh và tạo các tín hiệu điều khiển.
3.1.2.2 Cấu trúc:
Do thiết kế vi xử lý được thực hiện Pipeline 4 “tầng” nên Khối Control
được chia làm 4 trạng thái: I, R, E,W.
I (instruction) : Chỉ định lệnh trong trạng thái này, khối Control nhận mã lệnh từ bộ nhớ RAM trong khối “Pcimem”.
R (Read) : Là trạng thái đọc lệnh. Chức năng chính của trạng thái này Control lọc ra hai địa chỉ nguồn RS và RS2 để đưa đến bộ “rfcache” để chọn thanh ghi được xử lý.
E (execute) : Là trạng thái thực hiện. Chức năng chính của trạng thái này
đọc mã lệnh (opcode) truyền cho khối ALU để thực hiện xử lý.
W (write) : Là trạng thái ghi. Trạng thái này thực hiện việc lưu kết quả vào thanh ghi hoặc cache. Bên trên là phần giới thiệu sơ lược về chức năng của khối Control. Chi tiết hoạt động của khối Control (quản lý các tín hiệu điều khiển) phụ
thuộc nhiều vào loại lệnh được thực hiện. Phần này sẽđược trình bày kỹ hơn trong mục bên dưới “đặc trưng của vi xử lý”.
Hình 3.4: Khối điều khiển đường ống dẫn (Cntrpipe)
3.1.3 Tập thanh ghi và vùng cache (Rfcache): 3.1.3.1 Chức năng: 3.1.3.1 Chức năng:
Đây là tập thanh ghi và vùng cache. Tập thanh ghi được dùng để lưu trữ kết quả tính toán. Cache được dùng để lưu giá trị bên ngoài đưa vào vi xử lý và xuất giá trị ra ngoài vi xử lý. Cache có vai trò gần giống INPORT và OUTPORT của vi xử lý.
3.1.3.2 Cấu trúc:
Bao gồm:
Tâp thanh ghi (register file): 32 thanh ghi R0 đến R31. Trong đó R0 là thanh ghi zero. Thanh ghi R0 luôn có giá trị bằng 0 và chỉ cho phép đọc, không cho phép ghi. 31 thanh ghi còn lại được đọc ghi tùy ý.
Cache: Bao gồm 16 thanh ghi, được dùng để lưu giá trị từ bên ngoài gởi vào vi xử lý. Ngoài ra tín hiệu “cache-out” còn có tác dụng như một outport của vi xử lý.
Hình 3.5: Khối tập thanh ghi và vùng cache (RFCache)
3.1.4 Khối logic số học (ALU: Arithmetic Logic Unit ) 3.1.4.1 Chức năng: 3.1.4.1 Chức năng:
Bộ logic số học là khối cơ bản của bộ vi xử lý và xác định loại phép tính có thể được thực hiện trong một lệnh đơn. Các khối nhỏ của ALU thông thường là một mạch cộng có nhớ để thực hiện các phép toán cộng, trừ, bộ dịch để dịch trái dịch phải, tác vụ quay và một khối logic cho các phép tính AND OR, XOR… với
độ rộng 32 bit.
Hình 3.6: Khối logic sô học (ALU)
3.1.4.3 Chi tiết về các lệnh của ALU: được trình bày ở phần sau: “đặc trưng của bộ vi xử lý”
CHƯƠNG 4: CÁC ĐẶC ĐIỂM THIẾT KẾ BỘ
VI XỬ LÝ
Mục đích: giới thiệu nguyên lý, tổ chức hoạt động bên trong của bộ vi xử
lý, cấu trúc của tập lệnh, mã lệnh, đường đi của dữ liệu. Mô tả diễn tiến thi hành một lệnh mã máy đây là cơ sở để hiểu được các hoạt động xử lý lệnh trong kỹ
thuật ống dẫn. Thiết kế bằng kỹ thuật đường ống dẫn là một phương pháp thiết kế
hiện đại, đườ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ả năng thực hiện đến bốn lệnh trong cùng một cho kỳ đồng hồ.
4.1 Đặc điểm của vi xử lý
Bộ vi xử lý của chúng ta được xây dựng theo kiển trúc đường ống RISC II rút gọn được thiết kế hoàn toàn bằng code VHDL. Bộ vi xử lý bao gồm các khối sau: khối điều khiển, bộ nhớ chỉ lệnh, tập thanh ghi, bộ logic số học (ALU) 32bit, bộ nhớ cache, bộđệm chương trình và stack.
Bộ vi xử lý RISC được thiết kế có khả năng thi hành 15 lệnh như sau:
• 8 tập lệnh ALU (AND, OR, XOR, SLL, SRL, ADD, ADDC, SUB).
• dùng để tải và chứa dữ liệu (LDXW, STXW).
• 5 phép toán nhảy (JMP, JMPR, CALL, CALLR, RET).
4.2 Cấu trúc mã lệnh và chếđộ ghi địa chỉ
Cấu trúc của tập lệnh 32-bit được lấy từ tập lệnh máy tính đã được đơn giản hóa theo mô tả của A.J.Van der Goors. Có 3 kiểu định dạng được sử dụng:
Dạng lệnh: 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
0 Rd Rs S2 Bảng 4.1: Tập lệnh với hai nguồn
Bit 7 1 5 5 1 13 Nội dung Opcode Cond
flag Đích Nguồn 1 Immediate = 1 Không Dùng 0 Rd Rs S2
Bảng 4.2: Tập lệnh với một nguồn và short immediate
Bits 7 1 5 19 Contens Opcode Cond flag Destination Long
immediate
0 Rd Y
Bảng 4.3: Tập lệnh với long immediate
1 5 Cond flag Condition
1 Bảng 4.4: Tập lệnh có điều kiện
Bit điều kiển được đặt lên 1 : chỉ ra điều kiện thực thi của 1 tập lệnh. Trong trường hợp này, 4 bit đầu tiên của nguồn (Rd) được đặt để miêu tảđiều kiện thực thi :
0001: Cờ nhớ (cfl=1) : được đặt bằng 1 khi phép toán số học nhớ hoặc mướn 1 từ MSB (most-significant bit) của kểt quả. Bit này được dùng đánh dầu trạng thái tràn của phép toán số nguyên không dấu.
0010: Cớ tràn (ofl=1) : được đặt bằng 1 khi kết quả là số dương quá lớn hay là số âm quá nhỏ đối với tham sốđích. Cờ này đánh dấu trạng thái tràn của phép toán số học có dấu.
0100: Cờ dấu (sfl=1) : được đặt băng bit cao nhất của kết quảđồng thời là dấu của số nguyên có dấu (0 là số dương, 1 là số âm).
1000: Cờ zero (zfl=1) : được đặt bằng 1 khi kết quả là 0.
Kiểm định điều kiện Định dạng Nguồn 1 (Rs) Nguồn 2/ immediate
(Rs2/ immediate) Giá trị toán hạng Tức thời B RS1 Tức thời 13 bit immediate + nguồn 1 Thanh ghi A RS1 RS2 (RS1) + (RS2) Địa chỉ tuyệt đối B R0 = 0 Tức thới Tức thời Địa chỉ tương đối C Tức thời PC = PC + long immediate Gián tiếp qua thanh ghi B RS1 0 (RS) Bảng 4.5: Một số chếđộđịnh dạng địa chỉđược hổ trợ 4.3 Cấu trúc mã lệnh (opcode)
Mã lệnh bao gồm 7 bit trên của tập lệnh. Bits (31:29) dùng để xác định lệnh tải/chứa dữ liệu và lệnh nhảy. Nếu bit 28 là bit cao, bộ logic số học (ALU) sẽ hoạt
Phép toán Mã lệnh Toán hạng Hoạt động AND 000 1000 Rd, Rs, S2 Rd:= (Rs) and S2 OR 000 1001 Rd, Rs, S2 Rd:= (Rs) or S2 XOR 000 1010 Rd, Rs, S2 Rd:= (Rs) xor S2 SLL 000 1011 Rd, Rs, S2 Rd:= (Rs) dịch bởi S2 SRL 000 1100 Rd, Rs, S2 Rd:= (Rs) dịch bởi S2 SUB 000 1011 Rd, Rs, S2 Rd:= (Rs) - S2 ADD 000 1110 Rd, Rs, S2 Rd:= (Rs) + S2 ADDC 000 1111 Rd, Rs, S2 Rd:= (Rs) + S2 + carry LDXW 001 1110 Rd, Rs, S2 Rd:= ( M|(Rs) + S2|) STXW 010 1110 Rd, Rs, S2 M|(Rs) + S2| JMP 100 1110 COND, (Rs) S2 PC:= (Rs) + S2 JMPR 101 1110 COND, Y PC:= (Rs) + Y CALL 110 1110 (Rs) S2 PC:= (Rs) + S2 CALLR 111 1110 Rd Y PC:= Y
RET 011 0000 PC:= pop stack
Bảng 4.6: Mã lệnh opcode
4.4 Mô tả các khối của bộ vi xử lý:
4.4.1 Khối điều khiển: (The Controller)
Bộ điều khiển tạo các tín hiệu điều khiển di chuyển số liệu (tín hiệu di chuyển số liệu từ các thanh ghi đến bus hoặc tín hiệu viết vào các thanh ghi), điều khiển các tác vụ mà các bộ phận chức năng phải làm (điều khiển ALU, điều khiển
đọc và viết vào bộ nhớ...). Bộ điều khiển cũng tạo các tín hiệu giúp các lệnh được thực hiện một cách tuần tự.
Hình 4.1: Bộđiều khiển đường ống dẫn
4.4.2 Khối điều khiển đường ống dẫn: (Control pipeline)
Tập lệnh được chuyển qua 4 giai đoạn trong đường ống dẫn: nhận lệnh (I),
đọc lệnh (R), thực thi lệnh (E) và ghi lại dữ liệu (W). Tín hiệu điều khiển ở mỗi giai đoạn sẽ kiểm soát các phần của bộ phận đường dữ liệu tương ứng để thực hiện chức năng đọc, thực thi và ghi. Các thanh ghi sẽ lưu trữ dữ liệu tương ứng tại mỗi phần của đường dữ liệu. Bằng cách này, dữ liệu được truyền qua đường dữ liệu trong các giai đoạn R, E và W. Có đến 3 tập lệnh có thểđược thực hiện cùng 1 lúc trong đường dẫn dữ liệu. Lệnh đọc dữ liệu, thực thi và ghi kết quả có thể được thực hiện trong mỗi chu kỳ xung clock.
Tín hiệu Miêu tả Bits Đồng bộ
BY2A Bypass kết quả vào A-Input của ALU 1 Đồng bộ
BY2B Bypass kết quả vào B-Input của ALU 1 Đồng bộ
BY2C Lựa chọn tín hiệu bypass từ cache 1 Đồng bộ
DSP Giảm con trỏ ngăn xếp ( decrement stack pointer) 1 Đồng bộ
IPC Tăng bộđếm chương trình ( increment program
ISP Tăng con trỏ ngăn xếp ( increment stack pointer) 1 Đồng bộ
SPC
BYC2A_W
Chọn PC hoạc Register ( 00 : Register File, 01: Program Counter, 10: Bypass RF từ cache với dữ
liệu từ Write nếu dep/break/dep
2 Đồng bộ
R[13] & LIM
BYC2B_W
2 bit điều khiển: LSB được gắn với bit 13 của opcode
000: Register File, 001: Immediate, 11X: Long Immediate, 100: Bypass RF từ cache với dữ liệu từ
write nếu dep/break/dep
3 Đồng bộ
RDCE Tín hiệu cho phép đọc dữ liệu từ cache ( mặc định:
ghi vào tập thanh ghi từ ALU) 1 Đồng bộ WR Tín hiệu cho phép ghi và thanh ghi ( write
Register) 1 Đồng bộ
WPC Tín hiệu cho phép ghi vào PC ( write Program
Counter) 1 Đồng bộ
WPC2S Tín hiệu cho phép ghi từ PC vào Stack ( write PC
to Stack) 1 Đồng bộ
WS2PC Tín hiệu cho phép ghi từ Stack vào PC ( write
Stack to Program Counter) 1 Đồng bộ WDC Tín hiệu cho phép ghi dữ liệu vào Cache ( write
data cache) 1 Đồng bộ
Bảng 4.7: Mô tả chức năng các tín hiệu Hoạt động của luồng dữ liệu ở mỗi giai đoạn :
INSTRUCTION-STAGE (I) : nhận lệnh từ bộ nhớ
READ-STAGE (R): Được nêu trên trong giai đoạn này bộđiều khiển sẽđọc lệnh, tách ra được RS, RS2. Từđó, bộđiều khiển quyết định hai giá trị ngõ vào để
RS: Bit (18:14) quyết định giá trị của thanh ghi A sẽ được truyền vào từ
thanh ghi nào. Kết hợp với mã lệnh còn cho phép ta chọn giá trịđưa vào thanh ghi A sẽ là tập thanh ghi hay giá trị PC.
RS2: Giá trị của thanh ghi B bị chi phối bởi ba yếu tố: + Bit immediate: bit (13)
+ Source2: bit (4:0)
+ Giá trị immediate: bit (12:0)
Khi bit immediate = 0, giá trị của thanh ghi B sẽđược đưa từ tập thanh ghi. Lúc đó địa chỉ của thanh ghi được qui định bởi source2 bit (4:0). Khi bit immediate = 1, giá trị của thanh ghi B sẽ được đưa trực tiếp thông qua giá trị
immediate: bit (12:0). Đặc biệt đối với các lệnh JUMPR, CALLR giá trị long- immediate sẽ là 32 bit theo cấu trúc nhưđã trình bày trên phần opcode.
EXECUTION-STAGE (E): lệnh được thực hiện trong giai đoạn thực thi lệnh. Bốn bit cuối (28:25) của 7 bit mã lệnh chỉ rõ hoạt động của ALU, chúng
được nối vào bộ ALU. Tất cả các lệnh đều liên quan đến hoạt động của ALU ngoại trừ RET. Đối với RET, bit (28) là 0 nói lên rằng không có phép toán nào của ALU được thực hiện.
WRITE-STAGE (W): trong giai đoạn ghi, kết quả được ghi vào tập thanh ghi. Trong trường hợp lệnh LOAD/STORE, dữ liệu thích hợp sẽđược ghi lần lượt vào RF/Cache. Thanh ghi đích {bit (23:19)} được nối với tập thanh ghi cho 1 trong 2 trường hợp:
Khi dữ liệu được ghi vào tập thanh ghi, địa chỉ đích đơn giản chỉ xác định rõ địa chỉ của thanh ghi mà dữ liệu trong đó được lưu trữ.
Khi dữ liệu được chuyển từ tập thanh ghi tới bộ nhớ đệm, địa chỉ đích được sử dụng như là địa chỉ nguồn.
Các lệnh được chuyển từ bộ nhớ chỉ lệnh vào giai đoạn nhận lệnh I (Instruction stage) trên cạnh lên của xung clock (phase 1). Sự dịch chuyển của các thanh ghi I, R, E và W được thực hiện trên cạnh xuống của tín hiệu xung clock
(phase 2), W lấy từ E, E lấy từ R, R lấy từ I và thanh ghi I sẽ load các lệnh mới từ
bộ nhớ.
4.4.3 Tín hiệu điều khiển thời gian
Tín hiệu điều khiển được phát sinh trên cả 2 pha xung clock và được dẫn xuất từ nội dung của thanh ghi điều khiển R, E, W. Tín hiệu điều khiển thời gian
được tóm tắt trong bảng sau:
phase 1 2 1 2 1 2 1 2
stage I R E W
AND If bypass IPC(2)
OR {BY2A(2)} {BY2A(1)} WR(2) XOR {BY2B(2)} {BY2B(1)}
SLL SRA ADD ADDC SUB LDXW WR(2) IPC(2) {RDCE(1,2)} STXW WDC(2) IPC(2)
JMP If jump => If not jump => do => WPC (2) do => IPC (2)
DOJMP)
LIM (1) do => WPC (2) do => IPC (2) (DOJMP) CALL ISP (1) WPC (2) WPC2S (2) (DOJMP) CALLR SPC (1) WPC (2) LIM (1) (DOJMP) ISP (1) WPC2S (2) RET WS2PC (2) DSP (2) (DOJMP) IPC (2) Bảng 4.8: Tín hiệu điều khiển 4.4.4 Tín hiệu điều khiển lệnh nhảy
Khi một phép toán nhảy hoặc gọi được thực thi, đường ống dẫn lệnh phải
được ‘rửa sạch’. Nếu ống dẫn lệnh không được ‘rửa sạch’, thì 2 lệnh theo sau lệnh jump hoặc call sẽđược thực thi. Đây là điều hiển nhiên được thừa nhận, tuy nhiên
điều này có thể ghi đè lên một địa chỉ của tập thanh ghi cần thiết trong chương trình con. Để giải quyết, chúng ta cần tín hiệu DOJMP, được set lên 1 và được giữ
lại cho một chu kì clock sau khi lệnh jmp và call được thực thi. Ghi vào thanh ghi PC (Program counter) được ưu tiên cao hơn tăng độ lớn của PC. Trong phase 2 của giai đoạn thực thi (E), giá trị mới của PC được ghi, và tập lệnh từ địa chỉ PC mới được load tại thời điểm bắt đầu của chu kì xung clock kế tiếp trong giai đoạn nhận lệnh (I).
4.4.5 Kết quả tính toán và chốt dữ liệu vào thanh ghi
Nếu một lệnh cần kết quả của lệnh trước, kết quả cần được bypass qua tập thanh ghi bởi vì nó không đủ nhanh để đáp ứng xung. Kết quả của một tập lệnh
được lưu trong phase 2 của chu kì clock tiếp theo, nhưng nó lại cần trong suốt phase đầu tiên. Kết quả vẫn còn được lưu trong thanh ghi ở địa chỉ được gọi ra ngoài bởi giai đoạn ghi, nhưng nó cũng có thể là ngỏ vào trực tiếp của ALU, làm kết quả của các phép tính ALU trước đó hoàn thành đúng lúc. Một bộđa hợp thêm vào nằm giữa 2 chốt (latches) và các port ALU sẽ chọn lựa ngõ vào đúng cho bộ
ALU phụ thuộc vào tín hiệu BY2A và BY2B.
4.4.6 Tín hiệu lựa chọn dữ liệu trong cache (d_mux_to_rf)
Nếu dữ liệu được tải từ cache để mà chứ trong tập thanh ghi, và nếu nó cần cho một phép tính ALU trong chu kì xung clock tới hoặc một chu kì xung clock sau chu kì xung clock tới, quá trình lưu trữ dữ liệu chứa trong tập thanh ghi và chuyển nó tới ngõ vào ALU sẽ bị chậm trễ. Khối điều khiển sẽ xác định vấn đề
này bằng cách so sánh bit thích hợp trong mã lệnh của giai đoạn đọc (R) với giai
đoạn ghi (W) trong phase 1 (trong trường hợp cần dữ liệu ở ngõ vào ALU trong 2 chu kì xung clock sau khi dữ liệu được chứa trong tập thanh ghi). Trong suốt phase 2, mã lệnh ở giai đoạn thực thi được kiểm tra. Nếu kết quả bypass được xác
định bằng cách so sánh địa chỉ đích của lệnh trong giai đoạn thực thi (E) với 2 địa chỉ nguồn của lệnh trong giai đoạn đọc lệnh (R), và toán hạng Load trong giai
đoạn thực thi (E), một tín hiệu bypass sẽđược khối tạo (BYC) và nó sẽ lựa chọn giá trị d_mux_to_rf là ngõ vào trực tiếp tới BYMUXA và BYMUXB. Ngõ vào cuối cùng được chọn bởi tín hiệu điều khiển BY2A và BY2B.
Hình 4.2: Sơđồ khối các thanh ghi và bộ nhớ cache
4.4.7.1 Khối tập các thanh ghi (Register File)
Tín hiệu Kích thước Hướng Miêu tả
W_addr 5 In Địa chỉ ghi tập thanh ghi
addr_a 5 In Địa chỉ cho ngõ ra của port A đến ALU addr_b 5 In Địa chỉ cho ngõ ra của port B đến ALU wr 1 In Kích hoạt chếđộ ghi
D_mux_to_rf 32 In Dữ liệu từ bộ nhớ cache qua bộđa hợp tới thanh ghi
D_rf_to_cache 32 Out Dữ liệu từ tập thanh ghi tời cache A 32 Out Ngõ ra port A từ ALU
B 32 Out Ngõ ra port B từ ALU
Bảng 4.9: Mô tả tín hiệu trong tập thanh ghi (Register File)
4.4.7.2 Khối bộ nhớ Cache (The Data Cache)