Vi xử lý MicroBlaze

Một phần của tài liệu tích hợp dịch vụ đo và kiểm soát từ xa sử dụng fpga (Trang 34 - 58)

3.1.1. Kiến trúc

Vi điều khiển MicroBlazeTM

là một Vi điều khiển RISC dạng lõi vi xử lý mềm, được thiết kế tối ưu cho chip FPGA của Xilinx®. Đây là sơ đồ khối chức năng của lõi MicroBlaze:

MicroBlaze có cấu trúc tương tự như các vi xử lý RISC 32 bit thông thường, bao gồm các khối chức năng chính như: ALU, giải mã lệnh, các thanh ghi đặc biệt, tệp thanh ghi, bộ đếm chương trình, bus lệnh và bus địa chỉ. Bên cạnh những khối chức năng cố định thì với đặc tính mềm, MicroBlaze cho phép tùy chọn các khối chức năng: đệm lệnh, đệm dữ liệu, bộ nhân, bộ chia, bộ dịch, bộ xử lý dấu phẩy động FPU. Điều này cho phép cấu hình linh động MicroBlaze theo các thiết kế có yêu cầu, đặc trưng riêng.

Dạng dữ liệu

MicroBlaze dùng định dạng dữ liệu kiểu Big-Endian. Dữ liệu hỗ trợ cho kiểu word, half-word và byte.

Hình 3-2 Dạng dữ liệu của MicroBlaze

Lệnh

Tất cả các lệnh của MicroBlaze là 32-bit và chia làm hai loại A và B. Lệnh loại A có tối đa hai thanh ghi toán hạng nguồn và một thanh ghi toán hạng đích. Lệnh loại B có một thanh ghi toán hạng nguồn và một toán hạng tức thì 16-bit. Lệnh loại B có một thanh ghi toán hạng đích đơn.

Thanh ghi

MicroBlaze có 32 thanh ghi đa năng 32-bit và có tối đa 18 thanh ghi chức năng đặc biệt 32-bit.

- Thanh ghi đa năng.

- Thanh ghi bộ đếm chương trình (PC).

- Thanh ghi trạng thái máy (MSR).

- Thanh ghi địa chỉ ngoại lệ (EAR). - Thanh ghi trạng thái ngoại lệ (ESR).

- Thanh ghi nhánh đích (BTR).

- Thanh ghi trạng thái số phẩy động (FSR). - Thanh ghi ngoại lệ dữ liệu (EDR).

- Thanh ghi định danh tiến trình (PID).

- Thanh ghi vùng bảo vệ (ZPR).

- Thanh ghi đệm dịch một mặt thấp (TLBLO).

- Thanh ghi đệm dịch một mặt cao (TLBHI).

- Thanh ghi chỉ mục đệm dịch một mặt (TLBX).

- Thanh ghi chỉ mục đệm dịch tìm kiếm một mặt (TLBSX).

- Thanh ghi phiên bản vi xử lý (PVR).

Kiến trúc pipeline

Thực thi lệnh của MicroBlaze theo kiểu pipeline. Hầu hết các lệnh, mỗi trạng thái cần một xung đồng hồ để hoàn thành. Một cách đồng thời, số xung đồng hồ cần cho một lệnh cụ thể để hoàn thành bằng với số trạng thái của pipeline, và mỗi lệnh hoàn thành tại mỗi chu kì. Rất ít lệnh cần nhiều chu kì trong trạng thái thực thi để hoàn thành.

- Pipeline 3 trạng thái: Khi C_AREA_OPTIMIZED = 1, pipeline chia

làm 3 trạng thái để tối thiểu phần cứng: nạp lệnh, giải mã và thực thi.

Hình 3-3 Pipeline 3 trạng thái của MicroBlaze

- Pipeline 5 trạng thái: Khi C_AREA_OPTIMIZED = 0, pipeline chia

làm 5 trạng thái cho việc tối đa hiệu năng: nạp lệnh (IF), giải mã (OF), thực thi (EX), truy cập bộ nhớ (MEM), ghi trở lại (WB).

Hình 3-4 Pipeline 5 trạng thái của MicroBlaze

Kiến trúc bộ nhớ

