Menu
CoddyTech

Tạo xung nhịp

Thuộc phần Kiến thức nền tảng trong hành trình Verilog của Coddy. Bài học 71 trên 90.

Đồng hồ là tín hiệu liên tục chuyển đổi giữa 0 và 1 theo các khoảng thời gian đều đặn. Đồng hồ rất cần thiết cho các mạch logic tuần tự như mạch flip-flop và bộ đếm.

Tại sao cần tạo xung nhịp

Trong các testbench, bạn cần xung nhịp để kiểm tra các mạch tuần tự. Xung nhịp điều khiển hoạt động của các flip-flop, thanh ghi và máy trạng thái.

Các phương thức tạo đồng hồ

Phương thứcMô tả
always với độ trễ #Phương thức phổ biến nhất
Vòng lặp foreverPhương thức thay thế
Vòng lặp repeatDùng cho số chu kỳ cố định

Phương pháp 1: Khối always có độ trễ

reg clk;

initial begin
  clk = 0;
end

always #5 clk = ~clk;
  • clk = 0 tại thời điểm 0
  • Cứ sau mỗi 5 đơn vị thời gian, clk đổi trạng thái
  • Chu kỳ = 10 đơn vị thời gian
  • Tần số = 1/10 = 0.1 trên mỗi đơn vị thời gian

Phương pháp 2: vòng lặp vô hạn

reg clk;

initial begin
  clk = 0;
  forever begin
    #5 clk = ~clk;
  end
end

Kết quả giống với phương thức always.

Phương pháp 3: Lặp lại theo số chu kỳ cố định

reg clk;

initial begin
  clk = 0;
  repeat (10) begin
    #5 clk = ~clk;
  end
end

Tạo chính xác 10 cạnh xung nhịp (5 chu kỳ hoàn chỉnh), rồi dừng.

challenge icon

Thử thách

Thêm code còn thiếu để tạo đồng hồ chuyển trạng thái sau mỗi 4 đơn vị thời gian (chu kỳ = 8 đơn vị thời gian).

Cần làm:

  1. Khởi tạo clk bằng 0 tại thời điểm 0 bằng khối initial
  2. Dùng khối always với độ trễ để chuyển trạng thái clk sau mỗi 4 đơn vị thời gian

Tự làm thử

module clock_challenge;
  reg clk;
  
  // TODO: Bước 1: Thêm khối lệnh initial để đặt clk = 0
  
  
  // TODO: Bước 2: Thêm khối lệnh always để đảo trạng thái clk sau mỗi 4 đơn vị thời gian
  

  initial begin
    $monitor("Time %0t: clk = %b", $time, clk);
    #20;
    $display("Clock generated for 20 time units");
    $finish;
  end
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 Kiến thức nền tảng

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