Hướng dẫn toàn diện về lập trình VHDL

MỤC LỤC

Định cấu hình ( Configurations )

Trong quá trình thiết kế, người thiết kế có thể muốn thử nghiệm với các sự biến đổi khác nhau của thiết kế bằng việc chọn lựa các kiểu kiến trúc khác nhau. Configuration có thể được sử dụng để cung cấp một sự thay thế nhanh các thể hiện của các phần tử ( Component ) trong một thiết kế dạng cấu trúc.

Các thư viện thiết kế

Để mở một thư viện và truy cập chúng như một Entity đã được biên dịch trong một thiết kế VHDL mới, điều đầu tiên cần làm là phải khai báo tên thư viện. Ví dụ: Giả sử chúng ta tạo một đóng gói để cất một hằng mà hằng này.

Các đối tượng dữ liệu

Các hằng ( Constant )

Một hằng nó là một đối tượng mà nó được khởi tạo để chỉ ra một giá trị cố định và nó không bị thay đổi. Khai báo hằng được phép khai báo trong các đóng gói, các Entity, các kiến trúc, các chương trình con, các khối, và trong phát biểu của các quá trình processes.

Các kiểu tín hiệu ( Signal )

Với các tín hiệu được khai báo trong các package thì tín hiệu này được gọi là tín hiệu toàn cục ( Các thiết kế có thể sử dụng chúng ), các tín hiệu được khai báo trong Entity là tín hiệu toàn cục trong một Entity, tương tự với tín hiệu được khai báo trong một kiến trúc, nó là tín hiệu dùng chung trong một kiến trúc.

