Title Image

Blog Logo

🌱 ARM - Memory Attribute and Types

🌱 ARM - Memory Attribute and Types

    Ở những bài viết về MPU - Memory Protection Unit, mình đã đề cập đến khái niệm memory types và memory attribute. Phần kiến thức này khá nâng cao so với một số dòng vi điều khiển/vi xử lý thông thường. Đối với những hệ thống và vi xử lý phức tạp, chúng ta có thể phải tiếp cận với Bộ nhớ đệm - caches, với nhiều level khác nhau khi truy cập bộ nhớ, hoặc các hệ thống có nhiều core, sử dụng chung bộ nhớ (Shared Memory).

    Bài viết này sẽ cùng tìm hiểu về memory types trong các dòng vi điều khiển lõi ARM.

    👉 Memory Ordering Overview

    Trong các tài liệu về Core/Architecture, chúng ta có thể dễ dàng tìm được một vài chương nói về các khái niệm nói trên. Ví dụ trong tài liệu ARM Cortex R Series Programmer Guide bảng sau về Memory Attributes:

Memory

    Đối với các kiến trúc cũ, mỗi lệnh chương trình được thực hiện, và kết thúc rồi mới chuyển sang câu lệnh tiếp theo. Nhưng với những kiến trúc mới, ARM tối ưu tốc độ thực hiện chương trình bằng nhiều cách. Một số phương pháp phổ biến sử dụng Cache, Buffer, tối ưu thứ tự thực hiện các lệnh và cách truy cập vào bộ nhớ (Memory Ordering).

    Đối với cách sau cùng này, thứ tự load & store các lệnh trong bộ nhớ có thể không cần thực hiện thứ tự thông thường (Xem hình dưới).

Memory

    Với ví dụ trên, chúng ta có 3 câu lệnh:

    ➤ Lệnh đầu tiên thực hiện ghi vào bộ nhớ ngoài, miss trên cache (Access 1). Tiếp theo chương trình sẽ thực hiện 2 lần đọc, một là miss trên cache (Access 2) và một là hit trên cache (Access 3). Cả 2 lệnh đọc trên có thể được thực hiện xong trước khi việc ghi vào buffer (Access 1) thực hiện xong. Và rõ ràng như vậy Access 2 và 3 có thể thực hiện xong trước Access 1, tức là không còn theo thứ tự thông thường nữa!

    ➤ Đối với hệ thống chỉ chạy 1 core, sự việc trên có thể chúng ta không cần quan tâm vì hardware sẽ phụ trách quản lý việc đó. Nhưng trong một hệ thống multicore, các core giao tiếp với nhau thông qua shared memory, khái niệm memory ordering là rất quan trọng.

    ➤ Trường hợp nếu muốn các core thực hiện chương trình một cách tuần tự giống như suy nghĩ thông thường sẽ khiến chương trình chạy lâu hơn, giảm hiệu suất và tiêu tốn nhiều năng lượng hơn.

    👉 ARM Memory Ordering Model

    Đối với các kiến trúc ARM, bộ nhớ bao gồm 3 loại, tất cả các vùng nhớ trong vi điều khiển sẽ được cấu hình 1 trong 3 loại này:

  • Strongly-ordered
  • Device
  • Normal

    Chủ yếu các dòng vi điều khiển được triển khai mặc định là Strongly-ordered, tức là việc truy cập bộ nhớ và thực hiện lệnh sẽ giống như thứ tự thông thường chúng ta nhìn thấy. Hai memory types còn lại là Normal và Device Memory có thể sử dụng cho Shared memory. Normal memory thì cho phép setup Inner và Outer Cacheble.

    👉 Strong-Ordered và Device Memory

    Hai memory types này có cùng thứ tự truy cập bộ nhớ, access rules sẽ như mô tả như dưới đây:

  • Số lượng và kích thước của các truy cập được giữ nguyên. Việc access là atomic (tức là nhỏ nhất), và không thể bị gián đoạn bởi các lệnh khác.
  • Các access không sử dụng cache.
  • Thứ tự thực hiện chương trình, truy cập bộ nhớ đảm bảo tương ứng với thứ tự sắp xếp các câu lệnh trong chương trình.
  • Kiến trúc ARMv7 cho phép re-order Normal Memory truy cập giống như Strong-Ordered và Device Memory.

    ➤ Điểm khác biệt giữa Strong-Ordered Device Memory

  • Việc write vào Strong-ordered memory chỉ có thể được hoàn thành khi lệnh write access đến được peripheral hoặc memory.
  • Trong khi đó việc write vào Device memory có thể hoàn thành trước khi lệnh write access đến được peripheral hoặc memory.

    ➤ Thông thường System Peripheral sẽ được ánh xạ dưới dạng Device memory.

MemoryDevice Memory Attributes

    👉 Normal Memory

    Normal memory thường được sử dụng cho hầu hết các phần của bộ nhớ. Cả ROM và RAM đều có thể xem như Normal memory. Toàn bộ code được thực thi bởi processor phải là Normal memory.

    ➤ Một số đặc điểm của Normal Memory

  • Processor có thể lặp lại một số thao tác đọc/ghi.
  • Processor có thể tìm nạp lệnh trước khi lệnh trước đó thực thi xong. Cái này thì mọi người có thể liên tưởng đến Pipeline.
  • Multiple accesses có thể được hợp nhất bởi phần cứng, thành một access với size lớn hơn. Ví dụ, thay vì write 4 lần 1 bytes (mất 4 lệnh), hardware sẽ merge thành 1 lần write 4 bytes (mất 1 lệnh).
Memory
Normal Memory Attributes

    Trường hợp sử dụng các memory types, dưới đây là recommend của tài liệu Cortex M4 Device Generic User Guide - Cho loại processor với single core và no-cache:

Memory

    👉 Bài viết tham khảo

>>>= Follow ngay =<<<

💚 Kênh Youtube Lập trình - Điện tử 💚

Để nhận được những bài học miễn phí mới nhất nhé 😊

Đăng nhận xét

0 Nhận xét