Thông báo

Collapse
No announcement yet.

Làm thế nào để chọn một vi xử lý phù hợp ?

Collapse
This topic is closed.
X
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • Làm thế nào để chọn một vi xử lý phù hợp ?

    LÀM THẾ NÀO ĐỂ CHỌN MỘT BỘ VI XỬ LÝ PHÙ HỢP
    Nguồn: Stuart R. Ball – Embedded Microprocessor Systems, Real World Design – Second Edition
    Giả sử bạn quyết định dùng một con vi xử lý cho một dự án mới. Bạn phải thực hiện các bước nào để chọn ra một con thích hợp ? Với hầu hết các ứng dụng, sự lựa chọn bao gồm nhiều bước mà chúng phải cân bằng giữa giá thành và chức năng. Tiến trình lựa chọn cụ thể sẽ tùy thuộc vào mức độ phức tạp của sản phẩm cần chế tạo nhưng đều phải bao gồm các bước sau:
    - Yêu cầu về số chân I/O.
    - Yêu cầu về các giao tiếp.
    - Yêu cầu về bộ nhớ.
    - Yêu cầu về số ngắt (interrupts).
    - Xem xét về vấn đề thời gian thực.
    - Môi trường phát triển.
    - Yêu cầu về tốc độ xử lý.
    - Xem xét về Kiến trúc bộ nhớ.
    Last edited by itek; 02-11-2005, 13:25.

  • #2
    1.1 Yêu cầu về số chân I/O

    1.1 Yêu cầu về số chân I/O
    Để một hệ thống có giá thành thấp nhất, số lượng linh kiện sẽ là một yếu tố chính quyết định giá thành cuối cùng. Hệ thống như thế thường chỉ sử dụng một chíp đơn với ROM và RAM nội. Khi không giao tiếp với bộ nhớ ngoài, các chân tự do được dùng cho I/O. Các chân này được nhóm lại thành các port, và mỗi chân có thể là ngõ vào hoặc ngõ ra. Ví dụ một chân dùng để điều khiển rờ le, chân khác thì dùng để kết nối đến cảm biến mực nước.
    Hầu hết các nhà sản xuất vi điều khiển đều chế tạo ra vi điều khiển có chứa bộ nhớ trong và các chân điều khiển I/O. Có quá nhiều nhà sản xuất không thể liệt kê hết ra đây, dưới đây chỉ là vài nhà xản xuất tiêu biểu:

    Nhà sản xuất------Processor----------Số chân I/O
    Intel and others---8031/8051 family---32
    Microchip---------PIC17C42-----------33
    Motorola----------68HC05 family------Thay đổi
    Zilog-------------Z8 (Z86E40)---------32
    Signetics/Philips---83C751-------------19
    Atmel------------AT9OS4414---------32
    Trong danh sách trên có vài linh kiện có chứa cổng nối tiếp hai hướng, song nếu muốn dùng bạn phải bỏ đi 2 chân I/O. Một số khác thì có chứa timer sử dụng một chân I/O cho hoạt động của nó. Một số lại có ngõ ra dòng cao và ngõ ra cực thu hở, rất phù hợp để lái rờ le hoặc cuộn solenoid mà không cần thêm phần cứng phụ. IC cụ thể nào phù hợp cho hệ thống của bạn sẽ tùy thuộc vào hệ thống đó.
    Khi đếm số chân I/O phải đảm bảo rằng bạn đếm luôn cả các chân sử dụng cho các chức năng bên trong, như cổng nối tiếp và timer, chúng cũng chiếm một số chân xác định. Một số vi xử lý hỗ trợ truy cập RAM hoặc ROM ngoài, các chức năng đó sẽ chiếm từ 8 đến 19 chân I/O.

    Comment


    • #3
      1.2 Yêu cầu về các giao tiếp

      1.2 Yêu cầu về các giao tiếp
      Mục tiêu của bộ xử lý nhúng (embedded processor) là tương tác với phần cứng trong thế giới thật. Không chỉ xử lý giao tiếp đó, bộ xử lý còn phải đủ nhanh để xử lý dữ liệu. Trong hệ thống chíp đơn, bộ xử lý được chọn sẽ phụ thuộc vào các yêu cầu giao tiếp. Ví dụ: Microchip PIC17C42 có hai ngõ ra điều chế độ rộng xung (PWM), có thể dùng để thiết kế hệ thống antilock braking và motor servo. Chú ý: phải đọc kỹ datasheet. Nhiều bộ vi xử lý có những giới hạn mà không thể nhìn thấy ngay được. Ví dụ bạn có thể nghe nói rằng một cổng nối tiếp có thể hoạt động ở tốc độ baud lớn nhất, nhưng hãy kiểm tra cẩn thận trong datasheet, không phải tất cả các chế độ hoạt động của cổng nối tiếp đó cũng có thể hoạt động ở tốc độ baud lớn nhất.
      Xác định một vi xử lý cụ thể qua yêu cầu về các giao tiếp không phải lúc nào cũng dễ. Không may là chẳng có công thức kỳ diệu nào để xác định điều này cả. Bạn có thể viết ra danh sách các giao tiếp và các linh kiện có khả năng xử lý chúng để lựa chọn.

      Comment


      • #4
        1.3 Yêu cầu về bộ nhớ

        1.3 Yêu cầu về bộ nhớ
        Xác định yêu cầu về bộ nhớ là một phần quan trọng trong thiết kế hệ thống nhúng. Nếu bạn ước lượng cao hơn bộ nhớ cần thiết bạn có thể chọn phải một đáp áp đắt tiền. Còn nếu bạn ước lượng thấp hơn thì dự án có nguy cơ chậm trễ do phải thiết kế lại. Dung lượng bộ nhớ phụ thuộc vào số bít địa chỉ giao tiếp do đó bạn không cần phải ước lượng bộ nhớ yêu cầu đến mức từng byte. Bạn cũng phải đảm bảo rằng bạn có đủ tiền.

        Comment


        • #5
          1.3.1 Ram

          1.3.1 RAM
          RAM thì dễ ước lượng. Số biến cộng với tổng số bộ đệm bên trong, FIFO (first in, first out), và stack là lượng RAM cần thiết. Nhiều IC vi điều khiển bị giới hạn ở mức 1024 byte bộ nhớ nội. Nếu yêu cầu bộ nhớ vượt quá bộ nhớ nội thì phải thêm vào RAM ngoài. Tuy nhiên làm thế thì sẽ phải thêm chân I/O để truy cập RAM ngoài, và như thế thì làm chệch mục đích là hệ thống chỉ có một chíp đơn.
          Một lưu ý quan trọng: có vài vi điều khiển hạn chế việc sử dụng RAM, như phần RAM nội dùng cho các bank thanh ghi. Ví dụ: con 8031 có 128 byte RAM nội. Nó có 4 bank thanh ghi dùng hết 32 byte RAM, do đó chỉ còn 96 byte RAM dùng được. Nếu ứng dụng của bạn chỉ cần một hoặc 2 bank thanh ghi thì phần còn dư có thể dùng chung. Con 8052 có 256 byte RAM mục đích chung, nhưng 128 byte cao chỉ có thể truy cập được bằng cách dùng định địa chỉ gián tiếp. Atmel AVR90S4414 có 32 thanh ghi mục đích chung, nhưng chỉ có 16 thanh có thể dùng với các lệnh dữ liệu trực tiếp.
          Dung lượng RAM yêu cầu cũng thay đổi theo ngôn ngữ lập trình mà bạn dùng. Có vài trình biên dịch sử dụng quá nhiều RAM.

          Comment


          • #6
            1.3.2 Rom

            1.3.2 ROM
            Lượng ROM cần thiết cho hệ thống là tổng của mã chương trình và các bảng ghi trên ROM. Ví dụ: Các bảng ghi trên ROM dùng để lưu trữ bảng tra các bước tăng tốc của motor, các bảng tìm kiếm chuyển đổi dữ liệu, và các bảng rẽ nhánh gián tiếp. Các bảng ghi thì dễ ước lượng dung lượng. Phần khó là ước lượng dung lượng của mã. Việc này sẽ dễ dàng hơn nếu bạn có nhiều kinh nghiệm, tích lũy được qua các lần ước lượng sai. Tuy nhiên điều quan trọng cần nhớ là không cần phải chính xác đến mức xấp xỉ giới hạn trên của ROM. Một quy tắc là nếu ROM đầy hơn 80% thì đó là quá đầy. Trừ khi bạn có thể đảm bảo rằng yêu cầu của hệ thống chẳng bao giờ thay đổi, còn không thì nên chừa ra một ít.
            Giống như việc sử dụng RAM, dung lượng mã phụ thuộc vào ngôn ngữ lập trình mà bạn chọn. Ví dụ: một chương trình viết bằng hợp ngữ chiếm ít dung lượng hơn là viết bằng Pascal. Và thêm nữa nó cũng phụ thuộc vào trình biên dịch được dùng.
            Không phải là ý hay nếu để ngôn ngữ lập trình làm thay đổi bảng thiết kế, ít nhất là trong các hệ thống giá thành thấp. Các ngôn ngữ dễ sử dụng, debug và bảo dưỡng thì thường chiếm nhiều bộ nhớ và tốc độ xử lý. Tuy nhiên đôi khi chính sách của công ty hoặc hợp đồng với khách hàng đòi hỏi cụ thể phải sử dụng ngôn ngữ lập trình cấp cao. Trong các trường hợp như thế thì bạn phải đối đầu với việc giá thành bị tăng lên và các phức tạp mà nó mang đến.

            Comment


            • #7
              1.4 Yêu cầu về số lượng ngắt

              1.4 Yêu cầu về số lượng ngắt
              Có nhiều thiết kế phải sử dụng ngắt (interrupt). Sử dụng ngắt tốt nhất cho các trường hợp không thể đợi bộ xử lý làm đến lượt. Trong vài trường hợp dùng ngắt nhằm làm giảm độ phức tạp của phần cứng (và các giá thành liên quan), nhưng trong hầu hết các trường hợp nó làm mất nhiều thời gian debug và có nguy cơ khó tìm ra các lỗi khi các lỗi đó xảy ra không liên tục.
              Các ngắt được dùng để báo cho bộ vi xử lý biết các sự kiện đặt biệt như tràn timer hoặc có một phần cứng nào nó cần được lưu ý. Đếm sự kiện dùng ngắt là dễ làm nhất nhưng phải đảm bảo có nguồn ngắt tốt.

              Comment


              • #8
                1.5 Xem xét về vấn đề thời gian thực

                1.5 Xem xét về vấn đề thời gian thực
                Chủ đề này bao trùm nhiều lĩnh vực, và thường gần với vấn đề tốc độ xử lý.
                Các sự kiện thời gian thực là vấn đề mà các bộ vi xử lý nhúng thường phải xử lý. Tuy nhiên có vài sự kiện đặc biệt đáng được xem xét. Ví dụ: bạn có một hệ thống phụ điều khiển một motor bằng phương pháp điều chỉnh độ rộng xung.
                Trong phương pháp này dòng điện motor được kiểm soát bằng cách chuyển mạch dòng điện ở tần số cao và dùng duty cycle để điều khiển tốc độ motor. Motor là thiết bị cơ khí khá chậm, sẽ đáp ứng theo dòng điện trung bình. Duty cycle càng thấp thì dòng trung bình càng thấp và tốc độ quay càng chậm.
                Theo lý thuyết thì vi xử lý không thể xử lý motor dựa trên thời gian thực. Bởi vì tần số chopping, tần số chuyển mạch dòng điện qua motor, nhanh hơn khả năng xử lý của vi xử lý. Nhưng yêu cầu của các tác vụ khác, như truyền thông với thiết bị đang điều khiển với hệ thống phụ này, thì không thành vấn đề. Như thế dường như chúng ta phải cần một vi xử lý chạy nhanh hơn, mắc tiền hơn để điều khiển motor, và như thế giá thành hệ thống sẽ tăng lên.
                Tuy nhiên vẫn có một giải pháp khác. Nhiều vi xử lý có các ngõ ra PWM hoặc các timer có thể cấu hình để hoạt động như là các ngõ ra PWM. Một ví dụ tiêu biểu là dòng Microchip PIC 16C/17C, dòng Atmel AT90S và dòng Intel 80C196. Sử dụng các bộ điều khiển PWM bên trong này sẽ giải phóng bộ vi xử lý khỏi công việc nặng nhọc kia. Thay vào đó nó chỉ cần gửi duty cycle (hoặc tần số) đến bộ điều khiển PWM.
                Đây chỉ là một ví dụ làm thế nào để lựa chọn đúng một vi xử lý có thể giải quyết được vấn đề thời gian thực. Các ví dụ khác bao gồm chọn một bộ xử lý có tích hợp port nối tiếp tốc độ cao dùng cho giao tiếp đa vi xử lý; chọn một bộ xử lý có bộ điều khiển truy cập bộ nhớ trực tiếp (DMA); hoặc chọn một bộ xử lý có các thanh ghi truy cập bộ nhớ đặc biệt để tăng tốc độ.

                Comment


                • #9
                  1.6 Môi trường phát triển

                  1.6 Môi trường phát triển
                  Môi trường phát triển thường là một vấn đề chủ chốt đáng xem xét. Các công cụ phát triển mới đòi hỏi một đường cong học tập (learning curve), và với một kế hoạch phát triển khít khao thì thường không có thời gian để nghiên cứu, tích lũy, và sử dụng thành thạo các công cụ mới đó. Một số công ty thường chọn lấy một dòng xử lý và sử dụng nó cho một khoảng thời gian dài.
                  Ngay cả khi khởi đầu một thiết kế từ bàn tay trắng thì các công cụ phát triển vẫn là vấn đề chính cần được xem xét. Ví dụ: chọn một dòng xử lý đã được sử dụng rộng rãi, như 8031, cho phép bạn chọn khá nhiều công cụ phát triển từ nhiều nhà sản xuất khác nhau. Khả năng của các công cụ đó (ví dụ như các bộ emulator) hoàn toàn phụ hợp với yêu cầu và túi tiền của bạn. Nói cách khác, các công cụng cho các bộ xử lý đặc biệt thường chỉ có ở các nhà sản xuất IC và giá tiền thì vượt quá khả năng của bạn.
                  Công cụ có thể là một yếu tố chủ chốt. Nếu danh sách bộ xử lý cần chọn giảm xuống chỉ còn 2, thì việc tìm kiếm giá cả của các công cụ có thể giúp có được quyết định sáng suốt. Trong mọi trường hợp phải chắc rằng bạn biết rõ giá cả của các công cụ, đặc biệt là các bộ emulator từ các nhà sản xuất IC, trước khi cho ra sự lựa chọn cuối cùng.
                  Nếu bạn đang lập kế hoạch sử dụng một RTOS (real-time operation system – hệ điều hành thời gian thực), thì việc chọn lấy một RTOS có thể cũng sẽ ảnh hưởng đến việc lựa chọn bộ xử lý. Có khá nhiều RTOS, một số thì miễn phí, số khác thì cần phải mua một lần hoặc được tính giá theo từng đơn vị sản phẩm làm ra. Phải đảm bảo bộ xử lý và RTOS được chọn phù hợp với nhau, và giá thành của RTOS đó phù hợp với giá thành sản phẩm của bạn.

                  Comment


                  • #10
                    1.7 Yêu cầu về tốc độ xử lý

                    1.7 Yêu cầu về tốc độ xử lý
                    Có vài hướng dẫn giúp lựa chọn phù hợp với yêu cầu này:

                    - Xem xét các khoảng thời gian trể liên quan đến ngắt. Bộ xử lý phải đủ nhanh để xử lý các ngắt để không gây ra bất cứ vấn đề tồi tệ nào.
                    - Độ dài của vòng lặp hỏi vòng phải đủ ngắn để không bao giờ bỏ sót một byte nào từ cổng nối tiếp hoặc từ các giao tiếp khác. Trong các hệ thống sử dụng ngắt cần phải xem xét độ dài của vòng lặp hỏi vòng cộng với các khoảng trể do ngắt trong trường hợp xấu nhất.
                    - Lưu ý, trong một vài trường hợp việc chọn lấy tốc độ cao hơn không mang lại lợi ích gì khi mà phải có những khoảng thời gian trì hoãn để phù hợp với yêu cầu về thời gian truy cập bộ nhớ.
                    Vài cạm bẫy thường gặp về tốc độ xử lý:

                    • Nhầm lẫn giữa tốc độ xung nhịp với tốc độ xử lý. Ví dụ: Một con 8031 chuẩn có tốc độ ngõ vào xung nhịp khoảng 12MHz. Nếu nói nó là một bộ xử lý 12MHz thì là sai. Tốc độ đó phải đi qua một bộ chia 12 ở bên trong IC. Do đó chỉ có được tốc độ xử lý là 1MHz. Nhiều bộ xử lý như 80186/80188 có bộ chia 2 xung nhịp. Dòng xử lý PIC có bộ chia 4, dòng Atmel AT90S thì không chia. Do đó nếu xem xét về tốc độ thực thi thì một con AT90S chạy ở 8MHz (xung nhịp 8MHz, tốc độ thực thi 8MHz) sẽ chạy nhanh hơn con PIC chạy ở 20MHz (xung nhịp 20MHz, tốc độ thực thi 5MHz).
                    • Không xem xét tập lệnh. Dòng Atmel AT90S và dòng Microchip PIC 16C/17C có tốc độ thực thi khá cao. Tuy nhiên kiến trúc RISC có thể là một cái bẫy thực sự. Ví dụ: các chíp này thiếu mất các lệnh rẽ nhánh gián tiếp (indirect branch). Có thể xây dựng hàm rẽ nhánh gián tiếp nhưng như thế phải mất vài chục lệnh. Ưu thế về tốc độ thực thi vì thế bị giảm đi do phải thực hiện nhiều bằng phần mềm. Một vi điều khiển RISC có thể thực thi lệnh rất nhanh nhưng có thể không nhanh bằng CISC, CISC có tập lệnh có thể thực hiện nhiều hoạt động phức tạp. Ví dụ: nhân 2 số 16 bít mất khoảng 1 lệnh và chỉ mất vài chu kỳ máy với một bộ xử lý CISC, hoặc chỉ mất một chu kỳ máy với DSP có bộ nhân bằng phần cứng. Bộ xử lý RISC hoặc không có bộ nhân hoặc không có bộ chia bằng phần cứng, các phép toán này sẽ phải thực thi bằng phần mềm với giải thuật thay thế và có thể chiếm nhiều dòng lệnh cùng với rất nhiều chu kỳ máy.
                    • Không xem xét về kiến trúc. Dòng ADSP-2100 của Analog Device là dòng DSP rất thích hợp cho các ứng dụng nhúng. Chúng được tối ưu cho việc xử lý tín hiệu số. Tuy nhiên chúng cũng có vài giới hạn. Vài phép toán đòi hỏi có thêm thao tác chuyển giá trị từ RAM sang thanh ghi mới dùng được, trong khi đó có vài bộ xử lý khác có tốc độ thấp hơn lại cho phép thao tác trực tiếp trên RAM.
                    Xem thêm ở: http://www.dientuvietnam.net/board/showthread.php?t=645
                    Mỗi vi xử lý có một điểm riêng. Chẳng có gì là bí mật cả. Chỉ cần bạn hiểu datasheet của linh kiện trước khi sử dụng nó. Tìm lấy một data book hoặc CD-ROM. Đọc nó. Học về các timing diagram, đặc biệt là các con số giới hạn. Hiểu rõ mọi thứ mà hệ thống của bạn sẽ kết nối đến. Nếu bạn chưa hiểu hết mọi thứ thì bạn chưa sẵn sàng để bắt đầu thiết kế.

                    Comment


                    • #11
                      1.8 Kiến trúc bộ nhớ

                      1.8 Kiến trúc bộ nhớ
                      Có hai kiến trúc bộ nhớ chính của vi xử lý: von Neumann và Harvard. Kiến trúc von Neumann cho phép dữ liệu và mã trộn lẫn với nhau. Bạn có thể đặt bảng dữ liệu trong PROM cùng với mã, và bạn có thể chuyển mã vào RAM để thực thi. Nếu mã nằm trong RAM nó có thể tự điều chỉnh bằng cách ghi vào đó.
                      Kiến trúc Harvard thì tách riêng vùng mã và vùng dữ liệu. Mã thực thi từ PROM (thường là vậy), dữ liệu đến từ vùng RAM riêng, và bạn không thể lấy dữ liệu từ vùng mã. Hầu hết các vi xử lý sử dụng kiến trúc Harvard, nói đúng ra là sử dụng kiến trúc Harvard modified, với mã và dữ liệu nằm riêng nhưng vẫn vẫn phép lấy dữ liệu từ vùng mã. Điều này cho phép các bảng ghi hoặc các thông tin khác được biên dịch đặt nằm trong mã để sử dụng lúc thực thi chương trình. Có nhiều chíp đơn vi xử lý sử dụng kiến trúc Harvard, như dòng 8031, dòng Microchip PIC, dòng Atmel AVR90S…
                      Lợi điểm của kiến trúc Harvard là có đường dẫn dữ liệu và đường dẫn bộ nhớ tách riêng, cho phép đồng thời lấy dữ liệu và mã, làm tăng thông lượng xử lý. Nếu bạn đang xem xét sử dụng 8031 bạn sẽ thấy rằng nó có vài thanh ghi có thể được dùng để trỏ vào vùng dữ liệu RAM, nhưng chỉ có một thanh ghi (DPTR) có thể được dùng để trỏ vào vùng mã PROM. Một ứng dụng muốn truy cập liên tục hai bảng dữ liệu nằm trong PROM thì phải liên tục chuyển DPTR qua lại. Một giải pháp cho vấn đề này là chuyển một trong hai bảng dữ liệu vào RAM, nhưng khi đó bạn phải đảm bảo có đủ RAM để chứa dữ liệu.

                      Comment

                      Về tác giả

                      Collapse

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

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

                      Collapse

                      Đang tải...
                      X