Các kiểu dữ liệu

    Nếu chúng ta khai báo một đối tượng dữ liệu với kiểu là COLOR và không định nghĩa giá trị khởi tạo thì đối tượng dữ liệu sẽ được khởi tạo mặc định ở vị trí. Các đối tượng với kiểu có dấu và không dấu chúng được hiểu như là các số nguyên binary không dấu và các đối tượng với kiểu có dấu và chúng được dịch như các nguyên bù hai.

    Các toán tử

    Các toán tử logical

    Kiểu toán tử logic không chấp nhận các toán hạng là các kiểu tiền định nghĩa như kiểu BIT, BOOLEAN và các kiểu mảng các bit, các toán hạng cần phải là cùng kiểu và cùng độ dài.

    Các kiểu toán hạng

      Kiểu định danh đơn thuần chỉ là một cái tên do người dùng định nghĩa, nó có thể là tên của một hằng, một biến hay một tín hiệu, một Entity, một cổng, hay một chương trình con, hay các khai báo tham biến. Khi khai báo một tên cần phải khai báo ký tự đầu tiên phải kiểu chữ ký tự, lưu ý dấu gạch dưới không được phép đứng sau cùng, các từ khoá của VHDL không được dùng để làm khai báo các kiểu định danh, chẳng hạn như entity, port.

      Các phát biểu tuần tự

      Phát biểu gán biến

      Dùng để thay thế giá trị hiện thời của biến với một giá trị mới, giá trị mới này được chỉ ra bởi một biểu thức. Một biến có thể được đọc và cập nhật bởi một hoặc có thể nhiều quá trình, những biến này được gọi là shared variable (Biến chia sẻ).

      Phát biểu gán tín hiệu

      Nếu thời gian giữ chậm này được xem như tiêu tốn vào thực hiện công việc nào đó và tiếp sau nó ( đúng thời điểm của một công việc trước hoàn thành ) cần phải thực hiện một công việc khác thì thời gian thực hiện các công việc tiếp theo sẽ được thêm vào cuối của công việc trước đó. Còn nếu khoảng thời gian cần thực hiện một công việc tiền định ( Thời gian thực hiện của một công việc tiếp theo nào đó đứng trước thời điểm thực hiện một công việc trước, thì câu lệnh Transport sẽ thực hiện chèn vào và thực hiện công việc tiền định này ).

      Phát biểu CASE

      Phát biểu case cũng là phát biểu tuần tự, tuy nhiên nó cũng có thể được phát biểu xếp lồng nhau.

      Phát biểu Next

      Khi phát biểu next được thực thi, quá trình thực hiện sẽ nhảy đến phần cuối của vòng lặp (phát biểu cuối cùng K: =K+1) sau đó giảm giá trị của.

      Phát biểu WAIT

      Process bên trái sẽ làm cho Process treo ngay sau khi Start và chờ cho đến khi có sự kiện xuất hiện trên tín hiệu SigA. Còn Process bên phải sẽ thực hiện ba câu lệnh và sau đó rơi vào trạng thái chờ đến khi xuất hiện sự kiện trên tín hiệu SigB.

      Các lời gọi chương trình con

      Phát biểu trả về ( return ) sẽ là điểm kết thúc một chương trình con, và nó chỉ được sử dụng trong một hàm hoặc một thủ tục. Các phát biểu đồng thời được thực hiện song song trong cùng thời điểm mô phỏng, chúng không thực hiện theo thứ tự mà chúng được viết ra trong một kiến trúc.

      Phát biểu Process

      Một Process được kết nối với phần còn lại của thiết kế bởi việc đọc hoặc viết ra các giá trị từ các tín hiệu và các cổng mà chúng đã được khai báo phía ngoài Process. Một sensitivity list ( Tập các sự kiện thay đổi trạng thái cần xử lý trong một quá trình ) có cùng ý nghĩa với một Process có chứa phát biểu wait, mà phát biểu wait này là phát biểu cuối cùng trong một process và chúng có dạng sau: Wait on sensitivity list ;.

      Các phép gán tín hiệu đồng thời

      Một dạng khác của việc gán tín hiệu đồng thời đó là các phép gán tín hiệu đồng thời , các phép gán này được dùng ở bên ngoài của một process nhưng phải nằm trong một kiến trúc ( architecture ). Những phát biểu gán tín hiệu đồng thời được thực thi bất cứ khi nào có sự kiện xảy ra trong tín hiệu được sử dụng trong biểu thức.

      Các phép gán tín hiệu có điều kiện và các phép gán tín hiệu được chọn lựa

      Một phát biểu gán tín hiệu có điều kiện có thể được mô tả bởi một phát biểu process mà process có chứa phát biểu IF. Phép gán tín hiệu có chọn lựa có thể chỉ một đích gán và cũng chỉ có một biểu thức with.

      Các phát biểu Block

      Khi một block con khai báo một đối tượng có trùng tên với đối tượng trong block cha thì khai báo của block con sẽ định nghĩa lại đối tượng trùng tên với block cha. Tín hiệu S trong B1-1 sẽ là kiểu integer và truyền cho tín hiệu out 1 cũng là kiểu integer, mặc dù S được khai báo trong B1 là kiểu Bit.

      Các chương trình con

      - Các thủ tục (Procedure). Hàm và các đặc trưng của hàm. - Chúng được gọi và thực hiện như một biểu thức. - Luôn trả về một đối số. - Tất cả các tham số của hàm đều phải là chế độ mode IN. - Tất cả các tham số của hàm phải thuộc lớp các tín hiệu hoặc các hằng. - Bắt buộc phải khai báo kiểu của gía trị trả về. - Không được chứa các phát biểu Wait. Cú pháp của hàm được khai báo như sau:. function identifier interface_list return type_mark is {subprogram_declarative_item}. end [identifier];. Các định danh identifier chỉ ra tên của một hàm, còn interface_list chỉ ra định dạng tham số của một hàm. Mỗi một tham số được định nghiã theo cú pháp sau:. [class] name_list [mode] type_name [:=expression];. ở đây class của tham số đối tượng phải được chỉ ra là tín hiệu hoặc hằng, còn mode của đối tượng cần phải là mode in. Nếu không có tham số mode được chỉ ra thì được hiểu như là mode IN, còn nếu không có tham số class được chỉ ra thì tham số được hiểu như là một hằng. Xem ví dụ sau:. variable temp : real;. Tham số chuyển vào hàm được hiểu mặc định là một hằng số, vì không có khai báo của class. Thủ tục và các đặc trưng của chúng. - Chúng được gọi như một lời phát biểu. - Có thể trả về không hoặc một hoặc nhiều đối số. - Các tham số chuyển giao cho thủ tục có thể là mode in, out, và inout. - Các tham số chuyển giao cho thủ tục có thể là tín hiệu, hằng, biến. - Có thể có chứa phát biểu Wait. Cú pháp khai báo thủ tục như sau:. procedure identifier interface_list is {subprogram_declarative_item}. end [identifier];. Identifier được sử dụng để chỉ ra tên của procedure và interface_list chỉ ra các tham số hình thức của procedure. Mỗi tham số được sử dụng theo định nghĩa sau:. [class] name_list [mode] type_name [:=expression];. Class của đối tượng được xem như hằng, biến , hoặc là tín hiệu và mode của đối tượng có thể là in, out , inout. Nếu không có mode được chỉ ra thì. tham số được hiểu như mode in, nếu không có class được chỉ ra thì các tham số mode in được hiểu như là các hằng, còn tham số mode out và inout được hiểu như là các biến. Các tham số có thể là các hằng, các biến, hoặc các tín hiệu và mode của chúng có thể là in, out, hoặc inout. Nếu lớp của các tham số không xác định rõ ràng thì mặc nhiên nó là constant, nếu nó là mode in, còn nó là biến nếu mode của tham số đó là out hoặc inout. Một ví dụ thân procedure mô tả hành vi hoạt động của các đơn vị logic số học như sau :. ZCOMP : out BOOLEAN ) is begin. (signal ARRAY_NAME : inout Bit_vector ;. START_BIT, STOP_BIT : in NATUAL;. ROTATE_BY : in POSITIVE ) is Variable FILL_VALUE : BIT;. assert STOP_BIT > START_BIT. report “STOP_BIT is not greater than START_BIT”. severity NOTE;. for MACVAR3 in 1 to ROTATE_BY loop. end procedure ROTATE_LEFT;. Các procedure được gọi bởi lời gọi procedure. Một lời gọi Procedure có thể là một phát biểu tuần tự hoặc một phát biểu đồng thời, phát biểu này phụ thuộc vào nơi xuất hiện lời gọi thủ tục hiện tại. Nếu lời gọi này nằm bên trong một phát biểu process hoặc một chương trình con khác thì nó được gọi là phát biểu gọi procedure tuần tự, ngược lại nó được gọi là phát biểu gọi procedure gọi đồng thời. Cú pháp của phát biểu gọi procedure như sau :. Thực tế các biểu thức, các biến, các tín hiệu hoặc các file, được chuyển vào trong thủ tục và các tên cuả đối tượng và các tên này sẽ được dùng để lấy các giá trị tính toán từ trong thủ tục. Chúng được chỉ ra một cách rõ ràng bởi việc sử dụng sự kết hợp theo tên và kết hợp theo vị trí. Một phát biểu gọi thủ tục tuần tự được thực thi tuần tự cùng với các phát biểu tuần tự chung quanh nó. Một phát biểu gọi thủ tục đồng thời được thực thi bất cứ lúc nào khi có một sự kiện xảy ra trên một trong các tham số, mà các tham số này là một tín hiệu ở chế độ in hoặc inout. Một lời gọi thủ tục đồng thời có nghĩa tương đương với một process có chứa một lời gọi thủ tục tuần tự và một phát biểu wait. Phát biểu wait này sẽ làm cho quá trình chờ cho đến khi có một sự kiện xuất hiện trên các tham số tín hiệu của mode in hoặc inout. Sau đây là một ví dụ của lời gọi thủ tục đồng thời và phát biểu process tương đương với nó:. architecture DUMMY_ARCH of DUMMY is -- Tiếp đến là thân của thủ tục. START_BIT, STOP_BIT : in NATUAL ; signal VALUE : in INTEGER ) is.

      Các đóng gói ( Packages )

      Hơn nữa từ thực tế chúng ta thấy một process không thể nhận biết các tín hiệu thuộc sensitivity list vì nếu có process này sẽ rơi vào trang thái chờ ngay lập tức. Với một thủ tục có chứa phát biểu wait thì bất cứ biến hay hằng nào được khai báo trong thủ tục đó sẽ giữ nguyên giá trị của chúng trong suốt thời gian thực hiện phát biểu wait và tồn tại chỉ khi thủ tục được kết thúc.

      Mô hình cấu trúc

        Khi thể hiện chỉ được phép thể hiện phần giao tiếp của component ( Bao gồm tên, kiểu , hướng của các cổng vào ra của chúng ), các tín hiệu bên trong chúng không. Như trên hình vẽ chúng ta thấy phần thực thi có ba loại cổng khác nhau và chúng được mang tên như sau: OR2_gate, AND2_gate, XOR_gate,.

        Sơ đồ bộ cộng bốn bit sử dụng một bộ cộng   Half_ADDER và ba bộ cộng FULL_ADDER
        Sơ đồ bộ cộng bốn bit sử dụng một bộ cộng Half_ADDER và ba bộ cộng FULL_ADDER

        Mô hình mức RT (Register Tranfer) và các mạch logic tổ hợp

        Vì không có các phát biểu if, wait, loop nên các tín hiệu vào phải thuộc danh sách sensitivity list.

        Các thiết bị logic cơ bản

          Một Flip - Flop sẽ đựoc tạo ra nếu có được một kích thích bởi một sườn tín hiệu, hơn nữa nếu phép gán tín hiệu được thực hiện trên việc kích thích chuyển mức của một tín hiệu khác. Việc thiết lập các đầu vào (SET) và reset các đầu ra đồng bộ của Flip - Flop cùng với hoạt động của hệ thống đồng hồ, ngoài các khoảng thời gian khác các tín hiệu này không được xem xét, điều này được thực hiện bởi phần tử nhớ.