Thông báo

Collapse
No announcement yet.

[VN e-book project] Lập trình phần cứng bằng ngôn ngữ VHDL

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

  • [VN e-book project] Lập trình phần cứng bằng ngôn ngữ VHDL

    Hiện nay các sách viết về lập trình phần cứng bằng ngôn ngữ VHDL khá nhiều nhưng toàn bằng tiếng anh, tiếng pháp,... Và quan trọng là hình như chưa có tiếng việt.
    Ý tưởng của tớ là tại sao chúng ta không tự viết riêng một cuốn sách cho chính mình và hoàn toàn miễn phí. Ban đầu có thể chúng ta chỉ viết đơn giản. Sau đó chúng ta sẽ bổ sung dần để có được một cuốn sách đầy đủ, ngắn gọn và thực sự hữu ích cho mọi người - ít nhất là cho anh em tham gia diễn đàn dientuvietnam.net.

    Tớ sẽ post bản phác thảo nội dung cuốn sách trước và mọi người cùng góp ý.

    Chú ý là không để vi phạm bản quyền tác giả !!!



  • #2
    Nội dung (version 0.1)

    Chương 1: Giới thiệu
    1.1 - Phương pháp thiết kế vi mạch tích hợp và sự ra đời của VHDL
    1.2 - Mục tiêu và nội dung của tài liệu

    Chương 2: Phương pháp thiết kế dựa trên ngôn ngữ VHDL

    Chương 3: Các khái niệm cơ bản trong VHDL

    Chương 4: Các kiểu dữ liệu dùng trong VHDL

    Chương 5: Cách khai báo trong VHDL

    Chương 6: Các biểu thức và toán tử

    Chương 7: Xây dựng mô hình dãy

    Chương 8: Cách khai báo và sử dụng tín hiệu trong VHDL

    Chương 9: Xây dựng mô hình xử lý đồng thời

    Chương 10: Mô tả các cấu trúc

    Chương 11: Packages và thư viện

    Chương 12: Mô phỏng với phần mềm Modelsim

    Phụ lục A: Các liên kết hữu ích
    Phụ lục B: Các công cụ dùng trong thiết kết mạch tích hợp

    (Rất mong các bạn góp ý) tại GÓC THẢO LUẬN.
    Chú ý khi thảo luận chi tiết cần nói đến bài viết của ngày nào hoặc slide nào !
    Last edited by yesme@; 07-09-2005, 23:34.


    Comment


    • #3
      Phương pháp thiết kế vi mạch tích hợp và sự ra đời của VHDL

      Chương 1: Giới thiệu


      1.1 - Phương pháp thiết kế vi mạch tích hợp và sự ra đời của VHDL

      Trước đây, các mạch tích hợp (IC) thường được thiết kế và xây dựng bằng các công cụ đồ hoạ với sự trợ giúp của máy tính và được nhắc đến với cái tên quen thuộc trong giới điện tử là CAD (Computer Aided Design). Với phương pháp thiết kế này, chúng ta thường sử dụng các thành phần linh kiện cơ bản như các cổng logic, điện trở, tụ, các vi mạch cơ bản và các ký hiệu khác từ các thư viện được xây dựng sẵn bởi các nhà cung cấp công cụ CAD. Chúng ta chỉ việc gọi chúng ra, đặt chúng vào các vị trí trong sơ đồ nguyên lý và nối dây liên kết giữa các linh kiện này theo yêu cầu của ứng dụng. Về sau các cụm linh kiện hay được sử dụng lại được ném vào thư viện và chúng ta chỉ việc nhặt chúng ra khi cần. Phương pháp thiết kế này được gọi là bottom-up (từ dưới lên trên). Phương pháp này có ưu điểm là dễ hiểu nhưng lại tiêu tốn khá nhiều thời gian, đặc biệt là khi chúng ta muốn xây dựng các mạch lớn.

      Ngày nay, việc thiết kế các hệ thống điện tử được thực hiện với các hệ thống ngày càng phức tạp hơn. Các hệ thống này có thể tích hợp trên một chip đơn nhờ công nghệ bán dẫn đã thu nhỏ kích thước của transistor và cho phép tích hợp chúng lên chip với mật độ cao. Bên cạnh đó, chu kỳ phát triển ứng dụng ngắn cũng là một hệ số quyết định đòi hỏi các nhà thiết kế phải lưu tâm. Hệ số này quyết định sự tồn tại và chiếm lĩnh thị trường của nhà sản xuất chip và góp phần làm thoả mãn nhu cầu của người tiêu dùng. Theo tính toán của các nhà kinh tế thì khoảng thời gian để đưa một sản phẩm mới ra thị trường thông thường là 12 đến 18 tháng. Một ứng dụng phức tạp với một khoảng thời gian phát triển ngắn đòi hỏi các nhà thiết kế phải tính đến việc tái sử dụng các môđun đã thiết kế ở các sản phẩm trước đó. Trong khi đó công nghệ thiết kế và chế tạo liên tục phát triển và đổi mới. Do vậy, muốn thực hiện được việc tái sử dụng các môđun đã phát triển thì việc mô tả các môđun này (hay rộng hơn là việc mô tả các mạch) phải độc lập với công nghệ.
      Cùng với việc các mạch số ngày càng được quan tâm, các vấn đề nói trên đã dẫn đến việc xuất hiện chu trình thiết kế top-down (từ trên xuống). Việc sử dụng các ngôn ngữ mô tả phần cứng xây dựng mô hình các hệ thống ở nhiều mức mô tả khác nhau là hoàn toàn có thể. Nhờ vào việc cải tiến từng bước chu trình thiết kế top-down, một ngôn ngữ mô tả phải hỗ trợ tất cả các mức trừu tượng khác nhau: đặc điểm kỹ thuật hệ thống, mô tả thuật toán, các khối chức năng và netlist mức cổng lôgíc. Một lĩnh vực quan trọng trong chu trình thiết kế ngày nay là việc sử dụng các công cụ tổng hợp logic (synthesis tool). Các công cụ này cho phép tạo ra các netlist mức cổng lôgíc một cách tự động từ các mô tả về cách hoạt động. Điều này đòi hỏi một ngôn ngữ được chuẩn hoá cho phép mô phỏng hệ thống đã xây dựng ở các mức mô tả khác nhau.

      VHDL (VHSIC Hardware Description Language; VHSIC (Very High Speed Integrated Circuit)) ra đời nhằm đáp ứng những yêu cầu trên. VHDL cho phép mô tả các hoạt động tuần tự và đồng thời của các vi mạch số (chú ý : trong tài liệu về VHDL này chỉ đề cập đến các mạch số, các mạch tương tự sẽ được đề cập ở ngôn ngữ VHDL-AMS) . Các mạch số được mô tả trong VHDL có thể có định thời (timing) hoặc có thể không và VHDL cũng cho phép mô tả các mạch này ở các mức mô tả khác nhau. VHDL cũng cho phép xây dựng các thiết kế phân cấp bằng cách xây dựng các môđun nhỏ và nối chúng lại với nhau. Ngày này, hầu hết các công cụ thiết kế đều hỗ trợ ngôn ngữ VHDL vì nó đã được chuẩn hoá bởi IEEE. Do đó, VHDL có thể được sử dụng như mà một môi trường chuyển đổi giữa các công cụ CAD khác nhau hoặc giữa người sử dụng công cụ CAD và nhà cung cấp chip.

      VHDL được bắt đầu từ những năm 1980 nằm trong chương trình nghiên cứu chế tạo các vi mạch tích hợp tốc độ cao (VHSIC) của Mỹ. Mục đích của chương trình này là phát triển một ngôn ngữ mô tả phần cứng cho các hệ thống số. Tại thời điểm này, các công ty thiết kế các vi mạch VHSIC cho Bộ quốc phòng Mỹ sử dụng các ngôn ngữ khác nhau. Các vấn đề về trao đổi dữ liệu, tái sử dụng và tái sản xuất trong thiết kết là các chủ đề nổi cộm under these conditions. VHDL chính thức ra đời năm 1985 và được hoàn thiện sau đó 2 năm. Vào năm 1987, VHDL đã được chuẩn hoá bởi IEEE. Bên cạnh đó, VHDL cũng được công nhận như là một chuẩn của Viện chuẩn quốc gia Hoa Kỳ (ANSI - American National Standards Institute). Tài liệu chính thức mô tả về ngôn ngữ VHDL có thể tìm thấy tại thư viện của IEEE dưới nhan đề "The IEEE Standard VHDL Language Reference Manual (LRM)" và được chỉnh sửa định kỳ sau 5 năm.


      Comment


      • #4
        Mục tiêu và nội dung của tài liệu

        1.2 - Mục tiêu và nội dung của tài liệu

        Ngôn ngữ VHDL và vai trò của nó trong việc thiết kế các vi mạch có độ tích hợp cao là một chủ để bao trùm nhiều lĩnh vực ứng dụng, nhiều công nghệ khác nhau. Trong khuôn khổ có hạn, cuốn sách này chỉ nhằm giúp các bạn làm quen với việc sử dụng ngôn ngữ VHDL, một ngôn ngữ lập trình phần cứng đang được sử dụng rộng rãi hiện nay, để xây dựng các thiết kế ứng dụng từ đơn giản đến phức tạp. Việc nghiên cứu sâu về ngôn ngữ VHDL không thuộc phạm vi của cuốn sách. Cuốn sách rất phù hợp cho sinh viên năm thứ ba / thứ tư chuyên ngành điện tử - tin học - viễn thông đã có kiến thức cơ bản về thiết kế mạch số và các khái niệm về linh kiện điện tử, vi mạch. Cuốn sách còn là tài liệu bổ ích dành cho những người yêu thích việc thiết kế phần cứng và là tài liệu tham khảo cho các sinh viên tốt nghiệp cũng như các kỹ sư lành nghề đã có kinh nghiệm thiết kế phần cứng bằng ngôn ngữ VHDL.
        Nội dung cuốn sách được bố cục như sau: Chương 1 giới thiệu về sự ra đời của ngôn ngữ VHDL. Chương 2 trình bày về phương pháp thiết kế phần cứng bằng VHDL. Các khái niệm cơ bản về VHDL được trình bày trong Chương 3. Các chương 4, 5 và 6 đề cập đến các kiểu dữ liệu, cách khai báo, các biểu thức và toán tử trong VHDL. Cách xây dựng các mô hình phần cứng được mô tả trong các chương 7, 8 và 9. Chương 10 mô tả các cấu trúc, Chương 11 giới thiệu về các gói và thư viện. Cuối cùng, việc mô phỏng các thiết kế VHDL được đề cập trong Chương 12.
        (phần này sẽ được sửa lại sau khi viết xong các chương sau)


        Comment


        • #5
          Chương 2: Phương pháp thiết kế dựa trên ngôn ngữ VHDL

          Chương 2: Phương pháp thiết kế dựa trên ngôn ngữ VHDL

          Phần này viết sau khi hoàn tất Chương 3.


          Comment


          • #6
            Chương 3: Các khái niệm cơ bản trong VHDL

            Chương 3: Các khái niệm cơ bản trong VHDL

            Trong chương này chúng ta sẽ làm quen với các khái niệm cơ bản của ngôn ngữ VHDL. Một số ví dụ sẽ được đưa ra nhằm giúp các bạn hiểu rõ hơn các khái niệm đó và cách sử dụng chúng ra làm sao. Cấu trúc của chương này sẽ bắt đầu từ tổng quan các thành phần khác nhau của mô hình VHDL và sau đó sẽ đi phân tích cụ thể từng phần riêng biệt. Cuối cùng, chúng ta sẽ làm quen với các khái niệm về thư viện VHDL, phân tích và mô phỏng một vài ví dụ đơn giản.

            Một số khái niệm nhàm chán như các kiểu dữ liệu định nghĩa trước, các toán tử điều kiện, toán tử lặp,... dùng trong các biểu thức tương tự như trong các ngôn ngữ Pascal hay C sẽ không được đề cập ở đây. Các bạn có thể tìm thấy chúng qua các ví dụ trong các chương tiếp theo.

            Cụ thể trong chương này chúng ta sẽ tìm hiểu các vấn đề sau:
            - Các thành phần chính của một mô hình VHDL.
            - Khai báo một thực thể (entity).
            - Xây dựng một kiến trúc (architecture).
            - Xây dựng và sử dụng các gói (packages).
            - Phương pháp phân tích một mô hình VHDL.
            - Phương pháp mô phỏng một mô hình VHDL.

            3.1. Các thành phần chính của một mô hình VHDL

            Mục đích của các mô tả VHDL là cung cấp một mô hình các mạch và hệ thống số. Trong ngôn ngữ mô tả VHDL, dạng mô tả của một mạch vật lý thực được gọi là entity. Thông thường một entity bao gồm năm thành phần cơ bản : ENTITY, ARCHITECTURE, PACKAGE DECLARATION, PACKAGE BODY và CONFIGURATION, xem Hình 3.1.

            Thông thường trong VHDL chúng ta có một điểm khác nhau giữa hình dạng bên ngoài của một mô đun và mô tả bên trong của nó. Hình dạng bên ngoài được phản chiếu thông qua khai báo entity. Khai báo này trình bày một mô tả giao diện của một "hộp đen" (trong tiếng anh gọi là "black box"). Phần quan trọng của mô tả giao diện này bao gồm các tín hiệu mà thông qua đó các mô đun có thể giao tiếp với nhau.
            Nội dung bên trong của một mô đun là các hàm chức năng được mô tả trong thân của architecture. Chúng ta có nhiều cách xây dựng architecture. Trong số đó, có một cách là chúng ta viết các đoạn mã mô tả cách cư xử của mạch gồm các toán tử tuần tự và toán tử đồng thời. Một khả năng khác là xây dựng một mô tả cấu trúc hoạt động như là phần tử cơ sở cho các kiến trúc mạch được thiết kế theo kiểu phân cấp. Về thực tế, chúng ta cũng có thể kết hợp cả hai loại architecture này. Tuy nhiên, ở mức phân cấp thấp nhất mô hình VHDL phải chứa các mô tả cách cư xử của mạch. Một trong những đặc tính quan trọng của VHDL là khả năng giải quyết các thân kiến trúc khác nhau cùng thuộc về một khai báo entity. Trong trường hợp này, chúng ta cần phải thực hiện việc liên kế một kiến trúc với entity để có một phân cấp duy nhất. Điều này rất quan trọng trong quá trình mô phỏng (simulation) và tổng hợp (synthesis) về sau.
            Last edited by yesme@; 21-10-2005, 23:45.


            Comment


            • #7
              3.2 - Khai báo Entity

              Khai báo Entity bao gồm khai báo tên của entity và khai báo các giao diện vào ra của nó. Các khai báo này tương ứng với các thông tin về ký hiệu của một linh kiện giống như trong thiết kế truyền thống dựa vào việc vẽ các mạch nguyên lý. Các tín hiệu được sử dụng cho việc truyền thông với các phần còn lại của mạch được gọi là các cổng (port). Để có thể nắm bắt được cách khai báo entity, chúng ta xét một ví dụ đơn giản là khai báo một mô đun tổng toàn phần (full-adder) được mô tả trên Hình 3 2.

              Phần mã khai báo entity của bộ tổng toàn phần được thực hiện như sau:


              entity FULLADDER is
              __-- (Sau hai dấu trừ, phần còn lại của dòng được hiểu là chú thích
              __-- và không được dịch bởi chương trình dịch)
              __-- Dấu gạch dưới (_) trong phần code được dùng với mục đích để hiện thị tốt hơn trên forum này (thay cho việc dùng tabulation (TAB) trong soạn thảo)
              __-- Mô tả giao diện của FULLADDER
              ____port ( A, B, C: in bit;
              _________SUM, CARRY: out bit);
              end FULLADDER;


              Mô đun tổng toàn phần có tổng cộng 5 cổng vào/ ra. Ba cổng vào A, B, và C được biểu lộ bằng từ khoá in trong VHDL. Hai cổng ra là SUM và CARRY được biểu lộ bằng từ khoá out.

              Tín hiệu đi qua các cổng vào/ ra này được chọn là loại bit. Kiểu bit là một trong các kiểu định nghĩa trước như integer, real và các kiểu khác được định nghĩa bởi VHDL. Kiểu bit bao gồm hai ký tự là ‘0’ và ‘1’ biểu diễn cho các giá trị lôgíc của tín hiệu.

              Tất cả các khai báo cổng đều tạo ra một tín hiệu với tên và kiểu được xác định. Tín hiệu này được sử dụng trong các kiến trúc (architectures) tương ứng với thực thể (entity) theo các chế độ cổng sau:

              Chế độ vào (in): Cổng chỉ có thể được đọc trong thực thể (entity) và các kiến trúc (architectures) của nó.

              Chế độ ra (out): Cổng này chỉ có thể được viết.

              Chế độ vào-ra (inout): Cổng này có thể được đọc và được viết. Chế độ này thường hay được dùng để xây dựng các hệ thống bus.

              Chế độ đệm (buffer): Cổng này có thể được đọc và được viết. Mỗi cổng phải có một bộ điều khiển (driver).
              Last edited by yesme@; 24-02-2006, 19:32.


              Comment


              • #8
                Để cải thiện khả năng tái sử dụng các mã VHDL, những mô tả này có thể được thực hiện với các thông số, gọi là generics. Ví dụ, trong một thiết kế phân tầng chúng ta nên mô tả một thanh ghi với độ rộng bit tuỳ ý và thuyết minh thanh ghi này bằng một mô tả cấu trúc với độ rộng mong muốn thông qua một thông số tổng quát (generic). Việc khai báo thực thể cho một thanh ghi có thể được thực hiện như ví dụ sau:

                Ví dụ:
                entity DFF is
                __-- parameter: width of the data
                __generic (width: integer);
                __-- input and output signals
                __port ( CLK, NR: in bit;
                _____D: in bit_vector(1 to width);
                _____Q: out bit_vector(1 to width));
                end DFF;

                Thông số width liên quan đến độ rộng của lối vào bus B và lối ra bus Q. Các bus này được khai báo dưới dạng véc-tơ bit bit_vector(1 to width). Dạng véc-tơ bit này tương đương với một mảng tín hiệu loại bit với số thành phần trong mảng được xác định bởi thông số width. Các thành phần của mảng được đánh số từ 1, 2, …, width.

                Thông thường, khai báo của entity có dạng như sau:

                Cú pháp:
                entity entity_name is
                __[generics]
                __[ports]
                __[declarations (types, constants, signals)]
                __[definitions (functions, procedures)]
                [begin -- normally not used
                __statements]
                end [entity_name];

                Mô tả chi tiết về generic và khai báo port sẽ được trình bày trong Phần 3.3.3. Các ví dụ trên có thể được sử dụng như các template (mẫu). Ngoài việc khai báo generic port, chúng ta cũng có thể khai báo kiểu dữ liệu, hằng số, hàm và tín hiệu. Những khai báo này nằm trong entity và có thể được truy nhập bởi các xử lý của architecture tương ứng. Phần mã nằm giữa các từ khóa begin end là các câu lệnh và thủ tục thụ động. Chúng có thể được gọi bởi chương trình. Thụ động ở đây có nghĩa là cho phép việc không có sự gán tín hiệu hoặc trong thủ tục đó hoặc trong bất cứ thủ tục nào được gọi trong thủ tục đó. Các câu lệnh thụ động thường được dùng để phát ra các cảnh báo (warning).
                Last edited by yesme@; 25-02-2006, 15:38.


                Comment


                • #9
                  Phần tiếp theo sẽ trình bày về architecture.


                  Comment


                  • #10
                    Anh yesme@, có cần em phụ giúp không ? Vì em thấy phần anh viết có cấu trúc giống với sách của bọn Tây. Hay anh viết lí thuyết còn ví dụ em viết phụ một tay. Em viết VHDL cũng kha khá.

                    Comment


                    • #11
                      ok, nếu được thế thì quá tốt. Em viết giúp anh một "Case study" theo dạng design Top-->Down hoặc Down-->Top. Sau đó là một dạng "case study" kết hợp cả hai phương pháp trên. Anh nghĩ phần này rất thiết thực và quan trọng đối với những người mới học về VHDL.


                      Comment


                      • #12
                        Chào các Bác!
                        Tui cũng đang tìm hiểu về công nghệ này
                        đã mày mò viết được vài chương trình nho nhỏ nhưng mà không thể m ô phỏng để em dạng sóng được. Tui dùng active-hdl\
                        Mong các Bác giúp đỡ

                        Comment


                        • #13
                          Các Bác có thể chỉ cho tui các bước để mô phỏng trong Active-HDL k?
                          TUi không thể nào lấy được dạng sóng ra
                          Nếu tui chỉ viết đoạn chương trình như sau thì có thể xem dạng sóng được không?
                          --chuong trinh and2 gate
                          --phan entity
                          ENTITY and2_ent IS
                          PORT(a,b: in bit;
                          y: out bit);
                          ---phan thuat toan
                          ARCHITECTURE and2_arch OF and2_ent IS
                          BEGIN
                          y<=a and b;
                          END and2_arch;
                          ---ket thuc
                          mong các bác giúp đỡ
                          cám ơn nhiêu
                          TUi đang làm đồ án môn học

                          Comment


                          • #14
                            Tất nhiên là bạn có thể test được. Ở mỗi lối vào bạn cấp một chuỗi giá trị 0,1 (có thể một sóng hình vuông với điều kiện là tần số khác nhau - để dễn quan sát).
                            Tại lối ra bạn sẽ nhận được một chuỗi giá trị 0,1 theo đúng hàm y = a AND b.


                            Comment


                            • #15
                              Nguyên văn bởi c828
                              Các Bác có thể chỉ cho tui các bước để mô phỏng trong Active-HDL k?
                              TUi không thể nào lấy được dạng sóng ra
                              Nếu tui chỉ viết đoạn chương trình như sau thì có thể xem dạng sóng được không?
                              --chuong trinh and2 gate
                              --phan entity
                              ENTITY and2_ent IS
                              PORT(a,b: in bit;
                              y: out bit);
                              ---phan thuat toan
                              ARCHITECTURE and2_arch OF and2_ent IS
                              BEGIN
                              y<=a and b;
                              END and2_arch;
                              ---ket thuc
                              mong các bác giúp đỡ
                              cám ơn nhiêu
                              TUi đang làm đồ án môn học
                              Không viết testbench kích ngõ vào và xem ngõ ra,lấy gì để mà mô phỏng?

                              Comment

                              Về tác giả

                              Collapse

                              yesme@ Tìm hiểu thêm về yesme@

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

                              Collapse

                              Đang tải...
                              X