MicroBlaze xây dựng với kiến trúc bộ nhớ kiểu Harvard; truy cập dữ liệu và địa chỉ ở những vùng không gian địa chỉ phân biệt. Mỗi địa chỉ có giải 32-bit. Vùng bộ nhớ lệnh và dữ liệu có thể trùng nhau bởi việc ánh xạ chúng trên cùng bộ nhớ vật lý. MicroBlaze không chia tách truy cập dữ liệu tới I/O hay bộ nhớ. Vi điều khiển có tối đa 3 giao diện cho truy cập bộ nhớ:

- Bus bộ nhớ cục bộ (LMB).

- Bus cục bộ Vi điều khiển (PLB) hay bus ngoại vi trên chip (OPB). Liên kết đệm Xilinx (XCL).

Quản lý bộ nhớ ảo

Chương trình chạy trên MicroBlaze dùng địa chỉ có khả năng truy cập vùng nhớ 4GB. Vi điều khiển có thể hiểu vùng địa chỉ này theo 1 trong 2 cách, tùy vào chế độ dịch:

- Ở chế độ thực, địa chỉ hiệu quả dùng để truy cập trực tiếp bộ nhớ vật lý.

- Ở chế độ ảo, địa chỉ hiệu quả được dịch sang địa chỉ vật lý nhờ phần cứng quản lý bộ nhớ ảo và Vi điều khiển.

Chế độ ảo cung cấp việc điều khiển nhiều hơn qua bảo vệ bộ nhớ. Các khối của bộ nhớ nhỏ 1KB có thể bảo vệ riêng lẻ từ quyền truy cập. Bảo vệ và sắp lại vị trí cho phép hệ thống phần mềm hỗ trợ đa nhiệm. Ở MicroBlaze, chế độ này thực hiện bởi đơn vị quản lý bộ nhớ MMU - khi C_USE_MMU = 3 và C_AREA_OPTIMIZED = 0. MMU điều khiển và ánh xạ từ địa chỉ hiệu quả sang địa chỉ vật lý.

Reset, ngắt, ngoại lệ và break

Thứ tự ưu tiên từ cao đến thấp như sau: reset, ngoại lệ cứng, break không che được, break, ngắt, vectơ người dùng.

Bảng 3-1 Địa chỉ vector ngắt, ngoại lệ và break

Sự kiện Vectơ địa chỉ Tệp thanh ghi trả về

Reset 0x00000000- 0x00000004 -

Vectơ người dùng 0x00000008- 0x0000000C R15

Ngắt 0x00000010- 0x00000014 R14

Break cứng không che

0x00000018- 0x0000001C R16

Break cứng Break mềm

Ngoại lệ cứng 0x00000020- 0x00000024 R17 hay BTR

Đặt trước của Xilinx 0x00000028- 0x0000004F -

- Reset: khi reset hay debug_rst xảy ra. MicroBlaze làm sạch pipeline và bắt đầu nạp lệnh từ vectơ reset. Tín hiệu reset ngoài ở mức cao và giữ trong tối thiểu là 16 chu kì.

- Ngoại lệ cứng: MicroBlaze có thể cấu hình để bắt các lỗi nội: lệnh trái phép, lỗi bus lệnh và dữ liệu, truy cập không hợp lệ. Ngoại lệ chia cho 0 có thể dùng khi cấu hình C_USE_DIV = 1. Khi cấu hình đơn vị dấu phẩy động C_USE_FPU = 1, nó cũng bắt các ngoại lệ của đơn vị dấu phẩy động: tràn dấu, tràn, chia cho 0, thực thi không

hợp lệ, lỗi chuẩn toán hạng. Khi cấu hình với 1 đơn vị quản lý bộ nhớ, nó cũng bắt các ngoại lệ: lệnh không hợp lệ, lưu dữ liệu không hợp lệ, lưu lệnh không hợp lệ, mất dữ liệu TLB, mất lệnh TLB.

- Break: có 2 loại break cứng và mềm. Break cứng thực thi khi xác

định tín hiệu break ngoài. Trong 1 break, lệnh trong trạng thái thực thi hoàn thành trong khi lệnh trong trạng thái giải mã được thay thế bởi nhánh tới vectơ break 0x18. Break trả về địa chỉ được nạp tự động vào thanh ghi R16. MicroBlaze cũng đặt cờ BIP trong MSR. Để thực hiện break mềm, dùng lệnh brk và brki.

