Bài giảng Thiết kế hệ thống nhúng - Chương 2: Cấu trúc phần cứng hệ thống nhúng - Bài 2: Bộ xử lý chức năng đơn chuyên
Tổng quan
• Giới thiệu
• Mạch tổ hợp
• Mạch tuần tự
• Thiết kế bộ xử lý chức năng đơn
• Thiết kế bộ xử lý chức năng đơn chuyên dụng thời
gian thực3
Giới thiệu
* Các loại vi điều khiển trên thị trường hiện nay:
– Freescale 68HC11 (8-bit)
– Intel 8051
– STMicroelectronics STM8S (8-bit), ST10 (16-bit) và STM32 (32-bit)
– Atmel AVR (8-bit), AVR32 (32-bit), và AT91SAM (32-bit)
– Freescale ColdFire (32-bit) và S08 (8-bit)
– Hitachi H8 (8-bit), Hitachi SuperH (32-bit)
– MIPS (32-bit PIC32)
– PIC (8-bit PIC16, PIC18, 16-bit dsPIC33 / PIC24)
– PowerPC ISE
– PSoC (Programmable System-on-Chip)
– Texas Instruments Microcontrollers MSP430 (16-bit), C2000 (32-bit), và Stellaris (32-bit)
– Toshiba TLCS-870 (8-bit/16-bit)
– Zilog eZ8 (16-bit), eZ80 (8-bit)
– Philips Semiconductors LPC2000, LPC900, LPC700
Trang 1
Trang 2
Trang 3
Trang 4
Trang 5
Trang 6
Trang 7
Trang 8
Trang 9
Trang 10
Tải về để xem bản đầy đủ
Tóm tắt nội dung tài liệu: Bài giảng Thiết kế hệ thống nhúng - Chương 2: Cấu trúc phần cứng hệ thống nhúng - Bài 2: Bộ xử lý chức năng đơn chuyên
kiến trúc 27 Giới thiệu 5.Vi điều khiển ARM. Ngôn ngữ lập trình chính cho ARM hiện nay là ngôn ngữ C. Các trình biên dịch cho ARM thƣờng đƣợc dùng: – Keil ARM. – IAR. – HTPICC for ARM. – ImageCraft ICCV7 for ARM 28 Giới thiệu 6. FPGA và các ứng dụng nhúng Hệ thống nhúng (embedded system) bắt đầu từ các họ Vi điều khiển 8051 rồi đến PIC, AVR và cao hơn nữa là họ ARM, AVR32 hay PSoC. Với FPGA tiếp cận hoàn toàn khác. Vậy bao nhiêu công sức, kinh nghiệm về vi điều khiển và cả những công trình nghiên cứu bị bỏ rơi? thực ra FPGA chỉ phát huy sức mạnh của nó khi đƣợc ghép nối với vi điều khiển. Đó cũng chính là mục đích và tƣ tƣởng thiết kế của co-design. 29 Giới thiệu 6. FPGA và các ứng dụng nhúng Co-design kết hợp năng lực về phần cứng của FPGA với ƣu thế xử lý phần mềm của Vi điều khiển để tạo nên một hệ thống đầy sức mạnh. Ví dụ : Muốn thiết kế một ứng dụng đo nhiệt độ phòng với cảm biến nhiệt có giao tiếp I2C. Nếu chỉ dùng MCU thông thƣờng không có giao tiếp I2C thì sẽ gặp rất nhiều khó khăn (Phải lập trình ngắt, bắt sƣờn, mức của xung,...). Còn nếu chỉ sử dụng FPGA trong ứng dụng này cũng không ổn vì lúc đó bạn sẽ gặp khó khăn nhất định trong các tính toán số học. Ví dụ cảm biến đo nhiệt độ bằng đơn vị độ F, trong khi ta muốn hiển thị độ C, mà muốn thực hiện các phép toán cộng trừ nhân chia để chuyển đổi độ F với độ C bằng FPGA là không hề đơn giản. Trong trƣờng hợp này ta thiết kế theo phƣơng thức co-design. FPGA phụ trách giao tiếp với cảm biến I2C và trả về các số liệu thô để MCU thực hiện các tính toán số học. 30 Transistor CMOS trên silicon • Transistor – Là phần điện tử cơ bản trên mạch số – Hoạt động nhƣ một chuyển mạch on/off – Điện áp ở cực “cổng” điều khiển dòng giữa cực nguồn và cực máng source – Đừng nhầm lẫn “cổng” ở đây với cổng logic gate Conducts if gate=1 1 drain gate IC package IC oxide source channel drain Silicon substrate 31 Thực hiện transistor CMOS • CMOS - Complementary source source Metal Oxide Semiconductor gate Conducts gate Conducts if gate=1 if gate=0 • Chúng ta quan tâm đến mức drain drain pMOS logic nMOS – Điển hình 0 là 0V, 1 là 5V • Hai kiểu CMOS cơ bản 1 1 1 x y x – nMOS dẫn nếu “cổng” =1 x F = x' F = (xy)' y – pMOS dẫn nếu “cổng” =0 x F = (x+y)' – Vì thế gọi là “complementary” 0 y x y 0 0 • Các cổng cơ bản inverter NAND gate NOR gate – Đảo, NAND, NOR 32 Các cổng logic cơ bản x F x F x x y F x x y F x x y F F F F 0 0 y 0 0 0 y 0 0 0 y 0 0 0 1 1 0 1 0 0 1 1 0 1 1 1 0 0 1 0 1 1 0 1 F = x F = x y F = x + y F = x y 1 1 1 1 1 1 1 1 0 Driver AND OR XOR x F x F x x y F x x y F x x y F F F F 0 1 y 0 0 1 y 0 0 1 y 0 0 1 1 0 0 1 1 0 1 0 0 1 0 F = x’ F = (x y)’ 1 0 1 F = (x+y)’ 1 0 0 F = x y 1 0 0 Inverter NAND 1 1 0 NOR 1 1 0 XNOR 1 1 1 33 Thiết kế logic tổ hợp A) Mô tả vấn đề B) Bảng chân lý C) Phƣơng trình đầu ra y là 1 nếu a là 1, hoặc b và c là 1. z là 1 Inputs Outputs y = a'bc + ab'c' + ab'c + abc' + abc nếu b hoặc c là 1, nhƣng không phải cả a b c y z hai, hoặc nếu tất cả là 1. 0 0 0 0 0 0 0 1 0 1 z = a'b'c + a'bc' + ab'c + abc' + abc 0 1 0 0 1 0 1 1 1 0 1 0 0 1 0 1 0 1 1 1 D) Phƣơng trình đầu ra tối thiểu 1 1 0 1 1 1 1 1 1 1 y bc E) Mạch logic a 00 01 11 10 0 0 0 1 0 a y 1 1 1 1 1 b c y = a + bc z bc a 00 01 11 10 0 0 1 0 1 z 1 0 1 1 1 z = ab + b’c + bc’ 34 Các phần tử mạch tổ hợp A B I(log n -1) I0 A B A B I(m-1) I1 I0 n n n n n n n bit, log n x n n-bit n-bit S0 n-bit, m x 1 m function S0 Decoder Adder Comparator Multiplexor ALU n S(log m) n n S(log m) O(n-1) O1 O0 carry sum less equal greater O O O = O0 =1 nếu I=0..00 sum = A+B Less = 1 nếu A<B O = A op B I0 nếu S=0..00 O1 =1 nếu I=0..01 (n bit đầu) equal =1 nếu A=B op đƣợc xác định bởi S. I1 nếu S=0..01 carry = bit thứ (n+1) của greater=1 nếu A>B O(n-1) =1 nếu I=1..11 A+B I(m-1) nếu S=1..11 Với đầu vào enable e Với đầu vào Carry-in Có thể có các đầu ra tất cả các bit đầu ra là 0 Ci trạng thái. nếu e=0 sum = A + B + Ci 35 Các phần tử mạch tuần tự I n load n-bit shift n-bit n-bit Register Shift register Counter clear I Q n n Q Q Q = Q = lsb Q = 0 nếu clear=1, - Nội dung đƣợc dịch 0 nếu clear=1, I nếu load=1 and clock=1, - I đƣợc lƣu trong msb Q(prev)+1 nếu count=1 và clock=1. Q(previous) nếu khác. 36 Thiết kế mạch tuần tự A) Mô tả vấn đề C) Mô hình thực hiện D) Bảng trạng thái (Moore-type) Giả sử ta muốn xây dựng 1 bộ chia x xung clock. Đầu ra có tín hiệu “1” a Mạch tổ hợp Inputs Outputs sau mỗi 4 xung clock. I1 Q1 Q0 a I1 I0 x 0 0 0 0 0 I0 0 0 0 1 0 1 0 1 0 0 1 0 Q1 Q0 0 1 1 1 0 1 0 0 1 0 0 B) Đồ hình trạng thái Thanh ghi trạng thái 1 0 1 1 1 1 1 0 1 1 a=0 x=0 x=1 a=0 1 I1 I0 1 1 1 0 0 0 a=1 3 a=1 a=1 1 2 a=1 • Cho mô hình thực hiện này a=0 x=0 x=0 a=0 – Vấn đề thiết kế mạch tuần tự trở thành thiết kế mạch tổ hợp 37 Thiết kế mạch tuần tự (cont.) E) Phƣơng trình đầu ra tối thiểu F) Mạch tổ hợp I1 Q1Q0 a 00 01 11 10 a 0 0 0 1 1 I1 = Q1’Q0a + Q1a’ + x Q1Q0’ 1 0 1 0 1 I0 Q1Q0 00 01 11 10 I1 a 0 0 1 1 0 I0 = Q0a’ + Q0’a 1 1 0 0 1 x Q1Q0 I0 a 00 01 11 10 0 0 0 1 0 x = Q1Q0 Q1 Q0 1 0 0 1 0 38 Mô hình cơ bản của bộ xử lý chức năng đơn chuyên biệt Các đầu vào Các đầu vào điều khiển dữ liệu bên Bộ điều khiển Luồng dữ liệu bên ngoài ngoài Các đầu vào Trạng thái Thanh ghi đk luồng dữ tiếp theo và Bộ điều liệu Luồng dữ điều khiển khiển liệu logic Các đầu ra đk luồng dữ Thanh ghi Các đơn vị chức năng liệu trạng thái Các đầu ra Các đầu ra điều khiển dữ liệu bên bên ngoài ngoài Bộ điều khiển và luồng dữ liệu Nhìn bên trong bộ điều khiển và luồng dữ liệu 39 Ví dụ bộ xử lý chức năng đơn chuyên biệt Tìm ƣớc số chung lớn nhất !1 (a) Sơ đồ khối 1: (c) Giản đồ • Đầu tiên tạo ra thật toán 1 !(!go_i) trạng thái 2: • Biến đổi thuật toán thành go_i x_i y_i !go_i 2-J: GCD giản đồ trạng thái 3: x = x_i d_o – Thƣờng gọi là FSMD 4: y = y_i (finite-state machine with (b) Chức năng yêu cầu datapath) 5: !(x!=y) 0: int x, y; x!=y 1: while (1) { 6: – Có thể sử dụng biểu tƣợng 2: while (!go_i); để thực hiện việc chuyển 3: x = x_i; x<y !(x<y) 4: y = y_i; 7: y = y -x 8: x = x - y đổi 5: while (x != y) { 6: if (x < y) 6-J: 7: y = y - x; else 5-J: 8: x = x - y; 9: d_o = x } 9: d_o = x; 1-J: } 40 Biểu tƣợng giản đồ trạng thái Câu lệnh gán Câu lệnh lặp Câu lệnh rẽ nhánh a = b while (đk) if (c1) Câu lệnh tiếp { c1 stmts theo thân vòng lặp else if c2 } c2 stmts Câu lệnh tiếp theo else other stmts Câu lệnh tiếp theo !đk a = b C: C: đk c1 !c1*c2 !c1*!c2 Thân vòng Câu lệnh c1 stmts c2 stmts others tiếp theo lặp J: J: Câu lệnh Câu lệnh tiếp theo tiếp theo 41 Tạo ra tuyến dữ liệu !1 • Tạo ra một thanh ghi cho 1: 1 !(!go_i) biến đƣợc khai báo 2: x_i y_i !go_i Datapath • Tạo ra một hàm cho mỗi 2-J: x_sel 3: x = x_i n-bit 2x1 n-bit 2x1 thuật toán tính toán y_sel x_ld 4: y = y_i 0: x 0: y • Kết nối các cổng, thanh ghi y_ld 5: !(x!=y) và hàm != < subtractor subtractor x!=y 5: x!=y 6: x<y 8: x-y 7: y-x – Dựa trên việc đọc và ghi 6: x_neq_y x<y !(x<y) x_lt_y 9: d • Tạo ra bộ nhận dạng đồng 7: y = y -x 8: x = x - y d_ld d_o nhất 6-J: – Đối với mỗi luồng dữ liệu, 5-J: điều khiển đầu vào và đầu ra 9: d_o = x 1-J: 42 Tạo ra biểu đồ trạng thái (FSM) cho bộ điều khiển !1 go_i 1: Controller !1 • Có cùng cấu trúc nhƣ 1 !(!go_i) 0000 1: 2: 1 !(!go_i) 0001 2: FSMD !go_i !go_i 2-J: 0010 2-J: • Thay thế các phép tính 3: x = x_i x_sel = 0 0011 3: x_ld = 1 phức tạp bằng luồng dữ 4: y = y_i y_sel = 0 0100 4: y_ld = 1 liệu x_i y_i !(x!=y) 5: !x_neq_y Datapath 0101 5: x!=y x_sel x_neq_y n-bit 2x1 n-bit 2x1 6: 0110 6: y_sel x<y !(x<y) x_lt_y !x_lt_y x_ld 0: x 0: y y_sel = 1 x_sel = 1 7: y = y -x 8: x = x - y 7: 8: y_ld y_ld = 1 x_ld = 1 6-J: 0111 1000 1001 6-J: != < subtractor subtractor 5: x!=y 6: x<y 8: x-y 7: y-x 5-J: 1010 5-J: x_neq_y 9: d_o = x 1011 9: d_ld = 1 x_lt_y 9: d d_ld 1100 1-J: 1-J: d_o 43 Tách thành bộ điều khiển và luồng dữ liệu go_i Mô hình thực hiện bộ điều khiển (a) Bộ điều khiển !1 0000 1: x_i y_i go_i x_sel 1 !(!go_i) (b) Dữ liệu Mạch tổ hợp y_sel 0001 2: !go_i x_sel x_ld n-bit 2x1 n-bit 2x1 y_ld 0010 2-J: y_sel x_sel = 0 x_ld x_neq_y 0: x 0: y 0011 3: x_ld = 1 x_lt_y y_ld d_ld y_sel = 0 0100 4: y_ld = 1 != < subtractor subtractor x_neq_y=0 5:5: x!=y 6: x<y 8: x-y 7: y-x 0101 5: x_neq_y Q3 Q2 Q1 Q0 x_neq_y=1 0110 6: x_lt_y 9: d Thanh ghi d_ld x_lt_y=1 x_lt_y=0 I3 I2 I1 I0 7: y_sel = 1 8: x_sel = 1 d_o y_ld = 1 x_ld = 1 0111 1000 1001 6-J: 1010 5-J: 1011 9: d_ld = 1 1100 1-J: 44 Bảng trạng thái điều khiển cho ví dụ Tìm ƣớc số chung lớn nhất (GCD) Inputs Outputs Q3 Q2 Q1 Q0 x_neq x_lt_ go_i I3 I2 I1 I0 x_sel y_sel x_ld y_ld d_ld _y y 0 0 0 0 * * * 0 0 0 1 X X 0 0 0 0 0 0 1 * * 0 0 0 1 0 X X 0 0 0 0 0 0 1 * * 1 0 0 1 1 X X 0 0 0 0 0 1 0 * * * 0 0 0 1 X X 0 0 0 0 0 1 1 * * * 0 1 0 0 0 X 1 0 0 0 1 0 0 * * * 0 1 0 1 X 0 0 1 0 0 1 0 1 0 * * 1 0 1 1 X X 0 0 0 0 1 0 1 1 * * 0 1 1 0 X X 0 0 0 0 1 1 0 * 0 * 1 0 0 0 X X 0 0 0 0 1 1 0 * 1 * 0 1 1 1 X X 0 0 0 0 1 1 1 * * * 1 0 0 1 X 1 0 1 0 1 0 0 0 * * * 1 0 0 1 1 X 1 0 0 1 0 0 1 * * * 1 0 1 0 X X 0 0 0 1 0 1 0 * * * 0 1 0 1 X X 0 0 0 1 0 1 1 * * * 1 1 0 0 X X 0 0 1 1 1 0 0 * * * 0 0 0 0 X X 0 0 0 1 1 0 1 * * * 0 0 0 0 X X 0 0 0 1 1 1 0 * * * 0 0 0 0 X X 0 0 0 1 1 1 1 * * * 0 0 0 0 X X 0 0 0 45 Hoàn thiện thiết kế bộ xử lý chức năng đơn chuyên biệt GCD • Chúng ta đã tạo ra tuyến dữ liệu Bộ điều khiển Tuyến dữ liệu • Chúng ta đã có bảng Trạng thái Thanh ghi tiếp theo và trạng thái và điều khiển điều khiển logic logic – Bộ phận bên trái là thiết Thanh ghi Đơn vị chức kế logic năng • Không phải là một thiết kế tối ƣu, nhƣng chúng ta đã thực hiện các bƣớc thiết kế cơ bản Bên trong bộ điều khiển và tuyến dữ liệu 46 Thiết kế bộ xử lý chức năng đơn chuyên biệt mức chuyển đổi thanh ghi (RT) • Chúng ta thƣờng bắt đầu với một giản đồ trạng thái Gửi Bridge Nhậ rdy_in A single-purpose processor that rdy_out n converts two 4-bit inputs, arriving one – Khác với thuật toán clock at a time over data_in along with a rdy_in pulse, into one 8-bit output on – Việc lặp lại chu trình thƣờng data_out along with a rdy_out pulse. data_in(4) data_out(8) chỉ chú ý đến chức năng nghĩa vấn Định đề • Ví dụ rdy_in=0 Bridge rdy_in=1 – Một bộ chuyển đổi bus biến rdy_in=1 WaitFirst4 RecFirst4Start RecFirst4End đổi một bus 4-bit sang bus 8- data_lo=data_in bit rdy_in=0 rdy_in=0 rdy_in=1 rdy_in=1 – Bắt đầu với FSMD WaitSecond4 RecSecond4Start RecSecond4End data_hi=data_in – Thƣờng đƣợc biết nhƣ mức FSMD rdy_in=0 Inputs chuyển đổi thanh ghi (RT) Send8Start rdy_in: bit; data_in: bit[4]; Send8End data_out=data_hi Outputs rdy_out=0 – Bài tập: hoàn thành thiết kế & data_lo rdy_out: bit; data_out:bit[8] rdy_out=1 Variables data_lo, data_hi: bit[4]; 47 Tối ƣu bộ xử lý chức năng đơn • Tối ƣu là nhiệm vụ tạo ra các giá trị của thông số thiết kế phù hợp nhất có thể • Các cơ hội tối ƣu – Chƣơng trình nguồn – FSMD – Tuyến dữ liệu – FSM 48 Tối ƣu chƣơng trình nguồn • Phân tích thuộc tính của chƣơng trình và tìm ra các khu vực có thể cải tiến đƣợc – Số phép tính – Kích thƣớc biến – Độ phức tạp về thời gian và không gian – Các toán hạng sử dụng • Ví dụ phép nhân và phép chia rất phức tạp về độ tính toán 49 Tối ƣu chƣơng trình nguồn (cont’) original program optimized program 0: int x, y; 0: int x, y, r; 1: while (1) { 1: while (1) { 2: while (!go_i); 2: while (!go_i); 3: x = x_i; // x must be the larger number 4: y = y_i; 3: if (x_i >= y_i) { 5: while (x != y) { 4: x=x_i; replace the subtraction 6: if (x < y) 5: y=y_i; operation(s) with modulo 7: y = y - x; } operation in order to speed else 6: else { up program 8: x = x - y; 7: x=y_i; } 8: y=x_i; 9: d_o = x; } } 9: while (y != 0) { 10: r = x % y; 11: x = y; 12: y = r; } 13: d_o = x; } GCD(42, 8) - 9 iterations to complete the loop GCD(42,8) - 3 iterations to complete the loop x and y values evaluated as follows : (42, 8), (43, 8), x and y values evaluated as follows: (42, 8), (8,2), (26,8), (18,8), (10, 8), (2,8), (2,6), (2,4), (2,2). (2,0) 50 Tối ƣu FSMD • Các trƣờng hợp có thể cải tiến – Ghép trạng thái • Trạng thái không có biến đổi (chuyển trạng thái) có thể bỏ đi • Trạng thái với các hoạt động độc lập có thể ghép – Tách trạng thái • Các trạng thái yêu cầu các toán hạng phức tạp (a*b*c*d) có thể tách thành các trạng thái nhỏ hơn để giảm kích thƣớc phần cứng – Lập lịch 51 Tối ƣu FSMD (cont.) int x, y; !1 FSMD ban đầu FSMD tối ưu 1: int x, y; 1 !(!go_i) Loại bỏ trạng thái 1 – quá trình chuyển có giá trị không 2: 2: đổi !go_i go_i !go_i x = x_i 2-J: 3: Ghép trạng thái 2 và trạng thái 2J – không có hoạt y = y_i 3: x = x_i động lặp trong nó 5: 4: y = y_i Ghép trạng thái 3 và 4 – hoạt động gán độc lập với các xy hoạt động khác 7: y = y -x 8: x = x - y 5: !(x!=y) x!=y 9: d_o = x 6: Ghép trạng thái 5 và 6 – việc chuyển sang trạng thái 6 x<y !(x<y) có thể thực hiện ở trạng thái 5 y = y -x x = x - y 7: 8: Loại bỏ trạng thái 5J và 6J – việc chuyển từ mỗi trạng 6-J: thái có thể thực hiện từ trạng thái 7 hoặc 8, tƣơng ứng 5-J: Loại bỏ trạng thai 1-J – chuyển từ trạng thái 1-J có thể d_o = x thực hiện trực tiếp từ trạng thái 9 9: 1-J: 52 Tối ƣu tuyến dữ liệu • Chia sẻ các bộ phận chức năng – Ghép từng chức năng, nhƣ thực hiện trong phần trƣớc, là không cần thiết – Nếu có cùng hoạt động xảy ra trong các trạng thái khác nhau, chúng có thể chia sẻ một đơn vị chức năng đơn • Các bộ phận đa chức năng – ALUs hỗ trợ một loạt các hoạt động, nó có thể chia sẻ các hoạt động trong các trạng thái khác nhau 53 Tối ƣu FSM • Mã hóa trạng thái – Là nhiệm vụ gán một mẫu bit duy nhất tới mỗi trạng thái trong một FSM – Kích thƣớc của thanh ghi trạng thái và mạch tổ hợp biến đổi – Có thể đƣợc xem xét nhƣ một vấn đề sắp xếp • Tối ƣu trạng thái – Là nhiệm vụ ghép các trạng thái tƣơng đồng thành một trạng thái duy nhất • Trạng thái tƣơng đồng nếu kết hợp tất cả các đầu vào, hai trạng thái tạo ra cùng đầu ra và cùng chuyển tới trạng thái kế tiếp 54 Tóm tắt • Bộ xử lý chức năng đơn chuyên biệt – Kỹ thuật thiết kế trực tiếp – Có thể đƣợc xây dựng để thực hiện các thuật toán – Thƣờng bắt đầu với FSMD – Công cụ CAD có thể trợ giúp đắc lực 55
File đính kèm:
- bai_giang_thiet_ke_he_thong_nhung_chuong_2_cau_truc_phan_cun.pdf