Tải bản đầy đủ - 0 (trang)
2 Thiết kế sơ bộ RIST SPM

2 Thiết kế sơ bộ RIST SPM

Tải bản đầy đủ - 0trang

2.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ăng

thực hiện các phép toán số học và logic, tuỳ theo mã opcode được giữ trong thanh ghi

lệ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 thanh

ghi 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 tố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ết kết

quả tính tốn ALU có bằng 0 khơng. Tổng quan bộ xử lí được thể hiện trên hình 2.3.

Ngồ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ệu vào

mem_word từ memory và xuất địa chỉ address cũng như dữ liệu ở Bus1 sang memory.



Hình 2.3 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ỉ

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.



Hình 2.4 Thanh ghi đa chức năng, thanh ghi lệnh, thanh ghi địa chỉ



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



2.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ều

khiể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.



Hình 2.5 Bộ đếm chương trình



Trong



Verilog ta dùng



khối always và



cấu trúc if else,



reset



đồng bộ.







không



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;



13



2.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.



Hình 2.6 Mux_1 (5-1)

assign mux_out = (sel == 0) ? data_a:

(sel == 1) ? data_b :

(sel == 2) ? data_c:

(sel == 3) ? data_d :

(sel == 4) ? data_e : 'bx;



14



Hình 2.7 Mux_2 (3-1)

assign mux_out = (sel == 0) ? data_a:

(sel == 1) ? data_b :

(sel == 2) ? data_c: 'bx;

2.3.5 Thiết kế khối ALU

Khối ALU (hình 2.8)



thực



hiện tính tốn giữa 2 tốn hạng data_1 và data_2, tập lệnh của nó được thể hiện trong

bảng 2.1.

Bảng 2.1 Tập lệnh của ALU

Lệnh

ADD

SUB

AND

NOT



Hoạt động tính toán

Cộng các đường dữ liệu, kết quả là data_1 + data_2

Trừ các đường dữ liệu, kết quả là data_1 - data_2

Thực hiện phép bitwise-AND, kết quả là data_1 & data_2

Thực hiện phép bitwise-NOT của data_1, kết quả là ~data_1



15



Hình 2.8 ALU



Khối ALU nhận 2 dữ liệu 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 tốn đầu ra thơng qua 2 đầu vào dựa

vào lệnh nhận được (opcode). Trong verilog ta dùng lệnh case đặt trong khối always

như sau:

always @ (sel or data_1 or data_2)

case (sel)

NOP:

alu_out = 0;

ADD:

alu_out = data_1 + data_2; // Reg_Y + Bus_1

SUB:

alu_out = data_2 - data_1;

AND:

alu_out = data_1 & data_2;

NOT:

alu_out = ~ data_2; // Gets data from Bus_1

default:

alu_out = 0;

endcase



16



2.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 ghi

Z).

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);



17



2.4 Tập lệnh của RISC SPM

Máy được điều khiển bởi một chương trình ngơn ngữ máy bao gồm một tập

lệnh được lưu trong memory. Vì vậy, ngồi việc phụ thuộc vào kiến trúc của máy, thiết

kế bộ điều khiển còn phụ thuộc vào tập lệnh của bộ xử lý (nghĩa là các lệnh có thể

được thực hiện bởi 1 chương trình). Một chương trình ngơn ngữ máy bao gồm một

chuỗi các word 8 bit (1 bye) được lưu trữ. Định dạng một lệnh của RISC_SPM có thể

dài ngắn tùy thuộc vào hoạt động.

Mộ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 byte

củ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ộc

vào tập lệnh. Word thứ hai chứa địa chỉ của word memory chứa tốn hạng theo u cầu

củ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).



Hình 2.9 Ví dụ các lệnh ngắn và lệnh dài



Bộ



đếm



chương trình giữ



địa chỉ của lệnh



tiếp theo sẽ được



thực thi. Khi thiết



lập lại bên ngồi



được xác nhận, bộ đếm chương trình được tải bằng 0, chỉ ra rằng phần dưới của bộ nhớ

18



giữ lệnh tiếp theo sẽ được tìm nạp. Theo tác động của đồng hồ, đối với các lệnh đơn

chu kỳ, lệnh tại đị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

hồn thành. Nội dung trung gian của ALU có thể là vơ nghĩa khi hoạt động hai chu kỳ

đang được thực hiện.

Các hoạt động của mỗi lệnh sau được thể hiện trong bảng 2.2.

Bảng 2.2 Tập lệnh của RISC SPM

Lệnh

NOP



Mã lệnh

(opcode_src_dest

)

0000_??_??



ADD



0001_src_dest



SUB



0010_src_dest



AND



0011_src_dest



NOT



0100_src_dest



RD*



0101_??_dest



Hành động



Biểu thức minh họa



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 ghi

nguồn và đích là don’t care,

khơng có tác dụng gì

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

Trừ nội dung thanh ghi nguồn

từ thanh ghi đích và lưu kết

quả vào thanh ghi đích

Thực hiện phép bitwise-AND

của nội dung các thânh ghi

nguồn và đích, lưu kết quả vào

thanh ghi đích

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

Lấy một word trong memory

từ địa chỉ được xác định bởi

byte thứ hai của lệnh và tải kết

quả và thanh ghi đích. Các bit



none



dest<=src+dest

dest<=dest-src

dest<=src&&dest



dest<=~src



dest<=memory[Add_R]



19



Tài liệu bạn tìm kiếm đã sẵn sàng tải về

2 Thiết kế sơ bộ RIST SPM

Tải bản đầy đủ ngay(0 tr)

×