- Ngắt: MicroBlaze hỗ trợ 1 nguồn ngắt ngoài. Vi điều khiển ngắt nếu bit IE của MSR đặt bằng 1. Trong 1 ngắt, lệnh trong trạng thái thực thi hoàn thành trong khi lệnh trong trạng thái giải mã bị thay bởi nhánh tới vectơ ngắt 0x10. Ngắt trả về địa chỉ nạp tự động vào thanh ghi R14. Đồng thời Vi điều khiển xóa bit IE trong MSR. Bit IE lại đặt tự động trở lại khi thực thi lệnh RTID.

Cache lệnh

MicroBlaze có thể dùng với tùy chọn cache lệnh để tăng cường hiệu năng khi thực thi lệnh mà nằm ở ngoài vùng địa chỉ LMB, cache lệnh bao gồm các đặc tính:

- Ánh xạ trực tiếp.

- Dải địa chỉ có khả năng chọn, có khả năng cache. - Cấu hình được kích thước cache và tag.

- Đệm qua giao diện XCL.

- Tùy chọn dòng cache 4 hay 8 từ.

Khi cache lệnh cho phép sử dụng, vùng nhớ chia làm 2 vùng: một vùng có khả năng cache và một không có khả năng cache. Vùng có khả năng cache

xác định bởi 2 thông số: C_ICACHE_BASEADDR và

C_ICACHE_HIGHADDR. Kích thước vùng này là 2N (N>0). Dải địa chỉ xác

định với C_ICACHE_BASEADDR và C_ICACHE_HIGHADDR phải có kích thước bằng 2N. Địa chỉ có khả năng cache gồm 2 phần: địa chỉ cache và địa chỉ tag. Cache lệnh của MicroBlaze có thể cấu hình từ 64-byte tới 64-KB tương ứng với địa chỉ cache từ 6 đến 16-bit. Địa chỉ tag cũng phù hợp với địa chỉ toàn phần của bộ nhớ cache.

Hình 3-6 Xử lí cache lệnh

Cho mỗi lệnh được nạp, cache lệnh nhận ra nếu địa chỉ lệnh thuộc vùng cache. Nếu địa chỉ không trong vùng cache, bộ điều khiển cache bỏ qua lệnh và gọi PLB, OPB, LMB hoàn thành yêu cầu. Nếu địa chỉ là có khả năng cache, một phép tìm được thực thi trên tag nhớ để kiểm tra nếu địa chỉ yêu cầu đang được cache.

Cache dữ liệu

MicroBlaze có thể dùng với tùy chọn cache dữ liệu để tăng cường hiệu năng. Vùng cache phải không bao gồm vùng địa chỉ LMB. Cache dữ liệu có các đặc tính sau:

- Ánh xạ trực tiếp.

- Dải địa chỉ có khả năng chọn, có khả năng cache. - Cấu hình được kích thước cache và tag.

- Đệm qua giao diện XCL.

- Tùy chọn dòng cache 4 hay 8 từ.

- Cho phép/không cho phép cache qua 1bit của MSR.

- Tùy chọn WIC để xác nhận dòng cache dữ liệu.

Khi cache dữ liệu cho phép sử dụng, vùng nhớ chia làm 2 vùng: một vùng có khả năng cache và một không có khả năng cache. Vùng có khả năng cache xác định bởi hai thông số: C_DCACHE_BASEADDR và

C_DCACHE_HIGHADDR. Kích thước vùng này là 2N (N>0). Dải địa chỉ xác

định với C_DCACHE_BASEADDR và C_DCACHE_HIGHADDR phải có kích thước bằng 2N. Địa chỉ có khả năng cache gồm hai phần: địa chỉ cache và địa chỉ tag. Cache lệnh của MicroBlaze có thể cấu hình từ 64-byte tới 64-KB tương ứng với địa chỉ cache từ 6 đến 16-bit. Địa chỉ tag cũng phù hợp với địa chỉ toàn phần của bộ nhớ cache.

Hình 3-7 Xử lí cache dữ liệu

Đơn vị dấu phẩy động (FPU)

Đơn vị dấu phẩy động dựa trên chuẩn IEEE 754:

- Dùng định dạng IEEE 754 cho dấu phẩy động chính xác đơn, bao

