CHƯƠNG 1. TỔNG QUAN CÁC VẤN ĐỀ NGHIÊN CỨU 1. Hệ thống nhúng Hệ thống nhúng (Embedded System) là một thuật ngữ thường dùng để chỉ một thiết bị tính toán đặc biệt, có tích hợp cả phần cứng và phần mềm phục vụ các ứng dụng chuyên dụng trong nhiều lĩnh vực của đời sống hiện nay. Khác với các hệ thống phổ biến khác, ví dụ như các máy tính đa năng hay nhiều hệ thống máy tính trong điều khiển công nghiệp, các hệ thống nhúng thường có kích thước nhỏ hơn, khả năng xử lý yếu hơn, bộ nhớ nhỏ hơn và yêu cầu tiêu thụ ít năng lượng [10, 11].
Một hệ thống nhúng gồm ba thành phần chính: • Phần cứng • Phần mềm ứng dụng • Hệ điều hành hoặc một hệ thống thời gian thực (RTOS) Phần cứng hệ thống nhúng: Power Management Clocks Reset Control Embedded Flash Interrupt Control System RAM Embedded Processor Peripherals ROM Sensors Analog I/0s Application Specific Hình 1.1: Các thành phần chính trong một phần cứng nhúng Phần cứng của một hệ thống nhúng thông thường gồm các thành phần chính sau: • Quản lý nguồn (Power Management): Chức năng của thành phần này là cung cấp nguồn điện và điều khiển chế độ cấp nguồn nhằm mục đích tối ưu trong tiêu thụ năng lượng. Thành phần này có thể chứa một bộ đồng hồ thời gian thực RTC (Real Time Clock) uan an tien si TIEU LUAN MOI download : skknchat123@gmail.com 7 • Vi xử lý nhúng (Embedded Processor): Đây là trung tâm của bất kỳ một vi điều khiển nào (microcontroller) dựa trên hệ thông nhúng. Các vi xử lý này được tối ưu về kích thước cũng như chức năng riêng biệt cho từng sản phẩm. Đa phần trong lớp vi xử lý này sẽ tích hợp một vài chức năng DSP cơ bản gồm bộ nhân/chia bằng phần cứng.
• Bộ nhớ (System RAM, ROM, Embedded Flash): Thành phần nhớ RAM trong một hệ thống nhúng nên có thời gian truy cập thấp. Một vài vi điều khiển nhúng gồm thành phần ROM để lưu thành phần phần mềm khởi tạo (bootloader), và có bộ nhớ Flash cho phép lập trình chương trình. • Ngoại vi (Peripherals) và I/O: Các ngoại vi là các thiết bị vào và ra được kết nối đến cổng nối tiếp hoặc song song của hệ thống nhúng. Một vi điều khiển truyền thông với các ngoại vi sử dụng một giao tiếp có thể lập trình.
• Đồng hồ thời gian (Timers) và Watchdog: Một bộ vi điều khiển sẽ gồm bộ đếm thời gian khác nhau để xác định sự kiện theo thời gian, ví dụ cho phép hệ thống vào chế độ tiết kiệm năng lượng và thoát khỏi chế độ này. Một bộ đếm thời gian đặc biệt gọi là “watchdog timer” khác, là một phần thiết yếu của bất kỳ hệ thống nhúng được sử dụng để phát hiện và khôi phục chương trình khi chạy một đoạn mã gặp sự cố. • Thành phần cảm biến (Sensors) và tương tự (Analog): Một hệ thống nhúng thường gồm nhiều cảm biến như cảm biến nhiệt độ và các thành phần tương tự như bộ chuyển đổi tương tự - số (ADC), bộ chuyển đổi số - tương tự (DAC)… • Ngoài ra, trong thiết kế phần cứng hệ thống nhúng còn có các thành phần khác như: điều khiển khởi động hệ thống (Reset control), điều khiển ngắt (Interrupt control), thành phần liên quan đến ứng dụng (Application Specific) … Phần mềm ứng dụng và hệ điều hành: Do không có thiết bị ổ cứng trong hệ thống nhúng, nên mã chương trình được lưu ở trong bộ nhớ Flash hoặc bộ nhớ ROM. Trong quá trình thực thi một chương trình, không gian nhớ cho các biến được cấp pháp trong bộ nhớ RAM.
uan an tien si TIEU LUAN MOI download : skknchat123@gmail.com 8 Các ứng dụng hoạt động trên hệ điều hành cơ sở hoặc trên một hệ điều hành thời gian thực RTOS (Real-Time Operating System). Các hệ thống nhúng rất đa dạng, song có đặc điểm chung là được cấu thành từ một bộ xử lý nhúng chuyên dụng, phần mềm sụn (Firmware) lưu trong thành phần nhớ ROM, hoặc Flash và các thành phần đầu vào, đầu ra [1, 10]. Kiến trúc của một hệ thống nhúng được tập trung xung quanh một vi điều khiển (microcontroller), còn được gọi là MCU (MicroController Unit) được tích hợp trên một mạch chứa bộ xử lý, RAM bộ nhớ Flash, và các thành phần lõi khác. Trên thị trường cung cấp nhiều sự lựa chọn khác nhau liên quan đến kiến trúc, hãng, khoảng giá, đặc điểm và các nguồn tài nguyên được tích hợp.
Những thiết kế thông thường có đặc điểm là không đắt, tiêu thụ năng lượng thấp, nguồn tài nguyên thấp và hệ thống trên một mạch tích hợp đơn, vì những lý do này mà chúng thường được gọi là Hệ thống trên Chip (SoC). Có nhiều họ vi xử lý được dùng cho các hệ thống nhúng tới nay, song các bộ vi xử lý ARM là phổ biến nhất cho tới nay [1][2]. Theo thống kê của Arm Holdings, đã có trên 184 tỷ vi xử lý dựa trên ARM đã được sử dụng trên toàn thế giới tính đến năm 2020 [2]. Các vi xử lý này được dùng cho các thiết bị di động, thiết bị IoT, thiết bị nhúng, hệ thống điều khiển thời gian thực… Mặt khác, như đã trình bày ở trên, phần mềm nhúng được thiết kế cần phù hợp với kiến trúc phần cứng cụ thể.
Do vậy, hệ mật mã trong luận án này được phát triển dựa trên bộ xử lý ARM, là nền tảng phần cứng cho các hệ thống nhúng đang được sử dụng phổ biến cho các thiết bị nhúng hiện nay. Trong phần tiếp theo, luận án trình bày về đặc trưng của kiến trúc ARM làm cơ sở cho việc xây dựng và triển khai các thuật toán của luận án. Bộ vi xử lý ARM trong hệ thống nhúng 1. Kiến trúc ARM (Advanced RISC Machine) ARM là viết tắt của Advanced RISC machines, thực chất là một kiến trúc bộ xử lý sử dụng tập lệnh rút gọn (RISC = Reduced Instructions Set Computer).
Kiến trúc RISC tối ưu hóa các đường dẫn trên mạch, giúp giảm mức tiêu thụ điện năng, tiết kiệm diện uan an tien si TIEU LUAN MOI download : skknchat123@gmail.com 9 tích, yêu cầu tản nhiệt thấp, cung cấp mức hiệu suất vượt trội, lý tưởng cho các thiết bị nhỏ gọn có tài nguyên hạn chế. ARM được phát triển bởi Arm Holdings, Ltd. Kiến trúc ARM có một số đặc điểm chính sau [3]: • Vi xử lý ARM có mười sáu thanh ghi 32 bit (r0-r15). • Hỗ trợ các chỉ lệnh có điều kiện.
Các cờ mã điều kiện N, Z, C, V tương ứng N = Kết quả âm từ ALU; Z = kết quả zero từ ALU; C = nhớ ra từ thao tác ALU; V = tràn từ phép toán ALU. • Hỗ trợ hai tập chỉ lệnh là ARM và Thumb2. • Được tích hợp đơn vị xử lý SIMD và VFP (Vector Floating Point) hỗ trợ tập chỉ lệnh NEON và VFPv3 tương ứng. Các vi xử lý ARM trong thực tế Các phiên bản ARM đã được phát triển trải rộng từ ARMv1 (năm 1985) đến ARMv8 (năm 2012) [5], và hiện nay mới nhất ARMv9 (năm 2021).
Các bộ vi xử lý cao cấp ARMv7 đã chiếm lĩnh thị trường điện thoại di động và máy tính bảng. Cortex-A9 được sử dụng rộng rãi trong SoC của các điện thoại di động, gồm 2 lõi vi xử lý Cortex-A9, bộ tăng tốc đồ họa, modem 3G/4G, các thiết bị ngoại vi khác.2 thể hiện sơ đồ khối của dòng vi xử lý Cortex-A9. Các giai đoạn pipeline của vi xử lý loại này gồm: giải mã chỉ lệnh, thực hiện đổi tên thanh ghi, thực thi chỉ lệnh ở dạng không theo trật tự.2: Sơ đồ khối của vi xử lý Cortex-A9 uan an tien si TIEU LUAN MOI download : skknchat123@gmail.com 10 Kiến trúc ARMv8 là kiến trúc 64-bit. Các dòng vi xử lý Cortex-A53 và Cortex-A57 có cơ chế pipeline tương tự như Cortex-A7 và -A15 tương ứng.
Kiến trúc mở rộng NEON cho ARM Kiến trúc tính toán song song đơn lệnh-đa dữ liệu (SIMD = Single Instruction Multiple Data) được đưa vào các bộ vi xử lý ARM từ phiên bản 6 (ARMv6). Từ phiên bản 7 (ARMv7), bộ vi xử lý ARM hỗ trợ engine tích hợp một số thuật toán đã được cứng hóa sẵn được gọi là thành phần NEON. ARM NEON là thành phần mở rộng kiến trúc SIMD cho các bộ vi xử lý ARM họ Cortex-A nhằm tăng cường hỗ trợ cho các ứng dụng đa phương tiện, đặc biệt trong các thiết bị di động. NEON thực chất là thành phần đồng xử lý được tích hợp vào trong các dòng vi xử lý ARM [4], điển hình như Cortex-A8, Cortex-A9, Cortex-A15, Cortex-A53… NEON hỗ trợ các chỉ lệnh SIMD đặc biệt trên các phần tử vector có cùng kiểu dữ liệu và mỗi chỉ lệnh sẽ thực hiện cùng một phép toán trên tất các các làn (lane) của vector đó [19].3: Phép toán cộng 8 bit trên 4 làn sử dụng 1 chỉ lệnh SIMD trên ARMv6 Hình 1.3 biểu thị ví dụ một phép cộng 8 bit trên 4 làn sử dụng 1 chỉ lệnh SIM trên ARMv6.
uan an tien si TIEU LUAN MOI download : skknchat123@gmail. NEON trong ARMv7 ARMv7 có 13 thanh ghi 32 bit cho mục đích chung được ký hiệu là từ R0 – R12. Thành phần NEON trong kiến trúc ARMv7 sử dụng các thanh ghi đặc biệt, những thanh ghi này tách biệt với các thanh ghi mục đích chung và được biểu diễn ở dạng thanh ghi D hai từ (64-bit) hoặc thanh ghi Q 128-bit (bốn từ). Hình dưới đây minh họa cấu trúc thanh ghi trong ARMv7.4: Cấu trúc của các thanh ghi NEON trên ARMv7 Đối với ARMv7 hoặc các bộ vi xử lý ARM có phiên thấp hơn v7, có 16 thanh ghi 128-bit được ký hiệu là từ Q0 đến Q15; hoặc ta có thể coi là 32 thanh ghi 64-bit được ký hiệu D0-D31.
Thanh ghi Q0 twong ứng với D0-D1, thanh ghi Q1 tương ứng với D2-D3,. NEON sử dụng các chỉ lệnh để tải/lưu dữ liệu và xử lý dữ liệu trong những thanh ghi này. Các chỉ lệnh NEON có khả năng thực hiện truy cập bộ nhớ, sao chép dữ liệu giữi thanh ghi NEON và thanh ghi mục đích chung. NEON còn có thể thực hiện chuyển đổi kiểu dữ liệu và xử lý dữ liệu trong các thanh ghi D hoặc Q.
NEON trong ARMv8 ARMv8 có kiến trúc 64-bit, kiến trúc này có tập chỉ lệnh mới (AARCH64). Kiến trúc ARMv8 có 31 thanh ghi mục đích chung (X0-X30), đây là những thanh ghi 64-bit và nửa thấp của mỗi thanh ghi này được ký hiện là W0-W30, được biểu diễn như hình sau: Hình 1.5: Các thanh ghi trong kiến trúc ARMv8 Sự khác nhau chính trong các chỉ lệnh giữa ARMv7 và ARMv8 được thể hiện trong bảng sau: uan an tien si TIEU LUAN MOI download : skknchat123@gmail.1: Sự khác nhau giữa chỉ lệnh trong ARMv7 và ARMv8 Kiến trúc ARMv8 có tập các thanh ghi NEON riêng biệt khác với tập các thanh ghi ARMv7.