Menu
CoddyTech

Hàm tổ hợp

Thuộc phần Thiết kế và xác minh RTL trong hành trình Verilog của Coddy. Bài học 11 trên 38.

Hàm (function) Verilog đóng gói một phép tính không tốn thời gian để tái sử dụng trong một module. Khai báo độ rộng giá trị trả về, các đối số đầu vào và biến cục bộ, sau đó dùng assign để gán kết quả cho tên function. Hàm tổ hợp không chứa độ trễ hay điều khiển sự kiện; vòng lặp có giới hạn cố định có thể mô tả logic lặp lại.

Đoạn trích liên quan; các khai báo và kết nối xung quanh được cung cấp trong thử thách.

function [7:0] gray;
    input [7:0] value;
    begin gray = value ^ (value >> 1); end
endfunction

Gọi hàm sẽ tính một biểu thức mà không làm tăng thời gian mô phỏng.

Gán kết quả của hàm trên mọi nhánh và giữ các hàm tổ hợp không có điều khiển thời gian.

challenge icon

Thử thách

Trung bình

Triển khai một function Verilog tên là gray, chuyển giá trị nhị phân không dấu 8 bit sang mã Gray bằng cách XOR value với value dịch phải một bit. Tạo đầu ra y bằng cách gọi function với a. Các cột đầu ra: y. Tất cả giá trị kích thích đều là giá trị nhị phân đã biết.

Hoàn thiện design.v và giữ nguyên tên module cùng các cổng. testbench.v bị khóa sẽ cung cấp các thay đổi đầu vào và in các đầu ra sau khi chúng ổn định. Tệp này chọn một kịch bản bằng đối số của trình mô phỏng, chẳng hạn như +CASE=1; không cần đầu vào tiêu chuẩn. Không thêm lệnh in, độ trễ hoặc lệnh kết thúc mô phỏng vào phần thiết kế. Đầu ra mong đợi gồm một hàng giá trị thập phân cho mỗi lần quan sát, các giá trị cách nhau một dấu cách và kết thúc bằng ký tự xuống dòng.

Tự làm thử

module dut (input [7:0] a, output [7:0] y);
    // Thay phần giữ chỗ này bằng thiết kế của bạn.
    assign y = 0;
endmodule
quiz iconTự kiểm tra

Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.

Tất cả bài học trong Thiết kế và xác minh RTL

Tự luyện tập: Trình biên dịch Verilog online