gồm định nghĩa cho số không xác định, không là số và 0. - Hỗ trợ cộng, trừ, nhân, chia, so sánh, chuyển đổi và căn. - Làm tròn tới giá trị gần nhất.

- Tạo bit trạng thái mềm dẻo cho: tràn, chia cho 0 và phép tính không hợp lệ.

Liên kết nhanh đơn giản (FSL)

MicroBlaze có thể cấu hình tối đa 16 giao diện FSL, mỗi giao diện bao gồm một cổng vào và một cổng ra [23]. Các kênh FSL là các giao diện truyền dữ liệu đơn hướng điểm - điểm. Các giao diện FSL trên MicroBlaze rộng 32- bit. 1 bit chia tách xác định đâu là từ gửi/nhận của dạng điều khiển hay dạng dữ liệu. Lệnh get dùng để truyền thông tin từ một cổng FSL tới 1 thanh ghi đa năng. Lệnh put dùng để truyền thông tin theo hướng ngược lại.

Mỗi FSL cung cấp 1 giao diện trễ nhỏ cho pipeline và Vi điều khiển. Do đó nó là ý tưởmg cho việc mử rộng đơn vị xử lí thực thi với bộ gia tốc cứng của người dùng.

Hình 3-8 Ví dụ liên kết FSL

3.1.2. Giao diện tín hiệu

Lõi MicroBlaze được tổ chức theo kiến trúc Harvard với giao diện bus phân tách cho dữ liệu và lệnh. Có 3 giao diện bộ nhớ được hỗ trợ: Bus bộ nhớ cục bộ LMB, bus cục bộ vi xử lý PLB hay bus ngoại vi trên chip OPB, liên kết đệm Xilinx XCL. LMB cung cấp truy cập đơn xung nhịp tới block RAM cổng đôi trên chip. PLB và OPB cung cấp một kết nối cho các ngoại vi trên chip và ngoài chip cũng như bộ nhớ. XCL dùng cho bộ điều khiển bộ nhớ ngoài đặc biệt.

Giao diện tín hiệu của MicroBlaze (Hình 3.1)

- DPLB: giao diện dữ liệu, PLB.

- DOPB: giao diện dữ liệu, OPB.

- DLMB: giao diện dữ liệu, LMB.

- ILMB: giao diện lệnh, LMB.

- MFSL 0..15: giao diện FSL chủ.

- DWFSL 0..15: giao diện chủ điều khiển liên kết FSL. - SFSL 0..15: giao diện FSL tớ.

- DRFSL 0..15: giao diện tớ điều khiển liên kết FSL. - IXCL: giao diện liên kết đệm lệnh.

- DXCL: giao diện liên kết đệm dữ liệu.

- Core: tín hiệu tổng hợp: đồng hồ, reset, debug và trace.

Bus bộ nhớ cục bộ LMB

LMB là một bus đồng bộ dùng chủ yếu để truy cập block RAM trên chip. Nó dùng các tín hiệu điều khiển với số lượng ít nhất và giao thức đơn giản để đảm bảo block RAM cục bộ được truy cập trong một xung nhịp. Tất cả tín hiệu của LMB tích cực mức cao.

Bảng 3-2 Mô tả bus cục bộ LMB

Tín hiệu Giao diện dữ

liệu

Giao diện lệnh Kiểu Mô tả

Addr[0:31] Data_Addr[0:31] Instr_Addr[0:31] O Bus địa chỉ

Byte_Enable[0:3] Byte_Enable[0:3] Không dùng O Cho phép

byte

Data_Write[0:31] Data_Write[0:31] Không dùng O Bus dữ liệu

ghi

AS D_AS I_AS O Chốt địa chỉ

Write_Strobe Write_Strobe Không dùng O Đang ghi

Data_Read[0:31] Data_Read[0:31] Instr[0:31] Bus dữ liệu

đọc

Ready DReady IReady I Sẵn sàng

cho truyền tiếp

Clk Clk Clk I Bus xung

nhịp

Bus nhanh- đơn giản FSL

FSL cung cấp kênh truyền điểm - điểm giữa một FIFO ra và một FIFO vào. MicroBlaze có thể có tối đa 16 giao diện FSL chủ và 16 giao diện FSL tớ.

Bảng 3-3 Mô tả tín hiệu của FSL chủ

