Thứ Bảy, 29 tháng 2, 2020

[Low Power] Các kỹ thuật thiết kế giúp giảm công suất tiêu thụ

Bài viết này trình bày khái niệm cơ bản về công suất thấp và các kỹ thuật giúp giảm công suất tiêu thụ trong thiết kế số. Trong đó, nội dung tập trung vào các kỹ thuật ở mức front-end, thiết kế kiến trúc và thiết kế RTL, có thể áp dụng được. Các kỹ thuật được ở mức back-end chỉ được mô tả cơ bản.

1) Tổng quan về khái niệm công suất thấp (low power)
Trên thị trường hiện nay, hiệu suất cao (high performance) và công suất thấp (low power) là hai yếu tố góp phần lớn vào khả năng thương mại của một vi mạch. Tùy ứng dụng cụ thể, việc tối ưu công suất tiêu thụ được hỗ trợ ở các mức độ khác nhau. Ví dụ:
  • Vi mạch dùng trong điện thoại yêu cầu mức tiêu thụ công suất ít hơn vi mạch dùng trong laptop. Bạn chắc chắn không muốn dùng một chiếc điện thoại mà phải đeo thêm một bình ắc quy để cấp nguồn cho nó.
  • Vi mạch dùng trong laptop yêu cầu mức tiêu thụ công suất ít hơn vi mạch dùng trong máy tính để bàn (desktop).
  • Vi mạch dùng trong máy tính để bàn yêu cầu mức tiêu thụ công suất ít hơn vi mạch dùng trong máy chủ (server).

Hình 1: Minh họa công suất tiêu thụ tăng dần từ trái qua phải tùy vào ứng dụng
Tiêu chí công suất thấp đã trở thành yếu tố ngày càng quan trọng và được dùng để so sánh giữa các chip cùng phân khúc thị trường. Đặc biệt, đối với các ứng dụng dùng Pin, thiết bị di động (smart watch, smart phone, laptop, …), thiết bị dùng nguồn năng lượng từ tín hiệu không dây (contactless card, RFID card,…), … thì việc tiêu thụ công suất thấp đến cực thấp (ultra-low power) hay siêu thấp (extreme-low power) là trở thành yêu cầu tối quan trọng.
Nếu hai dòng chip tương đương nhau về chức năng và hiệu suất thì chip nào tiêu thụ công suất ít hơn thì chip đó có hiệu quả sử dụng năng lượng (power efficient) tốt hơn.
Chú ý rằng, đối với một chip, “công suất thấp” phải đi đôi với “hiệu quả sử dụng năng lượng”. Một chip rơi vào một trong hai trường hợp sau đây đều bị đánh giá là có hiệu quả sử dụng năng lượng thấp :
  • Một chip tiêu thụ công suất rất thấp nhưng xử lý chậm chạp, hiệu năng kém hoặc không đủ đáp ứng nhu cầu ứng dụng.
  • Một chip xử lý cực nhanh, thời gian xử lý trung bình đáp ứng gần như 100% các yêu cầu của ứng dụng nhưng tiêu thụ công suất gấp nhiều lần các chip khác cùng loại.
Như vậy, việc thiết kế công suất thấp cần được cân bằng với hiệu quả xử lý. Điều này dẫn đến phạm vi ứng dụng các kỹ thuật công suất thấp trong chip sẽ khác nhau.
2) Công suất tiêu thụ của logic bên trong chip
Trước khi tìm hiểu các kỹ thuật tối ưu công suất, chúng ta cần biết mạch logic bên trong chip (cổng logic, Flip-Flop, Latch, …) sẽ tiêu thụ công suất như thế nào? và điều gì ảnh hưởng đến công suất tiêu thụ của các logic này? Hiểu được nguồn gốc của việc tiêu thụ công suất trong mạch logic giúp chúng ta giải thích được nguyên lý và ảnh hưởng của các kỹ thuật thiết kế công suất thấp.
Hình 2: Cấu tạo bên trong một chip (IC)
Chúng ta nhìn sâu vào bên trong một chip. Công suất tiêu thụ của một chip chủ yếu liên quan đến hoạt động của các CMOS. Về cơ bản, tổng công suất tiêu thụ (Ptotal) gồm:
Ptotal = Pactive + Pleakege = Pdynamic + Psc + Pleakage
Công suất tiêu thụ trong mạch logic chia làm hai loại:
  • Công suất tích cực (active power, Pactive) là năng lượng tiêu tiêu thụ khi mạch logic (cổng logic) chuyển mạch (switching).
    • Công suất động (dynamic power, Pdynamic), còn gọi là công suất chuyển mạch (switching power), là năng lượng cần có cho việc nạp hoặc xả trên tụ điện ở tải ngõ ra (load capacitance)
    • Công suất ngắn mạch (short circuit power, Psc) là năng lượng tiêu hao do dòng ngắn mạch từ nguồn (source) đến đất (ground) xuất hiện trong khi các CMOS chuyển trạng thái.
Hình 3: Cấu trúc CMOS của cổng đảo (inverter, NOT)
Hình 4: Minh họa các dòng sinh ra công suất tích cực khi xảy ra chuyển mạch trên một cổng đảo (a) Dòng nạp khi ngõ vào In chuyển mức logic từ 1 sang 0 (b) Dòng xả khi ngõ vào In chuyển mức logic từ 0 sang 1 (c) Dòng ngắn mạch trong khi chuyển mạch
  • Công suất tĩnh (static power), còn gọi là công suất rò (leakage power, Pleakage) là năng lượng hao tổn do dòng rò, sinh ra khi logic trong trạng thái ổn định (steady-state), không có sự chuyển mạch. Các nguồn dòng rò gồm:
    • I1: Dòng rõ dưới ngưỡng (Subthreshold leakage, ISUB), ký hiệu là Isub, là dòng từ cực D đến cực S. Dòng rò này sinh ra do phân cực yếu, dưới mức ngưỡng.
    • I2: (Drain-Induced Barrier Lowering – DIBL)
    • I2’: Dòng puchthrough (Channel punchthrough current)
    • I3: Dòng rò đường ống trực tiếp từ cực G (Gate direct-tunneling leakage current) sinh ra do độ dày lớp “gate oxide” mỏng nên có các điện tử di chuyển qua lại giữa cực G và chất nền.
    • I4: Dòng rò cực D do cảm ứng cực G (Gate-induced drain leakage current, GIDL).
    • I5: Dòng rò ngược trên lớp tiếp giáp p-n (reverse-biased junction leakage current), còn gọi là dòng rò diode. Dòng này chảy từ cực S hoặc D đến chất nền (substrate).
    • I6: Dòng cực cổng G do tiêm chất mang nóng (Gate current due to hot-carrier injection)
