Thông báo

Collapse
No announcement yet.

Analog IC design

Collapse
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • 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.

    Comment


    • Chào bạn Hithere123,

      Bài viết vừa rồi về DFT bạn viết khó hiểu quá. Tớ đọc cũng hoa cả mắt. Để tớ trình bày lại vấn đề này một chút hi vọng sẽ dễ hiểu hơn. Tớ thật ra không làm về DFT nên kiến thức của tớ trong vấn đề này chỉ là trong sách và cũng đã lạc hậu hết gần 10 năm rồi. Nếu có bạn nào trên 4rum làm về DFT chắc chắn sẽ trình bày hay hơn tớ.

      Tớ trước hết trình bày về DFT kiểu cổ điển sau đó mới nói đến một số vấn đề của hiện nay. Lỗi chip kiểu cổ điển gồm có đứt mạch, chập mạch... Đây là những lỗi vật lý gọi là defect. Đối với mạch số, người ta có thể tổng quát hóa thành lỗi logic (fault) gọi là "stuck at 1", và "stuck at 0", tức là có một tín hiệu nào đó bị nối chặt vào nguồn và vào đất. Test theo kiểu cổ điển tức là làm sao đặt lên đầu vào một testing vector sao cho đầu ra trong trường hợp bình thường khác với đầu ra khi có fault ở một số điểm nào đó trong mạch. Tớ sẽ trình bày rõ hơn ở đoạn sau. Hiện nay các công nghệ mới phải đối mặt với một vấn đề rất lớn là sai số của công nghệ quá cao (process variation), và điều này cũng tạo nên lỗi. Các bạn đều biết transistor khi sản xuất ra có thể xuất hiện các corner case khác nhau như fast, slow, hay typical. Hiện nay sai số bên trong chip (intradie variation) nhiều khi còn cao hơn cả sai số giữa các chip (interdie variation). Khi sai số công nghệ lớn như vậy thì dòng điện khi ta đóng/mở transistor có thể khác nhau đến mấy lần. Đối với mạch số điều này không ảnh hưởng đến giá trị logic nhưng nó làm thay đổi thời gian phóng nạp dẫn đến tốc độ trong các phần của chip thay đổi rất khác nhau và có thể tạo ra metastability. Bên cạnh đó 2 yếu tố làm vấn đề này trầm trọng hơn là crosstalk và IR drop. Crosstalk tức là trường hợp tín hiệu trên 2 đường kết nối đi song song với nhau ảnh hưởng lẫn nhau. Khi 2 đường kết nối đi song song với nhau chúng sẽ có một giá trị điện dung kí sinh lẫn nhau ta tạm gọi là C0. Nếu như 2 tín hiệu này cùng đồng thời chuyển từ 0 sang 1 hoặc từ 1 sang 0 thì giá trị C0 này không có ảnh hưởng gì nên mạch sẽ được phóng nạp trong thời gian T0. Nếu trong 2 tín hiệu này có một tín hiệu không đổi giá trị còn 1 tín hiệu chuyển mức giá trị thì ta cần tính thêm giá trị điện dung ký sinh C0 và thời gian phóng nạp sẽ là T1 lớn hơn T0. Còn trong trường hợp 2 tín hiệu này thay đổi ngược nhau ví dụ từ 0 thành 1 và tín hiệu kia từ 1 thành 0, thì ta phải tính giá trị điện dung ký sinh là 2C0 và thời gian phóng nạp sẽ là T2 lớn hơn T1. IR drop là trường hợp mạch tiêu thụ nhiều công suất thì điện áp cung cấp sẽ bị sụt giảm do điện trở bên trong dây dẫn của phần cấp nguồn và đất. Điện áp giảm cũng làm mạch chạy chậm lại khá nhiều gân nên metastability.

      Các mạch thiết kế kiểu cổ điển người ta thường nhắc đến critical path. Khái niệm này hiện nay vẫn được sử dụng rộng rãi nhưng đối với những công nghệ mới do intradie process variation quá lớn trong mạch rất nhiều đường có khả năng trở thành critical path. Delay trong chip trước đây thường chỉ là logic delay thì ngay nay là kết hợp giữa logic delay và interconnect delay (người ta còn gọi là RC delay). Để có thể test cho mạch chạy đúng trong tần số cao với những chip hiện đại vẫn còn là một vấn đề. Bên cạnh đó vấn đề này còn trầm trọng hơn nếu người ta sử dụng kỹ thuật Adaptive Voltage Scaling (AVS). Đây là một kỹ thuật rất mới tớ chưa làm bao giờ mà chỉ mới đọc về nó thôi. Nguyên tác của nó là ta làm một mạch mô phỏng lại delay của đường critical path, sau đó đưa tín hiệu đồng hồ qua mạch mô phỏng này. Độ trễ của tín hiệu ra sẽ được so sánh với tín hiệu đồng hồ chuẩn rồi điều chỉnh lại mức điện áp cấp nguồn. Mạch so sánh độ trễ để chuyển sang mức điện áp cũng tương tự như mạch Phase Frequency Detector và Charge Pump trong mạch PLL. Nguyên lý của mạch là khi nhiệt độ thấp hoặc chịp là loại fast corner, ta có thể hạ thấp điện áp làm việc để tiết kiệm công suất. Một vấn đề đặt ra là mạch mô phỏng đường critical path phải làm thế nào. Như tớ nói trong mạch có thể xuất hiện rất nhiều đường critical path và độ trễ có thể do mạch logic hoặc do đường kết nối. Khi thay đổi mức điện áp độ trễ do mạch logic và độ trễ do đường kết nối cũng thay đổi khác nhau. Chính vì vậy mạch mô phỏng này là loại có thể lập trình để kết hợp cả độ trễ do mạch logic và đường kết nối. Nhưng cũng vì thế mà test mấy con chip này là một vấn đề.

      Hôm nay viết đến đây thôi, hôm khác tớ viết tiếp về việc thiết kế các mạch để test các lỗi này.

      Comment


      • Chào các bạn,

        Để tớ giới thiệu thêm một chút về DFT cho phần logic.

        Mạch số hiện nay đã rất phức tạp lên đến hàng triệu cổng logic. Chính vì vậy để test mạch có hiệu quả người ta thường dùng phương pháp "Chia để trị" (Divide and conquer). Phương pháp này xuất hiện chắc từ thời tiền sử và vẫn được dùng hiệu quả đến tận bây giờ. Nguyên tắc của nó là chia mạch ra thành từng khối nhỏ và test các khối này. Test mạch logic như bạn Hithere123 nói người ta phải chia ra phần combinational và phần sequential logic. Tớ giả thiết mạch cần test là một Moore machine. Như vậy mạch này cần phải được biểu diễn bằng 2 hàm logic f1, f2 trong đó f1 làm hàm logic xác định trạng thái của mạch dựa theo giá trị đầu vào và trạng thái của mạch tại thời điểm trước đó, và hàm f2 xác định đầu ra của mạch dựa vào trạng thái của mạch tại thời điểm hiện tại. Trạng thái của mạch được xác định bằng giá trị của các flipflop bên trong mạch. Như vậy nếu ta biết được giá trị đầu vào của mạch, giá trị đầu ra của mạch và trạng thái của mạch thì ta có thể test 2 hàm f1, và f2 này.

        Việc đọc/ghi giá trị trạng thái của mạch thông qua các flipflop ở bên trong có rất nhiều cách. Đơn giản nhất là dùng scan-chain test. Trong một số trường hợp đơn giản người ta không cần thiết phải đọc ghi trực tiếp giá trị trạng thái của mạch. Ở đây tớ cứ giả thiết bằng một cách nào đó ta có thể xác định được giá trị của trạng thái mạch. Như vậy vấn đề chỉ còn là xác định xem hàm logic có chạy đúng hay không khi có thể biết được đầu vào và đầu ra.

        Hai phương pháp đơn giản nhất để test hàm logic là exhausted test và random test. Exhausted test là test tất cả các trường hợp. Ví dụ như ta có N đầu vào vậy là ta phải sử dụng 2 mũ N testing vector để kiểm tra rồi so sánh với đầu ra. Phương pháp này chỉ dùng đối với những mạch nhỏ còn những mạch lớn thì quá chậm. Tớ lấy một ví dụ là mạch cộng/trừ 32 bit. Mạch này có tất cả là 66 bit đầu vào (32 bit giá trị A, 32 bit giá trị B, 1 bit carry in, 1 bit add/sub). Nếu dùng phương pháp exhausted test thì bạn chạy chắc đến sang năm. Phương pháp thứ 2 là random test, tức là ta đưa giá trị ngẫu nhiên ở đầu vào rồi kiểm tra ở đầu ra. Người ta nhận thấy chỉ cần sử dụng một số lượng testing vector ngẫu nhiên tương đối lớn thì ta sẽ có thể bao quát gần như tất cả các lỗi trong mạch.

        Phương pháp test ngẫu nhiên sử dụng Linear Feedback Shift Register để tạo số ngẫu nhiên. Giá trị khởi đầu của thanh ghi này được nạp vào từ bên ngoài. Sau đó mạch sẽ tự chạy N chu kỳ.

        Hai phương pháp exhausted test và random test có ưu điểm là người làm thiết kế chẳng cần quan tâm đến mạch bên trong như thế nào cả. Họ chỉ cần quét hết đầu vào hoặc dùng bộ sinh số ngẫu nhiên là đủ. Nhưng nhược điểm của nó là test rất lâu, và có thể không bao quát hết lỗi. Vậy nên mới xuất hiện phương pháp thứ 3 ad-hoc tức là giá trị của testing vector được xác định tùy theo mạch.

        Để làm phương pháp thứ 3 này thì các bạn phải để ý lại bài viết trước của tớ về fault (stuck at 1 and stuck at 0). Trong trường hợp này người thiết kế phải nhìn vào mạch điện gồm hàng loạt các cổng logic sao cho khi ta thay đổi giá trị đầu vào thì giá trị ở các điểm trung gian thay đổi cả 0, và 1. Như vậy trong trường hợp điểm trung gian này bị lỗi stuck at 1, ta phải đưa giá trị đầu vào để điểm trung gian này có giá trị là 0. Bên cạnh đó vì ta chỉ có thể kiểm tra được tín hiệu đầu ra, không kiểm tra được tín hiệu trung gian, ta cũng phải đảm bảo testing vector không mask lỗi này. Tớ lấy một ví dụ đơn giản để cho các bạn dễ hiểu. Ta có một mạch X=A & B; Y= X & C. Đầu vào là A, B, C, đầu ra là Y, trung gian là X. Nếu một kiểm tra X có bị stuck at 0 hay không ta phải đưa giá trị 11 vào 2 đầu A, B; và để có thể đo được tín hiệu X từ đầu ra Y ta phải cho C giá trị 1.

        Phương pháp ad-hoc này làm với mạch nhỏ thì OK chứ mạch lớn thì chết chắc. Cũng có thể hiện này người ta đã làm ra nhưng EDA tool mới mà tớ không biết để xác định các testing vector này. Nhưng giả sử như ta vẫn phải dùng phương pháp thủ công (cách đây 10 năm rồi) thì người ta sẽ kết hợp phương pháp thứ 2 và thứ 3. Tức là người ta sẽ sử dụng random test để test khoảng 90% mạch. Phần còn lại mới sử dụng ad-hoc. Nếu bạn để ý, trong phương pháp random test, giá trị khởi đầu của LFSR được nạp vào từ bên ngoài. Người ta sẽ sử dụng phương pháp ad-hoc để nạp các giá trị khác nhau vào, và test với chu kỳ khác nhau. Một ưu điểm khác nữa là ta không phải liên tiếp đưa giá trị testing vector vào từ bên ngoài mà LFSR có thể tự sinh ra trong các chu kỳ sau đó. Điều này làm giảm đi yêu cầu về số chân tín hiệu probe trong lúc test.

        Trong quá trình test, giá trị đầu ra cần phải được đọc ra để kiểm tra với giá trị đã lưu trữ sẵn từ trước trên máy. Tuy nhiên do số lượng chân tín hiệu quá ít, việc đọc ra liên tục là điều không thể làm được. Vì thế người ta thường nén dữ liệu lại trước rồi mới đọc ra để kiểm tra. Có rất nhiều phương pháp nén dữ liệu và trong đó đơn giản nhất là dùng LFSR để tạo ra kiểm tra CRC.

        Comment


        • Tổng quan về khái niệm DFT trong thiết kế mạch tương tự (tiếp)

          Chào mọi người,

          Rất vui vì bạn Rommel.de đã nhiệt tình bổ xung thêm cho phần DFT đối với mạch số, các khái niệm về stuck @ 0/1 hay LFSR là hết sức cơ bản khi đề cập tới vấn đề này. Sau đây mình sẽ tiếp tục trình bày thêm một khía cạnh nữa về DFT đối với mạch tương tự.

          Ở bài viết trước mình có đề cập tới test mode và một cách đơn giản để “enter test mode” đó là thiết lập ENABLE = -5V. Nhưng vấn đề lại không đơn giản như vậy. Bài toán đặt ra như sau: khi ở chế độ hoạt động bình thường nếu xuất hiện một spike ở chân ENABLE của LDO chẳng hạn, và trường hợp xấu nhất là điện áp ENABLE có thể bằng -5V, thì IC sẽ tự động nhảy sang hoạt động ở trạng thái test mode và chức năng hoạt động bình thường của LDO sẽ bị vi phạm. Đây là kịch bản không mong muốn và nhiệm vu của thiết kế DFT là đảm bảo trong mọi tình huống những kịch bản kiểu như vậy sẽ không xảy ra. Có thể nói đây là một trong những vấn đề cơ bản đòi hỏi người kỹ sư phải nghĩ tới đầu tiên.

          Với thiết kế số thì vấn đề này được giải quyết tương đối đơn giản, vì để thiết kế thêm một vài thanh ghi đặc biệt làm nhiệm vụ thiết lập các trạng thái hoạt động bên trong của IC là không có gì khó khăn. Về mặt nguyên tắc chúng ta hoàn toàn có thể áp dụng cách này với thiết kế tương tự, nhưng chúng ta sẽ phải trả giá là cần thiết kế thêm phần giao tiếp với các thanh ghi đặc biệt này. Vậy với thiết kế tương tự thì bài toán này sẽ được giải quyết như thế nào?

          Một cách tương đối, chúng ta có thể coi như trong khoảng thời gian IC khởi động thì mọi giá trị đầu ra là “không có giá trị” về mặt ứng dụng (application). Lợi dụng chính điểm này DFTsẽ thiết kế sao cho test mode chỉ diễn ra khi và chỉ khi IC đang trong quá trình khởi động. Như thế, IC sẽ an toàn trong chế độ hoạt động bình thường. Và người kỹ sư cũng sẽ có nhiều lựa chọn hơn trong việc sử dụng các chân của IC cho thiết kế DFT do lợi dụng đặc điểm trong khoảng thời gian này các chân chức năng không có giá trị ở mặt ứng dụng thông thường. Đây cũng chính là gợi ý ‎cho câu hỏi trong bài trước mình đề cập: nếu LDO không có chân ENABLE thì IC sẽ được test như thế nào. Và gần như hầu hết IC tương tự có DFT hiện nay được thiết kế theo cách này.

          Tóm lại, vấn đề thiết kế trạng thái test mode cho IC tương tự đã được bổ xung thêm đầy đủ hơn, các bài viết tiếp theo mình sẽ đề cập tới một vài kỹ thuật bên trong IC ở khía cạnh DFT này.

          Thân mến.

          Comment


          • Chào bạn Hithere123,

            Tớ muốn hỏi lại bạn một chút do co điểm chưa được rõ. Theo như bạn nói nếu không có chân "Enable" thì ta có thể thiết kế để tất cả các chip chuyển sang chế độ test mode trong lúc khởi động phải không? Sau một thời gian nếu không có gì thì chip mới chuyển sang chế độ hoạt động bình thường.

            Nhân tiện bạn có thể mô tả chi tiết mạch khởi động (để xác định thời điểm bật nguồn). Tớ hồi lâu rồi có từng xem một thiết kế này nhưng đã không còn nhớ nữa. Đây là một mạch rất hay nhưng để thiết kế ổn định cũng không dễ. Nếu tớ nhớ không nhầm thì người ta thay vì so sánh điện áp vào có chuyển từ thấp lên cao và vượt trên ngưỡng hay chưa (vào thời điểm ban đầu điện áp tăng dần lên), người ta so sánh dòng điện vì dòng điện khi chưa có nguồn và dòng điện sau khi có nguồn ổn định khác rất xa so với dòng chuẩn nên độ tin cậy cao hơn nhiều. Bây giờ mấy mạch bọn tớ làm đều có tín hiệu reset nên những mạch khởi động như vậy không cần thiết nữa nhưng tớ nghĩ rằng đây là những ví dụ thiết kế mạch rất hay.

            Comment


            • Chào bạn Rommel.de,

              Mình không có ý nói

              Nguyên văn bởi Rommel.de Xem bài viết
              ... nếu không có chân "Enable" thì ta có thể thiết kế để tất cả các chip chuyển sang chế độ test mode trong lúc khởi động phải không? Sau một thời gian nếu không có gì thì chip mới chuyển sang chế độ hoạt động bình thường.
              Trong bài trước mình đề cập tới khía cạnh “enter test mode” của các IC tương tự với hai ý độc lập nhau: một là bằng một cách nào đó, lợi dụng một chân chức năng thông thường để làm nhiệm vụ test khi cần; hai là chỉ test IC trong giai đoạn khởi động để tránh trường hợp xấu nhất xảy ra khi chip không phân biệt được chức năng thông thường và chức năng test của cùng một chân (PIN). Trong kịch bản tệ nhất với thiết kế DFT, chip chỉ có 3 chân, thì vẫn có cách để test được vì lợi dụng đặc điểm trong lúc khởi động có thể coi các chân là không có giá trị ứng dụng trừ chân nguồn và đất. Do đó, ta có thể test bằng chân OUT thay vì chân ENABLE.

              Nếu thỏa mãn điều kiện sau một thời gian nếu không có gì thì chip mới chuyển sang chế độ hoạt động bình thường thì vô hình chung ta đã can thiệp vào chức năng thông thường của chíp như làm cho thời gian khởi động lâu hơn chẳng hạn. Điều này nên tránh; và tốt nhất là về mặt chức năng thì IC có DFT hay không có DFT đều hoạt động như nhau, chỉ khác là khi có DFT thì chip sẽ “thông minh” hơn mà thôi.

              Liên quan đến mạch xác định thời điểm nguồn ổn định, thì như bạn Rommel.de nói, đó là thiết kế mạch so sánh điện áp. Tuy nhiên cần thêm hysteresis để tránh glitch cũng như sự đảm bảo ổn định tại đầu ra của bộ so sánh vì điện áp nguồn với ripple ~20mV là có thể làm cho đầu ra của bộ so sánh này mất ổn định nếu nguồn cung cấp có giá trị ở khoảng giá trị ngưỡng so sánh. Nhưng thật ra ngưỡng này thông thường không phải mang ý nghĩa báo hiệu nguồn ổn định mà thực chất nghiêng về ý nghĩa báo hiệu IC sẽ ở chế độ hoạt động đầy đủ (full). Theo nguyên lý ở trên thì cần có một điện áp chuẩn để so sánh, tức là mạch tạo điện áp chuẩn đã ổn định rồi. Nên thực chất mạch xác định điểm khởi đầu thường là mạch phát hiện dòng. Mà mạch phát hiện dòng đơn giản nhất có thể dùng chính là mạch gương dòng. Không biết đây có phải ý mà bạn Rommel.de đề cập tới không vì mình hiểu dòng lúc ổn định và không ổn định khác xa nhiều là so sánh một bên là có dòng và một bên là không có dòng. Mình cũng chưa từng có kinh nghiệm làm qua mạch nào phức tạp để thực hiện chức năng này nên không biết mô tả kỹ hơn như thế nào.

              Về khía cạnh tín hiệu reset thì cần đề cập tới internal reset, exernal reset, fault reset, hay power reset. Chắc bạn muốn đề cập tới power reset, nếu đúng vậy thì tạo ra tín hiệu power rest là một mạch tương tự và nó gần với những ý mình đã đề cập ở trên.

              Một vài dòng trao đổi thêm,
              Chúc mọi người thêm một cuối tuần vui vẻ!

              Thân mến.

              Comment


              • Chào bạn Hithere123,

                Cám ơn bạn đã trả lời tớ. Nhân tiện chúng ta cùng trao đổi thêm một chút về mạch khởi động nhé. Tớ nghĩ đây là một trong những mạch khá hay nhưng lại ít được đề cập đến trong sách vở. Tớ nghĩ rằng trao đổi thêm về vấn đề này sẽ có ích với nhiều bạn.

                Mạch này ngày trước tớ có từng xem qua nhưng không quan tâm lắm vì tớ làm bên mảng số. Có nhiều điểm tớ không nhớ được chính xác nên các bạn không nên tin hết vào những gì tớ viết ở đây nhưng nó cũng gần đúng với mạch thật.

                Khi bạn mới bật nguồn, do có nhiều tụ điện nối từ nguồn xuống đất nên điện áp của nguồn cấp không phải tăng đột biến mà tăng lên từ từ. Tớ lấy ví dụ điện áp cấp vào là 2.5V, và điện áp cấp nguồn cần khoảng thời gian là 50 us để tăng từ 0V lên 2.5V. Thật ra điện áp cấp vào chỉ cần khoảng 2V là mạch đã có thể hoạt động được một số chức năng căn bản rồi, vậy ta cứ lấy mốc khi điện áp vượt 2V để phát ra tín hiệu reset và khởi động toàn mạch. Vấn đề là lấy gì ra để so sánh?

                Nếu các bạn để ý đến hàm truyền đạt của mạch nguồn (linear regulator), khi bạn tăng điện áp đầu vào thì điện áp đầu ra cũng tăng dần, và hiệu điện thế giữa đầu vào và đầu ra tương đối nhỏ. Khi điện áp đầu vào đủ lớn thì điện áp ra sẽ ổn định dù bạn có tăng điện áp đầu vào. Như vậy nếu như bạn phát hiện ra điện áp đầu vào cao hơn điện áp đầu ra ở một mức tương đối thì ta biết mạch đã được cấp điện đầy đủ. Mạch linear regulator mà tớ nói đến không nhất thiết phải là mạch nguồn thật. Tớ nói đến mạch này để các bạn dễ hiểu. Các bạn có thể chỉ cần ghép vài diode (mos diode) xếp chồng lên nhau là đủ. Phương pháp so sánh điện áp này ngày trước tớ được nghe nói là tương đối kém ổn định vì chỉ cần những sai số nhỏ hay thiết kế không tốt thì mức yêu cầu 2V có thể trở thành 1.8V hay 2.4V dễ dàng. Vì vậy mọi người chuyển sang dùng phương pháp so sánh dòng. Đặc điểm của mạch sử dụng so sánh dòng là các bạn phải tạo ra được một dòng điện có mức thay đổi rất lớn khi điện áp thay đổi. Tớ lấy ví dụ khi bạn tăng điện áp nguồn từ 2V lên 2.2V thì dòng điện có thể tăng lên 10 lần. Nguyên lý của nó cũng rất đơn giản vì nếu bạn nhìn vào đường đặc trưng volt-ampere của transistor thì khi tăng điện áp VGS dòng điện tăng lên rất nhiều. Vậy nên khi thiết kế không tốt hoặc gặp phải sai số khiến dòng điện chuẩn thay đổi thì mức điện áp cấp cũng chỉ thay đổi trong một khoảng rất nhỏ ví dụ từ 2V đến 2.2V. Đây chính là nguyên lý của mạch khởi động.

                Mời bạn Hithere123 cho biết ý kiến của bạn.

                Comment


                • Chào các bạn,

                  Nhân tiện nói về mạch reset tớ giới thiệu với các bạn một lỗi cực kỳ phổ biến trong thiết kế mạch này.

                  Không biết tại sao nhưng có lẽ vì mạch đơn giản nên sinh viên nhiều khi được dạy sử dụng mạch RC để tạo đường nạp khi bật nguồn, sau đó sử dụng mạch trigger Schmitt để so sánh tạo tín hiệu reset. Mạch này nếu chạy mô phỏng thì nguồn sẽ tăng lên từ từ thì mạch chạy hoàn toàn chuẩn. Trên thực tế đây là một thiết kế mạch hoàn toàn sai. Trong một số trường hợp nguồn bị mất đột ngột sau đó có lại liền. Thời gian mất nguồn có thể chưa đến 1ms. Có rất nhiều nguyên nhân tạo nên hiện tượng này ví dụ như sấm sét... Khi đó mạch RC do có độ trễ nên nó sẽ không tạo ra tín hiệu reset cho mạch nhưng ở bên trong thì mạch đã bị chạy sai hoàn toàn rồi. Nếu tín hiệu reset không được sinh ra và mạch chạy sai thì các bạn rất khó xác định được hậu quả của nó.

                  Chính vì thế với mấy mạch khởi động này khi điện áp nguồn xuống thấp tín hiệu /RST cần phải chuyển xuống 0, toàn bộ mạch được khởi động lại. Khi điện áp vào vượt ngưỡng, tín hiệu /RST chuyển lên 1, mạch bắt đầu làm việc bình thường. Như vậy khi có sự cố như tớ nói ở trên, mạch chỉ khởi động lại và sau đó sẽ làm việc bình thường.

                  Comment


                  • Chào bạn Hithere123,

                    Hình như tớ làm loãng topic DFT của bạn hơi nhiều. Xin mời bạn tiếp tục giới thiệu với mọi người. Tớ có một ý như thế này không biết bạn nghĩ sao. Nếu như tớ với bạn mà nói về lý thuyết thiết kế mạch analog hay số thì cũng vẫn còn kém xa mấy quyển sách trên mạng. Điểm thiếu sót ở những quyển sách thường là thiếu đi những mạch thực tế. Nếu bạn không ngại tớ nghĩ trong mỗi vấn đề trình bày, bạn hãy giới thiệu về lý thuyết trước để mọi người hiểu, rồi đưa ra những mạch cụ thể để mọi người cùng học tập. Sau đó bạn hãy giới thiệu những chiêu đặc biệt của dân thiết kế ví dụ như sau khi thiết kế một mạch khuyếch đại xong nhưng cần phải giảm offset hay tăng độ tuyến tính thì cần phải làm thế nào... Cuối cùng bạn hãy để mọi người hỏi và trả lời. Tớ nghĩ như vậy sẽ hay hơn là chỉ giới thiệu lý thuyết.

                    Comment


                    • Nguyên văn bởi hithere123 Xem bài viết
                      Thiết kế layout là thể hiện hình vẽ các biểu tượng linh kiện tích cực và thu động trong mạch điện dưới dạng những khối đa giác hình học hay nói cách khác là việc chuyển hình vẽ các biểu tượng sang một dạng có thể sản xuất được. Dó đó, thông thường sẽ trải qua các bước sau (ví dụ cụ thể với Cadence):

                      [1] Làm việc ở cửa sổ Virtuoso Layout Window (Tools > Design Synthesis > …)

                      Ở bước này, công việc chính là “đọc” hình vẽ mạch điện, đặt tất cả các linh kiện lên “mặt bàn” sau đó sắp đặt các linh kiện theo đúng hướng dẫn trong mạch điện (linh kiện nào cần match, lưu ý các linh kiện nối trực tiếp tới pad, có yêu cầu đặc biệt về nhiệt hay không, …). Lưu ý việc đọc các linh kiện nên đọc ở chế độ “read only” cho “an toàn”.
                      Việc đặt các linh kiện và nối các đường dây phải tuân thủ theo một bộ tiêu chuẩn được cung cấp từ nhà sản xuất gọi là (Design Rule). Nếu vi phạm các tiêu chuẩn này thì có thể nói là chip sẽ không có khả năng sản xuất được. Kiểm tra các tiêu chuẩn này gọi là chạy DRC (design rule check)

                      [2] Chạy DRC (Virtuoso > Verify > DRC)

                      Để chạy DRC thì cần tối thiểu một bản layout và một file quy định các tiêu chuẩn .rul (file này rất quan trọng, do đó thường khai báo đường dẫn đến file này ở lựa chọn “Rules File”, hoặc file này sẽ được cài đặt sẵn). Sau khi chạy xong, chúng ta có thể nhìn thấy file kết quả và các thông báo lỗi. Thông thường trong lần chạy đầu tiên sẽ có khá nhiều lỗi (>>1000) nên để debug từng lỗi một chúng ta có thể vào Verify > Markers > Explain. Quá trình này chỉ kết thúc khi chúng ta có một bản báo cáo DRC “error free”. Đôi khi vẫn còn error nhưng nếu người kỹ sư biết chắc chắn có thể bỏ qua được thì tất cả error này cần được ghi lại cùng với lời giải thích để tiện truy cứu sau này.

                      [3] Chạy LVS

                      Ở bước này thông thường gồm hai bước, đầu tiên là linh kiện và các đường nối sẽ được đọc gược lại từ bản layout (extraction) sau đó là so sánh các đường nối (checking connectivity.) Nếu có bất kỳ sự khác biệt nào về số lượng linh kiện và đường nối thì cần phải tìm và sửa lại cho đến khi nhận được thông báo “LVS clean”. Nếu trong mạch điện có một linh kiện được nối tắt, thì LVS sẽ bỏ qua, do đó người thiết kế cần phải cẩn thận trong việc quyết định nối những linh kiện đó vào đường nguồn hoặc đất để đảm bảo không có lỗi về các linh kiện ký sinh.
                      Lưu ý: người kỹ sư thường phải làm thêm một bước “đóng gói mạch điện nguyên lý” thành một block với khai báo các pin vào/ra đầy đủ như một mạch IC hoàn chỉnh trước khi chạy LVS. Và khi chạy LVS cũng cần khai báo đường dẫn tới file VLSrul.

                      Sau khi hoàn thành layout tất cả các mạch ở mức block như vậy thì có thể tiến hành ghép “top”, nối đường nguồn, ESD, … Và cũng cần DRC và LVS clean trước khi xuất ra .gds file (File > Export > Streamout)

                      Đối với mỗi công ty thì quy trình có thể khác nhau nhưng chung quy lại thì những bước kể trên là trình tự công việc rất cơ bản mà một người kỹ sư layout vi mạch tương tự sẽ được đảm nhận.

                      Thân mến.
                      Hi bac Yen,

                      Lau ngay qua khong gap bac! Bac van khoe chu?
                      Em co viec hoi bac mot ti.
                      Em da cai IC5141 va chay mo phong thay on, nhung layout xong em lai khong co bo cai Assura hay Calibre de chay LVS va DRC.
                      Bac co bo cai nao tuong thich voi IC5141 thi cho em duong link voi?
                      File DRC.rul binh thuong minh phai tu viet hay dung cua nha san xuat ah bac?

                      Best regards,

                      Comment


                      • Chào bạn Rommel.de,

                        Thời gian qua công thêm thời gian tới (khoảng một tháng), mình bị kẹt về thời gian tham gia trao đổi với mọi người trên diễn đàn, nên khó có thể hồi âm bạn ngay được. Hẹn bạn lần tới sẽ trao đổi nhiều hơn. Thân mến.

                        Hi Truyền,

                        - Anh không cài Calibre để chạy layout verification nên không có link em hỏi.
                        - Thông thường các file rule sẽ dùng từ nhà sản xuất, tuy nhiên file này cũng tương tự như file model (.lib) nên em hoàn toàn có thể chỉnh sửa để "phù hợp" với thiết kế của em.
                        Mà em làm DAE hay sao mà quan tâm mấy thứ này. Hình như em làm ở bộ phận của anh Arix. Tại buổi gặp mặt trước Tết âm lich, anh Arix có trao đổi là đã ký bản nghi nhớ về việc hợp tác với Fab, em liên hệ trực tiếp với Fab yêu cầu họ gửi 'gói công nghệ' mẫu để nghiên cứu sẽ rất tốt đấy.

                        Chúc em thành công!

                        Comment


                        • Chào bạn Truyền,

                          Các file DRC như bạn Hithere123 nói đúng là thường cung cấp bởi nhà sản xuất. Về lý thuyết thì bạn có thể tự viết nhưng mà nó lớn, và phức tạp lắm không biết bạn có viết nỗi không. Thông thường người thiết kế chỉ thình thoảng chỉnh sửa lại từ file đã được cung cấp.

                          Calibre và Assura tớ đều có cả nhưng tớ lười upload lên lắm, chắc bạn phải chờ lâu. File DRC của calibre và assura cũng khác nhau nên tốt nhất bạn xem công nghệ mà bạn đang thiết kế sử dụng calibre hay assura để tớ up lên trước. Tớ bây giờ thỉnh thoảng dùng calibre nên có thử bẻ khóa nó chơi. Tớ có thể hướng dẫn bạn bẻ khóa bản calibre 2009.1. Những bản mới hơn thì tớ chưa thử. Assura tớ dùng từ ngày xưa hình như là bản 3.6. Bản này tớ bẻ vô tư. Hiên nay assura đã lên đến bản 4.1. Bản này tớ cũng biết cách bẻ khóa nhưng chưa thử bao giờ, tớ có thể hướng dẫn bạn làm thử. Nhân tiện tớ cũng nói calibre, assura base+hotfix dung lượng mỗi cái lên đến khoảng 2GB nên chuyện tớ lười upload lên bạn phải thông cảm.

                          Thì ra tập đoàn mà lúc trước anh Arix nhắc đến là Viettel. Tớ ở nước ngoài mà cũng nghe nói Viettel làm ăn khá lám có lẽ là giỏi nhất trong số các tập đoàn của chính phủ. Không biết nếu về nước tớ có xin được một chân thiết kế ASIC trong Viettel không bạn. Hay là mọi người nói tớ là loại phản động lưu vong, liếm gót ngoại bang vậy? Tớ nói đùa cho vui thôi đừng coi là thật.

                          Comment


                          • Hi bác Rommel.de,

                            Theo em được biết thì hiện tại Assura có rất nhiều version và chúng tương thích với các phiên bản khác nhau của Cadence. Hiện tại em cài IC5141 thì dùng phiên bản nào của Assura là tương thích hả bác?. Bác có đường link thi gửi cho em với. Em đã thử mấy ngày rồi mà vẫn chưa download được .
                            Còn việc bác về VN mà phát triển ngành IC lên thì tốt quá. Đất nước, tập đoàn luôn chào đón những người như các bác

                            to bác Yên,

                            Hiện tại em cũng đang nghiên cứu các công cụ này. Em thấy nó rất hay và mạnh trong việc thiết kế mà trước đây em không được dùng bác à.

                            Trân trọng,

                            Comment


                            • Chào bạn Truyền,

                              Bạn chỉ mới nói đúng có một nửa về Assura thôi. Thật ra ngay trước cadence sử dụng các file dạng db (IC5141 dùng loại này). Từ bản IC6 cadence chuyển sang dùng OpenAccess (OA). Vậy là từ đó các bản Assura đều có chia ra làm 2 loại, dùng cho db hoặc oa. Assura 4.1 mới nhất cũng vậy. Assura thì tớ download về từ website của cadence nhưng nếu bạn không có account thì không lấy về được đâu. Đợi khi nào rảnh rỗi tớ sẽ up assura 4.1 lên và cả license nữa. Tớ sẽ chỉ up loại dùng cho db thôi.

                              Comment


                              • Hi bác Rommel.de

                                Cảm ơn hồi âm của bác. Nếu bác up bản assura 4.1 và license lên thì tốt quá.
                                Cảm ơn bác nhiều.

                                Trân trọng,

                                Comment

                                Về tác giả

                                Collapse

                                hithere123 Tìm hiểu thêm về hithere123

                                Bài viết mới nhất

                                Collapse

                                Đang tải...
                                X