Cái nào nhanh hơn, Thực hiện một chương trình từ ROM hoặc RAM?


8

Hầu hết chúng ta, những người đến từ nền tảng điện tử đều biết rằng SRAM nhanh hơn DRAM. Nhưng khi nói đến việc so sánh RAM với ROM, tôi không chắc chắn.

Câu hỏi của tôi liên quan đến bộ điều khiển vi mô: "Nếu một mã được thực thi trực tiếp từ RAM / ROM, hiệu suất của chúng sẽ tốt hơn ?? 1) thực thi từ RAM hoặc 2) thực thi từ ROM hoặc 3) cả hai sẽ thực hiện như nhau"

Cũng xem xét thực tế rằng ROM được thiết kế để có tốc độ READ cao hơn. trong khi đó đối với RAM, có sự đánh đổi về tốc độ đọc để có khả năng ghi.


10
Đọc bảng dữ liệu (kỹ lưỡng) là cách tốt nhất. Đôi khi, chạy chương trình từ RAM nhanh hơn bộ nhớ flash. Một số micros không thể chạy các chương trình từ RAM và những cái khác có thể chạy ở cùng tốc độ.
Spehro Pefhany

Tôi không thể thêm một bình luận nào, chỉ cố gắng để có ích. Phụ thuộc nếu ROM trên thực tế nhanh hơn RAM bạn sử dụng. Họ có tốc độ như nhau?
OzzieSpin

Nhiều bộ phận ARM Cortex-M hiện tại là ví dụ điển hình của những bộ phận có thể thực thi từ SRAM nhưng chậm hơn khi thực hiện vì không thể sử dụng đường dẫn dành riêng cho flash. Ngược lại, truy cập dữ liệu vào flash có thể chậm hơn so với RAM
Chris Stratton

Nhưng với các chip ARM7 cũ hơn một chút (kinh nghiệm của tôi là với LPC2106 và LPC2148), việc loại bỏ RAM thường NHANH CHÓNG hơn so với FLASH. Điều đó, cùng với câu trả lời của Chris, chứng minh rằng điều duy nhất chúng ta có thể nói là "nó phụ thuộc".
Wouter van Ooijen

Nếu bạn đã có phần cứng, cách dễ nhất là chỉ cần chạy hai kịch bản và so sánh. Nếu không, datasheets là đặt cược tốt nhất của bạn.
Luaan

Câu trả lời:


16

Bảng dữ liệu sẽ cho bạn biết mỗi lệnh mất bao lâu và sự khác biệt, nếu có, giữa việc thực thi từ RAM hoặc ROM.

Đối với vi điều khiển cung cấp tùy chọn thực thi từ RAM, có thể nhanh hơn, có thể là điểm chính của việc sử dụng không gian RAM bổ sung để thực thi mã từ đó. Cũng có thể có một số vấn đề chồng chéo. Trong một số trường hợp, có thể nhanh hơn để thực thi từ ROM vì đây là bộ nhớ riêng và việc truy cập RAM có thể diễn ra đồng thời.

Một lần nữa, cách duy nhất để biết đối với bất kỳ vi mô cụ thể nào là ĐỌC DỮ LIỆU .


Nó thậm chí còn nhanh hơn để thực hiện từ đăng ký.
Joshua

@Joshua Bạn có bất kỳ ví dụ nào về những gì bạn có thể làm với một chương trình được thực hiện từ các thanh ghi không? Nó có vẻ xấu xa thông minh, nhưng giới hạn ở một kích thước chương trình khá nhỏ. Tôi đã nghe nói về các bản demo đồ họa 64kB, nhưng bản demo 16 đăng ký? =)
Cort Ammon

3
@CortAmmon: Tôi có một người ngồi trên bàn với 512 thanh ghi, 400 trong số đó chứa mã chương trình. RAM chậm hơn 3 lần và ROM chậm đến mức được sao chép vào RAM khi khởi động (mất 100 giây mili giây). Tôi có một trình khởi tạo / đầu đọc thẻ SD phù hợp với 300 thanh ghi, không hỗ trợ phần cứng ngoài các chân GPIO. Người viết mất hơn 100 đăng ký để toàn bộ điều này không phù hợp với đăng ký, (điều này sẽ không đủ để làm bất cứ điều gì thú vị) nhưng tôi không cần trình khởi tạo nữa, nên ghi đè lên.
Joshua

9

Nó phụ thuộc hoàn toàn vào bộ nhớ và kiến ​​trúc CPU. Theo nguyên tắc thông thường, SRAM nhanh hơn flash, đặc biệt là trên các MCU tốc độ cao hơn (> 100 MHz). Các tế bào bit SRAM tạo ra một đầu ra mức logic (ít nhiều), trong khi bộ nhớ flash phải trải qua quá trình cảm biến dòng điện chậm hơn.