Hình 5: Các loại dòng rò trên CMOS
Các kỹ thuật giúp giảm công suất tiêu thụ của một vi mạch được gọi chung là “kỹ thuật thiết kế công suất thấp” (low power design technique hoặc low power technique). 
Mỗi kỹ thuật thiết kế công suất thấp có mức ảnh hưởng khác nhau, có kỹ thuật giúp giảm công suất tiêu thụ đáng kể, có kỹ thuật chỉ giúp giảm ít. Mỗi kỹ thuật cũng có mục tiêu giảm công suất khác nhau, có kỹ thuật giúp giảm công suất tích cực, có kỹ thuật giúp giảm công suất sinh ra do dòng rò. 
3) Khả năng giảm công suất tiêu thụ 
3.1) Tổng quan 
Căn cứ trên các loại công suất tiêu thụ đã trình bày, việc giảm công suất tiêu thụ dựa trên: 
  • Giảm công suất tích cực (Pactive) 
  • Giảm công suất dò dòng rò (Pleakage) Công nghệ có kích thước lớn, công suất dòng rò chỉ chiếm một tỷ lệ rất nhỏ so với công suất tích cực. Công nghệ có kích thước càng thấp công suất dòng rò chiếm tỷ lệ đáng kể.
Hình 6: Tỷ lệ tiêu thụ năng lượng giữa công suất động và công suất dòng rò theo công nghệ
3.2) Khả năng giảm công suất tích cực 
3.2.1) Giảm công suất động (Pdynamic)
Việc tiêu thụ công suất động trên một mạch logic (một cổng, một nhóm mạch logic hoặc một chip) là tổng của công suất tiêu thụ nhất thời (Transient Power Consumtion, PT) và công suất tiêu thụ trên tải điện dung (Capacitive-Load Power Consumption, PL).
Công suất tiêu thụ nhất thời được tính theo công thức sau:
Trong đó: 
  • Nsw là số bit chuyển mạch. Nếu chỉ có một bit chuyển mạch thì Nsw=1
  • Cpd là điện dung của việc tiêu tán năng lượng động. Nó là điện dung nội được tính khi không tải và ngõ ra không chuyển mạch. 
  • Vdd là điện áp nguồn 
  • fi là tần số tín hiệu ngõ vào
Công suất tiêu thụ trên tải điện dung được tính theo công thức sau:
Trong đó: 
  • Nsw là số ngõ ra chuyển mạch. Nếu chỉ có một bit chuyển mạch thì Nsw=1
  • CL là điện dung tải ở ngõ ra. Đây là điện dung ngoài 
  • Vdd là điện áp nguồn 
  • fo là tần số tín hiệu ngõ ra 
Các công thức trên cho thấy rằng việc tiêu thụ công suất có thể được giảm bằng cách: 
  • Giảm Nsw bằng cách giảm số bit trên các tín hiệu. 
  • Giảm CL bằng cách giảm số lượng fanout, số lượng kết nối từ ngõ ra của một cổng logic đến ngõ vào của các cổng logic khác. 
  • Giảm Cpd là phần điện dung ký sinh trong linh kiện CMOS nên phụ thuộc công nghệ nên không giảm được Cpd trên mỗi linh kiện CMOS mà chỉ có thể giảm được tổng điện dung kí sinh bằng cách tối ưu tài nguyên thiết kế. 
  • Giảm Vdd bằng cách giảm điện áp sử dụng. Giảm fi fo bằng cách giảm số lượng chuyển đổi mức logic, chuyền từ 0 sang 1 hoặc từ 1 xuống 0, trên các tín hiệu, bao gồm cả tín hiệu clock và các tín hiệu khác.
3.2.2) Giảm công suất ngắn mạch (Psc)
Mạch CMOS bao gồm một phần nối lên nguồn Vdd (pull-up), một phần nối đất (pull-down). Khi chuyển mạch, trong một khoảng thời gian rất ngắn, cả hai phần cùng dẫn làm cho hiện tượng ngắn mạch sẽ xảy ra. Dòng Isc sinh ra chảy từ nguồn xuống đất gọi là dòng ngắn mạch gây tiêu hao năng lượng.
Hình 7: Cấu trúc mạng CMOS của một cổng NAND
Công suất ngắn mạch được tính như sau:
Trong đó: 
  • Nsw là số lượng cổng chuyển mạch. Nếu chỉ có một cổng thì Nsw=1
  • β (beta) là độ lợi của CMOS 
  • Vdd là điện áp nguồn 
  • Vt là điện áp ngưỡng 
  • f là tần số chuyển mạch, số lượng chuyển mạch trong 1 giây.
  • τ (tô) là gian chuyển cạnh lên/xuống của ngõ vào.
Hình 8: Thời gian xuất hiện hiện tượng ngắn mạch trên cổng đảo
Việc giảm công suất ngắn mạch dựa trên các thông số sau:
  • Giảm Nsw bằng cách tối ưu tài nguyên giảm số lượng cổng.
  • Giảm f bằng cách giảm số lần chuyển trạng thái ở các ngõ vào.
  • Giảm beta, phụ thuộc vào công nghệ.
  • Giảm Vdd và tăng Vt phụ thuộc vào công nghệ và khâu thiết kế vật lý.
  • Giảm τ (tô), phụ thuộc vào công nghệ.