Tín hiệu Mô tả Loại Hƣớng

FSLn_M_Clk Đồng hồ Sdt_logic Vào

FSLn_M_Write Cho phép ghi Std_logic Ra

FSLn_M_Data Giá trị dữ liệu ghi Std_logic_vector Ra

FSLn_M_Control Bit điều khiển ghi ra FSL Std_logic Ra

FSLn_M_Full Bit xác định đầy FIFO Std_logic vào

Bảng 3-4 Mô tả tín hiệu của FSL tớ

Tín hiệu Mô tả Loại Hƣớng

FSLn_S_Clk Đồng hồ Sdt_logic Vào

FSLn_S_Read Xác nhận đọc dữ liệu đọc từ

FSL

Std_logic Ra

FSLn_S_Data Giá trị dữ liệu đang sẵn sàng

trên đỉnh của đầu vào FSL

Std_logic_vector Vào

FSLn_S_Control Bit điều khiển dữ liệu đang sẵn sàng trên đỉnh đầu vào FSL

Std_logic Vào

FSLn_S_Exists Bít xác định dữ liệu có trong FSL

Ngoại vi của FSL có thể là chủ hay tớ của bus. Một ngoại vi kết nối tới cổng chủ của FSL đặt tín hiệu dữ liệu và điều khiển lên FSL. Một ngoại vi kết nối tới cổng tớ của FSL đọc và lấy dữ liệu và tín hiệu điều khiển từ FSL. Đây là một ví dụ về sử dụng FSL để kết nối một khối logic của người dùng tới MicroBlaze. Khối IDCT được thực hiện bằng phần cứng để đảm bảo tốc độ tính toán nhanh và tối ưu. MicroBlaze làm chủ của FSL0 và làm tớ của FSL1, khối IDCT làm tớ của FSL0 và làm chủ của FSL1. MicroBlaze gửi dữ liệu và điền khiển IDCT qua FSL0, khi IDCT thực hiện xong, nó gửi dữ liệu lại MicroBlaze qua FSL1.

Hình 3-10 Khối IDCT liên kết với MicroBlaze qua FSL

Liên kết đệm Xilinx XCL

Đây là giải pháp hiệu năng cao cho việc truy cập bộ nhớ ngoài. XCL thiết kế để kết nối trực tiếp tới bộ điều khiển bộ nhớ với bộ đệm FSL tích hợp, ví dụ như MPMC. Phương thức này có độ trế thấp nhất.

MicroBlaze Bộ điều khiển bộ nhớ

FSL FSL

Giao diện này chỉ được phép trên MicroBlaze khi cache được chọn. Bao nhiêu vùng bộ nhớ được truy cập phụ thuộc vào thông số

C_ICACHE_ALWAYS_USED cho cache lệnh và

C_DCACHE_ALWAYS_USED cho cache dữ liệu. Nếu thông số là 1, dải bộ nhớ đệm luôn luôn được truy cập qua liên kết đệm. Nếu thông số bằng 0, dải bộ nhớ đệm được truy cập qua PLB hay OPB.

3.1.3. Giao diện ứng dụng

Giao diện ứng dụng quan trọng cho phát triển phần mềm trên ngôn ngữ hợp ngữ cho vi xử lý mềm. Trình biên dịch MicroBlaze GNU tuân theo những quy tắc của giao diện này, bao gồm:

- Loại dữ liệu.

- Các quy ước dùng thanh ghi.

- Quy ước ngăn xếp.

- Mô hình bộ nhớ.

- Xử lí ngắt và ngoại lệ.

Loại dữ liệu

Các loại dữ liệu dùng bởi chương trình hợp ngữ MicroBlaze như trong bảng dưới đây:

Bảng 3-5 Mô tả loại dữ liệu

Loại dữ liệu MicroBlaze

Loại dữ liệu ANSI C tƣơng ứng

Kích thƣớc(byte)

Data8 Char 1

Data32 Int 4

Data32 Long int 4

Data32 Float 4

Data32 Enum 4

Data16/32 Pointer 2/4

Các quy ước dùng thanh ghi

Các quy ước dùng thanh ghi trình bày như bảng dưới đây

Một phần của tài liệu tích hợp dịch vụ đo và kiểm soát từ xa sử dụng fpga (Trang 34 - 58)