Menu
CoddyTech

Phát hiện cạnh tín hiệu đã lấy mẫu

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 19 trên 38.

Một mức có thể duy trì ở mức cao qua nhiều chu kỳ, trong khi xung sự kiện chỉ nên kéo dài một chu kỳ. Lưu mức đã lấy mẫu trước đó rồi so sánh với mức hiện tại. Bộ phát hiện cạnh này giả định đầu vào đã đồng bộ với xung nhịp này; nó không phải là bộ đồng bộ hóa tín hiệu qua miền xung nhịp.

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

previous <= sig;
rising <= sig & ~previous;

Mức đã lưu trước đó tạo ra một xung duy nhất tại thời điểm chuyển mức được lấy mẫu.

So sánh các mức hiện tại và trước đó đã lấy mẫu; chỉ dùng bộ phát hiện này với đầu vào đồng bộ.

challenge icon

Thử thách

Trung bình

Với tín hiệu sig đã đồng bộ với clk, hãy tạo xung một chu kỳ có đăng ký ở mỗi lần chuyển từ 0 sang 1 được lấy mẫu. rst đồng bộ sẽ xóa mức trước đó đã lưu và xung. Vì vậy, sig ở mức cao tại cạnh đầu tiên không phải lúc reset sẽ tạo ra một xung. Các cột đầu ra: pulse. Tất cả tín hiệu điều khiển và dữ liệu đều ổn định trước mỗi cạnh lên của xung nhịp; kết quả được quan sát sau đó.

Hoàn tất design.v và giữ nguyên tên mô-đun cùng các cổng. testbench.v bị khóa sẽ cung cấp các thay đổi đầu vào và in ra đầu ra sau khi chúng ổn định. Tệp này chọn một tình huống 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. Đừng thêm thao tác in, độ trễ hoặc lệnh kết thúc mô phỏng vào thiết kế. Đầu ra mong đợi là 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 bằng 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 clk, input rst, input sig, output reg pulse);
    // Thay phần giữ chỗ này bằng thiết kế của bạn.
    initial pulse = 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