Trong các yếu tố trên, khâu thiết kế front-end chỉ có thể tác động đáng kể vào 2 yếu tố là Giảm Nsw và giảm f.

3.3) Khả năng giảm công suất dòng rò

Dòng rò luôn tồn tại khi mạch logic được cấp nguồn. Nó là nguyên nhân tiêu tốn năng lượng đáng kể khi mạch logic không tích cực. Hai thông số ảnh hưởng lớn đến dòng rò là:
  • Điện áp nguồn Vdd
  • Điện áp ngưỡng Vt
Ở đây, tác giả không xét đến yếu tố công nghệ hay cấu trúc CMOS mà chỉ xét đến những yếu tố mà người thiết kế có thể tác động được khi sử dụng một thư viện công nghệ cố định.
4) Kỹ thuật thiết kế công suất thấp được áp dụng ở khâu nào?
Để giảm công suất trong một vi mạch, các kỹ thuật tối ưu công xuất cần được áp dụng đồng bộ từ khâu front-end, đến khâu back-end và công nghệ sử dụng. Ở đây, tác giả phân các mức thiết kế như sau:
  • Thiết kế kiến trúc hệ thống: thiết kế cấu trúc tổng quan, phân tích hệ thống, phương pháp và cơ chế giúp giảm công suất toàn chip và từng miền trong chip.
  • Thiết kế RTL: Phân tích các phương pháp giúp giảm công suất trong một thành phần, một khối hoặc một IP cụ thể
  • Thiết kế vật lý: Các kỹ thuật liên quan đến tổng hợp và layout
  • Công nghệ: Các kỹ thuật liên quan đến việc chỉnh sửa và tối ưu cell và CMOS của thư viện công nghệ (thư viện dùng để chế tạo và sản xuất chip)
Hình 9: Các mức thiết kế
Một số kỹ thuật thiết kế công suất thấp cần có sự phối hợp thực hiện ở nhiều mức thiết kế nhưng một số kỹ thuật chỉ áp dụng ở một mức thiết kế nào đó. Bài viết này tập trung vào các kỹ thuật có thể áp dụng trong thiết kế kiến trúc hệ thống và thiết kế RTL thuộc khâu front-end.
Thiết kế kiến trúc hệ thống quyết định đến công suất tiêu thụ toàn chip. Công suất tiêu thụ có thể giảm tối đa bao nhiêu là tùy thuộc vào bước này. Nó sẽ ảnh hưởng đến khả năng áp dụng các kỹ thuật giảm công suất ở các mức thiết kế khác. Ví dụ, ở mức thiết kế kiến trúc, một miền nào đó được quyết định “phải luôn được cấp clock” trong suốt quá trình hoạt động thì kỹ thuật “clock gating” không được dùng để on/off clock cho toàn miền để giảm công suất tích cực.
Thiết kế RTL là thiết kế chi tiết các thành phần logic, lõi IP trong một chip. Dựa trên yêu cầu chung của thiết kế kiến trúc, bước này áp dụng các kỹ thuật phù hợp để giảm công suất ở phạm vi cục bộ ở từng thành phần logic. Ví dụ, lõi IP A thuộc miền luôn được cấp clock tuy nhiên các block trong lõi IP có thể được áp dụng kỹ thuật clock gating để on/off clock cho từng thành phần dựa trên yêu cầu hoạt động cụ thể. Bên cạnh đó, RTL code của các logic bên trong từng block sẽ được mô tả theo hướng cho phép bước “thiết kế vật lý” có thể chèn các cell clock gating để on/off clock.
Thiết kết vật lý được hiểu là các bước từ tổng hợp (synthesis) xuống đến layout. Cũng căn cứ trên yêu cầu chung của thiết kế kiến trúc và chức năng cụ thể của thiết kế RTL, bước này áp dụng các kỹ thuật phù hợp đế tối ưu công suất tiêu thụ. Ví dụ, bước synthesis sẽ quyết định việc chèn hay không chèn các cell clock-gating.
Hình 10: Minh họa sự ảnh hưởng của các mức thiết kế đến kỹ thuật clock gating
Trong hình minh họa trên, kỹ thuật clock gating không được dùng để tắt clock của miền C vì miền này yêu cầu luôn cấp clock trong suốt quá trình hoạt động. Tuy nhiên ở mức thiết kế RTL, các thành phần logic trong miền C có thể được áp dụng kỹ thuật clock gating để tắt clock các FF khi không cần cập nhật giá trị mới.
5) Một số phương pháp giảm công suất tiêu thụ
5.1) Phân chia miền clock (Multi clock domain)
5.1.1) Mô tả kỹ thuật
Phân chia miền clock là kỹ thuật sử dụng nhiều nguồn clock, có thể đồng bộ hoặc bất đồng bộ, có tần số khác nhau trong một vi mạch. Khi áp dụng kỹ thuật này, giao tiếp giữa các miền clock cần có cơ chế bắt tay hoặc đồng bộ. Các kỹ thuật đồng bộ giữa các miền clock bất đồng bộ có thể được tham khảo ở đây.
Hình 11: Kỹ thuật phân chia miền clock (multi clock domain)
Trong một vi mạch, không phải tất cả các thành phần đều cần hoạt động với tần số cao nhất. Mỗi thành phần phải được xem xét trên hoạt động tổng thể và ứng dụng để quyết định tần số hoạt động thực tế. Tần số của clock chỉ cần được cấp đủ để một thành phần chức năng đảm bảo tốc độ xử lý với các ứng dụng yêu cầu.
Bên cạnh đó, trong một thành phần chức năng (một lõi IP, một khối), tất cả các giao tiếp và logic không cần phải hoạt động cùng một tần số. Tùy vào thực tế ứng dụng, mỗi phần logic cũng có thể được cấp một tần số khác nhau.
Ví dụ, một lõi IP truy xuất bộ nhớ SRAM có hai đường giao tiếp, một giao tiếp AXI dùng để truy xuất bộ nhớ và một giao tiếp APB dùng để cấu hình hoạt động, kiểm tra trạng thái. Việc truy xuất bộ nhớ là một hoạt động thường xuyên và cần tốc độ nhanh nên cần tần số cao. Việc cấu hình hoạt động và kiểm tra trạng thái thường chỉ thực hiện vài lần, trước khi hoạt động hoặc trong các trường hợp đặc biệt chứ không thường xuyên nên không cần tần số cao.
Hình 12: Phân chia miền clock trong một lõi IP
5.1.2) Khả năng giảm công suất
Kỹ thuật này giúp giảm số lần chuyển mạch bằng cách sử dụng các clock chậm cho thành phần không yêu cầu tốc độ xử lý cao. Việc sử dụng clock chậm hơn giúp:
  • Giảm chuyển mạch trên các FF/Latch do thay đổi mức logic của xung clock hoặc thay đổi mức logic trên các ngõ vào của FF.
  • Giảm chuyển mạch trên các mạch tổ hợp sử dụng ngõ ra của các FF/Latch.
