Chào mọi người,
Bạn Rommel.de đã đề cập qua về DFT trong thiết kế vi mạch số, mình sẽ trao đổi thêm một chút về anh này, cũng là tiện để các bạn so sánh sự khác nhau và giống nhau ở khía cạnh DFT giữa thiết kế số và tương tự.
Trong mạch số, có thể nói tất cả các mạch đều được cấu tạo từ các đơn vị logic cơ bản (AND, OR, FF …. ) và thêm ưu điểm rất rõ của thiết kế số là cái gì cũng rất rõ ràng, một là một hai là hai nên một triệu cổng hay vài chục cổng thì nguyên lý cũng như nhau, khác nhau chỉ là quy mô mà thôi. Tức là, nếu mình đảm bảo test được mạch đơn giản gồm hai FF và 4,5 anh AND, OR nối ở đầu vào và đầu ra của hai FF chẳng hạn là có thể suy ra nguyên lý hoạt động của DFT cho mạch số. Để giải thích những khái niệm này, sử dụng hình vẽ sẽ đơn giản hơn, tuy nhiên sẽ mất khá nhiều thời gian nên mình sẽ mô tả sơ qua như sau để các bạn hình dung:
Ví dụ để test mạch AND hai cổng vào, một cổng ra thì cho đầu vào là (11) sau đó kiểm tra xem đầu ra có bằng 1 không. Ví dụ khác, để test D-FF thì cho tín hiệu vào cổng D, sau đó đưa vào một xung clock xem tín hiệu ra có đúng bằng tín hiệu vào không. Ở đây, (11) hay tín hiệu cho vào cổng D gọi là test vector cho cổng AND và D-FF. Vấn đề đặt ra ở đây là: với một chíp tích hợp lên đến khoảng triệu cổng cả FF và AND,OR, … thì làm sao thiết kế được test vector để kiểm tra hết được các thành phần logic trong IC?
Rất may là trong thiết kế số, máy tính hỗ trợ rất nhiều nên việc phức tạp này sẽ do máy tính dảm nhiệm, nhưng mình cần hiểu rõ nguyên lý để có thể bảo máy tính làm giúp mình.
Giả sử mạch số có cấu tạo như sau: Đầu vào A1,2, ..n qua một đống anh logic AND, OR, … tới chân D1 của FF1. Đầu vào B1,2,…l cùng với đầu ra Q1 của FF1 qua tiếp một đống anh logic AND, OR, .. tới chân D2 của FF2. Một đống anh logic AND, OR kẹp giữa FF1 và FF2 có thêm một đống đầu ra nữa X1,2..i kết hợp với đầu ra Q2 của FF2 qua một đống anh logic AND, OR, .. cho ra Đầu ra Y1,2, ..k. Mô tả thì phức tạp vậy nhưng với kỹ sư DFT thì chỉ nhìn thấy mạch đó có 2 ông chính: Ba đống logic AND, OR, .. (ở đầu vào FF1, kẹp giữa FF1 và FF2, và ở đầu ra FF2) và Hai ông FF (FF1 và FF2).
Với một đống cổng logic thì cũng chả khác gì một cổng logic vì với đại số Boolean thì với một vector input sẽ tính ra một vector output. Vấn đề là làm sao để điều khiển/quản lý dữ liệu vào/ra đảm bảo mục tiêu tối thượng của việc test là với tập hợp input và tập hợp output đó thì khả năng phát hiện lỗi là cao nhất.
Với FF thì khác một chút, để có thể đưa tín hiệu vào đầu vào và đo tín hiệu ở đầu ra, người ta sẽ làm thế này, sau bước synthesis thông thường để có netlist bao gồm FF “lý tưởng” và các cổng logic (đảm bảo đúng chức năng như RTL) thì tất cả FF lý tưởng sẽ được thay thế bằng FF “thật” (có thể test được). FF thật thường có thêm hai chân nữa so với FF lý tưởng gọi là TI (test in) và TE (test enable). Trong đó FF thật = FF lý tưởng + MUX (có hai đầu vào là TI và D, chân điều khiển là TE và đầu ra đưa vào D của FF lý tưởng). Scan-chain sẽ được cấu tạo như sau: chân scan_in được nối tới chân TI của FF1, Q1 của FF1 sẽ nối tới TI của FF2, Q2 của FF2 sẽ được nối tới TI của FF3, cứ thế tiếp tục cho đến Qn của FFn sẽ đưa ra scan_out, các TE sẽ được nối chung vào chân TE. Như vậy khi TE = 1 thì tất cả các FF1,2..n sẽ hình thành một thanh ghi dịch, tín hiệu đưa vào scan_in sẽ xuất hiện ở đầu ra scan_out sau n xung. Bằng cách này người ta test được các FF.
Với mạch hỗn hợp cả FF và cổng logic thì cần kết hợp giữa hai thao tác là shift và capture.
Ví dụ với mạch số ở trên để test đầu ra của khôi logic đầu vào FF1 người ta làm như sau:
- đặt TE = 0
- thiết lập test vector in với A1,..n, B1,..l
- đưa một xung clock kết quả đầu ra của khổi logic sẽ được capture tại đầu ra của FF1 và vector out Y1,..k (chế độ capture).
Để đưa ra giá trị capture tại đầu ra của FF1 ra bên ngoài thì làm như sau:
- đăt TE=1
- đưa thêm xung vào thì giá trị tại đầu ra của các khối logic sẽ lần lượt xuất hiện ở scan_out (chế độ shift)
Tóm lại bằng cách điều khiển linh hoạt chân TE, Clock, Scan_in cộng thêm xử lý dữ liệu ra ở scan_out và Y1,..k cho phép có thể test được tất cả các mạch trong IC số.
Trên đây là nguyên lý để test mạch số và mới chỉ nói tới một phần của DFT là scan design chứ chưa phải là phần chính (quan trọng) của DFT. Đó là phần thiết kế thêm vào để có thể điều khiển (control) và đo (observe) các giá trị vào ra của mạch số như mô tả ở ví dụ trên.
Đến đây một vài thuật ngữ/khái niệm thường được nhắc đến:
- ATPG (Automatic Test Pattern Generation): đây chính là phần tạo ra vector đầu vào giống như vector (11) để test mạch AND. Phần này sẽ được công cụ phần mềm tự động tạo ra một cách ngẫu nhiên đảm bảo khả năng phát hiện sai là cao nhất (>99%). Vector này cũng sẽ được mô phỏng kiểm tra lại và được làm đầu vào cho các máy ATE (Automatic Test Equipment)
- EDT (Embedded Deterministic Testing): đây là một kỹ thuật hay được nói đến đi kèm với ATPG, nó cho phép giải nén/nén dữ liệu test giúp giảm đáng thời gian test.
Lúc đầu bài viết này định đề cập sâu vào hai khái niệm ở trên (ATPG và EDT), tuy nhiên chủ đề này chủ yếu nói về kỹ thuật tương tự nên mình chỉ giới thiệu sơ qua, nếu bạn nào có hứng thú thì tìm hiểu thêm.
Tuy bài viết tương đối dài và còn một vài chỗ chưa thật chặt chẽ nhưng hy vọng các bạn sẽ tìm được một vài thông tin hữu ích về khái niệm DFT với mạch số.
Thân mến.
Bạn Rommel.de đã đề cập qua về DFT trong thiết kế vi mạch số, mình sẽ trao đổi thêm một chút về anh này, cũng là tiện để các bạn so sánh sự khác nhau và giống nhau ở khía cạnh DFT giữa thiết kế số và tương tự.
Trong mạch số, có thể nói tất cả các mạch đều được cấu tạo từ các đơn vị logic cơ bản (AND, OR, FF …. ) và thêm ưu điểm rất rõ của thiết kế số là cái gì cũng rất rõ ràng, một là một hai là hai nên một triệu cổng hay vài chục cổng thì nguyên lý cũng như nhau, khác nhau chỉ là quy mô mà thôi. Tức là, nếu mình đảm bảo test được mạch đơn giản gồm hai FF và 4,5 anh AND, OR nối ở đầu vào và đầu ra của hai FF chẳng hạn là có thể suy ra nguyên lý hoạt động của DFT cho mạch số. Để giải thích những khái niệm này, sử dụng hình vẽ sẽ đơn giản hơn, tuy nhiên sẽ mất khá nhiều thời gian nên mình sẽ mô tả sơ qua như sau để các bạn hình dung:
Ví dụ để test mạch AND hai cổng vào, một cổng ra thì cho đầu vào là (11) sau đó kiểm tra xem đầu ra có bằng 1 không. Ví dụ khác, để test D-FF thì cho tín hiệu vào cổng D, sau đó đưa vào một xung clock xem tín hiệu ra có đúng bằng tín hiệu vào không. Ở đây, (11) hay tín hiệu cho vào cổng D gọi là test vector cho cổng AND và D-FF. Vấn đề đặt ra ở đây là: với một chíp tích hợp lên đến khoảng triệu cổng cả FF và AND,OR, … thì làm sao thiết kế được test vector để kiểm tra hết được các thành phần logic trong IC?
Rất may là trong thiết kế số, máy tính hỗ trợ rất nhiều nên việc phức tạp này sẽ do máy tính dảm nhiệm, nhưng mình cần hiểu rõ nguyên lý để có thể bảo máy tính làm giúp mình.
Giả sử mạch số có cấu tạo như sau: Đầu vào A1,2, ..n qua một đống anh logic AND, OR, … tới chân D1 của FF1. Đầu vào B1,2,…l cùng với đầu ra Q1 của FF1 qua tiếp một đống anh logic AND, OR, .. tới chân D2 của FF2. Một đống anh logic AND, OR kẹp giữa FF1 và FF2 có thêm một đống đầu ra nữa X1,2..i kết hợp với đầu ra Q2 của FF2 qua một đống anh logic AND, OR, .. cho ra Đầu ra Y1,2, ..k. Mô tả thì phức tạp vậy nhưng với kỹ sư DFT thì chỉ nhìn thấy mạch đó có 2 ông chính: Ba đống logic AND, OR, .. (ở đầu vào FF1, kẹp giữa FF1 và FF2, và ở đầu ra FF2) và Hai ông FF (FF1 và FF2).
Với một đống cổng logic thì cũng chả khác gì một cổng logic vì với đại số Boolean thì với một vector input sẽ tính ra một vector output. Vấn đề là làm sao để điều khiển/quản lý dữ liệu vào/ra đảm bảo mục tiêu tối thượng của việc test là với tập hợp input và tập hợp output đó thì khả năng phát hiện lỗi là cao nhất.
Với FF thì khác một chút, để có thể đưa tín hiệu vào đầu vào và đo tín hiệu ở đầu ra, người ta sẽ làm thế này, sau bước synthesis thông thường để có netlist bao gồm FF “lý tưởng” và các cổng logic (đảm bảo đúng chức năng như RTL) thì tất cả FF lý tưởng sẽ được thay thế bằng FF “thật” (có thể test được). FF thật thường có thêm hai chân nữa so với FF lý tưởng gọi là TI (test in) và TE (test enable). Trong đó FF thật = FF lý tưởng + MUX (có hai đầu vào là TI và D, chân điều khiển là TE và đầu ra đưa vào D của FF lý tưởng). Scan-chain sẽ được cấu tạo như sau: chân scan_in được nối tới chân TI của FF1, Q1 của FF1 sẽ nối tới TI của FF2, Q2 của FF2 sẽ được nối tới TI của FF3, cứ thế tiếp tục cho đến Qn của FFn sẽ đưa ra scan_out, các TE sẽ được nối chung vào chân TE. Như vậy khi TE = 1 thì tất cả các FF1,2..n sẽ hình thành một thanh ghi dịch, tín hiệu đưa vào scan_in sẽ xuất hiện ở đầu ra scan_out sau n xung. Bằng cách này người ta test được các FF.
Với mạch hỗn hợp cả FF và cổng logic thì cần kết hợp giữa hai thao tác là shift và capture.
Ví dụ với mạch số ở trên để test đầu ra của khôi logic đầu vào FF1 người ta làm như sau:
- đặt TE = 0
- thiết lập test vector in với A1,..n, B1,..l
- đưa một xung clock kết quả đầu ra của khổi logic sẽ được capture tại đầu ra của FF1 và vector out Y1,..k (chế độ capture).
Để đưa ra giá trị capture tại đầu ra của FF1 ra bên ngoài thì làm như sau:
- đăt TE=1
- đưa thêm xung vào thì giá trị tại đầu ra của các khối logic sẽ lần lượt xuất hiện ở scan_out (chế độ shift)
Tóm lại bằng cách điều khiển linh hoạt chân TE, Clock, Scan_in cộng thêm xử lý dữ liệu ra ở scan_out và Y1,..k cho phép có thể test được tất cả các mạch trong IC số.
Trên đây là nguyên lý để test mạch số và mới chỉ nói tới một phần của DFT là scan design chứ chưa phải là phần chính (quan trọng) của DFT. Đó là phần thiết kế thêm vào để có thể điều khiển (control) và đo (observe) các giá trị vào ra của mạch số như mô tả ở ví dụ trên.
Đến đây một vài thuật ngữ/khái niệm thường được nhắc đến:
- ATPG (Automatic Test Pattern Generation): đây chính là phần tạo ra vector đầu vào giống như vector (11) để test mạch AND. Phần này sẽ được công cụ phần mềm tự động tạo ra một cách ngẫu nhiên đảm bảo khả năng phát hiện sai là cao nhất (>99%). Vector này cũng sẽ được mô phỏng kiểm tra lại và được làm đầu vào cho các máy ATE (Automatic Test Equipment)
- EDT (Embedded Deterministic Testing): đây là một kỹ thuật hay được nói đến đi kèm với ATPG, nó cho phép giải nén/nén dữ liệu test giúp giảm đáng thời gian test.
Lúc đầu bài viết này định đề cập sâu vào hai khái niệm ở trên (ATPG và EDT), tuy nhiên chủ đề này chủ yếu nói về kỹ thuật tương tự nên mình chỉ giới thiệu sơ qua, nếu bạn nào có hứng thú thì tìm hiểu thêm.
Tuy bài viết tương đối dài và còn một vài chỗ chưa thật chặt chẽ nhưng hy vọng các bạn sẽ tìm được một vài thông tin hữu ích về khái niệm DFT với mạch số.
Thân mến.
Comment