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