Khi tín hiệu clock chuyển mức logic, các logic của FF sẽ bị chuyển mạch làm tiêu hao năng lượng. Sử dụng clock có tần số càng cao thì hoạt động chyển mạch càng xảy ra nhiều và FF tiêu thụ năng lượng càng lớn. Vì vậy, việc giảm tần số giảm công suất tiêu thụ trên các FF.
Hình 13: Cấu trúc của một Flip-Flop (FF)
Hình trên là mạch nguyên lý và hoạt động của một FF khi clock CK ở mức logic 0 và mức logic 1. Việc chuyển mức logic của clock CK sẽ gây chuyển mạch liên tục trên các cổng truyền T1, T2, T3 và T4. Hoạt động của FF và Latch được giải thích chi tiết ở bài viết này.
Hình 14: Ảnh hưởng của tần số xung clock đến khả năng giảm công suất
Đối với các mạch tổ hợp sử dụng ngõ ra của các FF/Latch thì tốc độ chuyển mạch tối đa bằng tần số xung clock. Giả sử ngõ ra của các FF luôn thay đổi mức logic theo cạnh lên xung clock thì mạch tổ hợp sử dụng các ngõ ra này cũng thay đổi tối đa theo các cạnh lên xung clock. Như vậy, việc giảm tần số xung clock giúp giảm tốc độ chuyển mạch trên các mạch tổ hợp (ví trí 2 trong hình minh họa 14).
Bên cạnh đó, ngõ ra của các FF (ví trí 3 trong hình minh họa 14) và mạch tổ hợp sẽ tiếp tục được nối đến ngõ vào của các FF khác. Vì vậy, giảm tần số hoạt động sẽ góp phần giảm chuyển mức logic trên các ngõ vào FF (chân D và chân reset), từ đó, giúp giảm chuyển mạch trên FF.
5.1.3) Công việc ở các mức thiết kế
Mức kiến trúc hệ thống:
  • Phân tích và phân chia các miền clock
  • Phân tích cấu trúc cây clock trong hệ thống
Mức thiết kế RTL:
  • Thiết kế các bộ điều khiển clock, bộ chia clock
  • Kết nối đúng nguồn clock đến từng thành phần
  • Áp dụng các kỹ thuật đồng bộ trên các kết nối giữa các miền clock bất đồng bộ
Mức thiết kế vật lý:
  • Thực hiện tổng hợp và layout tối ưu theo từng miền clock
  • Đảm bảo không có vi phạm timing trong từng miền clock
5.2) Hiệu chỉnh tần số clock (clock frequency scaling)
Hiệu chỉnh tần số là kỹ thuật thay đổi tần số clock cấp cho các thành phần logic để phù hợp với chế độ và điều kiện hoạt động của chip. Việc thay đổi tần số có thể thực hiện thông qua các thông số cấu hình cố định (static) hoặc tự động trong quá trình hoạt động (dynamic).
Hiệu chỉnh tần số tĩnh (static frequency scaling): Tần số clock cấp cho một thành phần logic có thể được cấu hình tùy thuộc vào chế độ hoạt động. Một tần số cố định sẽ được cấp cho thành phần logic sau khi việc cấu hình hoàn tất.
Hiệu chỉnh tần số động (dynamic frequency scaling): Tần số clock cấp cho một thành phần logic có thể tự động điều chỉnh dựa trên điều kiện hoạt động thực tế như nhiệt độ, điện áp, … Ví dụ, để tránh quá nhiệt, một chip sẽ được tích hợp cảm biến nhiệt độ bên trong. Khi nhiệt độ quá ngưỡng cho phép, tần số clock của một vài thành phần như CPU sẽ bị giảm. Lúc này, hiệu năng xử lý chung của chip sẽ bị giảm nhưng vẫn đảm hoạt động đúng chức năng.
Tham khảo công nghệ SpeedStep của Intel, đây là công nghệ cho phép quản lý năng lượng CPU hiệu quả thông qua việc hỗ trợ nhiều mức tần số và điện áp hoạt động khác nhau.
Hình 15: Bảng liên hệ giữa tần số hoạt động tối đa và điện áp sử dụng trên CPU Pentium M của Intel

5.3) Tối ưu tài nguyên (resource) 
5.3.1) Mô tả kỹ thuật 

