Bài giảng Thiết kế hệ thống nhúng (Embedded Systems Design) - Chương 4 (bài 8): Biểu diễn trạng thái và mô hình hóa quá trình. Những nội dung chính trong chương này gồm có: Mô hình vs ngôn ngữ, mô hình trạng thái, mô hình quá trình đồng thời, mô hình luồng dữ liệu, các hệ thời gian thực.
CHƢƠNG Systems 4: KỸ THUẬT TRÌNH Embedded Design:LẬP A Unified NHÚNG Hardware/Software Introduction Bài 8: Biểu diễn trạng thái mơ hình hóa q trình CuuDuongThanCong.com https://fb.com/tailieudientucntt Tổng quan • Mơ hình vs Ngơn ngữ • Mơ hình trạng thái – FSM/FSMD – HCFSM ngôn ngữ biểu đồ – Mơ hình trạng thái lập trình (Program-State Machine (PSM) Model) • Mơ hình q trình đồng thời – Truyền thơng – Đồng – Thực • Mơ hình luồng liệu • Các hệ thời gian thực CuuDuongThanCong.com https://fb.com/tailieudientucntt Giới thiệu • Mơ tả trạng thái xử lý hệ thống nhúng – Đôi khó • Độ phức tạp tăng khả IC tăng – Trong khứ: máy giặt, games etc • Vài trăm dòng lệnh – Ngày nay: Đầu TV kỹ thuật số, điện thoại di động etc • Vài trăm nghìn dịng lệnh • Trạng thái u cầu thƣờng không đƣợc hiểu đầy đủ bắt đầu – Nhiều q trình thực lỗi mơ tả kiện thiếu, ko xác – Tiếng Anh (hoặc ngơn ngữ khác) – điểm khởi đầu chung • Khó mơ tả xác đơi khơng thể • Ví dụ: Mã điều khiển cho ô tô – dài hàng nghìn trang CuuDuongThanCong.com https://fb.com/tailieudientucntt Mơ hình ngơn ngữ • Làm ghi nhận hành vi (chính xác)? – Chúng ta nghĩ đến ngơn ngữ (C, C++), nhƣng mơ hình tính tốn mấu chốt • Mơ hình tính tốn bản: – Mơ hình lập trình • Các câu lệnh, quy tắc ghép câu lệnh, chế thực chúng – Mơ hình xử lý thơng tin • Nhiều mơ hình chạy đồng thời – Mơ hình trạng thái • Cho hệ riêng, giám sát đầu vào điều khiển, thiết lập đầu điều khiển – Mô hình luồng liệu • Cho hệ liệu riêng, biến dòng liệu đầu vào thành dòng liệu đầu – Mơ hình hƣớng đối tƣợng • Để tách phần mềm phức tạp thành đơn giản, mục đƣợc định nghĩa CuuDuongThanCong.com https://fb.com/tailieudientucntt Mơ hình vs ngôn ngữ Poetry Recipe Story State machine Sequent program Dataflow English Spanish Japanese C C++ Java Mơ hình Ngơn ngữ Ngơn ngữ nấu ăn – Tiếng Anh • Chương trình - C Mơ hình tính tốn mơ tả trạng thái hệ – Ghi khái niệm, vd cơng thức hay chƣơng trình • Ngơn ngữ để thể mơ hình – Dạng nhất, ví dụ tiếng Anh, C • Hiều ngơn ngữ đƣợc dùng để thể mơ hình – VD mơ hình lập trình C,C++, Java • Một ngơn ngữ thể nhiều mơ hình – VD C++ → mơ hình lập trình tuần tự, mơ hình hƣớng đối tƣợng, mơ hình trạng thái • Các ngơn ngữ định thể tốt mơ hình tính toán định CuuDuongThanCong.com https://fb.com/tailieudientucntt Chữ vs Đồ họa • Mơ hình ngơn ngữ khơng đƣợc nhầm lẫn với “chữ đồ họa” – “Chữ đồ họa” hai kiểu ngơn ngữ • Chữ: ký tự, số • Đồ họa: vịng trịn, mũi tên (với số ký tự, số) X = 1; X=1 Y = X + 1; Y=X+1 CuuDuongThanCong.com https://fb.com/tailieudientucntt Ví dụ: Bộ điều khiển thang máy Giao diện hệ thống Mô tả tiếng Anh phần • Bộ điều khiển thang máy đơn giản – Bộ phận yêu cầu chuyển yêu cầu khác thành yêu cầu tầng – Đơn vị điều khiển di chuyển thang máy tới tầng yêu cầu “Di chuyển thang máy lên xuống để đến tầng yêu Một tầng yêu cầu, mở cửa 10 giây, trì đến tầng đƣợc yêu cầu thay đổi Đảm bảo cửa không mở di chuyển Không thay đổi hƣớng trừ có yêu cầu tầng cao lên tầng thấp xuống…” up Unit Control down open floor req Request Resolver b1 b2 bN up1 up2 dn2 up3 dn3 buttons inside elevator up/down buttons on each floor • Thử thể C dnN CuuDuongThanCong.com https://fb.com/tailieudientucntt Bộ điều khiển thang máy sử dụng mơ hình lập trình Mơ hình cương trình Inputs: int floor; bit b1 bN; up1 upN-1; dn2 dnN; Outputs: bit up, down, open; Global variables: int req; void UnitControl() { up = down = 0; open = 1; while (1) { while (req == floor); open = 0; if (req > floor) { up = 1;} else {down = 1;} while (req != floor); up = down = 0; open = 1; delay(10); } } void RequestResolver() { while (1) req = } void main() { Call concurrently: UnitControl() and RequestResolver() } Giao diện hệ thống Mô tả tiếng Anh phần “Di chuyển thang máy lên xuống để đến tầng yêu Một tầng yêu cầu, mở cửa 10 giây, trì đến tầng đƣợc u cầu thay đổi Đảm bảo cửa không mở di chuyển Khơng thay đổi hƣớng trừ có u cầu tầng cao lên tầng thấp xuống…” up Unit Control down open floor req Request Resolver b1 b2 bN up1 up2 dn2 up3 dn3 Có thể thực chương trình với nhiều câu lệnh “if” buttons inside elevator up/down buttons on each floor dnN CuuDuongThanCong.com https://fb.com/tailieudientucntt Mơ hình trạng thái máy hữu hạn (Finite-state machine model – FSM) • Cố gắng thể trạng thái nhƣ chƣơng trình đơi khơng đầy đủ khó • Thay vào đó, xem xét nhƣ mơ hình FSM, mơ tả hệ nhƣ sau: – Các trạng thái • VD, nghỉ, lên, xuống, mở cửa – Chuyển đổi từ trạng thái đến trạng thái khác dựa đầu vào • VD yêu cầu tầng – Các hoạt động xảy trạng thái • VD trạng thái lên, u,d,o,t = 1,0,0,0 (up = 1, down, open, and timer_start = 0) • Thử CuuDuongThanCong.com https://fb.com/tailieudientucntt Mơ hình trạng thái máy hữu hạn (FSM) Quá trình đơn vị điều khiển sử dụng máy trạng thái req > floor u,d,o, t = 1,0,0,0 GoingUp !(req > floor) timer < 10 req > floor !(timer < 10) u,d,o,t = 0,0,1,0 Idle req == floor DoorOpen u,d,o,t = 0,0,1,1 req < floor !(reqfloor u,d,o = 1,0,0 GoingUp req>floor u,d,o = 0,0,1 UnitControl timeout(10) Idle DoorOpen fire req==floor u,d,o = 0,1,0 • FireMode – Khi fire đúng, di chuyển thang máy tới tầng 1st mở cửa !(req>floor) fire reqfloor) req>floor ElevatorController UnitControl u,d,o = 0,0,1 RequestResolver NormalMode u,d,o = 0,1,0 !fire fire Idle req==floor reqfloor) DoorOpen u,d,o = 0,0,1 req1 FireDrOpen fire 20 CuuDuongThanCong.com https://fb.com/tailieudientucntt Mơ hình trạng thái máy – chƣơng trình (PSM): HCFSM + mơ hình lập trình • Các hoạt động trạng thái chƣơng trình FSM chƣơng trình – Ngƣời thiết kế chọn kiểu thích hợp • Phân cấp hạn chế HCFSM sử dụng biểu đồ trạng thái – Chỉ chuyển trạng thái trạng thái cạn kề, đầu vào đơn – Trạng thái – chƣơng trình “hồn thiện” • Đạt đến cuối chƣơng trình tuần tự, • FSM chuyển tới trạng thái hồn thiện • PSM có hai kiểu chuyển – – Chuyển trực tiếp (TI): xảy trạng thái chƣơng trình nguồn Chuyển hồn thành (TOC): xảy điều kiện chƣơng trình nguồn kết thúc ElevatorController int req; UnitControl NormalMode up = down = 0; open = 1; while (1) { while (req == floor); open = 0; if (req > floor) { up = 1;} else {down = 1;} while (req != floor); open = 1; delay(10); } } !fire fire RequestResolver req = FireMode up = 0; down = 1; open = 0; while (floor > 1); up = 0; down = 0; open = 1; – Biểu đồ đặc biệt: mở rộng VHDL để mơ tả mơ hình PSM – C đặc biệt: mở rộng C để mơ tả mơ hình PSM 21 CuuDuongThanCong.com https://fb.com/tailieudientucntt Vai trị việc chọn ngơn ngữ mơ hình thích hợp • Tìm mơ hình thích hợp để biểu diễn hệ nhúng bƣớc quan trọng – Mơ hình ảnh hƣởng đến cách nhìn hệ thống • Ban đầu nghĩ chuỗi hoạt động, viết chƣơng trình – – – – – Trƣớc tiên đợi lệnh gọi tầng Sau đó, đóng cửa Sau đó, di chuyển lên hay xuống đến tầng yêu cầu Rồi mở cửa Rồi lặp lại • Để tạo trạng thái máy, nghĩ theo khía cạnh trạng thái chuyển đổi chúng – • Khi hệ phải phản ứng lại với đầu vào thay đổi, trạng thái máy mơ hình tốt • HCFSM mơ tả FireMode cách dễ dàng rõ ràng Ngôn ngữ nên mô tả mơ hình dễ dàng – Về lý tƣởng, nên có đặc điểm mơ tả trực tiếp cấu trúc mơ hình – FireMode phức tạp chƣơng trình • Xem lại code – Các yếu tố khác ảnh hƣởng đến việc chọn lựa mơ hình • Các kỹ thuật cấu trúc sử dụng để thay – VD: Các nhãn để mơ tả trạng thái máy chƣơng trình 22 CuuDuongThanCong.com https://fb.com/tailieudientucntt Mơ hình q trình đồng thời ConcurrentProcessExample() { x = ReadX() y = ReadY() Call concurrently: PrintHelloWorld(x) and PrintHowAreYou(y) } PrintHelloWorld(x) { while( ) { print "Hello world." delay(x); } } PrintHowAreYou(x) { while( ) { print "How are you?" delay(y); } } • Mơ tả chức hệ theo khía cạnh hai nhiều tác vụ thực đồng thời • Nhiều hệ thống dễ để mô tả với mô hình q trình đồng thời tính chất đa tác vụ • Ví dụ đơn giản: Ví dụ trình đồng thời đơn giản – Đọc hai số X Y – Hiển thị “Hello world.” sau X giây – Hiển thị “How are you?” sau Y giây PrintHelloWorld ReadX ReadY PrintHowAreYou time Chương trình thực Enter X: Enter Y: Hello world Hello world How are you? Hello world How are you? Hello world (Time (Time (Time (Time (Time (Time = = = = = = 2 4 s) s) s) s) s) s) Đầu vào đầu mẫu 23 CuuDuongThanCong.com https://fb.com/tailieudientucntt Quá trình đồng thời hệ thời gian thực 24 CuuDuongThanCong.com https://fb.com/tailieudientucntt Quá trình đồng thời • Xem xét hai ví dụ có tác vụ chạy độc lập nhƣng chia sẻ liệu • Khó để viết sử dụng mơ hình lập trình • Mơ hình q trình đồng thời dễ – Các chƣơng trình riêng cho tác vụ – Các chƣơng trình trao đổi thơng tin với Heartbeat Monitoring System B[1 4] Heart-beat pulse Task 1: Read pulse If pulse < Lo then Activate Siren If pulse > Hi then Activate Siren Sleep second Repeat Task 2: If B1/B2 pressed then Lo = Lo +/– If B3/B4 pressed then Hi = Hi +/– Sleep 500 ms Repeat Set-top Box Input Signal Task 1: Read Signal Separate Audio/Video Send Audio to Task Send Video to Task Repeat Task 2: Wait on Task Decode/output Audio Repeat Task 3: Wait on Task Decode/output Video Repeat Video Audio 25 CuuDuongThanCong.com https://fb.com/tailieudientucntt Q trình • Một chƣơng trình tuần tự, thƣờng vịng lặp vơ hạn – Thực đồng thời với trình khác – Chúng ta bƣớc vào giới “lập trình đồng thời” • Các hoạt động q trình – Khởi tạo kết thúc • Khởi tạo giống thủ tục gọi, nhƣng bên gọi khơng đợi – Q trình đƣợc khởi tạo tạo q trình • Kết thúc chấm dứt trình, loại bỏ liệu • Trong ví dụ HelloWord/HowAreYou, khởi tạo q trình – Dừng phục hồi • Dừng đƣa trình vào trạng thái giữ, lƣu trữ trạng thái cho việc thực sau • Phục hồi khởi đầu lại q trình từ điểm đƣợc dừng – Liên kết • Một q trình dừng trình đƣợc kết thúc 26 CuuDuongThanCong.com https://fb.com/tailieudientucntt Thơng tin q trình • Các q trình cần trao đổi liệu tín hiệu để giải vấn đề tính tốn chúng – Các q trình khơng thơng tin chƣơng trình độc lập giải vấn đề độc lập • Ví dụ bản: producer/consumer – Q trình A tạo liệu, trình B sử dụng chúng – VD: A giải mã gói video, B hiển thị gói đƣợc giải mã hình Encoded video packets processA() { // Decode packet // Communicate packet to B } } Decoded video packets • Làm để đạt đƣợc q trình thơng tin này? void processB() { // Get packet from A // Display packet } – Hai phƣơng pháp • Chia sẻ nhớ • Chuyển tin To display 27 CuuDuongThanCong.com https://fb.com/tailieudientucntt Chia sẻ nhớ • Các q trình đọc ghi biến đƣợc chia sẻ – Không thời gian, dễ thực – Nhƣng hay bị lỗi • Ví dụ: Producer/consumer với lỗi – Chia sẻ buffer[N], count • – processA tạo liệu lƣu buffer • – Nếu buffer trống, phải đợi Lỗi xảy hai trình cập nhật count đồng thời (dòng 10 19) thực sau xảy “count” • • • • • • – Nếu buffer đầy, phải đợi processB sử dụng liệu buffer • – count = # số liệu buffer A nạp count (count = 3) từ nhớ vào ghi R1 (R1 = 3) A tăng R1 (R1 = 4) B nạp count (count = 3) từ nhớ vào ghi R2 (R2 = 3) B giảm R2 (R2 = 2) A lƣu R1 trở lại count nhớ (count = 4) B lƣu R2 trở lại count nhớ (count = 2) count có giá trị khơng 01: 02: 03: 04: 05: 06: 07: 08: 09: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: data_type buffer[N]; int count = 0; void processA() { int i; while( ) { produce(&data); while( count == N );/*loop*/ buffer[i] = data; i = (i + 1) % N; count = count + 1; } } void processB() { int i; while( ) { while( count == );/*loop*/ data = buffer[i]; i = (i + 1) % N; count = count - 1; consume(&data); } } void main() { create_process(processA); create_process(processB); } 28 CuuDuongThanCong.com https://fb.com/tailieudientucntt Chuyển tin • Chuyển tin – Dữ liệu đƣợc gửi thẳng từ trình tới q trình khác • Q trình gửi thực hoạt động đặc biệt, send • Q trình thu thực hoạt động đặc biệt, receive, để thu liệu • Cả hai hoạt động phải trình gửi nhận • Thu theo gói, gửi khơng thể theo gói void processA() { while( ) { produce(&data) send(B, &data); /* region */ receive(B, &data); consume(&data); } } void processB() { while( ) { receive(A, &data); transform(&data) send(A, &data); /* region */ } } – Mơ hình an tồn hơn, nhƣng linh hoạt 29 CuuDuongThanCong.com https://fb.com/tailieudientucntt • Có thể sử dụng xử lý chức đơn hay chung (SPP/GPP) (a) Nhiều xử lý, xử lý thực trình – – Đa nhiệm nghĩa (xử lý song song) Bộ xử lý chức chung • • – – • (a) Process3 Process4 Process2 (b) Processor D Process3 General Purpose Processor Process4 Đa số q trình khơng sử dụng 100% thời gian xử lý Có thể chia sẻ thời gian xử lý đạt đƣợc mục đích Nhiều trình chạy xử lý chức chung vài q trình sử dụng xử lý chức đơn chuyên dụng Processor C Process1 Hay dùng (c) Kết hợp (a) (b) – Processor B Process2 Sử dụng ngôn ngữ lập trình nhƣ C biên dịch thành lệnh cho xử lý Đắt, nhiều trƣờng hợp không cần thiết (b) Một xử lý chức chung chạy tất trình – Process1 Bộ xử lý chức đơn chuyên dụng • • Processor A Processor A Process1 Process2 (c) Process3 Process4 General Purpose Processor Communication Bus • Communication Bus Mơ hình q trình đồng thời: Thực 30 CuuDuongThanCong.com https://fb.com/tailieudientucntt Thực • Q trình đƣa chức hệ lên phần cứng xử lý: – Mơ tả sử dụng mơ hình tính tốn(s) – Viết số ngơn ngữ(s) • Lựa chọn thực độc lập với lựa chọn ngôn ngữ • Lựa chọn thực dựa cơng suất, kích thƣớc, chất lƣợng, thời gian giá thành yêu cầu • Thực cuối cần đƣợc kiểm tra tính khả thi – Là thử nghiệm cho việc sản xuất hàng loạt sản phẩm cuối State machine Pascal Sequent program C/C++ Dataflow Java Implementation A Implementation B Concurrent processes VHDL Implementation C Lựa chọn mơ hình tính toán dựa khả cho phép ngƣời thiết kế mô tả hệ thống Lựa chọn ngôn ngữ dựa khả mơ tả mơ hình tính tốn đƣợc sử dụng ngƣời thiết kế Lựa chọn thực dựa khả cơng suất, kích thƣớc, chất lƣợng, giá thành yêu cầu 31 CuuDuongThanCong.com https://fb.com/tailieudientucntt Thực hiện: Nhiều q trình chia sẻ xử lý • Có thể viết lại trình nhƣ chƣơng trình – Thực đƣợc với trƣờng hợp đơn giản, nhƣng khó với trƣờng hợp phức tạp – Kỹ thuật tự động đời nhƣng khơng thơng dụng – VD: cƣơng trình đồng thời Hello World viết: I = 1; T = 0; while (1) { Delay(I); T = T + 1; if X modulo T is then call PrintHelloWorld if Y modulo T is then call PrintHowAreYou } • Có thể dùng hệ điều hành đa nhiệm – – – – • Thơng dụng Hệ điều hành lập lịch cho trình, định vị nhớ, giao diện ngoại vi, etc Hệ điều hành thời gian thực (RTOS) thực điều Mơ tả q trình đồng thời với ngơn ngữ có q trình built-in (Java, Ada, etc.) ngơn ngữ lập trình với thƣ viện hỗ trợ q trình (C, C++, etc) Có thể biến đổi trình thành chƣơng trình với lập lịch code – Ít tốn nhớ (khơng cần OS) – Chƣơng trình phức tạp 32 CuuDuongThanCong.com https://fb.com/tailieudientucntt Tóm tắt • Mơ hình tính tốn khác với ngơn ngữ • Mơ hình lập trình phổ biến – Ngơn ngữ phổ thơng nhƣ C • Mơ hình trạng thái máy tốt cho điều khiển – Các mở rộng nhƣ HCFSM cung cấp thêm nhiều chức – PSM kết hợp trạng thái máy chƣơng trình • Mơ hình q trình đồng thời sử dụng cho hệ thống nhiều tác vụ – Tồn truyền thông phƣơng pháp đồng – Lập lịch quan trọng • Mơ hình tuyến liệu tốt cho xử lý tín hiệu 33 CuuDuongThanCong.com https://fb.com/tailieudientucntt ... trình built-in (Java, Ada, etc.) ngơn ngữ lập trình với thƣ viện hỗ trợ q trình (C, C++, etc) Có thể biến đổi trình thành chƣơng trình với lập lịch code – Ít tốn nhớ (khơng cần OS) – Chƣơng trình. .. vs Mơ hình lập trình • Trạng thái máy: – Khuyến khích ngƣời thiết kế nghĩ đến tất trạng thái chuyển trạng thái dựa tất điều kiện đầu vào • Mơ hình lập trình tuần tự: – Đƣợc thiết kế để chuyển... https://fb.com/tailieudientucntt Q trình • Một chƣơng trình tuần tự, thƣờng vịng lặp vơ hạn – Thực đồng thời với trình khác – Chúng ta bƣớc vào giới ? ?lập trình đồng thời” • Các hoạt động q trình – Khởi tạo kết thúc •