Tốc độ nhanh hơn (nếu có) một lần nữa tùy thuộc vào kiến ​​trúc - kích thước từ của bộ nhớ, số trạng thái chờ trên mỗi trạng thái, sự hiện diện của bộ đệm, kích thước của hướng dẫn CPU, v.v. Nếu bạn đang chạy ở tần số đủ thấp, bạn có thể có trạng thái chờ bằng 0 trên flash và RAM, vì vậy chúng có thể chạy ở cùng tốc độ.

Mã cũng có vấn đề. Nếu mã của bạn là tuyến tính nghiêm ngặt (không phân nhánh), đèn flash có thể tìm nạp trước các hướng dẫn đủ nhanh để giữ cho CPU bão hòa ngay cả ở tần số cao hơn. Như Olin đã nói, CPU kiến ​​trúc Harvard với các đường dẫn đọc dữ liệu và chương trình riêng biệt có thể hoạt động khác nhau khi mã và dữ liệu ở trong các bộ nhớ khác nhau.

ROM kim loại (và các bộ nhớ không dễ bay hơi khác như FRAM) có các đặc điểm riêng và có thể nhanh hoặc không nhanh như SRAM. Khả năng viết không nhất thiết phải tạo ra sự khác biệt; nó nói thêm về các đặc tính của đầu ra tế bào bit và mạch cảm biến.

Bảng dữ liệu sẽ cung cấp cho bạn một ý tưởng sơ bộ về sự khác biệt về tốc độ, nhưng cách duy nhất để biết chắc chắn là lập hồ sơ mã của bạn.


1

"Chạy chương trình" yêu cầu CPU có đồng hồ đồng bộ. Bộ nhớ chậm có thể được cung cấp bằng cách chạy toàn bộ hệ thống ở đồng hồ đủ chậm hoặc bằng cách chèn wait states(chu kỳ đồng hồ không làm gì thêm giữa các giai đoạn tìm nạp và giải mã), chỉ hoạt động cho các phạm vi địa chỉ nhất định (ví dụ như xem 8085 cổ). Hướng dẫn tìm nạp CPU không biết hoặc quan tâm chính xác khi dữ liệu được xử lý đến giá trị cuối cùng của nó, miễn là nó không thay đổi trong khoảng thời gian thiết lập / giữ.

Một bộ vi điều khiển thường có tất cả bộ nhớ trên chip, vì vậy trừ khi có quy định khác, tôi cho rằng hệ thống bộ nhớ là tất cả trạng thái chờ không. (nhưng đọc bảng dữ liệu để xác nhận). Các bộ vi điều khiển thông thường có nghĩa là các giải pháp đơn chip đơn giản hơn so với máy tính để bàn, vì vậy trạng thái chờ đợi là không thể xảy ra trong một bộ vi điều khiển. Vì vậy, không chắc rằng vi điều khiển sẽ có tốc độ bộ nhớ trên chip không khớp.

Bộ nhớ nhanh hơn thường có giá cao hơn (điện áp cao hơn, điện dung thấp hơn, nhu cầu nhiều hơn). 80xx86 có SRAM nhanh trong bộ đệm L2 và thậm chí SRAM nhanh hơn trong bộ đệm L1 và rất nhiều chip DRAM chậm được gắn vào bộ điều khiển bộ nhớ. Loại hệ thống này phức tạp hơn nhiều so với vi điều khiển và nằm ngoài phạm vi của câu hỏi. (Nhưng rất quan tâm đến một kỹ sư máy tính!)


1
Trên thực tế, một thiết kế phù hợp hoàn hảo là không thể nếu không có ràng buộc. Bộ xử lý sẽ tách riêng lệnh và bộ nhớ dữ liệu, sử dụng không đúng tốc độ bộ nhớ trong các lệnh không phải dữ liệu bộ nhớ, chịu các trạng thái chờ hoặc sử dụng bộ nhớ nhiều cổng.
Chris Stratton

2
Trạng thái chờ là khá phổ biến trong các vi điều khiển hiệu suất cao hơn. Flash chậm.
Adam Haun

@AdamHaun: Mặt khác, nhiều mảng flash bên trong có thể đọc nhiều từ cùng một lúc; nếu mã nhảy đến một số vị trí tùy ý trong flash, có thể mất một vài chu kỳ để tìm nạp lệnh đầu tiên, nhưng một khi được tìm nạp, một vài hướng dẫn tiếp theo có thể có sẵn mà không bị trì hoãn thêm. Trong nhiều trường hợp, việc truy cập một cái gì đó ở gần cuối bộ đệm sẽ chuẩn bị cho hệ thống tải bộ từ tiếp theo.
supercat
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.