Tối ưu tài nguyên là kỹ thuật cần được xem xét hàng đầu trong tất cả các kỹ thuật giảm công suất tiêu thụ. Tối ưu tài nguyên nghĩa là loại bỏ hoặc giảm bớt các khối chức năng và cổng logic nhưng vẫn đảm bảo yêu cầu kỹ thuật chung của chip. 
Tài nguyên ở đây có thể được quy về đơn vị cổng (gate) để định lượng. Một đơn vị cổng là một cổng NAND 2 ngõ vào, 1 ngõ ra. Ví dụ, một chip có tổng tài nguyên là 1 triệu cổng không có nghĩa là chip được cấu tạo từ 1 triệu cổng NAND mà nó được cấu tạo bằng nhiều loại cổng logic khác nhau nhưng được quy tương đương với 1 triệu cổng NAND. 
Tùy vào tình huống cụ thể, một số phương pháp sau đây có thể được áp dụng: 
  • Tối ưu cấu trúc và thuật toán: Một chức năng có thể được thực hiện bằng nhiều cách khác nhau. Mỗi cách thực hiện sẽ có số lượng tài nguyên sử dụng tối thiểu khác nhau. Việc lựa chọn cấu trúc và thuật toán quyết định lớn đến khả năng tối ưu tài nguyên. 
  • Chia sẻ tài nguyên: nhiều chức năng dùng chung một khối chức năng, mạch tổ hợp hay mạch tuần tự trong một thiết kế. 
  • Loại bỏ logic không sử dụng: xóa bỏ phần logic không sử dụng trong các thiết kế ở mức RTL code hoặc gate netlist. 
Về việc tối ưu cấu trúc, các bạn có thể tham khảo bài viết về lõi IP mã hóa AES-128 để thấy được sự ảnh hưởng trong việc lựa chọn cấu trúc và thuật toán. Trong bài viết này, tài nguyên mạch tổ hợp có thể giám đến 50% khi thuật toán tính S-BOX được thực hiện theo phương pháp biến đổi toán học thay vì dùng MUX. 
Một số trường hợp phổ biến khác được sử dụng thường xuyên đó là: 
  • Sử dụng số bit mã hóa tối thiểu. Ví dụ, một máy trạng thái (FSM) có 6 trạng thái thì dùng 3 bit để mã hóa.
  • Dùng phương pháp dịch để thực hiện các phép nhân với 2^n. Ví dụ, việc nhân một số được biểu diễn bằng 4 bit với 4 tương đương với việc dịch trái 2 bit.
Hình 16: Dùng dịch trái thay cho bộ nhân trong các phép nhân với 2^n
Hình trên cho thấy việc thực hiện phép nhân một số 4 bit với giá trị 4 (2^2) bằng phương pháp dịch trái sẽ không cần dùng bất cứ logic nào. 
Một ví dụ khác, một khối chức năng nhận nối tiếp từng gói 8 bit nhị phân rồi chuyển đổi từng gói 8 bit thành mã Gray trước khi ghép lại thành một gói 512 bit gửi đến khối khác. Khối này có thể được thiết kế như sau: 
  • Sử dụng 64 bộ chuyển đổi mã Gray để biến đổi cùng lúc 512 bit.
  • Sử dụng 1 bộ chuyển đổi mã Gray để biến đối nối tiếp từng nhóm 8 bit. Cách này tiết kiệm tài nguyên và nhiều ưu điểm hơn cách đầu.
Hình 17: Một ví dụ về việc thay đổi cấu trúc để tối ưu tài nguyên
Về kỹ thuật chia sẻ tài nguyên, kỹ thuật này thường áp dụng trong trường hợp: 
  • Nhiều chức năng sử dụng các thành phần logic tương tự nhau nhưng các thành phần này không hoạt động cùng một thời điểm. 
  • Ưu tiên chia sẻ phần logic có tài nguyên lớn hơn. Trong một thiết kế, có thành phần dùng nhiều cổng logic, có thành phần dùng ít cổng logic hơn. Nếu không thể thực hiện phương pháp chia sẻ tài nguyên cho các thành phần này cùng lúc thì ưu tiên áp dụng cho phần tốn nhiều logic.
Ví dụ, một khối chức năng thực hiện nhân và cộng các giá trị 8 bit từ nhiều nguồn ngõ vào và chỉ đưa ra một kết quả tại một thời điểm. Khối này có thể được thiết kế dùng “2 bộ nhân, 2 bộ cộng và 1 MUX” hoặc “1 bộ nhân, 1 bộ cộng và 3 MUX”. Vì bộ nhân và bộ cộng 8 bit có tài nguyên lớn hơn MUX, nên cách “1 bộ nhân, 1 bộ cộng và 3 MUX” được lựa chọn để tối ưu tài nguyên hiệu quả.
Hình 18: Chia sẻ tài nguyên mạch logic bộ nhân và cộng
RTL code của cấu trúc dùng 2 bộ nhân và 2 bộ cộng:
always_comb begin
  if (Sel)
    MulOut = MulInA * MulInB + AddIn1;
  else
    MulOut = MulInC * MulInD + AddIn2;
end
RTL code của cấu trúc dùng 1 bộ nhân và 1 bộ cộng:
always_comb begin
  MulIn1 = Sel? MulInA: MulInC;
  MulIn2 = Sel? MulInB: MulInD;
  AddIn = Sel? AddIn1: AddIn2;
  MulOut = MulIn1 * MulIn2 + AddIn;
end
Kết quả tổng hợp trên cùng một linh kiện FPGA với Quartus II, số lượng phần tử logic khi dùng 1 bộ MUX là 257 trong khi dùng 3 bộ MUX là 142.
(a) Kết quả tổng hợp cho cấu trúc dùng 2 bộ nhân và 2 bộ cộng
(b) Kết quả tổng hợp cho cấu trúc dùng 1 bộ nhân và 1 bộ cộng
Hình 19: Kết quả tổng hợp ví dụ hình 18 trên FPGA
Một ví dụ khác, một FSM có 2 trạng thái:
  • PRE_DELAY: giữ trong 89 chu kỳ xung clock trước khi chuyển sang POST_DELAY
  • POST_DELAY: giữ trong 120 chu kỳ xung clock trước khi chuyển sang PRE_DELAY.
Trường hợp này, một bộ đếm 7 bit được dùng để đếm số chu kỳ ở mỗi trạng thái thay vì dùng hai bộ đếm, 1 bộ đếm 6 bit dùng cho PRE_DELAY và một bộ đếm 6 bit dùng cho POST_DELAY.
Hình 20: Chia sẻ tài nguyên bộ cộng
Về việc loại bỏ logic không sử dụng, trong một số trường hợp, nhiều logic được gán giá trị ngõ vào cố định nên ngõ ra không bao giờ thay đổi trạng thái trong suốt quá trình hoạt động. Phần logic này có thể được tối ưu bằng một trong hai cách: 
  • Xóa bỏ phần code không dùng trong các file RTL code
  • Giữ nguyên RTL code nhưng cho phép trình tổng hợp (compiler) tối ưu và xóa bỏ các logic không sử dụng 
