Trung tâm đào tạo thiết kế vi mạch Semicon


  • ĐĂNG KÝ TÀI KHOẢN ĐỂ TRUY CẬP NHIỀU TÀI LIỆU HƠN!
  • Đăng ký
    *
    *
    *
    *
    *
    Fields marked with an asterisk (*) are required.
semicon_lab.jpg

Cấu trúc always trong verilog

Email In PDF.

Cấu trúc always@ là một phần chính, quan trọng và sử dụng rất nhiều trong khi viết RTL code. Cấu trúc always@ mô tả các sự kiện sẽ xảy ra dựa trên một số điều kiện cụ thể nào đó. Cấu trúc always@ đặt trong các module, tức là thành phần nằm trong module.

Các hoạt động, sự kiện trong always@ được mô tả bằng các hàm if, case, các toán tử, phép gán (không phải lệnh gán assign). Một module có thể chứa một hoặc nhiều always@ nhưng càng ít always @ trong một module thì càng thuận tiện cho việc tổng hợp.

Cấu trúc always@ gồm các thành phần cơ bản như sau:

- Từ khóa bắt buộc always@ chỉ ra cấu trúc là cấu trúc always@

- Cặp từ khóa begin/end để bắt đầu và kết thúc một cấu trúc always@. Với những always@ chỉ chứa duy nhất một hàm if, case thì không cần phải có cặp từ khóa begin/end nhưng không nên bỏ cặp từ khóa này để đảm bảo sự chính xác, sự thống nhất và tránh nhầm lẫn cho RTL code.

- sensitivity list là danh sách độ nhạy. Danh sách này liệt kê tất cả các tín hiệu mà sự thay đổi trạng thái của chúng sẽ kích hoạt các thành phần trong cấu trúc always@.

- elements là các thành phần hoạt động theo sự thay đổi của các tín hiệu trong danh sách độ nhạy.

Chú ý: Trong always@, tín hiệu được gán (tín hiệu nằm bên trái của phép gán hay của một biểu thức) luôn phải được khai báo kiểu reg.

Cấu trúc always@

always @ (sensitivity list) begin

elements

end

Ví dụ về cấu trúc always@

always @ (A or B or C) begin

D = A & B & C;

end

Phân loại cấu trúc always@​

Việc phân loại cấu trúc always@ ở đây dựa trên loại mạch sẽ tạo ra khi tổng hợp always@ là mạch tổ hợp hay mạch tuần tự. Hai loại này sẽ có danh sách độ nhạy được mô tả khác nhau.

Cấu trúc always@ mạch tổ hợp

always@ mô tả mạch tổ hợp có các “ngõ ra” (tín hiệu bị tác động) thay đổi ngay lập tức theo sự thay đổi của “ngõ vào” (tín hiệu tác động). Nghĩa là “ngõ ra” thay đổi theo mức logic của tín hiệu tác động.

Danh sách độ nhạy cho always@ mạch tổ hợp liệt kê tất cả tên của tín hiệu tác động đến hoạt động của mạch. Phép gán sử dụng trong always@ mạch tổ hợp là phép gán blocking, biểu thị bởi dấu “=”.

always@ mạch tổ hợp

always @ (A or B or C) begin

D = A & B & C;

end

hoặc

always @ (*) begin

D = A & B & C;

end

Mạch chức năng của trên:

 

Mạch chức năng của hai ví dụ always@ mạch tổ hợp​

Cấu trúc always@ mạch tuần tự

always@ mô tả mạch tuần tự có các “ngõ ra” (tín hiệu bị tác động) thay đổi theo sự chuyển mức logic của “ngõ vào” (tín hiệu tác động). Nghĩa là “ngõ ra” thay đổi theo cạnh lên hoặc cạnh xuống của tín hiệu tác động.

Danh sách độ nhạy cho always@ mạch tuần tự liệt kê tất cả các cạch tín hiệu tác động đến hoạt động của mạch, thường chỉ có tín hiệu xung clock và tín hiệu reset bất đồng bộ. Phép gán sử dụng trong always@ mạch tổ hợp là phép gán non-blocking, biểu thị bởi dấu “<=”.

always@ mạch tuần tự

always @(posedge clk) begin

D <= A & B & C;

end

Sơ đồ mạch chức năng của đoạn code RTL trên như sau:

 

Mạch chức năng của ví always@ mạch tuần tự​

Hoạt động của mạch always@ tổ hợp và always@ tuần tự khác nhau như sau:

 

Hoạt động của always@ tổ hợp (trái) và always@ tuần tự​

Nguồn: icdesignvn 

Bạn Có Đam Mê Với Vi Mạch hay Nhúng      -     Bạn Muốn Trau Dồi Thêm Kĩ Năng

Mong Muốn Có Thêm Cơ Hội Trong Công Việc

    Và Trở Thành Một Người Có Giá Trị Hơn

Bạn Chưa Biết Phương Thức Nào Nhanh Chóng Để Đạt Được Chúng

Hãy Để Chúng Tôi Hỗ Trợ Cho Bạn. SEMICON  

 

Hotline: 0972.800.931 - 0938.838.404 (Mr Long)

 

 

Related Articles

Chat Zalo