Trên thực tế, việc xóa bỏ một phần code đôi khi không khả thi, đặc biệt là đối với các phần code phức tạp hoặc code được tái sử dụng từ dự án trước hoặc code được phát triển bởi bên thứ 3 (người khác, công ty khác), vì nó gây rủi ro về việc sinh ra bug và tốn thời gian để kiểm tra lại thiết kế. 
Việc cho phép trình tổng hợp xóa bỏ các logic không sử dụng hoàn toàn phụ thuộc vào chiến lược tối ưu và yêu cầu (rule) chung của khâu back-end. Nếu không có sự thảo luận giữa người thiết kế và người làm back-end, người thiết kế sẽ không biết chắc phần logic không sử dụng có được xóa bỏ hay không. 
5.3.2) Khả năng giảm công suất 
Việc tối ưu tài nguyên giúp loại bỏ và giảm bớt các phần tử tiêu thụ điện không cần thiết nên đương nhiên giúp giảm cả công suất tích cực và công suất do dòng rò. 
5.3.3) Mức thiết kế 
Mức thiết kế kiến trúc: 
  • Phân tích và lựa chọn cấu trúc, thuật toán 
  • Phân chia khối chức năng 
Mức thiết kế RTL:
  • Phân tích và tối ưu mạch logic 
Mức thiết kế vật lý: Cho phép tối ưu và xóa bỏ các thành phần logic không sử dụng, ví dụ như thành phần không bao giờ thay đổi giá trị, các thành phần logic cùng chức năng, …
Đối với kỹ thuật tối ưu tài nguyên thiết kế, một điểm quan trọng cần nắm rõ là trình tổng hợp chỉ có khả năng tối ưu trên cấu trúc logic được người thiết kế mô tả bằng RTL code chứ không có khả năng thay đổi cấu trúc hoặc chức năng logic hiện có thành cấu trúc hoàn toàn khác nhưng có thể thực hiện cùng chức năng. Bài viết về lõi IP AES-128 là một ví dụ, nếu bạn thiết kế S-BOX theo cách dùng MUX thì trình tổng hợp chỉ tối ưu mạch MUX nhưng bản chất vẫn là MUX chứ không thể chuyển tối ưu thành một phương pháp khác như cách biến đổi số học. Như vậy, khả năng tối ưu của một thiết kế phụ thuộc lớn vào thiết kế mức kiến trúc và RTL.
Hình 21: Quá trình tổng hợp RTL code thành gate netlist
Trong hình minh họa trên, việc tối ưu (optimization) của trình tổng hợp là dựa trên cấu trúc có sẵn mô tả bởi RTL chứ không phải thay đổi cấu trúc của mạch logic.
5.4) Clock gating 
5.4.1) Mô tả kỹ thuật 
Đây là một kỹ thuật phổ biến giúp giảm công suất động. Nguyên lý của kỹ thuật này là tắt nguồn clock trên các FF khi chúng không hoạt động hoặc không cần cập nhật giá trị mới. 
Trong thiết kế thông thường, một số lượng lớn các FF thường chỉ cập nhật giá trị mới trong một điều kiện nhất định. Vì vậy, khi FF không cập nhật giá trị mới, clock trên FF có thể được tắt. Lúc này, FF vẫn được cấp nguồn và giữ nguyên giá trị hiện tại. Kỹ thuật này thường được mô tả bằng mô hình thay thế đơn giản như hình minh họa sau đây.
Hình 22: Phương pháp clock gating
Tuy nhiên, hình trên chỉ mang ý nghĩa minh họa chứ không ứng dụng trong thực tế. Giả sử, en là tín hiệu đồng bộ theo cạnh lên clock clk và chỉ tích cực một chu kỳ, waveform của tín hiệu gated_clk có thể như sau.
Hình 23: Glitch có thể sinh ra trên ngõ ra của clock gating cell khi chỉ dùng một cổng AND đơn thuần
Trong waveform trên, khi enclk được AND với nhau đơn thuần, ngõ ra cổng AND là gated_clk có thể xuất hiện cạnh lên không mong muốn làm ngõ ra Q cập nhật một giá trị không mong muốn. Bên cạnh đó, cạnh lên mong muốn chỉ là một glitch. Trên thực tế, cấu trúc của mạch logic tắt clock dùng thêm một Latch tích cực theo mức logic thấp của clock. Mạch nguyên lý này sẽ được đóng gói thành một cell chuẩn trong thư viện công nghệ gọi là ICGC (Integrated Clock Gating Cell). Cell này sẽ được chèn vào netlist trong quá trình tổng hợp.
Hình 24: Mô hình một ICGC dùng Latch và AND
Theo hình minh họa trên đây, Latch nhạy theo mức, tích cực theo mức thấp clk. Khi clk mức thấp, Latch sẽ bắt giá trị của tín hiệu en và tạo ra tín hiệu latched_en tích cực theo cạnh xuống clk. Tín hiệu này khi AND với clock sẽ tạo ra được gated_clk có cạnh lên và độ rộng xung như mong muốn. 
5.4.2) Khả năng giảm công suất 
Clock gating giúp giảm công suất động vì nó ngăn việc chuyển mức logic của clock tác động đến FF. 
5.4.3) Mức thiết kế 
Thiết kế cấu trúc: Quyết định cơ chế và phương pháp áp dụng clock gating mức khối. Một cách tổng quan, mức thiết kế này quyết định khi nào một khối được cấp clock. Điều này có thể được thực hiện bằng nhiều cách: 
  • Dùng một khối độc lập để quản lý các nguồn clock 
  • Tích hợp phần logic quản lý nguồn clock vào chung với khối tạo clock của chip 
Mỗi khối chức năng có chứa phần logic quản lý nguồn clock riêng Chức năng chung của phần logic quản lý nguồn clock là tạo ra tín hiệu cho phép (enable). Tín hiệu này chỉ tích cực để cho phép cấp clock đến một khối trong những điều kiện hoạt động nhất định.
Hình 25: Quản lý tắt/mở clock cho từng khối chức năng
Trong hình minh họa trên đây, khối clock management tạo ra các tín hiệu cho phép clk_enA/B/C để quyết định khi nào cho phép clock clk được cấp cho khối A/B/C
Thiết kế RTL: Thiết các phần logic quản lý nguồn clock và thực hiện việc chèn các clock gating cell (ICGC) ở những vị trí đã được chỉ định từ mức thiết kế kiến trúc. Việc chèn ICGC chỉ đơn giản là chọn ICGC phù hợp từ thư viện công nghệ và kết nối chúng trong RTL code. Ví dụ, ICGC sau đây được chọn để sử dụng.
Hình 26: Một ICGC cell từ thư viện công nghệ
ICGC này có hai tín hiệu cho phép là TE và E. TE là Test Enable, đây là chân cho phép clock dùng trong chế độ test (chế độ DFT). E là Enable, đây là chân cho phép clock trong chế độ hoạt động thông thường. Một trong hai tín hiệu này bằng 1 thì Q sẽ được nối đến CK. Giả sử, thiết kế không dùng chế độ test. Các ICGC trong hình 25 được thực hiện trong RTL code như sau: 
GCKES ICGCA (.TE(1’b1), .E(clk_enA), .CK(clk), .Q(gated_clkA));
GCKES ICGCB (.TE(1’b1), .E(clk_enB), .CK(clk), .Q(gated_clkB));
GCKES ICGCC (.TE(1’b1), .E(clk_enC), .CK(clk), .Q(gated_clkC));
GCKES ICGCD (.TE(1’b1), .E(clk_enD), .CK(clk), .Q(gated_clkD)); 
Nó đơn giản chỉ là cách instance một module. 
Vấn đề của cách làm này là khi mô phỏng mức RTL code, trình mô phỏng không hiểu các thành phần của thư viện tổng hợp nên các cell này sẽ dùng một mô hình tương đương mức RTL như sau: 
module GCKES (
  input logic TE,
  input logic E,
  input logic CK,
  output logic Q
  );
logic qLatch;
always_latch begin
  if (~CK)
    qLatch <= TE | E;
end
assign Q = qLatch & CK;
endmodule
Đối với từng mạch tuần tự dùng FF bên trong các khối, chúng cần được thiết kế và viết RTL code theo mô hình “có thể chèn clock gating cell” chứ không trực tiếp chèn các clock gating cell.
Hình 27: Mô tả RTL code theo dạng có thể chèn được clock gating cell
Thiết kế vật lý: Thực hiện chèn clock gating cell tại những mạch tuần tự “có thể chèn clock gating cell” đã mô tả trong RTL code.
5.5) Power gating
5.5.1) Mô tả kỹ thuật

Power gating là kỹ thuật tắt nguồn các phần tử logic không sử dụng trong một vi mạch. Kỹ thuật này giúp giảm công suất tiêu thụ trên các mạch logic một cách triệt để nhất nhưng việc thực hiện nhiều phức tạp hơn các kỹ thuật khác.
Để ngắt nguồn một thành phần logic, các PMOS có điện áp ngưỡng cao được mắc giữa nguồn Vdd và thành phần logic, NMOS có điện áp ngưỡng cao được mắc giữa đất Vss và thành phần logic. Điều khiển tắt/mở các CMOS này sẽ giúp tắt/mở nguồn thành phần logic. Trong thực tế, việc ngắt nguồn có thể chỉ cần dùng PMOS mắc giữa nguồn Vdd và thành phần logic hoặc chỉ dùng NMOS hoặc dùng cả hai.
Hình 28: Kỹ thuật power gating
Hai vấn đề quan trọng cần phải giải quyết khi áp dụng kỹ thuật này là: 
  • Phần được ngắt nguồn không ảnh hưởng đến hoạt động của các khối khác 
  • Trong một số trường hợp, hệ thống phải hoạt động trở lại ở trạng thái mong muốn sau khi cấp nguồn lại cho các phần tử bị ngắt mà không phải khởi tạo lại toàn bộ hệ thống. 
Trong một chip, các thành phần logic có kết nối với nhau qua các input và output. Việc ngắt nguồn một thành phần nào đó làm cho các tín hiệu output của nó không được lái một mức logic xác định. Điều này làm hoạt động của các khối khác bị sai hoặc không thể hoạt động. Vì vậy, cần phải có một thành phần duy trì mức logic xác định, 0 hoặc 1, trên ngõ ra của các phần tử bị ngắt nguồn. Thành phần này gọi là các khối cách ly (isolation block, isolation cell). Isolation cell có thể là một trong các loại sau: 
  • Loại clamp 1: giữ ngõ ra của cell mức 1 
  • Loại clamp 0: giữ ngõ ra của cell mức 0
  • Loại Latch: giữ lại mức logic trước khi ngắt nguồn để lái đến ngõ ra của cell
Hình 29: Chèn isolation cell trên các tín hiệu ngõ ra của khối được ngắt nguồn
Một cấu trúc loại Latch của isolation cell của AMCC được thể hiện dưới đây.
HÌnh 30: Một cấu trúc isolation cell loại Latch (đây là đăng ký sáng chế của AMCC, xem thêm ở phần tài liệu tham khảo)
Trong một số chế độ tiết kiệm năng lượng, thành phần được ngắt nguồn phải khôi phục lại trạng thái hoạt động tối thiểu sau khi được cấp nguồn trở lại mà không phải khởi tạo lại toàn bộ hệ thống. Muốn thực hiện được điều này, trước khi ngắt nguồn, các trạng thái hoạt động tối thiểu phải được lưu lại trong một thành phần nào đó. Tất nhiên, thành phần này luôn được cấp nguồn.
Hình 31: Trình tự hoạt động của quá trình ngắt và cấp nguồn lại một khối chức năng khi cần khôi phục lại trạng thái ban đầu
5.5.2) Khả năng giảm công suất 
Power gating là kỹ thuật không chỉ giúp loại bỏ công suất động mà còn giảm công suất dòng rò hiệu quả vì các phần tử tiêu thụ điện không được cấp nguồn. 
5.5.3) Mức thiết kế 
Mức thiết kế kiến trúc: 
  • Xây dựng các chế độ tiết kiệm năng lượng tiêu thụ, ví dụ như chế độ standby, chế độ sleep, chế độ deep sleep, … 
  • Quyết định khối logic nào được ngắt nguồn trong từng chế độ tiết kiệm năng lượng 
  • Xây dựng cơ chế và trình tự ngắn nguồn các khối. 
Mức thiết kế RTL: Thiết kế mạch logic chi tiết điều khiển quá trình ngắt nguồn và cấp nguồn cho từng khối logic 
Mức thiết kế vật lý: Thực hiện chèn các isolation cell giữa miền có thể bị ngắt nguồn và các miền khác. 
5.6) Một số kỹ thuật khác 
Các kỹ thuật này được thực hiện chủ yếu ở mức thiết kế vật lý và mức công nghệ chế tạo nên chỉ được nêu ngắn gọn với mục đích tham khảo 
5.6.1) Phân chia miền điện áp (multi voltage hoặc multi power domain) 
Kỹ thuật này thực hiện cung cấp điện áp khác nhau cho các thành phần logic. Điện áp cao chỉ cấp cho các miền cần tấn số xử lý cao. Các miền sử dụng tần số thấp hơn có thể được cấp điện áp thấp hơn sẽ giúp giảm đáng kể công tích cực. Lưu ý, việc giảm điện áp sẽ làm tăng độ trễ lan truyền (propagation delay) trên các cell. Nghĩa là tần số xử lý sẽ bị giảm. Điều này thể hiện qua công thức tính độ trễ làn truyền trên một cell như sau:
Trong đó:
  • Vdd là điện áp nguồn
  • Vt là điện áp ngưỡng
Bên cạnh đó, khi một chip có nhiều miền điện áp khác nhau, các tín hiệu kết nối giữa các miền cần phải chèn thêm một thành phần giúp chúng hiểu đúng mức logic của nhau. Thành phần này gọi là bộ dịch mức (level shifter, logic-level shifter hoặc voltage level translations).
Hình 32: Kỹ thuật phân chia đa miền điện áp
5.6.2) Sử dụng nhiều mức điện áp ngưỡng (Multi threshold)
Kỹ thuật sử dụng các cell có mức điện áp ngưỡng khác nhau để giảm công suất dòng rò sub-threshold. Có hai cách thực hiện: 
  • Sử dụng các cell có mức điện áp ngưỡng khác nhau nhưng điện áp ngưỡng cấp cho các cell là cố định. 
  • Sử dụng các cell điều chỉnh được mức điện áp ngưỡng.
Tùy vào chế độ hoạt động, điện áp ngưỡng trên các cell này sẽ được điều chỉnh phù hợp. Cell có điện áp ngưỡng thấp sẽ có độ trễ thấp nhưng dòng rò lớn. Cell có điện áp ngưỡng cao sẽ có độ trễ cao nhưng dòng rò thấp. Việc kết hợp các loại cell có mức điện áp ngưỡng khác nhau (có thể lựa chọn khi tổng hợp, sẽ giúp cân bằng giữa công suất tiêu tiêu thụ và tốc độ xử lý của mạch logic. Ví dụ, các LVT cell (Low Vt) sẽ được dùng trên các đường yêu cầu nghiêm ngặt về timing (timing critical path), đòi hỏi độ trễ thấp.
Hình 33: Sử dụng các cell có điện áp ngưỡng khác nhau (từ tài liệu tham khảo)
Để thực hiện được kỹ thuật điều chỉnh điện áp ngưỡng, thư viện công nghệ phải hỗ trợ các cell cho phép điều khiển điện áp phân cực trên cực nền (substrate). Các cell này được cấu tạo từ các CMOS có điện áp ngưỡng biến thiên (VTCMOS – Variable Threshold CMOS).
Hình 34: (a) CMOS thông thường (b) VTCMOS (c) Sử dụng VTCMOS
Trên đây là một số kỹ thuật giúp giảm công suất tiêu thụ trong một vi mạch. Nội dung trình bày hướng đến việc giải thích các khái niệm cơ bản giúp bạn đọc hiểu kỹ thuật đó là gì? thực hiện như thế nào? và vì sao nó có thể giúp giảm công suất tiêu thụ? Nếu có nội dung chưa rõ hoặc chưa chính xác, mong bạn đọc góp ý dưới bài viết để tác giả chỉnh sửa.

Tài liệu tham khảo:
1) Texas Instruments; CMOS Power Consumption and Cpd Calculation; June 1997;
2) R. Saleh ; Leakage and Low-Power Design; Dept. of ECE, University of British Columbia
3) Mahdi Shabany; ASIC/FPGA Chip Design, Verilog for Synthesis; Department of Electrical Engineering, Sharif University of technology
4) EDN; Low power design techniques; July 24 2012
5) TrueChip; Low Power Design Techniques - Basics Concepts In Chip Design
6) EDN; Reducing IC power consumption: Low-power design techniques; September 24 2015
7) Anjan Rudra; MULTISTAGE LATCH-BASED ISOLATION CELL; US 8,575,984 B1, United States Patent; Nov. 5, 2013
8) Intel; Enhanced Intel® SpeedStep® Technology for the Intel® Pentium® M Processor; March 2004
9) Semiconductor Engineering; Multi-Vt

Lịch sử cập nhật:
1) 2020.03.01 - Tạo lần đầu

2 bình luận: